Дифференацильная атака: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Demiandr (обсуждение | вклад) |
Demiandr (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
=== Общее описание алгоритма === | === Общее описание алгоритма === | ||
Дифференциальный криптоанализ — метод криптоанализа симметричных блочных шифров (и других криптографических примитивов, в частности, хеш-функций и поточных шифров). | Дифференциальный криптоанализ — метод криптоанализа симметричных блочных шифров (и других криптографических примитивов, в частности, хеш-функций и поточных шифров). | ||
− | Дифференциальный криптоанализ основан на изучении преобразования разностей между шифруемыми значениями на различных раундах шифрования. В качестве разности, как правило, применяется операция побитового суммирования по модулю 2, хотя существуют атаки и с вычислением разности по модулю | + | Дифференциальный криптоанализ основан на изучении преобразования разностей между шифруемыми значениями на различных раундах шифрования. В качестве разности, как правило, применяется операция побитового суммирования по модулю 2, хотя существуют атаки и с вычислением разности по модулю [math] 2^{32}[/math]. Является статистической атакой. Количество раундов современных шифров (AES, Camellia и др.) рассчитывалось с учётом обеспечения стойкости, в том числе и к дифференциальному криптоанализу. |
Все существующие блочные алгоритмы шифрования являются итеративными алгоритмами, то есть при шифровании информация подвергается большому числу одних и тех же подряд идущих преобразований (раундов). В начале алгоритма шифрования из одного длинного секретного ключа при помощи алгоритма генерации раундовых ключей создаются мини-ключи, которые применяются на каждом раунде шифрования. Дифференциальный криптоанализ направлен на нахождение таких раундовых ключей, для последующего определения по ним основного секретного ключа криптосистемы, причем первым определяемым раундовым ключом является ключ последнего раунда шифрования. | Все существующие блочные алгоритмы шифрования являются итеративными алгоритмами, то есть при шифровании информация подвергается большому числу одних и тех же подряд идущих преобразований (раундов). В начале алгоритма шифрования из одного длинного секретного ключа при помощи алгоритма генерации раундовых ключей создаются мини-ключи, которые применяются на каждом раунде шифрования. Дифференциальный криптоанализ направлен на нахождение таких раундовых ключей, для последующего определения по ним основного секретного ключа криптосистемы, причем первым определяемым раундовым ключом является ключ последнего раунда шифрования. | ||
Версия 15:38, 4 ноября 2021
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Дифференциальный криптоанализ — метод криптоанализа симметричных блочных шифров (и других криптографических примитивов, в частности, хеш-функций и поточных шифров). Дифференциальный криптоанализ основан на изучении преобразования разностей между шифруемыми значениями на различных раундах шифрования. В качестве разности, как правило, применяется операция побитового суммирования по модулю 2, хотя существуют атаки и с вычислением разности по модулю [math] 2^{32}[/math]. Является статистической атакой. Количество раундов современных шифров (AES, Camellia и др.) рассчитывалось с учётом обеспечения стойкости, в том числе и к дифференциальному криптоанализу. Все существующие блочные алгоритмы шифрования являются итеративными алгоритмами, то есть при шифровании информация подвергается большому числу одних и тех же подряд идущих преобразований (раундов). В начале алгоритма шифрования из одного длинного секретного ключа при помощи алгоритма генерации раундовых ключей создаются мини-ключи, которые применяются на каждом раунде шифрования. Дифференциальный криптоанализ направлен на нахождение таких раундовых ключей, для последующего определения по ним основного секретного ключа криптосистемы, причем первым определяемым раундовым ключом является ключ последнего раунда шифрования.
1.2 Математическое описание алгоритма
Пусть [math]ΔX=({ΔX_1}{ΔX_2}{ΔX_3}...{ΔX_3})[/math] Задачей криптоаналитика является нахождение Пусть [math]{p}[/math] - вероя
1.3 Вычислительное ядро алгоритма
Вычислительное ядром алгоритма является генерация и шифрование большого числа входных пар текстов алгоритма шифрования с заданной разницей [math]ΔX[/math], получая в итоге пары шифртекстов. После генерации текстов для каждой комбинации пары шифртекстов и возможного значения бит раундового ключа последнего раунда найденной характеристики происходит частичное расшифрование шифртекстов. Если разница между парами текстов [math]ΔY_{R-1}[/math] на [math]{R-1}[/math] раунде совпадает с искомой разницей [math]ΔU[/math], счетчик данного значения бит раундового ключа последнего раунда инкрементируется. Результатом является значение раундового ключа с наибольшим счетчиком.
1.4 Макроструктура алгоритма
Как уже определено в описании ядра алгоритма, основную часть сложность алгоритма составляет большое количество операций шифрования определенных значений текстов.
1.5 Схема реализации последовательного алгоритма
В данном пункте приведены
double p = 0.000001;//вероятность найденной характеристики
int c = 2;//константа
int R = 12;//число раундов шифра
int b = 4;//число бит раундового ключа, которые можно определить найденной характеристикой
__uint64 deltafirst=(2^34);// найденная характеристика (разница между парой текстов)
__uint64 deltalast=1;(найденная разница между текстами на предпоследнем раунде_
__uint64 firsttext;//первый текст из пары
__uint64 secondtext;//второй текст из пары
int result[pow(2,b)]={};//массив возможных значений бит раундового ключа
for (__uint64 i=0; i<(c/p);i++)
{
firsttext=i;//генерация первого текста пары
secondtext=i^deltafirst;//генерация второго текста пары
for (int j=0; j<R;j++)
{
firsttext = cipher(firsttext);
secondtext = cipher(secondtext);
}
for (int k=0; k< pow(2,b);k++)
{
firsttext = decipher(firsttext,k)
secondtext = decipher(secondtext,k)
if (deltalast == firsttext ^ secondtext)
{
result[k]++
}
}
}
int max=0
for (int k=0; k< pow(2,b);k++)
{
if (result[k] > max) max=result[k]
}
1.6 Последовательная сложность алгоритма
Cчитая базовой операцией операцию шифрования текста на одном раунде с использование дифференциальной характеристики с вероятностью [math]p[/math], на нахождение [math]b[/math] бит раундового ключа [math]R-1[/math] раунда шифрования потребуется около [math](2c/p)(R+2^b)[/math] операций шифрования, где [math]c[/math] - некоторая небольшая константа. Так как основным параметром является вероятность [math]p[/math], от которой зависит число пар текстов, данный алгоритм имеет линейную сложность.
1.7 Информационный граф
Рассмотрим граф алгоритма для обработки одного текста как аналитически, так и в виде рисунка.
Как видно из рисунка, для каждого текста [math]X[/math] сначала генерируется второй текст при помощи добавления к нему разницы [math]Δfirst[/math], взятой из дифференциальной характеристики, после чего происходит шифрование на протяжение [math]R[/math] раундов для обеих текстов из пары. После получения шифртекстов [math]Y_R[/math] и [math]Y'_R[/math] в результате последнего раунда, для всех возможных [math]b[/math] бит последнего раундового ключа происходит частичное расшифрование, после чего в каждой паре тексты складываются и их разница [math]ΔY_{R-1}[/math] сравнивается с искомой [math]Δlast[/math] в характеристике. Если разницы текстов совпадают, данные значения бит раундового ключа заносятся в результат.
1.8 Ресурс параллелизма алгоритма
Как видно из предыдущего пункта, обработка каждого текста из множества возможных текстов происходит независимо от других текстов. Таким образом, каждый процесс может шифровать и расшифровывать свою часть всего множества текстов, что даст большое ускорение работы алгоритма. Объединяя полученные результаты со всех процессов можно определить результирующие биты последнего раундового ключа.
1.9 Входные и выходные данные алгоритма
Входные данные: алгоритм шифрования, константа [math]c[/math], вероятность характеристики [math]p[/math], число бит раундового ключа [math]b[/math], число раундов шифрования [math]R[/math], входная разница между парами текстов [math]deltafirst[/math], выходная разница между парами текстов [math]deltalast[/math]
Объём входных данных: Объем входных не изменяется, изменяются только сами входные данные.
Выходные данные: Биты раундового ключа последнего раунда.
Объём выходных данных: [math]b[/math].