rijndael (1085220), страница 2
Текст из файла (страница 2)
Это преобразование повторяет преобразование SubBytes(), только в данном случае оно действует на столбец расширенного ключа.
Раундовая константа Rcon[i].
Для раунда i данная константа равняется .
2.5 Программная реализация.
Исходный код на языке C++ нашей криптосистемы приведен в Приложении 1.
3. Методы криптоанализа.
Наши методы криптоанализа проводятся при выбираемых открытых текстов X и соответствующих им шифртекстов Y=f(X,K). Их целью является восстановление неизвестного ключа K.
Зададим значение ключа равное K=[2B 7E 15 16], одинаковое для двух методов криптоанализа. Это значение и требуется определить в ходе атаки, используя разные методы.
Прежде чем перейти непосредственно к конкретным типам криптоанализа, оценим верхнюю границу их эффективности.
Длина ключа нашей системы составляет 32 бита. Соответственно методом полного перебора всего ключевого пространства мы обязательно найдем неизвестный ключ K'=K. Для этого нам потребуется максимально шифрований вида Y=f(X,K').
Следовательно, целью криптоанализа является не только восстановление неизвестного ключа K, но и чтобы это восстановление с вычислительной стороны было эффективнее метода полного перебора. Иначе считается, что криптосистема стойка к данным методам криптоанализа.
3.1 Дифференциальный криптоанализ.
3.1.1 Описание криптоанализа.
Дифференциальный криптоанализ использует высокую вероятность возникновения определенных различий открытого текста и различий шифртекста в последний раунде. Например, рассмотрим систему со входом
и выходом
Возьмем два входа X' и X'' c соответствующими выходами Y' и Y'', соответственно. Разность этих двух входов задается как DX=X'ÅX'', где Å представляет двоичную операцию Исключающие-ИЛИ n-битных векторов и, следовательно,
где . Подобным образом определяется разность двух выходов DY.
В идеальном рандомизированном шифре, вероятность, что определенная разница DY происходит при определенной разности DX, равняется , где n — число бит в X. Дифференциальный криптоанализ стремится найти такую ситуацию, в которой определенная разность DY происходит при определенной разности DX с очень высокой вероятностью (то есть, намного большей чем ). Пара (DX,DY) называется дифференциалом.
Дифференциальный криптоанализ — это атака с выбираемым открытом текстом. Это означает, что нападающий может выбирать входы и исследовать выходы в попытке получить ключ. Для дифференциального криптоанализа, нападающий выберает пары входов X' и X'', удовлетворяющих определенной разности DX, зная что для этого значения DX определенное значение DY происходит с высокой вероятностью.
В этом разделе мы исследуем построение дифференциала (DX,DY), состоящего из открытого текста X и входа последнего раунда системы Y. Мы будем делать это, исследуя высоковероятные дифференциальные характеристики, где дифференциальная характеристика — это последовательность разностей входа и выходов для каждого раунда такая, что разность выхода одного раунда соответствует разности входа для следующего раунда. Использование высоковероятной дифференциальной характеристики дает нам возможность использовать информацию для получения битов ключа последнего раунда.
Чтобы построить высоковероятные дифференциальные характеристики, мы исследуем свойства отдельных S-блоков и используем эти свойства, чтобы определить полную дифференциальную характеристику. Более точно, мы просматриваем все возможные комбинации разниц входа и выхода S-блока, чтобы найти его высоковероятный дифференциал. Объединеним найденные дифференциалы S-блока от раунда к раунду так, чтобы отличная от нуля разница выхода от одного раунда соответствовала отличной от нуля разнице входа следующего раунда. Это позволит нам найти высоковероятный дифференциал, состоящий из открытого текста и входа последнего раунда системы.
3.1.2 Дифференциальный анализ S-блока.
Исследуем теперь пары разниц входа DX и выхода DY S-блока. Рассмотрим его строение. S-блок имеет вход и выход . Все пары разниц S-блока (DX,DY) могут быть исследованы, и вероятность каждой может быть получена, рассматривая пары входа X' и X'', такие что X'ÅX''=DX. Для этого нам надо всего лишь просмотреть все 16 различных значений для входа X', и затем, перебирая все возможные DX, получить значение X''. Это возможно, так как значение X'' однозначно определяется значениями X' и DX, а именно X''=X'ÅDX.
Таким образом мы можем получить значения DY для каждой пары входа (X'ÅX''=DX). Если бы S-блок был “идеальным”, то число возникновений каждого дифференциала равнялось бы 1, что дает вероятность 1/16 возникновения определенной разницы DY при заданом значении DX. (Доказано, что такого “идеального” S-блока не существует.)
Мы можем занести все полученные результаты для S-блока в таблицу распределения дифференциалов, в которой номер строки представляет значение DX (в шестнадцатиричном виде), а номер столбца представляет значение DY. В таблице 1 приводится распределение дифференциалов для S-блока нашей криптосистемы.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
0 | 16 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 12 | 0 | 0 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
2 | 0 | 2 | 0 | 0 | 0 | 2 | 0 | 4 | 2 | 0 | 0 | 0 | 6 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 2 | 0 | 4 | 0 | 2 | 0 | 0 | 2 | 0 | 0 | 0 | 6 | 0 |
4 | 0 | 0 | 0 | 6 | 0 | 0 | 0 | 2 | 4 | 0 | 2 | 0 | 0 | 0 | 2 | 0 |
5 | 0 | 6 | 0 | 0 | 0 | 2 | 0 | 0 | 2 | 0 | 4 | 0 | 2 | 0 | 0 | 0 |
6 | 0 | 0 | 4 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 8 |
7 | 0 | 0 | 0 | 0 | 4 | 0 | 4 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 0 | 0 |
8 | 0 | 0 | 0 | 0 | 8 | 0 | 0 | 0 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | 2 |
9 | 0 | 0 | 0 | 0 | 0 | 0 | 8 | 0 | 0 | 2 | 0 | 2 | 0 | 2 | 0 | 2 |
A | 0 | 2 | 0 | 4 | 0 | 2 | 0 | 0 | 6 | 0 | 0 | 0 | 2 | 0 | 0 | 0 |
B | 0 | 4 | 0 | 2 | 0 | 0 | 0 | 2 | 0 | 0 | 6 | 0 | 0 | 0 | 2 | 0 |
C | 0 | 0 | 0 | 2 | 0 | 0 | 0 | 6 | 0 | 0 | 2 | 0 | 4 | 0 | 2 | 0 |
D | 0 | 2 | 0 | 0 | 0 | 6 | 0 | 0 | 2 | 0 | 0 | 0 | 2 | 0 | 4 | 0 |
E | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 10 | 0 | 2 | 0 | 2 |
F | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 10 | 0 | 2 | 0 | 2 | 0 | 2 |
Table 1: Распределение дифференциалов для S-блока.
Прежде чем перейти к построению дифференциальной характеристики, обсудим влияние ключа на дифференциал S-блока. Мы изучили S-блок, на вход которого поступает некая последовательность. В нашей схеме на вход S-блока попадает последовательность, равная сложению по модулю 2 состояния T с ключом K на предыдущем раунде.
DT=T'ÅT''