вопрос:
Как программное обеспечение может проверить, является ли введенный пароль правильным или нет? содержимым файла могут быть любые случайные данные, поэтому проверка на наличие ошибок в файле после расшифровки не будет работать. Но все же программное обеспечение нуждается в некотором источнике для проверки этого пароля; Так как же это программное обеспечение win-zip проверяет, успешно ли расшифровано или нет?
Я подозреваю, что пароль также может быть там же, в зашифрованном файле. Это правда или программное обеспечение использует какой-либо другой метод?
Вместо простого шифрования многие приложения, которые создают зашифрованный текст, также создают тег аутентификации. Этот тег аутентификации может быть проверен перед расшифровкой; если тег аутентификации неверен, то один из параметров (ключ, IV или зашифрованный текст) неверен.
Чтобы использовать шифрование с использованием пароля, обычно используют PKCS # 5 (шифрование на основе пароля). PKCS # 5 содержит метод хеширования паролей, который использует «растяжение ключа», что усложняет злоумышленнику тестирование / сравнение многих паролей с использованием перебора или атак по словарю. Такой метод хеширования пароля называется функцией получения ключа на основе пароля или PBKDF. Последний PKCS # 5 описывает PBKDF2.
Теперь, если вы хотите создать новый метод шифрования на основе пароля, я бы предложил сделать следующее:
Чтобы проверить правильный пароль во время расшифровки, используйте значение проверки.
Обратите внимание, что я еще не обсуждал KBKDF. Вы можете использовать хэш над выводом PBKDF2 и простой счетчик или строку для этого, скажем SHA-256(key seed, "ENC")
,
Вы можете использовать хеш-значение, чтобы обеспечить очень высокую вероятность того, что что-либо, кроме правильного пароля, будет отклонено. По сути, если вы хэшируете пароль, он генерирует число с определенным количеством двоичных цифр, а хороший криптографический хеш выдает совершенно другое число (в случайной степени). иметь тенденцию отличаться), если вы наберете что-то, даже самое маленькое, отличающееся (например, изменив порядок двух символов или используя верхний регистр вместо нижнего).
Вероятность того, что два разных пароля приведут к одному и тому же хеш-значению, очень мала, например, если у вас было только 32-битное хеш-значение, вероятность составляет 1 к 2 ^ 32 (4 млрд). Математически сложно создать хеш-функцию, которая не позволяет вам получить пароль (особенно, если это короткий пароль, и кто-то может предварительно сгенерировать список коротких слов с конкретными значениями хеша), так что вы, вероятно, захотите иметь довольно слабый хэш — достаточно хороший, чтобы избежать возврата поврежденных данных для 99,99% опечаток — и / или такой, который, как известно, устойчив к таким атакам.