2010
ВЕСТНИК ПЕРМСКОГО УНИВЕРСИТЕТА
Математика. Механика. Информатика Вып.1(1)
УДК 681.3.001.63; 004.056.55
Генетический алгоритм для криптоанализа шифра Виженера
В. В. Морозенко, Г. О. Елисеев
Пермский государственный университет, 614990, Пермь, ул. Букирева, 15
Разработан и описан генетический алгоритм для поиска секретного ключа шифра Виженера. Ключом является случайная последовательность символов из заданного алфавита, а исходными данными для криптоанализа - зашифрованный текст. С помощью разработанного генетического алгоритма задача криптоанализа решается в два этапа: на первом этапе вычисляется длина ключа, а на втором - сам ключ. Таким образом процесс расшифрования текста удается почти полностью автоматизировать.
Введение
Шифрование информации в настоящее время стало едва ли не основным методом ее защиты. Доступность вычислительной техники и стремительный прогресс в ее развитии сделали необходимым совершенствование давно известных шифров и применение в массовом масштабе новых высоконадежных схем шифрования. Однако у этого прогресса есть и другая сторона: возросшие возможности вычислительных устройств сегодня успешно применяются не только для шифрования, но и для "взлома" тех шифров, которые еще вчера, казалось бы, гарантировали полную защиту информации.
Исторически первый вариант шифра Виженера упоминается Юлием Цезарем в "Записках о галльской войне" (I в. до н.э.). Более сложная модификация этого шифра встречается в романе Ж.Верна "Жангада". Современные варианты шифра Виженера часто используются в коммерческих программных продуктах, например в системах М8 Б08 и МасткеЬ.
При шифровании с помощью шифра Виженера используется секретный ключ -символьная строка. Чем больше ее длина, тем надежней защищен зашифрованный текст от попытки его расшифровать (криптоатаки).
© В. В. Морозенко, Г. О. Елисеев, 2010
Задача криптоанализа состоит в том, чтобы расшифровать зашифрованный текст, не обладая знанием секретного ключа. Решая эту задачу, злоумышленник, как правило, сначала находит секретный ключ, а затем с его помощью расшифровывает перехваченное зашифрованное сообщение.
Постановка задачи
Шифр Виженера - это блочный многоалфавитный подстановочный шифр [1]. Для удобства будем считать, что исходный текст представляет собой строку (х1, х2хт) длиной т, образованную символами алфавита А = {а1,а2,..., а8}. Через у(х) обозначим номер символа х в алфавите А и положим у(а ) = і ~ 1. Секретным ключом К является строка (к1,к2,..., кп) длиной п, составленная
из символов алфавита А.
Шифрование исходного текста с помощью данного ключа осуществляется следующим образом. Исходный текст разбивается на блоки длиной п. Первый блок - это символьная строка (х1, х2,..., хп) , второй блок - строка (хп+1,хп+2,...,х2п) и т.д. Чтобы зашифровать первый блок, для каждого і = 1,2,..., п символ Хі заменяем на символ гі такой, что
номера у (х ), У(к ), у() символов х, , к и в алфавите А связаны соотношением
у(* ) = (КX) + у(кг ))(тоё . (1)
Тогда первый блок зашифрованного текста будет иметь вид (*, *2*п) . Аналогично
происходит шифрование второго и всех последующих блоков исходного текста: символ зашифрованного текста, где . = 1,2,..., т, однозначно определяется через свою позицию ] в зашифрованном тексте и свой номер у(* ■ )
в алфавите А. Правило для вычисления у(* ■ )
обобщает формулу (1) и можен быть задано следующим образом:
У() = (у() + У(кг )) (т^ ^, ] = - (тоё П), 7 = 1,2,..., т, г = 1,2,..., п.
Для примера зашифруем с помощью шифра Виженера следующий текст:
"греция становится центром_ремесл-енной индустрии и торговли. осуществляется переход от первобытнообщинного".
Будем считать, что алфавит А состоит из 36 символов: 33 букв русского алфавита и символов «_» (пробел), «.» (точка), «,» (запятая). Выберем естественную нумерацию символов алфавита А: у (а) = 0, у (б) = 1, у(в) = 2, ..., у(э) = 30, у(ю) = 31, у(я) = 32, у(_) = 33, у(.) = 34, у(, ) = 35. Если в качестве ключа взять слово математика и применить правило (2) с параметрами 5 = 36, п = 10, т = 105, то получим зашифрованный текст
"прчыхяпъэаъофнясоё.еътаущанчеюлч тъоъёунрубчэи ыёуырхуолыжзоюуийю тффжеясовьеан_ор_. чйпчщмонывтыоу ,унъох".
Расшифровать текст, зашифрованный с помощью шифра Виженера, зная секретный ключ К, несложно. Для этого надо выполнить действия, обратные тем, которые применялись при его шифровании, т.е. для каждого 7 = 1,2,..., т найти у(х.) по формуле
v{Xj) = (у(Zj) - у{кг)) (mod s),
где j = i (mod n).
Рассматриваемая в данной статье задача криптоанализа состоит в том, чтобы, имея зашифрованный текст (z, z2zm ) , но не зная ни самого ключа K, ни его длины п, восстановить исходный текст (хх, х2,..., хт ) .
При этом предполагается, что злоумышленнику известен алфавит А, но не известна нумерация символов, использованная шифровальщиком. Простые расчеты, приведенные в [2] для простейшего алфавита А = {0,1}, показывают, что если секретный ключ представляет собой 56-битовую строку, то попытка подобрать его, наугад перебирая все возможные комбинации и проверяя за одну секунду 8000 случайно выбранных ключей, может занять более 500 лет, и есть только один шанс из 200000 угадать ключ в течение первых суток.
Описание генетического алгоритма
В настоящее время существует несколько способов "взлома" шифра Виженера. Как правило, сначала пытаются определить длину ключа, а затем и сам ключ. Например, для вычисления длины ключа можно применить тест Казиски [1]. При криптоанализе шифра Виженера используется известное свойство любого достаточно длинного осмысленного текста, состоящее в том, что в таком тексте каждая буква встречается с почти предсказуемой среднестатистической частотой, заранее известной и характерной для любого достаточно длинного осмысленного текста. Например, в текстах на русском языке среднестатистическая частота встречаемости буквы а равна 0.052, а буквы м - 0.026.
Предлагаемый в данной статье генетический алгоритм для криптоанализа шифра Виженера тоже использует указанную устойчивость частотных характеристик осмысленных текстов. Кроме того, он опирается на следующее свойство модулярной арифметики. Если две независимые дискретные случайные величины £ и j принимают значения из множества М = {0, 1, 2, ..., n - 1}, причем величина £ принимает любое значение из указанного множества с одинаковой вероятностью, равной 1/п, а величина п для каждого
i = 0,1,2,.,п - 1 принимает значение i с вероятностью pi, то случайная величина
£ + j (mod n)
принимает все значения из множества М с одинаковой вероятностью, равной 1/п, т.е. имеет равномерное дискретное распределение на множестве М. Действительно, для каждого фиксированного i = 0,1,2,.,п - 1 вероятность P(£ +j = i (mod n)) того, что сумма £ + J по модулю п окажется равной i, в силу независимости £ и п , удовлетворяет равенствам P(£ + j = i (mod n)) =
n-1
= Z P(£ = к, j = i - к (mod n)) =
к =0
1 n-1 1 n-1 1
=--Z Pj =1 - к (mod n))=--Z Pk = -.
n к=0 n к=0 n
Отмеченный математический факт означает, что если каждый блок длиной п исходного текста "сложить" по модулю s с ключом K той же длины, все символы которого случайным образом с равной вероятностью выбираются из алфавита А, то и в полученном тексте все символы будут встречаться с равной вероятностью. Иными словами, если на осмысленный текст, в котором каждый символ xi встречается со своей частотой pi, близкой к известному среднестатистическому значению, наложить "шум", в котором появление всех символов равновероятно, то в результате получится "шум". Именно это свойство модулярной арифметики позволяет шифру Виже-нера "прятать" в зашифрованном тексте, который по своим частотным характеристикам напоминает обычный "шум", секретную информацию, содержащуюся в исходном тексте.
Генетические алгоритмы хорошо зарекомендовали себя при решении задач комбинаторной оптимизации, в которых требуется найти экстремум функции, заданной на дискретном множестве допустимых решений [3]. Поскольку цель "взлома" шифра - найти среди множества потенциальных ключей единственный секретный ключ, то задачу криптоанализа вполне можно отнести к задачам комбинаторной оптимизации и попытаться применить для ее решения генетический алгоритм. Такие попытки известны, и они оказались успешными [4, 5].
Разрабатывая генетический алгоритм для криптоанализа шифра Виженера, необходимо выбрать способ кодирования допустимых решений (потенциальных ключей), определить правила скрещивания и мутации особей, стратегии их отбора, а также на множестве всех допустимых решений задать фитнесс-функцию, у которой точка глобального максимума (или минимума) и будет являться искомым секретным ключом.
Применим следующий способ кодирования ключей. Хромосома, кодирующая произвольный ключ (Ь, Ъ2,. ., Ъп ) , представляет собой числовой вектор
Уу(Ъх),у(Ъ2),...,у(Ъп )),
где у(Ъ ) - номер символа Ь, в алфавите А.
Напомним, что символы алфавита А пронумерованы числами 0,1,2,.,п - 1. Такой способ кодирования ключей позволяет использовать классические варианты операторов скрещивания и мутации. Мутация хромосомы происходит с вероятностью р0 и состоит в том, что два ее произвольных гена меняются местами. Поскольку гены независимы, возникающая после мутации особь будет жизнеспособной. Вероятность р0, количество особей, участвующих в скрещивании, и численность популяции являются настраиваемыми параметрами алгоритма.
Выбор особей для скрещивания будем осуществлять по "принципу рулетки", согласно которому вероятность того, что данная особь будет участвовать в скрещивании, прямо пропорциональна уровню ее приспособленности [3]. Скрещивание двух особей будем выполнять с помощью одноточечного кроссовера. При этом положение точки разбиения хромосом выбирается случайным образом, после чего хромосомы обмениваются своими начальными отрезками.
Чтобы выбрать подходящую фитнесс-функцию, следует руководствоваться двумя соображениями. Во-первых, искомое решение должно совпадать с точкой ее глобального экстремума. Во-вторых, значение фитнесс-функции для каждой конкретной особи должно отражать уровень ее приспособленности. Причем небольшим изменениям хромосомы должны соответствовать небольшие изменения фитнесс-функции. Если считать, что ис-
ходный текст, который был зашифрован шифром Виженера, являлся осмысленным и частоты встречаемости символов в нем были примерно равны среднестатистическим значениям, то в качестве фитнесс-функции можно взять функцию Е(К) из [6]. Она вычисляется по формуле
^(К) = £|о; -Е„\,
У
где о К - частота встречаемости двухбуквенного слога "ЬЬ;" (биграммы) в тексте, полученном из зашифрованного текста после его расшифрования с помощью предполагаемого ключа К, а Еу - частота встречаемости этой
же биграммы в некотором "среднестатистическом" осмысленном тексте. Среднестатистические частоты встречаемости всех биграмм заранее известны (например, они имеются в [1]) или могут быть вычислены на основании статистического анализа большого числа достаточно длинных осмысленных текстов. Очевидно, чем ближе предполагаемый ключ к искомому секретному ключу, тем больше расшифрованный с его помощью текст будет похож по своим частотным характеристикам на осмысленный текст и, следовательно, тем меньше будет соответствующее ему значение фитнесс-функции.
Заметим, что теоретический минимум предложенной фитнесс-функции равен нулю, однако она не обращается в нуль даже при расшифровании текста с помощью настоящего секретного ключа. По этой причине решено завершать работу генетического алгоритма, как только число поколений превысит заранее заданный порог, не дожидаясь достижения теоретического минимума фитнесс-функции.
Результаты работы генетического алгоритма
Разработанный авторами данной статьи генетический алгоритм решает задачу криптоанализа в два этапа. На первом этапе он находит длину секретного ключа, а на втором этапе - сам ключ.
Чтобы найти длину секретного ключа, сначала генетический алгоритм запускают в предположении, что длина секретного ключа равна некоторому I, и после завершения работы алгоритма запоминают "рекордное" (т.е.
наименьшее) значение с[1] фитнесс-функции за все время его работы. Затем параметр I увеличивают на 1, 2, 3 и т.д., каждый раз заново запуская генетический алгоритм, а после его завершения вычисляют "рекордное" значение с[1 + 1], с[1 + 2], с[1 + 3] и т.д. фитнесс-функции для ключей длиной (I + 1), (I + 2), (I + 3) и т.д. Покажем, что наименьшее среди найденных "рекордное" значение фитнесс-функции достигается именно при совпадении проверяемой длины и длины секретного ключа. Действительно, пусть п - длина секретного ключа. Если числа п и I совпадают, то можно ожидать, что в результате работы генетического алгоритма будет найден сам секретный ключ или близкий к нему ключ, а фитнесс-функция при использовании этого ключа примет относительно небольшое значение.
Пусть К = (кх, кг,..., кп) - секретный ключ. Рассмотрим ключ
К = (к1 , к 2 , . , кп , к1 , к 2 , . , кп )
длиной I = 2п, который является конкатенацией двух секретных ключей К. Поскольку оба ключа К и К' превращают исходный текст в один и тот же зашифрованный текст, то и расшифрован он будет правильно обоими ключами. Это означает, что при поиске ключа длиной 2п генетический алгоритм найдет решение, близкое к ключу К' . Этому ключу будет соответствовать относительно небольшое значение фитнесс-функции, поэтому найденное алгоритмом "рекордное" значение фитнесс-функции для ключей длиной 2п также будет относительно небольшим. То же самое справедливо и для ключей с длинами, кратными числу п. Иными словами, если проверяемая длина ключа I кратна длине настоящего секретного ключа п, то на выходе алгоритма следует ожидать ключ с относительно небольшим значением фитнесс-функции. Если же проверяемая длина ключа I не кратна длине секретного ключа п, а сам секретный ключ является случайной символьной строкой, в которой на любой позиции с равной вероятностью может оказаться любой символ алфавита А, то "рекордное" значение фитнесс-функции окажется более заметно.
Таким образом, идея, используемая при нахождении длины ключа, заключается в следующем. Многократно запуская генетический
алгоритм в предположении, что длина секретного ключа равна I, и каждый раз увеличивая этот параметр на единицу, получаем последовательность с[/], с[/ + 1], с[1 + 2] и т.д. из "рекордных" значений фитнесс-функции. В этой последовательности обязательно будет присутствовать подпоследовательность, состоящая из элементов, чьи номера образуют арифметическую прогрессию у, у + ё, у + 2ё и т.д., а сами элементы этой подпоследовательности с[У], с[/' + ё], с[/' + 2ё] и т.д. будут заметно отличаться в меньшую сторону от остальных элементов последовательности. Тогда разность прогрессии ё окажется в точности равной искомой длине п секретного ключа.
После того, как длина ключа будет найдена, снова запускаем генетический алгоритм. Полученное им решение, соответствующее "рекордному" значению фитнесс-функции, либо окажется искомым секретным ключом, либо будет близко к нему.
Выше был приведен пример исходного текста, который затем зашифровали с помощью ключа математика. Генетический алгоритм был запущен для расшифровки полученного зашифрованного текста с предполагаемой длиной I секретного ключа, равной 4,
5, 6, ..., 34, и вычислены соответствующие "рекордные" значения фитнесс-функции с[4], с[5], с[6], ..., с[34]. Оказалось, например, что
с[8] = 159.46, с[9] = 148.49,
с[10] = 42.59 (абсолютный "рекорд"), с[11] = 148.46, с[12] = 156.63.
На рисунке хорошо видны "провалы", которые соответствуют "рекордным" значениям фитнесс-функции, полученным для предполагаемых длин I, равных 10, 20 и 30. Поскольку эти числа образуют арифметическую прогрессию с разностью 10, то можно сделать вывод, что искомая длина секретного ключа равна 10.
"Рекордные" значения фитнесс-функции для различных предполагаемых длин секретного ключа
Повторная работа генетического алгоритма над тем же зашифрованным текстом, но с уже известной длиной секретного ключа позволила найти ключ математиёа, который отличается от настоящего секретного ключа только в предпоследней позиции. В результате расшифрования с помощью этого ключа получен следующий текст:
"грециясчановитсяыентром _ресесленно й_нндустрии_н_орговли.восуществлбется_ переъод от пержобытнообщннного".
Полностью расшифровать зашифрованный текст не удалось, поскольку полученный текст не совпадает с исходным. Однако можно заметить, что он очень близок к исходному. В нем можно заметить осмысленные ("греция") или почти осмысленные слова ("ыентром", "нндустрии"). Благодаря наличию таких слов процесс расшифрования полученного текста можно довести до конца "вручную".
При работе алгоритма были выбраны следующие значения основных параметров: численность популяции - 70 особей, количество поколений - 40, вероятность мутации -
0.2, в каждом поколении 50% особей участвовали в скрещивании.
Отметим, что для ускорения работы алгоритма при поиске длины ключа можно использовать популяции с малой численностью и небольшое число поколений, а после нахождения истинной длины ключа п можно повторно применить генетический алгоритм с большими значениями указанных параметров для более точного отыскания секретного ключа.
Заключение
Исследование показало, что предложенный в данной статье генетический алгоритм вполне может быть использован для криптоанализа шифра Виженера, если верно предположение о том, что исходный текст, подвергшийся шифрованию, является осмысленным текстом достаточной длины и обладает среднестатистическим частотным профилем. Такое предположение вполне естественно и почти не сужает область применимости данного алгоритма. Более того, устойчивыми частотными характеристиками обладают все "живые" языки, поэтому алгоритм можно легко адаптировать для расшифрования текстов, написанных, например, на английском или французском языке. Для этого достаточно ввести в алгоритм информацию о среднестатистических частотах биграмм указанных языков.
Предложенный генетический алгоритм далеко не всегда полностью расшифровывает зашифрованное сообщение. Получаемый на выходе алгоритма текст чаще всего отличается от исходного текста, хотя и незначительно. Как правило, расшифрованный текст имеет неточности, которые не бросаются в глаза. При удачном подборе параметров генетический алгоритм показывает вполне хорошие результаты как по скорости сходимости, так и по качеству получаемого решения. Нельзя сказать, что применение описанного генетического алгоритма позволяет полностью автоматизировать процедуру криптоанализа, однако он сводит к минимуму участие человека и его "ручную" работу в этом процессе.
Частным случаем шифра Виженера является шифр Вернама, в котором длина сек-
ретного ключа совпадает с длиной исходного текста. К.Шеннон доказал, что шифр Вернама абсолютно надежен [7]. Естественно, что и попытки "взломать" этот шифр с помощью описанного генетического алгоритма окажутся неудачными. Этот факт объясняется тем, что для успешной работы алгоритма необходимо, чтобы длина зашифрованного текста многократно превосходила длину секретного ключа. В ситуации с шифром Вернама это условие, очевидно, не выполняется.
Список литературы
1. Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Основы криптографии: учебн. пос. М.: Гелиос АРВ, 2001.
2. Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. М.: Изд-во Триумф, 2002.
3. Гладков Л.А., Курейчик В.В., Курейчик В.М. Генетические алгоритмы / под ред. В.М.Курейчика. М.: Физматлит, 2006.
4. Delman B. GeneticAlgorithms in Cryptography // A Thesis Submitted in Partial Fulfillment of the Requirements for the Degree of Master of Science in Computer Engineering. New York, 2004.
5. Городилов А.Ю. Криптоанализ перестановочного шифра с помощью генетического алгоритма // Вестн. Перм. ун-та. Пермь, 2007. Вып. 7(12). С.44-49.
6. Jakobsen T. A Fast Method for the Cryptanalysis of Substitution Ciphers. 1995.
7. Шеннон К. Теория связи в секретных системах // Работы по теории информации и кибернетике. М.: ИЛ, 1963.
A genetic algorithm for cryptoanalysis of Vigener’s cipher
V. V. Morozenko, G. O. Eliseev
Perm State University, 614990, Perm, Bukireva st., 15
A genetic algorithm for finding a secret key of Vigener’s cipher is investigated and described. The key is a random sequence of symbols from a given alphabet, and input of the cryptanalysis is a ciphertext. The cryptanalysis problem is solved by the genetic algorithm in two stages: at the first stage the key length will be evaluated, and at the second stage - the key will be obtained. A given ciphertext will be decrypted by this automated process almost completely.