Рейтинг:1

Как взломать sha256, используемый в качестве потокового шифра, с известным или угадываемым блоком

флаг cn

Использование SHA-256 в качестве потокового шифра, по-видимому, имеет криптографические недостатки, однако я не совсем уверен, как реализовать их при расшифровке.

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

В одном из постов, связанных ниже, я прочитал:

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

Кто-нибудь может уточнить, что именно здесь имеется в виду? Если я знаю первый блок, могу ли я выполнить операцию xor против хешированного первого блока? Если да, то как это поможет мне взломать следующие хэши H(prevHashedBlock + currentPlaintextBlock)?

Я знаю, что это связано с состояниями хеширования и тому подобным, но я мало что нашел в Интернете.

Я прочитал следующие сообщения:
Возможно ли построить потоковый шифр из криптографической хеш-функции?
Безопасен ли SHA-256 в качестве блочного шифра CTR?

Рейтинг:2
флаг in

Такой слабости нет, если SHA-256 используется в режиме CTR. ChaCha20 уже построен таким образом.

Вы используете SHA-256 в цепочке для вывода потока для шифрования сообщения с помощью x-or;

\начать{выравнивать} O_1 & = H(ключ) \oplus H(сообщение)\ О_я & = Н (О_ {я-1}) \end{выравнивание}

Затем выполняется шифрование с x-oring $O_i$с.

$$C_i = P_i \oplus O_i$$

Теперь предположим, что у вас есть известный открытый текст для некоторого блока. $j$. Это означает, что вы получаете $O_j$

$$O_j = P_j \oplus C_j$$

Теперь используйте уравнение создания потока

\начать{выравнивать} O_{j+1} &= H(O_j)\ O_{j+2} &= H(O_{j+1})\ \vdots\quad & \quad\quad\vdots\ O_{j+t} &= H(O_{j+t-1})\ \vdots\quad & \quad\quad\vdots\ \end{выравнивание}

Как видите, вы получаете остальную часть вывода потока из позиции $j$. Если у вас первая позиция, то вы получите все.

Это слабость такой схемы, с другой стороны, режим CTR предназначен для PRF, и его обычно инициализируют некоторыми хорошими хеш-функциями.


Смотрите с изображением

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

Как видите, если вы получите какой-либо вывод $O_j$ тогда вы можете получить остальные из-за цепочки хешей.

CrazyPhil avatar
флаг cn
Таким образом, операция XOR Oj с Cj должна давать открытый текст блока j? Спасибо за изображение, оно помогло мне лучше понять ваше объяснение.
CrazyPhil avatar
флаг cn
Кроме того, что такое Oj? Потому что это явно не готовый хеш, верно? Поскольку H(key+ptxt) = C1, а не O1; поэтому при расшифровке этого в программе, как я могу получить O1?
kelalaka avatar
флаг in
Вот почему я рисую его. Иногда изображение может сказать тысячу слов. $O_j$ — это результат работы хеш-функции.При расшифровке только x-или зашифрованного текста с помощью $O_j$, как в одноразовом блокноте.
kelalaka avatar
флаг in
Первый хэш должен быть $hash(key)\oplus hash(ptxt)$, что не меняет атаки, я исправлю позже...

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

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