Тогда вместо meet at midnight (встретимся в полночь) отправитель напишет CUUZ VZ CGXSGIBZ. Такой вид тайнописи называется шифром замены, поскольку каждая буква в исходном тексте заменяется другой буквой, так что этот шифр диаметрально противоположен шифру перестановки. При перестановке каждая буква остается сама собой, но меняет свое местоположение, в то время как при замене каждая буква меняется на другую, но остается на своем месте.
Первое документально подтвержденное использование шифра замены в военных целях появилось в «Галльских войнах» Юлия Цезаря. Цезарь описывает, как он послал сообщение Цицерону, находившемуся в осаде и бывшему на грани капитуляции.
В этом письме латинские буквы были заменены греческими, поэтому враг его не смог бы понять. Цезарь описал драматичность доставки письма:
Гонцу дали наставление, что если он не сможет приблизиться, то должен метнуть дротик с прикрепленным к ремешку письмом так, чтобы оно упало в лагере. Убоявшись излишнего риска, галльский всадник метнул дротик, как ему и приказали. По случайности дротик попал в башню, и в течение двух дней наши отряды его не замечали; только на третий день его увидел солдат, вытащил и доставил Цицерону. Цицерон просмотрел письмо, а затем прочитал его на собрании солдат, что вызвало у всех огромную радость.
Цезарь так часто пользовался тайнописью, что Марк Валерий Проб написал целый трактат о применяемых им шифрах, который, к сожалению, не дошел до наших дней. Однако благодаря сочинению Гая Транквилла Светония «Жизнь 12 Цезарей», написанному во втором веке н. э., у нас имеется подробное описание одного из видов шифра замены, применявшегося Юлием Цезарем. Он просто заменял каждую букву в послании буквой, стоящей в алфавите на три позиции дальше. Криптографы часто пользуются терминами алфавит открытого текста, то есть алфавит, используемый для создания исходного, незашифрованного сообщения, и шифралфавит, буквы которого подставляются вместо букв алфавита открытого текста. Если алфавит открытого текста расположить над шифралфавитом, как показано на рисунке 3, то станет ясно, что шифралфавит сдвинут на три позиции, и поэтому такой вид замены часто называется шифром сдвига Цезаря или просто шифром Цезаря.
Рис. 3 Шифр Цезаря, примененный к короткому сообщению. Шифр Цезаря основан на шифралфавите, который сдвинут на определенное число позиций (в данном случае — на три) относительно алфавита открытого текста. В криптографии принято записывать алфавит открытого текста строчными буквами, а шифралфавит — заглавными. Точно так же, исходное сообщение, то есть незашифрованный текст, записывается строчными буквами, а зашифрованное сообщение, то есть шифртекст, — заглавными.
Шифр — это обобщенное название, даваемое любой криптографической замене, при которой каждая буква заменяется другой буквой или символом.
Хотя Светоний упоминает только о шифре Цезаря со сдвигом на три позиции, ясно, что осуществляя сдвиг на 1…25 позиций[6], можно создать 25 различных шифров. Если же мы не будем ограничиваться сдвигом алфавита, а будем рассматривать шифралфавит как любую возможную перестановку букв алфавита открытого текста, то мы сможем создать гораздо большее количество различных шифров. Существует свыше 400 000 000 000 000 000 000 000 000 таких перестановок и, соответственно, такое же количество отличающихся шифров.
К каждому отдельному шифру применимы понятия общего метода шифрования, известные как алгоритм и ключ, которые определяют детали конкретного способа шифрования. В этом случае алгоритм заключается в замене каждой буквы в алфавите открытого текста буквой из шифралфавита, причем шифралфавит может представлять собой любую возможную перестановку алфавита открытого текста. Ключ же определяет, какой именно шифралфавит используется для конкретного способа шифрования. Связь между алгоритмом и ключом показана на рисунке 4.
У противника, анализирующего перехваченное зашифрованное сообщение, могут иметься предположения об алгоритме, но точного ключа он знать не будет.
Рис. 4 Чтобы зашифровать исходный текст сообщения, отправитель применяет к нему алгоритм шифрования. Алгоритм является общей системой для шифрования и должен быть точно определен путем выбора ключа. При совместном применении ключа и алгоритма к открытому тексту получается зашифрованное сообщение, или шифртекст. Разумеется, зашифрованный текст во время передачи адресату может быть перехвачен противником, но противник не сможет дешифровать это сообщение. В то же время получатель, который знает и ключ, и алгоритм, использованные отправителем, сможет преобразовать зашифрованный текст сообщения обратно в исходный вид.
К примеру, он вполне может подозревать, что каждая буква в открытом тексте была заменена другой буквой в соответствии с шифралфавитом, но он не в состоянии узнать, какой именно шифралфавит был использован. Если шифралфавит — ключ — хранится отправителем и получателем в секрете, тогда противник не сможет дешифровать перехваченное сообщение. В отличие от алгоритма, важность ключа является основополагающим принципом криптографии. Он был сформулирован в 1883 году голландским лингвистом Огюстом Керкхоффом в книге «Военная криптография» («La Cryptographie militaire»); правило Керкхоффа гласит: «Стойкость криптосистемы не должна зависеть от стойкости криптоалгоритма. Она зависит только от стойкости ключа».
Помимо того, что ключ должен храниться в секрете, стойкая система шифрования должна также обладать широким набором возможных ключей. Например, если для зашифровывания сообщения отправитель применяет шифр сдвига Цезаря, то такое шифрование является сравнительно слабым, так как существует всего 25 возможных ключей. С точки зрения противника, если он перехватит сообщение и подозревает, что применялся алгоритм сдвига Цезаря, то ему следует просто проверить 25 возможных вариантов. Однако если отправитель использует более общий алгоритм замены, благодаря которому шифралфавит будет представлять собой любую возможную перестановку букв алфавита открытого текста, тогда ключ может выбираться из 400 000 000 000 000 000 000 000 000 возможных. Один из таких ключей показан на рисунке 5. Даже допуская, что противник перехватил сообщение и ему известен алгоритм, то все равно остается задача проверки всех возможных ключей. Если бы вражеский агент смог проверять ежесекундно один из 400 000 000 000 000 000 000 000 000 возможных ключей, то, чтобы проверить все ключи и дешифровать сообщение, ему понадобилось бы времени в миллионы раз больше возраста Вселенной.
Рис. 5 Пример общего алгоритма замены, при котором каждая буква в исходном тексте заменяется в соответствии с ключом другой буквой. Ключ задается шифралфавитом, который может представлять собой любую перестановку букв алфавита открытого текста.
Прелесть этого вида шифра состоит в том, что он прост в применении, но обеспечивает высокую степень защиты. Отправитель без труда может задать ключ, который просто определяет порядок следования 26 букв в шифралфавите, однако для противника по-прежнему практически невыполнимо проверить все возможные ключи с помощью так называемого метода прямого перебора всех возможных вариантов. Простота ключа важна еще и потому, что и отправитель, и получатель должны передавать друг другу информацию о ключе, а чем проще ключ, тем меньше вероятность возникновения недоразумений.
Более того, если отправитель готов согласиться с незначительным уменьшением количества возможных ключей, то ключ может быть еще проще. Для создания шифралфавита, вместо того чтобы случайным образом переставлять буквы алфавита открытого текста, отправитель выбирает ключевое слово или ключевую фразу. К примеру, в качестве ключевой можно взять фразу JULIUS CAESAR, убрать все пробелы и повторяющиеся буквы (JULISCAER), а затем подставить получившееся слово в начало шифралфавита. Часть шифралфавита, которая начинается с того места, где заканчивается ключевое слово или фраза, представляет собой просто обычную последовательность оставшихся букв алфавита. Поэтому шифралфавит будет выглядеть следующим образом: