logo
Коды и шифры

Глава 3. Многоалфавитные системы Усиление системы Юлия Цезаря: шифры Вижанэра

Слабость шифра Юлия Цезаря заключается в том, что он имеет всего 25 возможных вариантов расшифрования, и поэтому криптоаналитик сможет все их перебрать. Если нам удастся увеличить число вариантов, которое ему необходимо будет перебрать, прежде чем успех будет гарантирован, то его жизнь, очевидно, значительно осложнится. Этого можно добиться, если сдвигать буквы не на фиксированное число позиций в алфавите, а на переменную величину, зависящую от положения буквы в тексте. Разумеется, должно существовать правило вычисления величины сдвига в каждом конкретном случае, иначе расшифровать сообщение окажется не под силу даже адресату. Простейшее правило заключается в том, чтобы использовать последовательность из нескольких фиксированных сдвигов. Приведем пример. Сообщение

COME AT ONCE

в предыдущей главе было зашифровано нами с фиксированным сдвигом 19, и в шифрованном виде оно выглядело так:

VHFX TM HGVX.

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

VTFJ TY HSVJ.

Если в сообщении заменить знак пробела на Z и последовательно использовать три сдвига (например, 19, 5 и 11), то открытый текст выглядит так:

COMEZATZONCE,

шифрованное сообщение принимает вид

VTXXELMEZGHP,

а ключом зашифрования является тройка чисел 19-5-11. Чтобы прочесть это сообщение, получатель должен воспользоваться ключом расшифрования, который получается из ключа зашифрования заменой каждого числа из тройки на его дополнение по модулю 26, а именно: 7‑21‑15.

Даже если криптоаналитик догадается, что использован шифр Юлия Цезаря с тремя последовательными сдвигами, ему придется перебрать 75 или более комбинаций (так как один из сдвигов может быть равен нулю). Весьма вероятно, что для такого короткого сообщения, как это, решение может быть не единственным. Если сообщение слишком короткое, и невозможно найти каждый из трех сдвигов по отдельности (как это сделано в приведенном ниже примере), то, вероятно, придется воспользоваться методом "полного перебора". Однако, поскольку это потребует проверки

252525=15625

вариантов, к нему стоит прибегать лишь как к крайней мере. В особом случае, когда число сдвигов в последовательности равно числу букв в тексте, сообщение становится "недешифруемым", если только у последовательности сдвигов не отмечено какой-нибудь неслучайной характеристики. Если же никаких закономерностей в ней нет (например, если эта последовательность сдвигов получена с помощью "генератора случайных чисел"), то мы имеем дело с системой шифрования, которая известна как "одноразовый блокнот". Она рассматривается в главе 7.

Описанным здесь способом усиления шифра Юлия Цезаря с помощью нескольких сдвигов пользуются уже много сотен лет. Такие системы называются шифрами Вижанэра. И поскольку большинству людей легче запоминать слова, а не случайные последовательности букв или чисел, то ключи шифров Вижанэра нередко приобретают вид ключевого слова. Это, разумеется, сокращает количество возможных ключей, но такова цена, которую приходится платить криптографу за уменьшение нагрузки на свою память. Буквы ключевого слова преобразуются в числа стандартным способом (A=0, B=1, C=2, ..., Z=25). Например, ключевое слово CHAOS эквивалентно использованию последовательности из пяти сдвигов 2, 7, 0, 14 и 18.

Ключевое слово или числовой ключ выписывается над открытым текстом периодически. Прибавляя к каждой букве открытого текста соответствующий сдвиг, определяемый буквой ключа, получаем шифрованный текст. Таким образом, зашифрование текста COMEZATZONCE с помощью шифра Вижанэра с ключевым словом CHAOS будет выглядеть так:

CHAOSCHAOSCH

COMEZATZONCE,

и в результате получается шифрованный текст

EVMSRCAZCFEL.

Шифр Вижанэра представляет собой особый, и весьма специфический частный случай многоалфавитной системы, в которой (как следует из названия) используются несколько различных алфавитов замены (а не один, как в шифре простой замены). Число алфавитов замены может быть любым: от двух до многих тысяч; так, например, в шифр-машине "Энигма" их на самом деле 16900, и все они представляют собой произвольные алфавиты простой замены, а не сдвиги алфавита по типу шифра Юлия Цезаря, реализованные в составе шифров Вижанэра (подробнее об этом рассказано в главе 9).