У меня есть требование хранить данные кредитной карты (не хранение не является опцией).
Использование mcrypt с mcrypt_dev_random для генерации init_vector требует различного возраста для шифрования / дешифрования, но, по-видимому, является самым «безопасным» вариантом. mcrypt_dev_urandom МНОГО быстрее, но не подходит для длительного хранения – как я читал.
Глядя на GnuPG как на возможную альтернативу и хотелось бы, если это возможно, некоторые мнения / возглавляющие их.
Если вы действительно хотите хранить информацию о кредитной карте безопасно, для нее есть стандарт: Стандарт безопасности данных платежной карты . И это намного больше, чем использование одного конкретного алгоритма шифрования. Он требует, чтобы вы храпили части деталей карты на двух физически отдельных машинах, среди многих других вещей. И даже если вы будете следовать стандарту PCI на письмо, эксперты утверждают, что вы все еще не полностью защищены. Что-то меньшее, чем это, в значительной степени не стоит обсуждать подробно, так как общий уровень безопасности настолько низок, что вряд ли имеет значение.
Помните: первое правило криптографии – «не делайте этого самостоятельно».
MCRYPT_DEV_URANDOM
достаточно для надежного шифрования , но «управление информацией о кредитной карте» является гораздо более сложным делом, чем просто « зашифровать» все и позволить Богу разобраться в собственном ».
То, что «не хранение НЕ является вариантом» звучит для меня так, как будто вы (или лучше, те , что выше вас ) делают это неправильно. Вам не следует исследовать это или предложить решение. Не будь падающим парнем.
https://www.pcisecuritystandards.org/merchants/how_to_be_compliant.php
Для вас самый важный вопрос: что вам нужно для соответствия PCI. Не производите шифрование доморощенного. Прочитайте то, что требуется, и предпочтительнее делегируйте материал кредитной карты специализированному платежному процессору.
Использование mcrypt с mcrypt_dev_random для генерации init_vector требует различного возраста для шифрования / дешифрования, но, по-видимому, является самым «безопасным» вариантом. mcrypt_dev_urandom МНОГО быстрее, но не подходит для длительного хранения – как я читал.
Это показывает некоторые недоразумения. Для одного IV не нужно быть тайным. Качество случайных чисел менее важно.
Но даже для ключей, /dev/urandom
достаточно хорош, если он был засеян с достаточной энтропией изначально.