Как программы могут проверить пароль зашифрованного файла?

  • Рассмотрим (например), что мы зашифровали файл (sample.txt) с помощью win-zip 9, введя пароль «agoodpassword».
  • Теперь, если мы попытаемся открыть файл, введя неверный пароль, мы получим сообщение об ошибке: неверный введенный пароль.

вопрос:

Как программное обеспечение может проверить, является ли введенный пароль правильным или нет? содержимым файла могут быть любые случайные данные, поэтому проверка на наличие ошибок в файле после расшифровки не будет работать. Но все же программное обеспечение нуждается в некотором источнике для проверки этого пароля; Так как же это программное обеспечение win-zip проверяет, успешно ли расшифровано или нет?

Я подозреваю, что пароль также может быть там же, в зашифрованном файле. Это правда или программное обеспечение использует какой-либо другой метод?

1

Решение

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

Чтобы использовать шифрование с использованием пароля, обычно используют PKCS # 5 (шифрование на основе пароля). PKCS # 5 содержит метод хеширования паролей, который использует «растяжение ключа», что усложняет злоумышленнику тестирование / сравнение многих паролей с использованием перебора или атак по словарю. Такой метод хеширования пароля называется функцией получения ключа на основе пароля или PBKDF. Последний PKCS # 5 описывает PBKDF2.

Теперь, если вы хотите создать новый метод шифрования на основе пароля, я бы предложил сделать следующее:

  1. Выполнить PBKDF2 с (очень) большим количеством итераций и 128-битной солью;
  2. Убедитесь, что пользователь получает отзыв о надежности пароля;
  3. Выполнить KBKDF (функция получения ключа на основе ключа) на основе результата PBKDF2, создав контрольное значение, ключ шифрования данных и ключ аутентификации данных;
  4. Используйте ключ шифрования данных для метода шифрования, скажем, AES-128-CBC со случайным IV;
  5. Используйте ключ аутентификации данных для HMAC через IV и зашифрованный текст;
  6. Сохранить значение чека;

Чтобы проверить правильный пароль во время расшифровки, используйте значение проверки.

Обратите внимание, что я еще не обсуждал KBKDF. Вы можете использовать хэш над выводом PBKDF2 и простой счетчик или строку для этого, скажем SHA-256(key seed, "ENC"),

2

Другие решения

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

Вероятность того, что два разных пароля приведут к одному и тому же хеш-значению, очень мала, например, если у вас было только 32-битное хеш-значение, вероятность составляет 1 к 2 ^ 32 (4 млрд). Математически сложно создать хеш-функцию, которая не позволяет вам получить пароль (особенно, если это короткий пароль, и кто-то может предварительно сгенерировать список коротких слов с конкретными значениями хеша), так что вы, вероятно, захотите иметь довольно слабый хэш — достаточно хороший, чтобы избежать возврата поврежденных данных для 99,99% опечаток — и / или такой, который, как известно, устойчив к таким атакам.

1

По вопросам рекламы [email protected]