Я искал по всей сети, в том числе здесь, на SO: много обсуждается необходимость солить пароли перед их хешированием и хранением.
В случае, если пароль используется для вычисления ключа, используемого для шифрования («Шифрование на основе пароля»): что, если вы вообще не храните пароль?
- [Примечание: я действительно прочитал SO: Кодовая фраза, соль и IV, мне все это нужно? и IV работает как соль, безусловно, связанный с этим вопрос: я не уверен, как обсуждаемый здесь вектор инициализации связан с вопросом здесь]
Предположим:
Для шифрования
- пользователь вводит мастер-пароль
- это хешированный SHA256, и выходные данные используются для шифрования файла с помощью AES256.
- хэш не сохраняется (и, очевидно, не является мастер-паролем)
Для расшифровки
- Пользователь вводит мастер-пароль
- Это хешированный SHA256, вывод используется для расшифровки файла.
- Если расшифровка прошла успешно, значит, пароль был - по всей видимости - верным.
Мой вопрос:
Если ничего не хранится, кроме самого зашифрованного файла, есть ли польза от использования мастер-пароля перед его хешированием?
Рекомендации:
- это, вероятно, уменьшит вероятность хеш-коллизии
- это потребует хранения соли.
если соль была потеряна / повреждена, пользователь больше не сможет расшифровать файл
как проверить успешность дешифрования на шаге 3: требуется ли для этого известность части содержимого файла?
- если да, то какая часть бестактности хранит известное значение в зашифрованном файле (это не всегда можно предотвратить - злоумышленник может предположить, что, например, фамилия пользователя зашифрована где-то в файле - это верно).