Лучший алгоритм шифрования / дешифрования строки и метод хранения ключей - PullRequest
1 голос
/ 21 июля 2011

Не рекомендуется хранить адреса электронной почты в базах данных в виде простого текста, поэтому я хотел бы найти лучший алгоритм для этого.Варианты:

(из документации)

  • CFMX_COMPAT: алгоритм, используемый в ColdFusion MX и предыдущих выпусках.Этот алгоритм является наименее безопасным вариантом (по умолчанию).

  • AES: расширенный стандарт шифрования, установленный Национальным институтом стандартов и технологий (NIST) FIPS-197.

  • BLOWFISH: алгоритм Blowfish, определенный Брюсом Шнайером.

  • DES: стандартный алгоритм шифрования данных, определенный NIST FIPS-46-3.

  • DESEDE: алгоритм «Triple DES», определенный NIST FIPS-46-3.

Еще один вопрос: где хранить ключ?В базе данных или в исходном коде?Это будет зашифровано или нет?Если он будет зашифрован, то возникает вопрос о том, как хранить ключ, который будет шифровать ключ.

Если он будет храниться в исходном коде, будет ли хорошо распространяться без источника?

Ответы [ 2 ]

8 голосов
/ 21 июля 2011

Я бы использовал AES. это самый быстрый из перечисленных и самый сильный.

Что касается того, где хранить ключ, это вопрос за 64 000 долларов. Не следует помещать его в БД (по крайней мере, не в той же БД, что и данные, которые он использует для шифрования) или в исходном коде.

Управление ключами - зверь темы. NIST имеет сотни страниц документации о том, как это сделать.

http://csrc.nist.gov/groups/ST/toolkit/key_management.html

Управление ключами включает в себя правильное генерирование, обмен, хранение, ротацию и уничтожение ключей. Вы не должны использовать один и тот же ключ навсегда (очень распространенная ошибка) и не хранить его ненадлежащим образом.

Вам следует ознакомиться с рекомендациями NIST и определить стратегию, которая работает для вас и адекватно защищает ваши данные на основе их чувствительности.

0 голосов
/ 22 июля 2011

Используйте AES или DESEDE - они сильны и, по моему опыту, имеют широкую совместимость, если вам по какой-то причине вам понадобится портировать эту информацию.

Что касается ключа, то он НЕ РЕАЛЬНО критиченданные.Обычно вы создаете составной ключ из уникального фрагмента информации для этих данных (например, userId) и личного ключа (соли), например константы в базе кода:

Где-то в ваших глобальных настройках /константы:

 <cfset myCodeBaseKey = "NateIsAwesome">

Тогда, когда вы будете готовы зашифровать:

 <cfset myKey = hash(myCodeBaseKey & user.userId, "SHA")>

Ps, это будет работать лучше, если вы будете использовать именно ту соль, которую я слышу.: P ~

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...