Лучшая практика с PKBDF2, AES, IV и солью

Итак, я шифрую список документов с помощью алгоритма AES. Я использую PBKDF2 для определения ключа по паролю пользователя. У меня несколько вопросов по поводу данных магазина и IV / соли:

Как хранить документы:

  • Зашифруйте все документы одним ключом AES, IV и солью
  • Зашифруйте каждый документ одним ключом AES, но разделите IV и соль.

Как хранить / получать IV и соль:

  • Получите IV из PBKDF2 (например, ключ AES) и не нужно его где-то хранить
  • Генерация IV перед каждым шифрованием документа и сохранение в виде обычного текста
  • Для соли, думаю, варианта нет - все равно нужно хранить в виде простого текста

Как я понял из этой статьи (http://adamcaudill.com/2013/04/16/1password-pbkdf2-and-implementation-flaws/) и некоторые другие:

  • Можно хранить IV и соль в виде обычного текста, так как иногда злоумышленнику даже не нужно их знать.
  • Другой IV может "исказить" только первый блок шифра (для режима CBC), но не весь, так что это не приносит большой безопасности методу AES.

person Wayne    schedule 25.10.2013    source источник


Ответы (1)


Каждый документ должен иметь свой IV и соль. Поскольку соль меняется, ключ AES будет меняться для каждого документа. Никогда не следует шифровать два документа одним и тем же ключом и IV. В наиболее распространенном режиме (CBC) повторное использование ключа IV + приводит к некоторому снижению безопасности. В некоторых режимах (CTR) повторное использование IV + Key нарушает безопасность шифрования. («IV» в CTR называется «nonce», но обычно он передается в элемент, называемый «IV», в большинстве API шифрования.)

Обычно вы генерируете IV случайным образом и сохраняете его в начале файла в виде обычного текста. Если вы используете PBKDF2 для генерации IV, вам понадобится еще одна соль (которую вам все равно нужно сохранить), так что особого смысла в этом нет.

Вы также должны помнить, что наиболее распространенные режимы AES (особенно CBC) не обеспечивают защиты от модификации. Если кто-то знает, что такое ваш открытый текст (или может догадаться, что это может быть), он может изменить ваш зашифрованный текст, чтобы расшифровать его до некоторого другого значения по своему выбору. (Это фактическое значение фразы «Если у вас неправильный IV при расшифровке в режиме CBC, он повреждает первый блок» из статьи. Они говорят «поврежден», как это означает «мусор», но на самом деле вы можете вызвать первый блок коррумпировать определенными способами.)

Эту проблему можно решить либо с помощью аутентифицированных режимов шифрования (например, CCM или EAX), либо с помощью добавления HMAC.

person Rob Napier    schedule 25.10.2013