Конечно, некоторое хеширование - плохая идея - либо из-за низкого уровня безопасности, с некоторыми перехватами, либо из-за того, что они так часто используются, как радужные таблицы.Это не означает, что все хеширование - плохая идея - единственный способ перекрестных ссылок - это какой-то способ уникальной и предсказуемой идентификации информации.Если PCI специально не запрещает это - хэширование все еще остается способом.
Соль
Убедитесь, что вы солите свой хеш - это предотвращает атаки радуги или, по крайней мере, требуетRainbow-злоумышленник построить стол с вашей солью в уме.В частности, если вы можете сохранить соль достаточно надежно (я говорю только разумно, потому что для генерации вам нужно иметь соль, что означает, что она будет где-то в коде).
Выберите хороший алгоритм
Хотя MD5 теперь печально известен и реализован на всех языках, он также настолько распространен, что вы можете найти готовые радужные таблицы.Также очень быстро генерировать хеш.Ваша система, вероятно, может выдержать небольшую задержку и использовать намного более интенсивный хэш-процессор.Это делает стоимость создания радужного стола намного дороже.Взять, к примеру, алгоритм Tiger .
Хеширование более одного раза
Если у вас есть несколько связанных точек данных, будет создано несколько хешейэто намного сложнее сделать атаку радуги.Например: Hash (Hash (Card # + salt1) + expireDate + salt2) - требует знания как номера карты, так и даты создания (легко для вас), но не может быть легко переработано (для каждой карты требуется радуга# * каждый полезный срок годности + знание обеих солей).
Редактировать: (ваши комментарии)
Достаточно надежный : передавать только череззашифрованное соединение (SFTP, SSH), не храните его в незашифрованном виде - включая живые / итеративные и резервные копии, сохраняйте файл с солью вне веб-дерева (не может быть получен прямой доступ / случайно выпущен), убедитесь, что разрешения нафайл настолько ограничен, насколько это возможно (не разрешайте групповой / глобальный доступ к файлу).
Динамическая соль добавление случайного значения в хеш отлично подходит для уменьшения радужных атак - вы сохраняете это случайное значениефигура в таблице с хэшированным значением - теперь, когда вы строите радугу, вы должны построить ее для каждой динамической соли.Однако для ваших нужд вы не можете этого сделать - вам нужно знать правильную случайную соль для использования во второй раз, когда вы создаете хеш (иначе вы никогда не получите перехват при использовании второй карты) ... чтобы это былопредсказуемый / повторяемый, вам нужно будет основывать динамическую соль на некоторой части числа ... что фактически делает многократное хеширование с другой точкой данных.Чем больше у вас точек данных, тем больше вы можете хешировать в этом направлении - например, если у вас есть CVV (3 хеша) или, возможно, вы хешируете 8 цифр за раз (всего 3 хеша: hash(hash(hash(1..8+salt1)+9..16+salt2)+expDate+salt3)
).
Best Hash это движущаяся цель, но есть хорошее обсуждение security.stackexchange .Что указывает на SHA-512.