Рейтинг:1

АЭС-128-ЦФБ повторный ИВ и КПА

флаг in

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

Суть в том, что разработчик использует фиксированный ключ и IV для шифрования нескольких похожих сообщений с использованием AES-128-CFB. Поскольку я знаю IV для все сообщения, и я знаю части открытого текста (сообщения имеют стандартный формат JSON), могу ли я восстановить открытый текст или же ключ? Я нет ищу кого-то, кто сделает это для меня, я просто ищу, как бы я справился с этим.

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

импортировать base64
из Crypto.Cipher импортировать AES


ключ = b'\x00'*16
iv = b'\xFF'*16
p1 = b'Привет, мир'
p2 = b'Привет, мир!'

шифр = AES.new (ключ, AES.MODE_CFB, iv = iv)
c1 = шифр. зашифровать (p1)
e1 = base64.b64encode(c1)

шифр = AES.new (ключ, AES.MODE_CFB, iv = iv)
c2 = шифр. зашифровать (p2)
e2 = base64.b64encode(c2)


print(' '.join('{:02X}'.format(c) для c в c1))
print(' '.join('{:02X}'.format(c) для c в c2))
печать (e1.decode())
печать (e2.decode())

$ python3 test.py
77 6D 0C 86 D8 6B C9 9F 72 FD F4 3B
77 6D 0C 86 D8 6B C9 9F 72 FD F4 3B 04
d20MhthryZ9y/fQ7
d20MhthryZ9y/fQ7BA==
Рейтинг:0
флаг in

Прежде всего, как вы заметили, первая часть всегда одна и та же. Итак, если у вас есть два зашифрованных текста, которые идентичны в первых произведенных байтах, вы можете сразу увидеть, что это так. Это первая утечка.

Что вы можете сделать, так это выполнить операцию XOR для первого отличающегося блока зашифрованного текста. В ответ вы получаете операцию XOR над открытым текстом двух зашифрованных сообщений. Затем вы можете выполнить операцию XOR для любого из известных вам битов и немедленно получить открытый текст другого сообщения в этих местах. Также можно использовать известную информацию, чтобы угадать, например. если это английский, то операция XOR символов A и B даст результат 0x03, поскольку различаются только два последних бита. Обратите внимание, что вы можете сделать это с любым пара зашифрованного текста, который вы получаете. Таким образом, вы можете быстро получить информацию о блоках открытого текста.

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


Теперь о вещах, которые вы не можете делать.

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

Во-вторых, вы не сможете угадать IV, если он не указан, так как это блок открытого текста для блочного шифра.

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

введите описание изображения здесь

Изображение с Викисклада, автор Гвенда.

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

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