Шифрование: нужно ли засолить ключ, даже если его вообще не хранить? - PullRequest
4 голосов
/ 09 августа 2011

Я искал по всей Сети, в том числе и здесь, на SO: существует много дискуссий о необходимости подсупывать пароли перед их хешированием и хранением.

В случае, если пароль используется для вычисления используемого ключадля шифрования («Шифрование на основе пароля»): что если вы не сохраните пароль в al?

Предположим:

Для шифрования

  1. пользователи вводят мастер-пароль
  2. это SHA256 хешируется и выводитсяиспользуется для шифрования AES256 файла
  3. хэш не сохранен (и, очевидно, не является мастер-паролем)

для дешифрования

Пользователи вводят мастер-пароль Это хешированный SHA256, и выходные данные используются для расшифровки файла Если расшифровка прошла успешно, пароль был, по-видимому, правильным

Мой вопрос:

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

Замечания:

  • это, вероятно, уменьшит вероятность хеш-коллизии
  • это потребует хранения соли.
  • если соль была потеряна / повреждена, пользователь больше не сможет расшифровать файл

  • как проверить успешность дешифрования на шаге 3: требуется ли для этого часть содержимого файлабыть известным?

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

1 Ответ

3 голосов
/ 09 августа 2011

Если вы не храните мастер-пароль, то его не нужно солить. Если вы повторно используете мастер-пароль для генерации большого количества одноразовых паролей, его необходимо будет хранить в зашифрованном виде и расшифровывать по мере необходимости.

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

Соль предназначена для хеширования в долговременном хранилище, IV - для шифрования с использованием режима CBC (или режима CTR, где его также можно назвать одноразовым).

Что касается проверки правильности расшифровки вашего файла, просто убедитесь, что вы используете заполнение, такое как PKCS7. Когда дешифруется последний блок, заполнение будет проверено, чтобы убедиться, что оно в правильном формате. Если расшифровка не удалась, заполнение не будет правильно отформатировано, и вы должны получить ошибку «Ошибка заполнения».

...