Различные классические шифры и спрятанные сокровища

В этом приложении мы расскажем о различных классических криптографических шифрах, упоминаемых в предыдущих главах, но не описанных там достаточно подробно. Все они представляют различные криптографические методы и интересны даже в качестве развлечения. В завершении мы приведем процесс расшифровки из рассказа американского писателя Эдгара Аллана По, в котором блестяще проиллюстрировано применение частотного криптоанализа.

Шифр Полибия

Этот шифр, один из древнейших, о котором у нас имеется подробная информация, основан на выборе пяти букв алфавита, служащих заголовками строк и столбцов таблицы размером 5 x 5, которая затем заполняется буквами алфавита. Шифр заменяет каждую букву алфавита парой букв, являющихся заголовками соответствующих столбца и строки. Первоначально использовался греческий алфавит из 24 букв, поэтому английские буквы I и J, как правило, комбинируются (см. таблицу, приведенную ниже, где для простоты в качестве заголовков используются буквы А — Е).

Таблица заполняется по правилу, о котором договорились отправитель и получатель.

Рассмотрим, например, следующую таблицу:

Заметим, что шифроалфавит состоит из 25 букв (5 х 5). В качестве заголовков можно использовать и цифры (например, 1, 2, 3, 4 и 5). В этом случае таблица имеет вид:

Рассмотрим шифр Полибия на примере этих двух таблиц. Мы будем шифровать сообщение BLANKS («пробелы»). По первой таблице мы получим:

В заменяется парой АВ.

L заменяется парой СА.

А заменяется парой АА.

N заменяется парой СС.

К заменяется парой BE.

S заменяется парой DC.

Зашифрованное сообщение имеет вид ABCAAACCBEDC. Если мы используем таблицу с цифрами, то получим: «123111332543».

Шифр Гронсфельда

Этот шифр, изобретенный голландцем Мостом Максимилианом Бронкхорстом, графом Гронсфельд, использовался в Европе в XVII в. Это полиалфавитный шифр, аналогичный квадрату Виженера, но менее сложный (и менее надежный). Чтобы зашифровать сообщение, рассмотрим следующую таблицу.

Далее, для каждой буквы в нашем сообщении мы выбираем случайным образом число от 0 до 9. Для сообщения MATHEMATICAL («математический») мы выбираем случайным образом 12 чисел, например: 1, 2, 3, 4, 3, 6, 7, 8, 9, 0, 1, 2. Этот набор чисел и будет ключом шифра. Теперь вместо каждой буквы сообщения мы поставим букву из строки с соответствующим номером (см. таблицу на предыдущей странице).

Буква М будет заменена буквой Р (взятой из строки номер 1 в столбце М), и так далее. Мы получим сообщение PFASRDTQKEDQ. Буква А исходного сообщения будет зашифрована как F, Т, и D. Как и для всех полиалфавитных шифров, эта система шифрования устойчива к методу перебора всех возможных вариантов и к частотному анализу. Количество ключей в шифре Гронсфельда для алфавита из 26 букв составляет 26! х 10 = 4,03 х 10 26.

Шифр Плейфера

Создатели этого шифра лорд Лайон Плейфер и сэр Чарльз Уитстон (также изобретатель электромагнитного телеграфа) были друзьями и соседями и разделяли любовь к криптографии. Их метод напоминает знаменитый шифр Полибия и тоже использует таблицу из пяти строк и пяти столбцов. В качестве первого шага каждая буква сообщения заменяется на пару букв в соответствии с ключом из пяти различных букв. В нашем примере эти пять букв будут JAMES. В случае алфавита с 26 символами мы получаем следующую таблицу:

Далее текст сообщения разбивается на пары букв или биграммы. Две буквы каждой биграммы должны быть разными. Чтобы избежать возможных совпадений, мы используем букву X. Мы также используем эту букву, чтобы завершить биграмму в случае, если последняя буква не имеет пары.

Например, сообщение TRILL будет разбито на биграммы следующим образом:

TR IL LX.

А слово TOY — так:

ТО YX.

Разбив текст на биграммы, мы можем начать шифрование, обращая внимание на следующие условия:

а) две буквы биграммы расположены в одной и той же строке;

б) две буквы биграммы расположены в одном и том же столбце;

в) ни одно из вышеперечисленных.

В случае (а) буквы биграммы заменяются буквами, расположенными справа от каждой из них («следующими» в таблице в естественном порядке). Таким образом, пара JE будет зашифрована как AS:

В случае (б) буквы биграммы заменяются буквами, которые находятся следом ниже по таблице. Например, биграмма ЕТ будет зашифрована, как FY, a TY — как YE:

В случае (с), чтобы зашифровать первую букву биграммы, мы смотрим на ее строку, пока не дойдем до столбца, содержащего вторую букву. Результат расположен на пересечении этой строки и этого столбца. Чтобы зашифровать вторую букву, мы смотрим на ее строку, пока не дойдем до столбца, содержащего первую букву.

Результат опять расположен на пересечении этой строки и этого столбца.

Например, в биграмме СО буква С будет заменена буквой G, а буква О — буквой I или К.

Чтобы зашифровать сообщение TEA («чай») с помощью ключевого слова JAMES, мы сделаем следующее.

• Разобьем слово на биграммы: ТЕ АХ.

• Букву Т заменим буквой Y.

• Букву Е — F.

• Букву А — М.

• Букву X — W.

Мы получим зашифрованное сообщение YFMW.

Криптограмма «Золотого жука»

Уильям Легран, главный герой рассказа Эдгара Аллана По «Золотой жук» (1843), определяет, где зарыт клад с сокровищами, расшифровав криптограмму, написанную на куске пергамента. Легран использовал статистический метод, основанный на частоте, с которой буквы алфавита встречаются в английских текстах. Зашифрованное послание выглядело следующим образом:

Легран начал с предположения, что оригинальный текст был написан на английском языке. В английских текстах наиболее часто встречается буква «е». Далее, в порядке уменьшения частоты, идут остальные буквы: а, о, i, d, h, n, r, s, t, u, y, c, f, g, 1, m, w, b, k, p, q, x, z.

Герой рассказа строит по криптограмме таблицу, в первой строке которой расположены символы зашифрованного сообщения, а во второй — частота их появления.

Таким образом, символ «8» скорее всего соответствует букве «е». Затем он ищет повторяющиеся тройки символов, заменившие также довольно распространенное слово «the», что позволяет ему расшифровать символы «;», «,», «4» и «8».

Группа символов «; (88», теперь, когда он знает, что она соответствует «t (ее», позволяет ему определить отсутствующую букву. Это может быть только «r», учитывая, что tree — «дерево» — наиболее вероятное слово в словаре. Наконец, благодаря подобным хитроумным криптографическим допущениям и большому терпению, он получает следующую таблицу с частично расшифрованным алфавитом:

Этого достаточно, чтобы расшифровать сообщение:

«Хорошее стекло в трактире епископа на чёртовом стуле двадцать один градус и тринадцать минут север-северо-восток главный сук седьмая ветвь восточная сторона стреляй из левого глаза мертвой головы прямая от дерева через выстрел на пятнадцать футов».

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

Настоящая математика не оказывает влияния на войну. Никому еще не удалось обнаружить ни одну военную задачу, которой бы служила теория чисел.

Годфри Харолд Харди , «Апология математика» (1940)

Для расшифровки сообщения важно, чтобы шифр был обратим. Как мы уже видели в случае аффинного шифра, это можно гарантировать, лишь используя простое число в качестве модуля. Более того, произведение простых чисел является практически необратимой функцией, то есть после выполнения умножения разложить произведение на исходные множители является очень трудоемкой задачей.

Такое свойство превращает эту операцию в очень полезный инструмент для систем шифрования, основанных на асимметричных ключах, как, например, RSA-алгоритм, который, в свою очередь, является основой криптографии с открытым ключом. Далее мы более подробно расскажем о связи простых чисел с криптографией и о формальной математической основе алгоритма RSA.

Простые числа и «другая» теорема Ферма

Простые числа — это подмножество натуральных чисел, больших единицы, которые делятся только на единицу и на само себя. Основная теорема арифметики утверждает, что любое натуральное число, большее единицы, всегда можно представить в виде произведения степеней простых чисел, и это представление (факторизация) является единственным. Например:

20 = 22∙5

63 = З2 ∙7

1050 = 2∙3∙52∙7.

Все простые числа, кроме числа 2, нечетные. Единственные два последовательных простых числа — это 2 и 3. Нечетные последовательные простые числа — т. е. пары простых чисел, отличающихся на 2 (например, 17 и 19), — называются простыми числами-близнецами. Простые числа Мерсенна и числа Ферма также представляют особый интерес.

Простое число называется числом Мерсенна, если при добавлении единицы получается степень двойки. Например, 7 — число Мерсенна, так как 7 + 1 = 8 = 23.

Первые восемь простых чисел Мерсенна выглядят так:

3, 7, 31,127, 8191,131071, 524287, 2147483647.

В настоящее время известно чуть более 40 простых чисел Мерсенна. Самым большим из них является гигантское число: 243112609—1, найденное в 2008 г. Для сравнения, примерное число элементарных частиц во Вселенной меньше, чем 2300.

Простые числа Ферма — это простые числа вида F n = 2 2n + 1, где n — натуральное число.

В настоящее время известно пять простых чисел Ферма: 3 (n = 0), 5 (n = 1), 17 (n = 2), 257 (n = 3) и 65537 (n = 4).

Простые числа Ферма носят имя прославленного французского юриста и математика Пьера де Ферма (1601–1665), который их открыл. Он сделал также другие важные открытия в теории простых чисел. Классической является малая теорема Ферма, которая утверждает: «Если р — простое число, и целое а не делится на р, тоа р   a (mod р). »

Этот результат имеет большое значение для современной криптографии, как мы сейчас увидим.

От Эйлера к RSA

Еще один важный результат в модульной арифметике известен как соотношение Везу. Это утверждение гласит, что если а и b — целые положительные числа, тогда уравнение НОД (a, b) = к эквивалентно существованию двух целых чисел р, q, таких что:

pa + qb = k.

В частности, если НОД (a, b) = 1, это соотношение гарантирует существование целых чисел р и q, таких что

pa + qb = 1.

Работая по модулю n, возьмем НОД (а, n) = 1, тогда обязательно существуют целые числа р и q, такие что pa + qn = 1. Так как n — модуль, то qn = 0, следовательно, существует такое р, что pa = 1, то есть существует число, обратное числу а по модулю n, а именно р.

Элементы, имеющие обратный элемент по модулю n, являются натуральными числами, которые меньше, чем n, и удовлетворяют условию НОД (а, n) = 1. Количество таких чисел называется функцией Эйлера и обозначается как ф(n).

Если число n представлено в виде произведения степеней простых чисел следующим образом 

Например, если n = 1600 = 26∙52, то

Более того, в случае, если n — простое число, то для любого значения а выполняется НОД (а, n) = 1, и, следовательно, любое число а будет иметь обратное по модулю n, значит ф(n) = n — 1.

Итак, подведем итог самым важным фактам.

1. ф(n) называется функцией Эйлера и обозначает количество натуральных чисел, меньших n и взаимно простых с ним.

2. Если n = рq, где р и q простые числа, то

a(n) = (p — 1)(q — 1).

3. Из малой теоремы Ферма мы знаем, что если а — целое число, большее нуля, и р — простое число, то а р    #t.jpg_38  a (mod р), что эквивалентно а р — 1 #t.jpg_40  1 (mod р).

4. Если НОД (а, n) = 1, тогда имеем а ф(n) #t.jpg_39  1 (mod n) .

Почему работает RSA-алгоритм?

Математические факты, изложенные выше, лежат в основе алгоритма шифрования RSA.

RSA-алгоритм зашифровывает численное представление m некоторого сообщения с помощью двух простых чисел р и q. Возьмем n = pq. Обозначим за е любое значение, такое что НОД (е, ф(n)) = 1, и пусть d будет обратный элемент числа е по модулю ф(n). [Мы знаем, что он существует, так как НОД (е, ф(n)) = 1]. Тогда:

d∙е = 1 по модулю ф(n).

Зашифрованное послание М шифруется следующим образом: М = m е (mod n).

Алгоритм подразумевает, что исходное сообщение m может быть получено как m = M d = (m e ) d (mod n). Проверка этого уравнения как раз и демонстрирует работу алгоритма RSA. Мы воспользуемся теоремой Ферма и функцией Эйлера.

Рассмотрим два случая.

1. Если (m, n) = 1, то с функцией Эйлера имеем: m ф(n) 1 (mod n) .

Начнем с того, что d∙е = 1 по модулю ф(n) эквивалентно соотношению е∙d — 1 = 0 (mod ф(n)) то есть существует целое значение k, такое, что е∙d — 1 = k∙ф(n) или е∙d = k∙ф(n) + 1. Используя это и формулу Эйлера, получим:

(m e ) d = m ed = m kф(n)+1 = m kф(n) ∙m = (m ф(n) ) k ∙m   1 k m (mod n) = m (mod n).

Это и есть нужный нам результат.

2. Если НОД (m,n)  1 и n = р∙q, тот содержит или только множитель р, или только q, или оба одновременно.

Пусть m содержит только множитель р. Тогда, во-первых, m кратно р, то есть существует целое число r, такое, что m = rр. Поэтому m de   0 (mod р) или m de = m (mod р), другими словами, существует значение А, такое, что:

m de — m = Ар. (1)

Во-вторых, мы имеем:

(m e ) d = m ed = m k ф(n)+1 = m k ф(n) ∙m = (m ф(n) ) k ∙m = (m (q-1) ) k(p-1) ∙m.

Так как НОД (m, n) = р, НОД (m, q) = 1, то по теореме Ферма m (q-1)   1 (mod q).

Подставим это в предыдущее выражение.

(m e ) d = m ed = m k ф(n)+1 = m k ф(n) ∙m = (m ф(n) ) k ∙m = (m (q-1) ) k(p-1) ∙m  1 k (р-1) ∙m  m (mod q).

Откуда мы заключаем, что существует значение В, такое что:

m de — m = Вq. (2)

Из (1) и (2) следует, что разность (m de — m) делится на n = рq, поэтому

m de — m  0 (mod n).

Аналогично это доказывается для случая, когда m содержит только множитель q.

В случае, когда m кратно и р, и q одновременно, результат тривиален. Следовательно,

(m е ) d    m (mod n).

Таким образом, мы продемонстрировали математическую основу алгоритма RSA.