Криптоанализ ГОСТ 34.11-2012

Криптоанализ ГОСТ-Р 34.11-2012

ГОСТ Р 34.11-2012 

ГОСТ Р 34.11-2012 (неофициальное название — Стрибог) — российский криптографический стандарт на хеш-функцию, введённый 1 января 2013 года вместо устаревшего ГОСТ Р 34.11-94.

Данная хеш-функция основана на схеме Меркла-Дамгора.

Для хеширования данные разбиваются на блоки размером 512 бит, при необходимости блок дополняется вектором  такой длины, чтобы размер блока стал равным 512 бит.

Затем для каждого блока итеративно применяется функция сжатия. После этого проводится ещё две итерации — для длины входного сообщения и для контрольной суммы всех блоков, из которых состояло сообщение.

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

Выходные данные представляют собой последовательность длиной 512 или 256 бит.

Функция сжатия 

В основу функции сжатия положен 12-раундовый AES-подобный шифр (соответствие было показано, например, в работе А.Казимирова и В.Казимировой).
Важной частью функции сжатия является XSPL-преобразование, являющееся композицией четырёх функций:

 X — операция сложения по модулю 2 с раундовым ключом или раундовой константой (в зависимости от того, получаем ли мы шифр блока сообщения или получаем раундовый ключ)
 S — нелинейная замена каждого байта блока некоторым другим по стандартной таблице подстановок.
 P — перестановка байтов блока по определённому стандартом порядку.
 L — линейное преобразование, эквивалентное умножению восьми 64-битных векторов на определённую стандартом матрицу.

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

Атака рикошетом 
Данная атака (англ. Rebound Attack) была представлена в 2009 году Менделем в качестве атаки на хеш-функции, основанные на AES-подобных шифрах, такие, как Whirlpool и Grøstl, является статистической.

В этой атаке криптографический примитив E делится на три части: , а сама атака состоит из двух частей: внутренней фазы (inbound phase) и внешней (outbound phase).

Внутренняя фаза 
Данная часть (иногда называющаяся match-in-the-middle phase — «совпадение посередине») начинается с нескольких выбранных входных/выходных разностей для Ein, которые затем подвергаются линейным преобразованиям в прямом и обратном направлениях. Под разностями (реже употребляется термин «дифференциалы») здесь понимается результат операции сложения по модулю 2. На основе этого генерируются всевозможные пары значений, которые удовлетворяют выбранным значениям разностей. Эти значения являются «начальными данными» для следующей части.

Внешняя фаза 
Данные, полученные на предыдущем шаге, «продвигаются» в прямом и обратном направлениях (преобразования Efw и Ebw), после чего ищутся совпадения для поиска коллизий или «близких коллизий» (англ. near-collision).

Функция сжатия «ГОСТ Р» 
В работе показано построение атаки, выявляющей коллизию, на усечённую функцию сжатия с 4.5, 5.5, 7.5 и 9.5 раундами.
-м раундом называется последовательность преобразований , где -раундовый ключ, за половину раунда в данных атаках считают последовательность преобразований .

Оценка эффективности атак:

Далее показан пример построения «атаки рикошетом» для функции сжатия, усечённой до 4,5 раундов.

Атака на 4.5 раундовую функцию сжатия «ГОСТ Р» 
Предлагается следующий способ разбиения на внутреннюю и внешнюю фазы:

Обозначения:

В скобках записаны преобразования X, L, S, P, использующиеся в функции сжатия «Стрибога», они описаны выше.

m — сообщение или его блок, проходящий сквозь функцию сжатия.

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

Внутренняя: 

Внешняя: 

Здесь  и  — т. н. «сцепленная переменная» (chaining variable) — значения функции сжатия для  и  блоков сообщения соответственно.

Внутренняя фаза 
Данный этап начинается с выбора 8-байтовой разности в R2P и R3L (Здесь под разностями так же подразумевается результат сложения по модулю 2). Далее мы подвергаем эти разности преобразованиям в прямом и обратном направлениях для получения R3 и R3S соответственно.
Из свойств L-преобразования следует, что мы получим полностью активное состояние и в R3, и R3S.
Далее, с помощью таблицы распределения разностей для S-преобразования (SBox Difference Disrtibution Table) ищутся решения, удовлетворяющие входной/выходной разности из равенства . В среднем ожидается нахождение одного решения для одной пары разностей (a, b).

Внешняя фаза 
Теперь нужно использовать значения, вычисленные на предыдущем шаге, и точно так же провести вычисления в обоих направлениях. Разности при этом проявятся только в первых столбцах состояний R1 и R5p (по 8 байт в каждом).

Функция сжатия работает следующим образом: . Следовательно, для одинаковых h и k коллизия получится автоматически, если разности m и E(k, m) равны. Вероятность этого равна 2−64. Поэтому нужно генерировать 264 точек, а хранить только таблицу распределения разностей для S-преобразования(уже упоминавшийся SBox Difference Distribution Table) размером 256х256 байт, так что временная сложность построения коллизии для такой функции составляет 264 при затратах на память в 216 байт.
В работах и данная атака улучшена и проведена на функции сжатия, усечённой до 5.5, 7.5 и 9.5 раундов.

Интегральный различитель 
Вместе с проверкой на устойчивость к дифференциальным атакам так же исследовалась и устойчивость к интегральным атакам. В частности, искался интегральный различитель. Вкратце, интегральным различителем называется атака, позволяющая выяснить, действительно ли в качестве функции сжатия используется функция, вид которой был предположен аналитиком, а не какая-то иная.
В работе были получены различители для 6.5 и 7.5 раундов внутренней перестановки и для 7-раундовой функции сжатия.
Однако, удалось получить более сильный результат для 10-раундовой функции сжатия. Результат, полученный с помощью атаки на 9.5-раундовую функцию сжатия, используют для функции сжатия, усечённой до 10 раундов. Тогда все разности на входе лежат в пространстве размерности 264, а на выходе — 2128 (вследствие свойств преобразований L и P). Таким образом, временная сложность проверки для нашей функции сжатия составляет 2176 с затратами по памяти в 216 байт, или 2128 по времени и 2128 по памяти, в то время, как для произвольной функции нам придётся произвести 2512-64-128=2320 вычислений, чтобы получить такое же отображение разностей на входе и на выходе.
В работе также описано подробное построение различителя для 9.5-раундовой функции сжатия.

Построение мультиколлизий 
k-коллизией называется нахождение k открытых текстов, имеющих одно значение хеш-суммы. Считается, что для идеальной хеш-функции временная сложность поиска обычной (парной) коллизии составляет 2n/2 (вследствие парадокса «дней рождения»), в то время, как поиск k-коллизии для такой функции составит 2n*(k — 1) / k, что при больших k приведёт к 2n.

Однако, Антуан Жу (Antoine Joux) в работе, посвящённой поиску мультиколлизий (k-коллизий при ) показал оригинальный способ построения мультиколлизий для хеш-функций, основанных на итеративной функции сжатия, за меньшее, чем 2n*(k-1)/k время.

В своей работе он исходил из того, что криптоаналитику уже известен способ найти парную коллизию, то есть, у него есть доступ к некоторой функции C, которая получает на вход значение «сцепленной переменной» h и генерирует два блока — B и B' такие, что , где f — функция сжатия.

Далее, покажем, что за два обращения к этой функции мы можем получить 4-коллизию:
 Положим  (Initial Value — начальное значение, определённое либо стандартом хеш-функции, либо её реализацией) и получим . Исходя из свойств С: 
 Обозначим , и с помощью функции C найдём блоки .
Отсюда получаем: 

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

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

Этот способ был взят за основу в работе. Авторы показали, что данная атака применима и к функции сжатия «ГОСТ Р», и она позволяет найти k-коллизии для сообщений длиной в  блоков, где  за  операций.

См. также 
 Атака «дней рождения»
 ГОСТ Р 34.11-2012
 Криптоанализ ГОСТа 28147-89

Примечания 

Информационная безопасность
Криптографические атаки