Рейтинг:1

Можно ли избегать открытого текста IV в AES?

флаг ke

Сценарий

Использование AES 256 с режимом CBC. (Аутентификация выполняется отдельно. Здесь игнорируется.)

Цель (объясняется позже)

Чтобы избежать отправки незашифрованного IV.

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

План

Добавить 16 случайных байтов ("IV1"), и, кроме того, использовать 16 байтов со значением 0 в качестве IV ("IV0"). Затем отправьте зашифрованный текст без его первых 16 байтов.

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

Затем они добавляют эти байты к полученному обрезанному зашифрованному тексту, чтобы получить исходный необрезанный зашифрованный текст, а затем расшифровывают его с помощью IV ("IV0") из 16 байтов нулевого значения (т. е. они используют функцию расшифровки .NET, передавая ей требуемый IV, который представляет собой эти 16 нулей).

Затем они отбрасывают первые 16 байтов результата (который получен от .NET после того, как .NET отбрасывает первые 16 байтов, которые являются IV), потому что это 16 случайных байтов, добавленных в начало ("IV1").

Но почему?

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

Итак, мой вопрос

Этот план кажется хорошим, или в нем есть какая-то ловушка?

Marc Ilunga avatar
флаг tr
Вопрос как есть, кажется, трудно правильно ответить. Возможно, улучшением может быть добавление того факта, что ключ не является случайным, а получен из пространства с низкой энтропией, как вы упомянули в своем комментарии к первому ответу?
Maarten Bodewes avatar
флаг in
Обычно перед сообщением стоит IV ******.Однако IV не дает злоумышленнику больше преимуществ, чем любой другой блок зашифрованного текста, поскольку он действует как вектор для следующего блока. Об этом сообщает [ответ Fractalice] (https://crypto.stackexchange.com/a/96314/1172). Для любого шифра мы предполагаем, что злоумышленник может знать (часть) открытый текст. Таким образом, сокрытие IV не имеет никакого значения, предполагается, что оно общедоступно.
флаг ke
@MaartenBodewes `Обычно IV ставится перед сообщением. ` - Ключевое слово здесь "обычно". Если бы это было так в CBC, а с IV ничего больше не делалось - моя точка зрения в вопросе была бы верной. т.е. передача IV в виде открытого текста даст злоумышленнику преимущество в подборе ключа методом грубой силы. Поскольку IV представляет собой XORd с открытым текстом перед шифрованием, это не так. Как следует из комментария Fractalice.
Maarten Bodewes avatar
флаг in
Вы все еще неправильно понимаете. IV отправляется ** и ** он подвергается операции XOR с открытым текстом перед шифрованием, поэтому предполагается, что он доступен злоумышленнику. Все современные шифры должны обеспечивать защиту даже от атак с выбранным открытым текстом. Это называется IND-CPA: неразличимость при атаке с выбранным открытым текстом, и она обеспечивается большинством, если не всеми режимами работы, кроме ECB. Если шифр IND-CPA безопасен, нет никакого «преимущества», а перебор для AES полностью зависит от размера ключа, что для AES-256 определенно является достаточной защитой.
флаг ke
@MaartenBodewes Спасибо за разъяснение, однако я думаю, что мне следует уточнить, что я думал сначала (что, как я теперь знаю, неверно). Я думал, что IV работает следующим образом (в CBC): а) Добавляет IV к открытому тексту. б) Зашифровать без XOR первого блока с чем-либо. Если бы это было на самом деле так, не было бы необходимости отправлять IV, только сделать его случайным, а получатель просто расшифровал бы и выбросил первый блок. Еще раз спасибо.
Maarten Bodewes avatar
флаг in
Нет большой разницы в обычном использовании IV, единственная разница в том, что фактический IV теперь является *зашифрованным* IV. На самом деле иногда он используется для рандомизации значения счетчика, поэтому IV становится непредсказуемым для противника. Знание IV или нет не имеет значения, но для CBC требуется непредсказуемый (псевдо-)случайный IV. * Предпочтительно * IV будет зашифрован другим ключом.Обратите внимание, что открытый текст вполне может состоять из нулей, и, поскольку злоумышленник заранее знает любой зашифрованный блок (который является общедоступным, но непредсказуемым), утечка IV все равно не будет иметь значения.
Рейтинг:4
флаг in

Я не совсем понял план, но:

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

Вы действительно боитесь, что кто-то будет брутфорсить 256-битный ключ? Это невозможно.

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

флаг ke
`злоумышленник может атаковать следующий блок` - они проверяют ключ и получают результат. Как они узнают, что это правильно? AFAIK AES просто преобразует 16 байтов в 16 байтов. Всегда. Никогда со сбоем (кроме последнего из-за заполнения). Я ошибся?
флаг ke
`Вы действительно боитесь, что кто-то переборит 256-битный ключ?` - Не случайный ключ. Ключ, основанный на легко запоминающемся пароле, который выбирает пользователь, не заботящийся о безопасности (например, «пароль1» и т. д.).
флаг ke
«пожалуйста, рассмотрите возможность использования аутентифицированного шифрования». Как я уже упоминал в своем вопросе: «Аутентификация выполняется отдельно. Здесь игнорируется.`.
Fractalice avatar
флаг in
Если злоумышленник ничего не знает об открытом тексте, как можно проверить первый блок с открытым текстом IV? Обратите внимание, что первым расшифрованным блоком зашифрованного текста является сообщение IV xor, поэтому злоумышленник просто получает кандидат сообщения при каждом угадывании ключа. И, как вы заметили - последний блок часто имеет известный открытый текст - padding, что и позволяет в итоге такой брутфорс.
флаг ke
Спасибо. Меня ввели в заблуждение учебники, в которых говорится, что IV просто добавляется к открытому тексту. Если бы это было так, мое беспокойство было бы обоснованным. Как бы то ни было, вместо IV используется XORd с первым блоком (в CBC), что решает эту проблему. Еще раз спасибо.
Fractalice avatar
флаг in
@ispiro IV действительно отправляется в открытом виде, что является «IV» для первого блока. «IV» для второго блока — это первый блок зашифрованного текста, который также отправляется в открытом виде.CBC устроен так, и с этим проблем нет. Просто это должно быть непредсказуемо.

Ответить или комментировать

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