Русская Википедия:Интегральный криптоанализ
Интегральный криптоанализ — метод криптоанализа, объединяющий ряд атак на симметричные блочные криптографические алгоритмы. В отличие от дифференциального криптоанализа, который рассматривает воздействие алгоритма на пару открытых текстов, интегральный криптоанализ подразумевает исследование отображения в шифротекст множества открытых текстов. Впервые применен в 1997 Ларсом Кнудсеном.
История
В научных статьях термин «интегральный криптоанализ» был предложен в 1999 году в публикации Integral cryptanalysis of SAFER+Шаблон:Ref-en. Сама же концепция была впервые озвучена Ларсом Кнудсеном при анализе шифра Square в 1997 году. По этой причине в литератере часто используется термин «Square-подобные атаки» или просто «Square-атака». На 2011 год революционного прогресса относительно Square-атаки в области интегрального криптоанализа не наблюдается.
Теоретическая основа метода
Пусть <math>(G,+)</math> — конечная абелева группа. Тогда, принимая за <math>G</math> множество возможных шифртекстов 1ного блока (в общем случае <math>G</math> определяется выбранным алфавитом и размером блока), можно рассмотреть группу следующего вида, с той же групповой операцией: <math>G^n = G \times ... \times G</math>. Таким образом построенное множество n-мерного пространства суть множество всех возможных шифртекстов. Соответственно элемент пространства <math>v = ( v_1, ..., v_n), v \in G</math> суть некий шифртекст, компоненты этого вектора — значение блоков шифртекста. Полагаем, что сумма векторов есть вектор, компоненты которого равны суммам соответствующих компонент слагаемых. Интегралом по множеству <math>S \subseteq G</math> назовем сумму всех векторов, входящих в <math>S</math>: <math>\int S = \sum_{v \in S} v </math>.
Успешный интегральный криптоанализ должен уменьшать число итераций подбора ключа. Для этого пробуем группировать векторы открытого текста, так, чтобы на основании группировки можно было найти какие-либо закономерности. Удобно исследовать алгоритмы, опираясь на следующее разбиение:
- <math> v_i = c, \forall v \in S</math>
- <math> \{ v_i : v \in S \} = G</math>
- <math> \sum_{v \in S} = c'</math>,
где <math>i</math> — фиксированное число, <math>c, c' = const \in G</math> (векторные)
Ключевую роль играет следующая теорема[1]:
Пусть <math>(G,+)</math> — конечная абелева группа. Обозначим <math>H = \{g \in G: g + g = 0\}</math>, причем порядок g равен 1 или 2. Определим <math>s(G) = \sum_{g \in G} g</math>. Тогда <math>s(G) = \sum_{h \in H} h</math>. Более того, <math>s(G)+s(G)=0</math>
Стоит отметить важный результат теоремы: если <math>G = GF( 2^s</math>), то <math>s( G) = 0</math>, так как <math>H = \{ 0\}</math>
Отметим ряд обозначений, часто использующихся в публикациях об атаках на основе интегрального криптоанализа:
- Если i-ая компонента интеграла обозначена <math>\mathcal{C}</math>, это означает, что во всех слагаемых интегральной суммы i-ая компонента одинакова
- Аналогично <math>\mathcal{A}</math> показывает, что во всех слагаемых соответствующая компонента различается.
- <math>\mathcal{S}</math> показывает, что данную компоненту интеграла можно предсказать.
- ? показывает, что предсказать компоненту интеграла нельзя.
Общий принцип поиска уязвимости на примере сети Фейстеля
Рассмотрим, как изменятся интегралы по S, если все элементы этого множества подавать на вход сети Фейстеля. Пусть S есть множество шифротекстов, в которых все, кроме одного, соответствующие блоки одинаковы (между собой они могут разниться). В примере шифротекст представляет собой 16 блоков, расположенных в 2 строки. Для таких шифров, как, например, AES, важно также учитывать и то, что шифротекст задается матрицей, так как в них используются разные операции для строк и столбцов. Рассмотрим воздействие ячеек Фейстеля поэтапно:
- Считая, что ячейки Фейстеля производят биективные отображения, очевидно, что одинаковые между шифротекстами блоки перейдут в одинаковые между преобразованными шифротекстами блоки (однако почти наверняка старое и новое значение будут различаться). Таким образом можем записать, что 1-я ячейка отобразила множество из класса множеств с одинаковыми по множеству компонентами в множество из такого же класса.
- Так как значения всех блоков на выходе из ячейки Фейстеля зависит от значения каждого блока на входе, то воздействие одного лишь блока <math>\mathcal{A}</math> изменяет каждый блок шифротекста на выходе. Таким образом, значения компонент интеграла становятся не более, чем предсказываемыми[2].
- Так как на входе для каждого блока, принадлежащего входному шифротексту, множество значений не совпадает с множеством возможных значений блока, то их сумма может не сохраниться при биективном преобразовании, потому на выходе из ячейки можно получить что угодно.
Даже применимо к описанному примеру можно существенно сократить число итераций для подбора или дать дополнительную информацию для различных видов криптоанализа.
Сравнение с дифференциальным криптоанализом
Как и для дифференциального криптоанализа, атаки на основе интегрального можно отнести к типу атак на основе адаптивно подобранного открытого текста.
Ларс Кнудсен также отметил схожесть с атакой усеченных дифференциалов, который имеет идею рассмотрения поведения не разности целиком, как в дифференциальном криптоанализе, а её частей. Причем интегральный криптоанализ имеет превосходство в его возможности рассматривать третье состояние результата — <math>\mathcal{S}</math>, в то время, как атака усеченных дифференциалов различает только два.
Для атаки дифференциалов старших порядков можно заметить, что в поле Галуа <math>GF( 2^s)</math> выражение для дифференциала s-го порядка схоже с интегралом[3]. Таким образом можно пытаться обобщить некоторые приемы дифференциального криптоанализа на интегральный.
Примечательно, что атаки усеченных дифференциалов и дифференциалов старшего порядка также впервые опубликовал Ларс Кнудсен в 1994 году, тоже на конференции FSE[4]
Известные атаки
Атаки на AES-подобные шифры (Rijndael, SQUARE, CRYPTON) можно обобщить первым шагом — рассмотрением интегралов после 3го раунда шифрования Дальнейшие шаги есть попытки усовершенствовать атаку, увеличивая число раундов, используя различные допущения, неминуемо увеличивающие число итераций перебора, тем самым и сложность взлома.
AES
Атака на 4-раундовый шифр
Ключевые моменты шифрования байтовой матрицы — нелинейное преобразование, сдвиг строк, преобразование столбцов, сложение текста (промежуточной байтовой матрицы) с матрицей раундового ключа.
Рассмотрим шестнадцатибайтный открытый текст. Пусть криптоаналитик имеет в своем распоряжении 256 шифротекстов, обладающих следующим свойством: они получены из байтовых матриц, в которых все байты, кроме одного, одинаковы по множеству этих шифротекстов. В силу их количества, можно сказать, что «неодинаковый» байт будет принимать все возможные значения на данном множестве. Таким образом можно перейти к вышеописанным обозначениям:
<math>\mathcal{A}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> |
<math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> |
<math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> |
<math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> |
Рассмотрим состояние текста после каждого раунда:
- Нелинейное преобразование в силу биективности не меняет типа байта, только значения для отдельно взятых текстов.
- Сдвиг строк не воздействует на 1-ю строку, остальные сдвигаются, не меняя интеграл.
- Преобразование столбцов делает каждый результирующий байт зависящим от всех 4 байтов исходного столбца, но опять же, в силу биективности операции, получим, что каждый байт столбца будет принимать каждое своё значение лишь раз.
- Сложение с ключом не изменит типы байтов.
Итого, после первого раунда:
<math>\mathcal{A}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> |
<math>\mathcal{A}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> |
<math>\mathcal{A}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> |
<math>\mathcal{A}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> | <math>\mathcal{C}</math> |
- Сдвиг строк распределяет в каждый столбец по 1 байту с типом <math>\mathcal{A}</math>.
- Как и в 1-м раунде, если в столбце есть один байт <math>\mathcal{A}</math>, а остальные <math>\mathcal{C}</math>, то все байты в столбце преобразуются в <math>\mathcal{A}</math>. Таким образом преобразуются все 4 столбца.
После второго раунда:
<math>\mathcal{A}</math> | <math>\mathcal{A}</math> | <math>\mathcal{A}</math> | <math>\mathcal{A}</math> |
<math>\mathcal{A}</math> | <math>\mathcal{A}</math> | <math>\mathcal{A}</math> | <math>\mathcal{A}</math> |
<math>\mathcal{A}</math> | <math>\mathcal{A}</math> | <math>\mathcal{A}</math> | <math>\mathcal{A}</math> |
<math>\mathcal{A}</math> | <math>\mathcal{A}</math> | <math>\mathcal{A}</math> | <math>\mathcal{A}</math> |
Воспользовавшись результатом описанной в разделе теории теоремы, получаем значения интегралов в каждом байте<math>\mathcal{S} = 0</math>
<math>\mathcal{S}</math> | <math>\mathcal{S}</math> | <math>\mathcal{S}</math> | <math>\mathcal{S}</math> |
<math>\mathcal{S}</math> | <math>\mathcal{S}</math> | <math>\mathcal{S}</math> | <math>\mathcal{S}</math> |
<math>\mathcal{S}</math> | <math>\mathcal{S}</math> | <math>\mathcal{S}</math> | <math>\mathcal{S}</math> |
<math>\mathcal{S}</math> | <math>\mathcal{S}</math> | <math>\mathcal{S}</math> | <math>\mathcal{S}</math> |
Так как в последнем раунде не происходит преобразования столбцов (по спецификации AES), а остальные преобразования переводят <math>\mathcal{A}</math> в <math>\mathcal{A}</math>, то для чеотырёхраундовой схемы в результате последнего раунда не происходит изменения значения интеграла вплоть до этапа двоичного сложения с раундовым ключом. В таком случае всё, что осталось — для каждого байта предположить значение соответствующего ему байта раундового ключа, получить предполагаемый текст 3-го раунда и проверить, равен ли интеграл от соответствующего блока нулю. Если равен, то байт раундового ключа можно считать найденным.
Расширения по количеству раундов
Схему можно расширить до семираундовой, рассматривая, от чего зависит преобразование интеграла от конкретного байта. Однако, даже в случае с 7 раундами, число необходимых переборов высоко, в таком случае ищутся связи между раундовыми ключами, анализируя схему кодогенерации.[5]
Усовершенствования по ресурсам криптографа
Существенно сократить время перебора ключей, вследствие особой организации условий перебора, используя трёхбайтовые векторы, позволяет введение так называемой частичной суммы. Такая модификация для шестираундового шифра снижает мощность перебора с <math>2^{72}</math> до <math>2^{44}</math>. Другой подход — использовать факт того, что интеграл по множествам с различными <math>\mathcal{C}</math> также после заветного третьего раунда обращается в нуль. Для этого метода требуется огромное количество ресурсов памяти и обладание очень большой базой открытый текст — шифротекст.[6]
При помощи частичных сумм возможно реализовать взлом восьмираундовой системы, однако сложность данного взлома даже больше, чем у полного перебора.
Square
Базовая атака на шифр Square практически не отличается от четырёхраундовой атаки на AES, она тоже позволяет расширить число раундов. Пожалуй, существенное различие только в наличии первого раунда шифрования и, как следствие, два способа расширения (один в сторону последнего раунда, другой — первого). Разработчики шифра при его исследовании смогли построить атаку на шестираундовое шифрование.
Были опубликованы следующие результаты[7]:
Атака | Количество открытых текстов | Время | Затраты по памяти |
На 4 раунда | <math>2^{9}</math> | <math>2^{9}</math> | Мало |
На 5 раундов 1-м способом | <math>2^{11}</math> | <math>2^{40}</math> | мало |
На 5 раундов 2-м способом | <math>2^{32}</math> | <math>2^{40}</math> | <math>2^{32}</math> |
На 6 раундов | <math>2^{32}</math> | <math>2^{72}</math> | <math>2^{32}</math> |
Примечания
Ссылки
- ↑ Herstein, Topics in Algebra, 2nd ed., 1975, стр 116
- ↑ Долгов, Головашич, Руженцев. «Анализ криптостойкости шифра Торнадо» (2003), стр. 7
- ↑ Lars Knudsen (2001). «Integral Cryptanalysis (Extended Abstract), стр. 118»
- ↑ Lars Knudsen (1994). «Truncated and Higher Order Differentials»
- ↑ Niels Ferguson, John Kelsey, Stefan Lucks, Bruce Schneier, Mike Stay, David Wagner, and Doug Whiting. «Improved Cryptanalysis of Rijndael» (2001), стр. 2-3
- ↑ Niels Ferguson, John Kelsey, Stefan Lucks, Bruce Schneier, Mike Stay, David Wagner, and Doug Whiting. «Improved Cryptanalysis of Rijndael» (2001), стр. 4-7
- ↑ Joan Daemen, Lars Knudsen, Vincent Rijmen. «The Block Cipher Square» (1997), стр. 15