Почему файл хеша всегда отличается в openssl aes-256-cbc выходные файлы?

Я пытался зашифровать файл с помощью этой команды:

openssl enc -aes-256-cbc -in $infile -out $outfile -pass file:$keyfile

Для того же входного файла, Почему выходные файлы имеют различные хеши.

2
задан 15 July 2015 в 04:32

2 ответа

CBC требует IV: самый первый блок данных должен быть случайным. Это отправляется с данными так, чтобы получатель имел то, что они должны дешифровать сообщение. IV для CBC должен быть однородно случаен и непредсказуемый . Эти openssl enc команда создает IV с 8 фиксированными байтами и 8 случайными байтами (это должны быть 16 случайных байтов). Когда Вы шифруете то же сообщение дважды, изменения IV. (Существует опция -nosalt использовать фиксированный IV, который еще хуже для безопасности и не должен быть сделан, если пароль не был самостоятельно сгенерирован случайным образом для единственного сообщения.)

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

не используют эти openssl команда для серьезной работы . Это означало только как витрина библиотечных функций, и это плохо разработало даже для этого. Как мы видели, эти enc, команда не вполне делает вещей надежно, так как ее IV не так случаен, как она должна. Худшей проблемой является способ, которым ключ получен из пароля: openssl enc использование единственный раунд MD5, который является плохим — В получение ключа от пароля, должен использовать внутренне медленную функцию ( ключевая функция протяжения ) для замедления попыток взламывания грубой силы, где взломщик пробует вероятные пароли (слова словаря, 1337 изменения, и т.д.).

основной инструмент шифрования уровня пользователя GPG, доступный в Ubuntu в gnupg или пакет gnupg . Для шифрования файла с паролем используйте

gpg -c filename

, Вам предложат пароль. Зашифрованный файл будет сохранен в filename.gpg. Для дешифрования выполните gpg filename.gpg и введите пароль.

3
ответ дан 2 December 2019 в 01:58

(Я думаю, что Вы случайно добавили -d опция дешифрования в команде в Вашем вопросе.)

зашифрованные файлы отличаются из-за случайного 64-разрядного криптографическая соль , который OpenSSL генерирует и включает в каждый зашифрованный файл по умолчанию. Это может быть отключено с -nosalt опция, но как документация в OpenSSL man enc состояния, это обычно - очень плохая идея:

-salt опция должна ВСЕГДА использоваться, если ключ получается из пароля, если Вы не хотите совместимости с предыдущими версиями OpenSSL и SSLeay.

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

2
ответ дан 2 December 2019 в 01:58

Другие вопросы по тегам:

Похожие вопросы: