Исследование стойкости генераторов ключевого потока к логическому криптоанализу
Исследование стойкости генераторов ключевого потока к логическому криптоанализу
Эли А.Н.
Институт математики, экономики и информатики ИГУ
andreylp@list. ги
Аннотация. Многие проблемы, связанные с обработкой и управлением информацией, например, задачи логического программирования, автоматического доказательства теорем, верификации сетевых протоколов, криптографии и т., возможно свести к задачам поиска решений систем логических уравнений. Данные задачи, в свою очередь, могут быть сведены к задаче о булевой выполнимости (SAT) [2]. Для решения SAT используют программы, которые называются SAT-решателями. Современные SAT-решатели позволяют успешно справляться даже с SAT-задачами, которые кодируют проблемы криптоанализа. Это делает SAT-решатели полезным инструментом тестирования стойкости криптографических алгоритмов. В современных SAT-решателях имеется большое число параметров, различные сочетания которых могут существенно повышать эффективность процесса решения для различных тестовых задач. Таким образом, актуальной является задача исследования эффективности SAT-решателей при изменениях их рабочих параметров на аргументированно трудных SAT-задачах, кодирующих некоторые задачи криптоанализа. Целью работы является проверка сжимающего генератора ключевого потока (,Shrinking generator) |"3"1-|"4] на стойкость к логическому криптоанализу при различных сочетаниях рабочих параметров современных SAT-решателей. Было установлено, что данный генератор имеет множество коллизий. На разных SAT-решателях было решено 8 одинаковых задач, по данным таблиц, больше половины решений были коллизионными (один ключевой поток, но разные секретные ключи). Также, при разных SAT-решателях находились разные секретные ключи одной и той же задачи.
Ключевые слова: криптография, SAT, ключевой поток, сжимающий генератор.
1 SAT-подход и его применение к решению задач криптоанализа
1.1 Базовые понятия и определения
Логическими или булевыми переменными называются переменные, принимающие значения в множестве {ложь, истина}. Для простоты написания, ложь обозначают нулем, а истину единицей, т.е. булева функция от п переменных будет выглядеть:
/: {ОД}71 > {ОД}, it Е N
Пусть L(xlt х.х, х?1}- формула, представляющая произвольную булеву функцию от переменных (хъ шдк). Выражения вида
= /?,/? ПОД} (1)
называются логическими уравнениями. Решить логическое уравнение вида (1) означает найти такой набор
е {ОД),
что L(xlt ..4xJ на наборе (alJ..., a}1), т.е. при
Х]_ = d-ifX2 = й-2; •■• ■; Хц =
принимает значение обозначается
Любой такой набор значений булевых переменных х1(..., хп для соответствующего логического уравнения вида (1) называется решением данного уравнения.
Пусть X = {xlfx2, - множество булевых
переменных, Х{ е {ОД}, i = 1, п. Литералами над X называются термы вида ж и х, где х — булева переменная (через х обозначается логическое отрицание х). При этом говорят, что х и х - контрарные. Дизъюнктом называется произвольная дизъюнкция литералов над X, среди которых нет повторяющихся и контрарных. Конъюнктивной нормальной формой (далее КНФ) над X называется произвольная конъюнкция дизъюнктов над X.
Рассмотрим КНФ над X вида
C(xlt = D1 A ...ADm,
где D± = (in V ... V llkJt..., Dm = (lml V ... V lmkj - дизъюнкты, 1Ц -литералы. Таким образом т — количество дизъюнктов, п - количество переменных.
Рассмотрим уравнение вида
C(Xl, .....s.J = 1 (3)
КНФ С(х1;, хп) называется выполнимой, если уравнение (3) имеет решение, в противном случае КНФ называется невыполнимой.
SAT-задача распознавания представляет собой задачу распознавания выполнимости КНФ, ответом в которой будет «да», если КНФ выполнима, и «нет» в противном случае.
Особый практический интерес представляет SAT-задача поиска, в которой необходимо найти решение уравнения (3), если оно существует, или констатировать факт его отсутствия.
Задача обращения дискретной функции
/ • {ОД}" —> {од}т,
заданной некоторым эффективным алгоритмом (то есть задача поиска неизвестного прообраза по известном образу данной функции) допускает эффективную сводимость к SAT. Этот факт лежит в основе концепции логического криптоанализа, в соответствии с которой проблемы обращения криптографических функций рассматриваются как SAT-задачи.
Исследование стойкости генераторов ключевого потока к логическому криптоанализу 1.2 Сжимающий генератор
Сжимающий генератор был предложен в 1993 году Доном Копперсмитом (Don Coppersmith), Хьюго Кравчуком (Hugo Krawczyk), и Ишаем Мансором (Yishay Mansour) [3-4]. Благодаря своей простоте, он является весьма перспективным кандидатом на роль примитива для протоколов поточного шифрования.
Сжимающий генератор построен на основе параллельно работающих PCJIOC-1 и PCJIOC-2 с максимальными периодами. Выходная последовательность формируется из битов, снимаемых с некоторой (зафиксированной в спецификации) ячейки PCJIOC-2, но только в те такты, когда выходной бит PCJIOC-1 равен единице. В остальные такты оба бита, генерируемые PCJIOC-1 и PCJIOC-2, игнорируются.
Ai
1.
Bi
- 1 120 0
/ К
W и
221 120 7 0
s
1, output Bi if Ai=l
2, discard all if Ai=0
Рис. 1. Сжимающий генератор
Криптографические слабости сжимающего генератора обнаружены только в тех случаях, когда характеристические многочлены прорежены (содержат мало ненулевых коэффициентов). Сжимающий генератор имеет весьма высокую скорость порождения ключевого потока, но возникают определенные проблемы, связанные с нерегулярностью выдачи битов.
Была исследована задача стойкости сжимающего генератора к методу логического криптоанализа. С этой целью проблема криптоанализа сжимающего генератора была закодирована в 8АТ-задачу при помощи системы Тгаша^.
1.3 Система Тгаша^
Система Тгаша^ £1] - это программное средство, предназначенное для преобразования процедурных описаний дискретных функций в выражения пропозициональной логики и булевы уравнения. Описание
исходной функции перед преобразованием осуществляется на специализированном языке ТА.
Язык ТА представляет собой процедурный язык программирования с блочной структурой и С-подобным синтаксисом. Каждый блок — это список инструкций ТА-программы. Программа на языке ТА представляет собой набор определений функций, а также объявлений и определений глобальных переменных и констант. В языке ТА реализованы все основные примитивные конструкции, характерные для процедурных языков программирования (объявление/определение переменной или массива переменных; определение именованных констант, оператор присваивания, составной оператор, условный переход, цикл, определение пользовательской функции, возврат из функции, вызов функции).
Переменные целочисленных типов хранят служебные параметры транслируемой программы. Например, это могут быть длины входного и выходного слов, количество итераций в циклах, целочисленные константы, используемые при вычислении дискретной функции.
Тип данных bit используется для объявления булевых переменных, кодирующих входную/выходную информацию транслируемой программы, а также информацию, возникающую в процессе работы этой программы. Кроме этого, тип bit могут иметь переменные, используемые в тексте программы в качестве вспомогательных для хранения результатов промежуточных вычислений.
Действия с памятью, которые выполняются в любом современном вычислительном устройстве, аналогичны действиям с регистрами RAM. Далее будем рассматривать вычисление, которое осуществляет транслируемая программа, как последовательность изменений данных в памяти вычислительного устройства в моменты времени 0,1,...,е. В каждый момент времени¿,i е {0,...данные в памяти кодируются булевыми переменными, образующими множество Хъ. Таким образом, множество Х° образовано булевыми переменными, кодирующими входные данные, а множество Xе — переменными, кодирующими выходные данные рассматриваемого дискретного преобразования.
Одной из наиболее наглядных областей применения описанной техники трансляции ТА-программ является криптография. Далее разбираются примеры построения пропозициональных кодов некоторых криптографических алгоритмов. Для ряда криптосистем данный подход позволил успешно решить задачи криптоанализа. Пропозициональные коды алгоритмов шифрования можно использовать для построения аргументировано трудных тестов для разнообразных решателей комбинаторных задач (в том числе для SAT-решателей). В дальнейшем криптоанализ, рассматриваемый как процесс поиска решений булевых уравнений (в частности, SAT-задач), стали называть логическим криптоанализом. Логический криптоанализ оказался эффективным в
Исследование стойкости генераторов ключевого потока к логическому криптоанализу применении к некоторым генераторам ключевого потока. Быстрые генераторы поточного шифрования — это эффективно вычислимые дискретные функции, преобразующие двоичные последовательности конечной длины (инициализирующие последовательности) в бесконечные периодические двоичные последовательности (ключевой поток). Задача криптоанализа генератора ключевого потока заключается в нахождении инициализирующей последовательности по известному фрагменту ключевого потока и алгоритму функционирования генератора. Программный комплекс Transalg по известному алгоритму генерации ключевого потока позволяет построить систему булевых уравнений, кодирующих процесс порождения произвольного фрагмента ключевого потока. Подстановка в полученную систему анализируемого фрагмента ключевого потока дает систему булевых уравнений, из решения которой можно эффективно выделить искомый секретный ключ (инициализирующую последовательность).
2 Логический криптоанализ сжимающего генератора
2.1 Построение SAT-кодировки сжимающего генератора
Ниже приведен текст ТА-программы, описывающей работу сжимающего генератора.
define len 64; //Ключевой поток (выход)
_in bit regA[22]; //задаем РСЛОСы _in bit regB[23];
_out bit result[len]; // Размер сумматора - это log(len), округленный вверх до
ближайшего целого числа.
bit summ[7] = 0; bit stream[len];
void shift_regA() {
bit у = regA[21] A regA[20]; //задаем внутренние функции PCJIOCa
for(int j = 21; j > 0; j = j -1)
{
regA[j] = regA[j -1];
}
regA[0] = y;
}
void shift_regB() {
bit у = regB[22] A regB[21] л regB[20] A regB[7]; //задаем внутренние функции PCJIOCa
for(int j = 22; j > 0; j = j -1)
{
regB[j]=regB|j-l];
}
regB[0] = y;
}
void main()
{
int i;
for(i = 0; i < 3*len; i = i + 1) //Поскольку требуемое число сдвигов
регистров нужно брать с запасом.
{
shift_regA(); shift_regB();
summ = summ + regA[21];
for(int j = 0; j < len; j = j + 1) {
if(regA[21] & (summ = j + 1)) stream[j] = regB[22];
}
}
for(i = 0; i < len; i = i + 1)
{
result[i] = stream[i];
}
}
Необходимо отметить нетривиальный момент, который возникает при кодировании в SAT задачи криптоанализа сжимающего генератора: в сжимающем генераторе при получении ключевого потока заранее неизвестно количество сдвигов генератора. Для решения этой проблемы был использован следующий подход. В ТА-программе описывается число тактов работы генератора, которое берется «с запасом» - реальных сдвигов может быть меньше. В приведенной выше программе число кодируемых тактов равно 3*1еп, где len - длина анализируемого потока (в нашем случае 64 бита).
Также в ТА программе используется вспомогательная переменная summ. Для произвольного входного слова (секретного ключа) значение данной переменной будет равно числу «нехолостых» сдвигов к данному моменту времени - то есть числу битов, которые к данному моменту попали в ключевой поток. Появление каждого нового бита ключевого потока зависит от значения переменной summ в соответствующий момент времени: бит может либо вообще не появиться в ключевом потоке, либо
Исследование стойкости генераторов ключевого потока к логическому криптоанализу появляется в нем, если выполнено regA [21] = 1 (в этом случае значение бита ключевого потока равно тедВ [22]).
При помощи данной программы были сгенерированы 8 тестов криптоанализа сжимающего генератора. В первые 8 тестах был рассмотрен сжимающий генератор с длиной секретного ключа 45 бит (были взяты первые два PCJIOC-a, используемых в генераторе А5/1).
2.2 Используемые SAT-решатели
Для обработки полученных системой Transalg КНФ, кодирующих криптоанализ сжимающего генератора, были использованы несколько SAT-решателей.
Plingeling1 является параллельным решателем, результатом нескольких поколений улучшения Conflict Driven Clause Learning (CDCL) решающих устройств. Решатель активно использует рандомизацию.
Treengeling2 является параллельным решателем, который пытается объединить сильные стороны опережения решения с CDCL. Имеет большинство параметров, в отличии от Plingeling.
CryptoMiniSAT3 позволяет находить несколько решений одной и той же задачи.
Работа каждого SAT-решателя делится на следующие блоки:
1. Получение на вход файла КНФ в DIMACS формате.
2. Нахождение решения (если оно существует).
3. Вывод результатов процесса решения.
Решатели Plingeling, Tringeling и CryptoMiniSAT являются многопоточными. Для работы с данными решателями были использованы две вычислительные платформы, характеристики которых приведены в следующей таблице.
3 Вычислительные эксперименты
3.1 Решение SAT-задач, кодирующих криптоанализ сжимающего генератора
Результаты логического криптоанализа сжимающего генератора с использованием перечисленных выше SAT-решателей представлены в таблицах 1-3.
1 Plingeling - http://satcompetition^rg/edacc/scl4/experiment/28/solver-configurations/1504
2 Treengeling - http ://satcompetition.org/edacc/sc 14/experiment/28/solver-configurations/1507
3 CryptoMiniSAT - http://www.msoos.org/cryptominisat4/
Таблица 1. Результаты РШщеШщ
№ TEST Time solutions Intel Core i5 Collisions Intel Core i5 Time solutions AMD Opteron 6276 Collisions AMD Opteron 6276
1.45bit. 232.2 s Yes №1 507.7 s Yes №2
2. 45bit. 747.4 s No 1469.8 s No
3. 45bit. 271.2 s Yes №1 523.3 s Yes №2
4. 45bit. 2335.8 s No 246.2 s No
5. 45bit. 67.7 s Yes 373.5 s Yes
6. 45bit. 676.6 s No 377.3 s No
7. 45bit. 1050.7 s Yes 583.9 s No
8. 45bit. 191.2 s Yes 663.4 s No
average time 696.6 s 593.14 s
Таблица 2. Результаты ТгеегщеНг^
Parameters /№ Time solutions Intel Core i5 Collisions Intel Core i5 Time solutions AMD Opteron 6276 Collisions AMD Opteron 6276
—symmetric 1074.04 s No - -
asymmetric 135.03 s No - -
—eager 5048.34 s No - -
—lazy 4553.39 s No - -
1.45bit. 589.32 s Yes 4061.23 s Yes
2. 45bit. 1895.08 s No 8038.75 s No
3. 45bit. 1370.28 s Yes 222.23 s Yes
4. 45bit. 3054.45 s No 832.95 s No
5. 45bit. 69.68 s Yes 147.76 s Yes
6. 45bit. 5446.54 s No 2113.86 s No
7. 45bit. 3468.86 s Yes 2789.85 s Yes
7-asymmetric 2604.17 s Yes - -
8. 45bit. 54.41 s No 1006.55 s No
8-asymmetric 51.6 s No - -
average time 1993 s 2401.65 s
3.2 Поиск всех ключей, порождающих анализируемый фрагмент ключевого потока Решатель Сгур1:о]УИт8АТ был использован для решения задач перечисления всех ключей, порождающих конкретный анализируемый фрагмент ключевого потока. Были рассмотрены тесты с номерами 5 и 8.
Исследование стойкости генераторов ключевого потока к логическому криптоанализу
Таблица 3. Результаты СгурШМЫБАТ
Кеу Ба1а Типе
Бесге! кеу 1 111110100110100110100101001 1000 11101010101011 149.7 8
8есге1 кеу 2 011111010011010011101001010 011000 1110 10 10 110 1 4923.34 в
Бесге! кеу 3 111101001101001110100101001 1000 11101010110111 19472.12 8
Кеу$1хеат 010101101001001100010010110 111111000101100011010100101 0 1001111010
3.3 Коллизии в пространстве ключей сжимающего генератора и их поиск
Коллизии - различные ключи, которые порождают один и тот же поток произвольной длины.
По умолчанию использовалась длина ключевого потока 64 бита. На основании такой малой длины нельзя сделать вывод о том, что пара ключей образует коллизию. Поэтому была написана программа, сравнивающая состояния регистров генератора после порождения достаточно длинного ключевого потока (порождался поток из 1000 битов). Если после такого числа сдвигов, генераторы (стартуя с разных секретных ключей) переходят в одинаковое состояние, при том, что ключевые потоки совпадали, то исходные ключи образуют коллизию.
Secret key KeyStream
111110 100 110 100110 100101001 1 000 1 1 1 0 1 0 10 10 10 11 010101101001001100010010110111111000101 1000110101001010100111101 00 101011010010 011000100101101111110001011000110101001 010100110 110000110001110001110101001100 001100010100111010100101111010011110100 101011010010011000100101101111110001011 000110101001010100111101 00 10101101 00 110 000110001110001110101001100001100010100 111010100101111010011010011000100101101 111110001011000110101001010100111101 00 1 010110100100110001001011011111100010110 001101010010101001111010010101101001001 100010010110111111000101100011010100101 0100111101 00 101011010010011000100101101 111110001011000110101001010100110 110000 110001110001110101001100001100010100111 0101001011110100111101 00 101011010010011 000100101101111110001011000110101001010 100111101 00 10101101 00 110000110001110001 110101001100001100010100111010100101111 010011010011000100101101111110001011000 110101001010100111101 00 1010110100100110 001001011011111100010110001101010010101 001111010
0 111110 10 0 110 10011 10 1001010 0 1 1 000 1 1 1 0 10 10 110 1
Список литературы
[Отпущенников, 2011] Отпущенников И.В., Семенов А.А. Технология трансляции комбинаторных проблем в булевы уравнения // Прикладная дискретная математика. 2011. № 1.С. 96-115.
[Сборник, 2009] Андерсон О.Р. Поточные шифры. Результаты зарубежной открытой криптологии - М., 1997, - 389 с
[Biere, 2009] Biere A., Heule V., van Maaren H., Walsh Т. Handbook of Satisfiability. IOS Press, 2009.
[Menezes, 2009] Menezes A., van Oorschot P., Vanstone S. Handbook of Applied Cryptography. CRC Press, 1996.