Первичный криптоанализ и распараллеливание нового

advertisement
Первичный криптоанализ и распараллеливание нового алгоритма шифрования
Рассмотрен новый алгоритм симметричного шифрования, проведено изучение его криптостойкости по отношению к некоторым видам атак, предложен способ эффективного распараллеливания проводимых преобразований.
Чистяков Павел Петрович
Санкт-Петербургский государственный университет
Математико-механический факультет
Кафедра параллельных алгоритмов
Санкт-Петербург
2013
1
Аннотация: Предложен новый алгоритм симметричного шифрования, получивший название CMN89. Проведён его анализ с точки зрения его криптостойкости
и возможности распараллеливания производимых в ходе его применения вычислений. Установлено, что алгоритм имеет высокий запас криптостойкости против атак
таких видов, как сдвиговые атаки, атаки методами “грубой силы”, “встреча посередине” и интерполяции. Выявлено ускорение при использовании крупномодульного распараллеливания вычислений.
1. Введение.
Существует много алгоритмов шифрования высокой стойкости (таких, как ГОСТ 28147-89, семейство RC и др.). Однако вследствие постоянного развития криптоанализа всё чаще стали проводиться успешные атаки на существующие алгоритмы, что приводит к необходимости разрабатывать и изучать новые алгоритмы шифрования. Целью данной работы является описание предлагаемого автором алгоритма шифрования, определение возможности для оптимизации вычислений
в ходе его применения, в том числе за счёт распараллеливания, а также предварительная оценка
криптостойкости алгоритма по отношению к некоторым видам атак.
По результатам проведённых исследований можно сделать следующие выводы: алгоритм
CMN89 имеет высокий запас криптостойкости против атак методом “грубой силы” вследствие
очень большой длины ключа; из-за наличия преобразований, которые вносят отличия между любыми двумя подряд идущими раундами, сдвиговая атака на алгоритм не может быть проведена;
проведение атак вида “встреча посередине”, целью которых обычно является разбиение ключа на
две половины, поиск которых можно вести изначально независимо друг от друга, не оправдано,
поскольку из-за использования ключа целиком на любом раунде алгоритма желаемого сокращения
области перебора не происходит.
Экспериментальным путём установлено, что при крупномодульном распараллеливании вычислений в ходе применения алгоритма на двухъядерном процессоре максимальное достигаемое
ускорение равно 2. По всем рассмотренным диапазонам размера открытого текста ускорение составило в среднем 32%; что касается зависимости ускорения от количества выполняемых раундов
алгоритма, то здесь наблюдалась стабилизация значения ускорения около отметки в 1.5 с увеличением числа раундов.
2. Актуальность проблемы.
В последние десятилетия в криптографии как в науке о защите информации наблюдается
огромный прогресс, связанный с непрерывным развитием вычислительных систем и постоянной
необходимостью в защите компьютерной информации. В настоящее время криптографические
методы доступны не только государственным структурам, но и обычным людям и организациям;
сама разработка криптографических алгоритмов также осуществляется зачастую частными лицами.
Криптографические методы в современном мире используются не только для защиты информации, но и в качестве основы многих новейших информационных технологий, таких, как, например, электронный документооборот, электронные деньги и многих других.
3. Краткий обзор некоторых теоретических аспектов.
3.1 Базовая модель криптографии
Сообщения передаются от отправителя к получателю по открытому каналу, к которому имеет
доступ «противник». Он либо только прослушивает канал (пассивный перехват сообщений), либо
модифицирует передаваемые сообщения и посылает свои (активный перехват сообщений). Перед
отправкой сообщения в открытый канал отправителю необходимо подвергнуть исходную информацию специальному преобразованию (зашифровыванию), позволяющему скрыть её истинное
содержание; соответственно после приёма на другом конце нужно выполнить обратное преобразование (расшифровывание). Открытый текст – информация, подающаяся на вход шифратора,
шифртекст – информация на входе дешифратора.
3.2 Три категории криптоалгоритмов.
Существуют бесключевые, одноключевые (общий секретный ключ для отправителя и получателя) и двухключевые (на разных этапах вычислений применяются два вида ключей: для зашифровывания информации, предназначенной конкретному получателю, отправитель использует уни2
кальный открытый ключ адресата-получателя; для расшифровывания получатель использует парный секретный ключ) алгоритмы.
3.2 Общая схема шифрования.
1). Зашифровывание: 𝐶 = 𝐸𝑘1 (𝑀). 2). Расшифровывание: 𝑀′ = 𝐷𝑘2 (𝐶).
От ключа зависит результат работы алгоритма.
3.3 Основные структура алгоритмов симметричного шифрования.
1). Сеть Фейстеля.
2). Подстановочно-перестановочная сеть.
3). “Квадрат”.
3.4 Режимы работы алгоритмов.
1). ECB (электронная кодовая книга).
2). CBC (сцепление блоков шифра).
3). CFB (обратная связь по шифртексту).
4). OFB (обратная связь по выходу).
3.5 Эффективность криптоалгоритма – отношение временных затрат криптоаналитика на
вскрытие шифровки к временным затратам криптографа на создание шифровки.
4. Структура алгоритма CMN89.
Алгоритм CMN89 имеет смешанную структуру; она представляет собой модификацию сети
Фейстеля, на каждом раунде которой производятся преобразования (в том числе подстановки и
перестановки) с блоками данных, представленными в виде квадратного массива байтов.
Алгоритм шифрует данные блоками длиной 64 байта, подающимися на вход шифратора по 4
одновременно в виде единой 256-байтной строки открытого текста. Часть параметров являются
переменными: количество раундов может варьироваться от 0 до 255, секретный ключ может иметь
длину от 0 до 255 байтов. Далее в статье для обозначения этих величин используются переменные
R и Lange, соответственно.
Перед шифрованием выполняются следующие преобразования: производится постепенное
удвоение длины ключа за счёт приписывания в конец его копии до того момента, пока длина не
превысит 256 байтов, затем оставляются только первые 256 байтов, они разбиваются на 16 16байтных подключей (K0…K15) раундов.
64-байтный блок открытого текста разделятся на 4 субблока (N1, N2, N3, N4) по 16 байтов. После с ними производятся 16*R подраундов преобразований (R раундов, в каждом по 16 подраундов для полного перемешивания входных данных). Каждый из них состоит из следующих операций:
1. Перестановка байтов местами внутри субблока. В данной версии алгоритма она имеет вид (5,
2, 11, 6, 8, 15, 12, 1, 14, 3, 0, 7, 9, 4, 13, 10) и применяется к субблокам N1 и N4.
2. Наложение подключа на результат перестановки с использованием операции XOR: номер
подключа определяется остатком от деления на 16 глобального номера текущего подраунда. Таким образом, при зашифровывании используется прямой циклический порядок наложения подключей: от K0 до K15.
3. Далее субблоки N1 и N4 представляются в виде матриц размера 4*4. Для каждой из них производится циклический сдвиг байтов вправо в каждой из строк на количество позиций, определяемое глобальным номером kkk текущего подраунда и собственным номером строки sn (от 1 до 4):
kkk%4+sn-1.
4. Побайтная табличная замена в субблоках N1 и N4. Текущий вариант таблицы заимствован из
алгоритма Camellia.
5. Наложение субблоков друг на друга с помощью операции XOR, перемена их местами. Итог
наложения результата преобразований 1-4 субблока N1 на субблок N3 становится первым cубблоком нового формируемого 64-байтного блока, вторым субблоком становится начальный субблок
N1, третим – начальный субблок N4, четвёртым – итог наложения результата преобразований 1-4
субблока N4 на субблок N2.
6. Разложение блока на две составляющие, при этом номер байта, с помощью которого формируется вторая составляющая, определяется как kkk%64, где kkk – глобальный номер текущего
подраунда.
7. Составление нового 64-байтного блока из двух полученных составляющих и его разделение
на 16-байтные субблоки либо для осуществления преобразований 1-6 на следующем подраунде,
либо составления из них очередной 64-байтной части выходной 256-байтной строки.
3
В конце зашифровывания производится увеличение всех байтов на Lange%5.
При расшифровывании операции производятся также с 256-байтными строками. Сначала выполняется уменьшение всех байтов на Lange%5. Далее эти строки разбиваются на 4 блока по 64
байта, которые обрабатываются по отдельности. Порядок операций на каждом из 16*R подраундов следующий:
1. Восстановление блока: номер восстанавливаемого байта определяется как kkk%64, где kkk –
глобальный номер текущего подраунда. Важно отметить, что при расшифровывании глобальная
нумерация подраундов идёт в обратном порядке.
2. Разбиение 64-байтного блока на 4 субблока (N1, N2, N3, N4) по 16 байтов. Перестановка байтов местами внутри субблоков N2 и N3 (такая же, как и при зашифровывании).
3. Наложение подключа на результат перестановки с помощью операции XOR: номер подключа определяется остатком от деления на 16 глобального номера текущего подраунда. При расшифровывании нумерация подраундов идёт в обратном порядке и используется обратный циклический
порядок наложения подключей: от K15 до K0.
4. Субблоки N2 и N3 представляются в виде матриц размера 4*4. Для каждой из них производится циклический сдвиг байтов вправо в каждой из строк на количество позиций, определяемое
глобальным номером текущего подраунда и собственным номером строки (так же, как и при зашифровывании, но при обратной нумерации подраундов).
5. Побайтная табличная замена в тех же субблоках с помощью той же таблицы, что и при зашифровывании.
6. Наложение субблоков друг на друга с помощью операции XOR и их перестановка местами.
Первым субблоком нового формируемого 64-байтного блока становится начальный субблок N2,
вторым – итог наложения результата преобразований 2-5 субблока N3 на субблок N4, третим –
итог наложения результата преобразований 2-5 субблока N2 на субблок N1, четвёртым – первоначальный субблок N3.
7. Составление единого преобразованного 64-байтного блока из 16-байтных субблоков либо
для осуществления преобразований 1-6 на следующем подраунде, либо записи всего этого блока
как очередной 64-байтной части выходной 256-байтной строки.
Схемы зашифровывания и расшифровывания представлены ниже.
Функция f() при зашифровывании соответствует преобразованиям 1-4, а при расшифровывании
– преобразованиям 2-5.
4
5. Полученные результаты.
Разработана программная реализация предлагаемого алгоритма на языке программирования
C#. В результате работы программы при наличии часто повторяющихся блоков исходного текста
получается шифртекст с таким же количеством одинаковых блоков, что соответствует теоретическим результатам.
Численный эксперимент позволил оценить время шифрования и ускорение при распараллеливании в зависимости от длины входных данных и от количества раундов преобразований алгоритма.
Разделение по длине входных данных соответствует структуре работы алгоритма CMN89: данные шифруются блоками по 64 байта, подающимися на вход шифратора по 4 вместе в виде единой
256-байтной строки открытого текста. Измерения проводились при работе на 2-хъядерном процессоре Intel(R) Core(TM)2 Duo CPU.
Использование встроенных методов класса System.Threading.Tasks для распараллеливания вычислений позволило достичь определённого ускорения работы алгоритма. Полученные значения
подтверждают, что зачастую применение мелкомодульного распараллеливания, при котором выполняется параллельная обработка каждого из множества небольших циклов по отдельности
(например, при расширении ключа, его наложении на субблоки, табличной замене, перестановках
и т.п.), является неэффективным. Причина заключается в том, что накладные расходы на создание
и уничтожение потоков вносят большой вклад в суммарное время работы алгоритма, существенно
снижая положительный эффект от непосредственного параллельного выполнения этих циклов.
На основании полученных значений построены графики зависимости времени выполнения алгоритма CMN89 в последовательном режиме и в режиме крупномодульного распараллеливания и
достигнутого ускорения от размера открытого текста, подвергающегося шифрованию (красным
показано время шифрования без распараллеливания, фиолетовым – с распараллеливанием, голубым – ускорение, достигнутое при распараллеливании):
5
Из приведённых выше графиков видно, что во всех случаях крупномодульного распараллеливания вычислений, когда каждому из ядер назначалась полная обработка одного из 64-байтных
блоков открытого текста, было достигнуто ускорение вычислений. Оптимальным на рассматриваемой системе можно считать шифрование (с помощью алгоритма CMN89) открытых текстов размером от 513 до 768 байтов в режиме крупномодульного распараллеливания (в этом случае ускорение достигает более 45%). Наименьший положительный эффект от распараллеливания наблюдается при размере исходного текста от 257 до 512 байтов, когда в среднем алгоритм работает
быстрее не более чем на 20%. В среднем по всем указанным диапазонам длин исходных данных
ускорение составило примерно 32%.
Время выполнения алгоритма и получаемое при распараллеливании вычислений ускорение зависит от количества раундов преобразований. Далее приведены графики соответствующих зависимостей (зелёным отмечено время шифрования без распараллеливания, голубым – с распараллеливанием, оранжевым – ускорение, достигнутое при распараллеливании). Как видно, при малом
количестве раундов может происходить уменьшение скорости работы алгоритма при его распараллеливании (даже в его крупномодульном варианте): даже в случае распределения целых 64байтных блоков на одно ядро процессора при небольшом числе раундов затраты на создание и
уничтожение потоков велики, а также существенное влияние оказывает последовательная часть
кода.
С увеличением количества раундов R преобразований алгоритма среднее значение наблюдаемого ускорения устанавливается в окрестности 1.5. Если приводить конкретных значений, то
наиболее интересны некоторые точки локальных экстремумов: при R=2,11,12 ускорение достигло
своего абсолютного максимума, равного 2; R=9 – единственный случай, при котором наблюдалось
заметное ухудшение (замедление в 2 раза) работы алгоритма при распараллеливании; во второй
половине диапазона возможных значений числа раундов локальный максимум был достигнут при
R=190, когда параллельная версия отработала более чем в 1.7 раза быстрее последовательной, что,
скорее всего, объясняется оптимальной загрузкой вычислительных ядер на протяжении всего выполнения алгоритма в этом случае, а также эффективным использованием быстрой кэш-памяти.
6. Оценка криптостойкости.
При анализе возможности проведения атак на алгоритм CMN89 были получены следующие
оценки:
1. В методе “грубой силы” предполагается наличие у криптоаналитика некоторого шифрующего устройства; ему необходимо узнать “прошитый” в нём ключ; у него также есть нужное количество пар (открытый текст, соответствующий шифртекст) для произведения атаки с известным открытым текстом. В этом методе производится перебор всевозможных вариантов ключа до нахождения искомого. Перед зашифровыванием исходного открытого текста с помощью алгоритма
CMN89 производится процедура расширения ключа. В результате “удлинённый” до 256 байтов
исходный ключ разбивается на шестнадцать 16-байтных подключей. Каждый из этих подключей
используется на определённом подраунде всех раундов преобразований. Таким образом, все биты
расширенного ключа задействованы уже в первом раунде обработки 64-байтного блока исходных
анных и у “противника” нет возможности найти искомый секретный ключ “по частям”, не внося
изменений в алгоритм, что предполагается невозможным (у него есть доступ к шифратору, но не к
исходному коду).
В данном случае необходимо найти ключ длиной 8*256=2048 битов, существует 22048 его вариантов. Искомый ключ будет обязательно найден в результате перебора в среднем за 22047 тестовых операций шифрования. Предположим, что в распоряжении криптоаналитика будет один из
самых мощных суперкомпьютеров современности, например, суперкомпьютер Sequoia, занимающий одну из первых строчек в списке TOP500 на начало 2013 года и имеющий производительность 16,32 петафлопс на 1572864 ядрах в тесте LINPACK. В результате подсчётов было установлено, что в среднем при шифровании всего вычислительной системе необходимо совершить
163840*22047 операций с плавающей точкой для нахождения искомого ключа методом “грубой
силы”. Потому в случае использования указанного суперкомпьютера время, необходимое на
вскрытие среднестатистического варианта алгоритма (нахождение искомого ключа), можно приближённо оценить в 10604 секунд, что составляет около 3,1688*10596 лет. Полученная оценка
свидетельствует о невозможности осуществления атаки методом “грубой силы” на алгоритм
CMN89 за разумное время на текущий момент развития вычислительных систем.
6
Стоит отметить, что решающий вклад в высокую стойкость алгоритма против атак методом
“грубой силы” вносит большая длина ключа.
2. Сдвиговая атака в первоначальном виде на алгоритм CMN89 не применима. На каждом из
раундов алгоритма весь ключ шифрования используется полностью, однако раунды не являются
идентичными за счёт применения выходного “отбеливания” блока данных (которое заключается в
изменении и перемещении байта, положение которого в блоке зависит от номера текущего подраунда: номер байта определяется как kkk%64, где kkk – глобальный номер текущего подраунда);
следовательно, в двух подряд выполняемых раундах алгоритма производятся преобразования с
байтами на дизъюнктных множествах позиций.
Получается, что необходимые для проведения атаки соотношения между результирующими
байтами после двух последовательных раундов составить не получится. Можно сделать вывод о
том, что применение указанного преобразования в некоторой степени повышает криптостойкость
алгоритма к этому виду атак.
3. Атака вида “встреча посередине” может быть осуществлена только при известном количестве раундов преобразований, выполненных при зашифровывании. Однако стоит отметить, что в
отличие от её применения к алгоритму Double DES, когда при первом проходе шифрования одинарным алгоритмом DES используется первая половина секретного ключа, а при втором – вторая,
в алгоритме CMN89 на каждом из раундов используется весь ключ. Потому выигрыша, получающегося при проведении подобной атаки на алгоритм Double DES (и заключающегося в возможности разбиения ключа на 2 вдвое меньшие по длине части, которые можно в дальнейшем просто
перебрать методом “грубой силы”), здесь получить не удастся: уменьшения области перебора не
произойдёт.
4. Метод интерполяции служит для нахождения некоторого алгоритма, эквивалентного зашифровыванию данных на данном секретном ключе.
Он заключается в построении полинома, связывающего открытый текст и соответствующий
ему шифртекст. Процесс построения часто опирается на особенности используемых преобразований. Обычно используется интерполяционная формула Лагранжа:
𝑥−𝑥
𝑓(𝑥) = ∑𝑛𝑖=1 𝑦𝑖 ∗ ∏𝑛𝑗=1,𝑗≠𝑖 𝑥 −𝑥𝑗 ,
𝑖
𝑗
которая обладает следующим свойством: 𝑓(𝑥𝑖 ) = 𝑦𝑖 при всех i=1…n, где 𝑥𝑖 и 𝑦𝑖 – заданные значения, причём все 𝑥𝑖 различны. При криптоанализе качестве 𝑥𝑖 и 𝑦𝑖 берутся соответствующие байты
исходного текста и его шифртекста. Для осуществления такой атаки необходимо только n тестовых операций шифрования при наличии n известных открытых текстов, но при условии, что число
n ненулевых коэффициентов многочлена не превосходит 2512 для рассматриваемого алгоритма.
Исследование преобразований позволяет сделать вывод о том, что самые сложные действия,
которые необходимо выполнить криптоаналитику для вскрытия алгоритма методом интерполяции, заключаются в построении полинома 63-й степени. Его коэффициенты можно найти методом
Гаусса при распараллеливании вычислений. Но важно то, что действие построенного полинома
будет распространяться исключительно на данный открытый текст, и алгоритм зашифровывания
на его основе никак нельзя считать эквивалентным исходному. Так получается, поскольку все вышеуказанные преобразования производятся 16 раз в течение 1 раунда, причём на каждом новом
подраунде в них задействован результат наложения того 16-байтного субблока, который не участвовал в преобразованиях на предыдущем подраунде, на результат этих самых преобразований с
другим субблоком, и предполагается невозможность внесения изменений в алгоритм.
Изучение конкретных примеров составления полиномов позволило сделать несколько выводов.
Во-первых, в общем случае нельзя пытаться уменьшить степень полинома, т.к. все байты отдельно
зашифровываемого 64-байтного блока влияют на результат шифрования. Во-вторых, между отдельными байтами открытого текста и шифртекста, занимающими одинаковые позиции (по номеру от начала текста), невозможно установить биективного соответствия: различные байты могут
отображаться в один, и наоборот, образ одного и того же байта в разных текстах может быть различным. В-третьих, подтверждено, что использование указанной интерполяционной формулы Лагранжа при вскрытии алгоритма CMN89 возможно только для каждой конкретной пары открытого
текста и соответствующего шифртекста, и полученный многочлен в общем случае будет служить
аналогом зашифровывания на рассматриваемом ключе только этого открытого текста.
7
7. Дальнейшее развитие и исследования.
В настоящее время большой интерес представляет создание алгоритмов шифрования, структура преобразований которых сочетает в себе несколько видов, таких, например, как сеть Фейстеля,
“квадрат”, подстановочно-перестановочная сеть, и их исследование на предмет выявления уязвимостей в плане криптостойкости, а также приспособляемости к различным параллельным вычислительным системам.
Структура алгоритма CMN89 представляет собой как раз такую комбинацию, а именно, модификацию сети Фейстеля, на каждом раунде которой выполняются подстановки, перестановки и
другие преобразования с блоками данных, представленными в виде квадратного массива байтов.
На данный момент описанный в работе алгоритм шифрования ещё недостаточно изучен. В будущем желательно провести исследование его криптостойкости к линейному криптоанализу,
дифференциальному криптоанализу и его усилению – методу бумеранга. Также возможно приспособление программных реализаций алгоритма к конкретным параллельным архитектурам и проведение подробного анализа их эффективности.
8. Литература.
[1] Панасенко С.П. Алгоритмы шифрования. Специальный справочник. СПб.: БХВ-Петербург,
2009. – 576 с.: ил.
[2] Винокуров А. Алгоритм шифрования ГОСТ 28147-89, его использование и реализация для
компьютеров платформы Intel x86.
[3] Aoki K., Ichikawa T., Kanda M., Matsui M., Moriai S., Nakajima J., Tokita T. Camellia: A 128Bit Block Cipher Suitable for Multiple Platforms. http://www.mirrors.wiretapped.net – July 13, 2000.
[4] Jakobsen T., Knudsen L.R. The Interpolation Attack on Block Ciphers http://citeseer.ist.psu.edu –
1997.
8
Download