Чёрный кабинет EN

Урок №03 XVI–XIX века 20 мин

Шифр Виженера

Шифр, который три века называли неразгадываемым. Разбираем квадрат Виженера, смотрим, как ключ сглаживает частоты, — и ломаем его тем же способом, что Бэббидж и Касиски.

В этом уроке

  • как шифровать ключевым словом по квадрату Виженера
  • почему частоты букв в шифровке выравниваются
  • как метод Касиски и индекс совпадений выдают длину ключа
  • как разбить шифровку на столбцы и вскрыть каждый как шифр Цезаря

В прошлом уроке простая замена пала от обычного подсчёта букв. Самая частая буква шифровки — почти наверняка О, следующая — Е или А, и дальше текст проступает сам. Слабость в том, что каждая буква всегда заменяется одинаково: О превратилась в Ш — значит, все О в письме стали Ш, и все они вместе выдают себя частотой. Как это исправить? Сделать так, чтобы одна и та же буква каждый раз шифровалась по-разному.

К этой мысли европейские шифровальщики шли больше ста лет. Около 1467 года итальянский архитектор и учёный Леон Баттиста Альберти описал шифровальный диск из двух колец — почти как наш диск Цезаря из первого урока, — но с одной хитростью: через несколько слов кольцо поворачивают, и шифр меняется прямо посреди письма. В 1518 году вышла «Полиграфия» немецкого аббата Иоганна Тритемия с таблицей всех сдвигов алфавита — той самой, которую сегодня называют квадратом Виженера. А в 1553 году итальянец Джован Баттиста Беллазо догадался, как управлять сменой алфавитов с помощью легко запоминаемого слова — ключа.

Ключ — это слово, а не число

Вспомним Цезаря: ключ — одно число, сдвиг. Беллазо предложил взять слово и считать каждую его букву отдельным сдвигом: А — сдвиг 0, Б — 1, В — 2 и так далее до Я — 32. Ключ ЛИМОН — это пять сдвигов подряд: 12, 9, 13, 15, 14.

Ключ подписывают над открытым текстом и повторяют, пока текст не кончится. Первую букву текста сдвигают на первую букву ключа, вторую — на вторую, шестую — снова на первую:

ТекстАТАКА НА РАССВЕТЕ
КлючЛИМОН ЛИ МОНЛИМОН
ШифрЛЫМЩН ЩИ ЭОЯЭКСБТ

Посмотрите на три буквы А в слове «атака». Первая стала Л, вторая — М, третья — Н. Одна буква — три разных шифра. И наоборот: две разные буквы Т и А в другом месте могут дать одинаковую букву шифровки. Частотный анализ из прошлого урока здесь спотыкается: самая частая буква шифровки больше не соответствует самой частой букве языка.

Такие шифры называют многоалфавитными: в них работает не один подменный алфавит, как у Цезаря или в простой замене, а несколько, по очереди. У ключа ЛИМОН их пять — пять шифров Цезаря с разными сдвигами, переплетённых через букву.

Квадрат, который заменяет арифметику

Складывать номера букв в уме утомительно, поэтому шифровальщики пользовались таблицей. В её первой строке — алфавит как есть, во второй — сдвинутый на одну букву, в третьей — на две, и так все 33 строки. По-латыни её называют tabula recta, «прямая таблица», а у нас — квадратом Виженера.

Чтобы зашифровать букву, находим строку буквы ключа и столбец буквы текста. На пересечении — буква шифра. Чтобы расшифровать, идём обратно: в строке буквы ключа ищем букву шифра и смотрим, над каким столбцом она стоит.

Поменяйте ключ и текст. Квадрат подсвечивает путь для буквы, на которой стоит курсор: от заголовка строки ключа вправо, от заголовка столбца текста вниз. Стрелки «‹» и «›» переходят от буквы к букве.

Заметьте, что строка буквы А — это просто алфавит. Поэтому буква А открытого текста превращается в саму букву ключа, а буква ключа А ничего не меняет. Именно это мы видели в слове «атака».

Почему шифр Беллазо назвали именем Виженера

Блез де Виженер, французский дипломат, в 1586 году издал «Трактат о шифрах». В нём он описал и шифр с ключевым словом, но своей заслугой считал другое — самоключ: короткий ключ ставится только в начале, а дальше ключом служит сам открытый текст. Такой шифр заметно сильнее, потому что ключ не повторяется.

Через двести с лишним лет авторов перепутали. Шифр Беллазо приписали Виженеру, а его собственное изобретение забыли. Имя прижилось, и сегодня исправлять его уже поздно. В криптографии такое бывает часто: шифр Плейфера, например, придумал Чарльз Уитстон, а лорд Плейфер его только продвигал.

Эту записку зашифровали Виженером. Ключ — фамилия настоящего изобретателя шифра, написанная по-русски строчными буквами, как в абзаце выше. Какое слово дано для ответа?

Гнтрнмя ой фуоияёчлч эъэу эфар, ць пффэау тсшоъй, иэмйр эиукоах. Элцрп ичк оърёчл: эпшогйпчийэтчз.

Шифр придумал итальянец в 1553 году. Его фамилия упоминается в начале урока.

Ключ — беллазо. Откройте утилиту Виженера, выберите «Расшифровать», вставьте записку и введите ключ.

Ключ БЕЛЛАЗО даёт сдвиги 1, 5, 12, 12, 0, 8, 15. Сдвигаем буквы назад: Г − Б = В, Н − Е = И, Т − Л = Ж… Получается: «Виженер не изобретал этот шифр, он описал другой, более сильный. Слово для ответа: справедливость». Ответ — справедливость.

Обратите внимание: в слове «Беллазо» две Л подряд и буква А. Сдвиг А равен нулю, поэтому каждая седьмая буква записки осталась как есть. Ключ с повторами и с буквой А слабее, чем мог бы быть.

Неразгадываемый шифр

Почему шифр Виженера так долго не ломался? Посмотрите, что ключ делает с частотами. Ниже — один и тот же текст, зашифрованный ключами разной длины. Столбики показывают, сколько раз встречается каждая буква шифровки, от самой частой к самой редкой. Серым — то же для обычного русского текста.

Двигайте ползунок. При длине 1 это обычный Цезарь: столбики те же, только на других буквах. С каждой новой буквой ключа гора оседает, а буква О рассыпается на всё больше разных букв шифра.

При длинном ключе картина почти ровная, как у случайного набора букв. Взломщику, который привык искать самую частую букву, не за что ухватиться. Французы прозвали шифр le chiffre indéchiffrable — «неразгадываемый шифр». Около трёхсот лет со времён Беллазо он считался образцом надёжности. Им пользовались дипломаты, а в Гражданскую войну в США — армия южан: у них были латунные шифровальные диски и ключи вроде «Manchester Bluff» и «Complete Victory». Северяне, впрочем, эти депеши регулярно читали.

Многоалфавитный шифр прячет частоты букв, смешивая несколько алфавитов. Но если ключ повторяется, алфавитов ровно столько, сколько букв в ключе, — и каждый из них по отдельности остаётся простым шифром Цезаря.

Бэббидж и Касиски: ключ выдаёт себя повторами

Первым шифр Виженера вскрыл англичанин Чарльз Бэббидж, изобретатель механических вычислительных машин, — около 1854 года. Но он ничего не опубликовал, и о его успехе узнали только в XX веке из его бумаг. Поэтому слава досталась прусскому офицеру Фридриху Касиски, который в 1863 году выпустил книгу о тайнописи с тем же методом.

Идея вот в чём. В длинном письме слова повторяются: «что», «который», «сообщает». Обычно повтор попадает под другие буквы ключа и шифруется иначе. Но иногда ключ ложится на слово так же, как в прошлый раз, — и в шифровке появляется одинаковый кусок. Это случается, когда расстояние между повторами кратно длине ключа.

Значит, надо найти в шифровке одинаковые сочетания из трёх-четырёх букв и измерить расстояния между ними. В депеше на столе дешифровальщика ниже есть, например, повторы с расстояниями 28 и 42 буквы. Оба числа делятся на 7. Скорее всего, в ключе семь букв — или 14, или 21. Бывают и случайные повторы, поэтому смотрят, на какое число делится большинство расстояний.

Индекс совпадений: измеряем «неровность» текста

В 1920-х годах американский криптограф Уильям Фридман придумал способ надёжнее. Возьмём из текста наугад две буквы. Какова вероятность, что они одинаковые? Это число называют индексом совпадений.

В обычном русском тексте одни буквы встречаются часто, другие редко, поэтому совпадения случаются нередко: индекс около 0,055. В случайной каше, где все 33 буквы встречаются поровну, он меньше — 1/33, то есть около 0,030. Шифр Виженера с длинным ключом как раз превращает текст в почти случайную кашу. Это видно на ползунке выше.

Теперь главный трюк. Предположим, в ключе L букв. Выпишем шифровку строками по L букв — получатся столбцы. Если L угадана, в каждом столбце все буквы зашифрованы одной и той же буквой ключа, то есть обычным шифром Цезаря. А Цезарь частоты не смешивает, он их только переставляет: индекс совпадений столбца будет как у языка, около 0,055. Если L не угадана, в столбце перемешаны разные алфавиты, и индекс низкий.

Остаётся перепробовать длины 1, 2, 3… и посмотреть, где индекс подскочит.

Перехваченная депеша. Нажмите столбик длины ключа, затем выберите столбец и крутите его стрелками (или клавишами ← и →), пока чёрные столбики не лягут на серые. Когда все буквы ключа найдены, текст прочтётся сам.

Высокий индекс даёт не только верная длина, но и кратные ей — 14, 21. Если ключ из семи букв, то при длине 14 каждый столбец тоже зашифрован одной буквой: ключ просто «повторён» дважды. Поэтому выбирают самую короткую длину с высоким индексом.

Когда длина найдена, Виженер распадается на несколько независимых Цезарей. Каждый ломается перебором 33 сдвигов: при каком сдвиге частоты букв столбца лучше всего совпадут с частотами языка, тот и верный. Мерой совпадения служит знакомое по первому уроку число χ²: чем оно меньше, тем больше столбец похож на русский текст.

В ключе шесть букв. При каких длинах столбцы покажут индекс совпадений, близкий к обычному языку?

При длине 12 первый столбец — это 1-я, 13-я, 25-я буквы текста, и все они попали под первую букву ключа. Так с каждым столбцом: в нём один алфавит, а значит, частоты как у языка. При длине 3 в столбце смешаны два алфавита.

Вот ещё одна перехваченная депеша. Ключ неизвестен. Вставьте её в поле на столе дешифровальщика (или в утилиту Виженера) и найдите ключ. Он и есть ответ.

Заьс йй еыхохым лаы фббчтч, хагёщы, йй ытыъщ мучыё нъоаз ч юткпщфр жцжуэтуы ьн дхэьйюй. Штйтлт щбьюдуж чтохтоап чийеаюы исьяья Щушишн, ц фю афкрьбюл ууч ъош, йхэсд яояесбл йыщп дхоьс чэгбйч юи швяднчъ зпйш. Ыпуюцц бнэ е тхкжбытжерыцы пчну ачщббвлъщ Йепоыжх щ Узацднч, гчукшб душ уцыэоббхщз: эыы фёщызъц уцщтд хо оёпоун р чяэгъщ шцрабуй тщыёыёб. Ярйцбн ъгьщхзън црч, р схэрцг ч юнлущы. Сбтнъэъ аг лгь портжщд ъувфых арх тълй, нэгчшйъ ъгжщэшэптр лгчъ бтэфб. Шиччёыху хлц ч яггрюсъу я езы, зыц юьюцёщфцай ё еов.

Посмотрите на столбики длины ключа. Выше всех — 8 и 16, у 4 и 12 чуть ниже. Самая короткая длина с индексом как у языка — восемь.

Выберите длину 8 и нажмите «Подобрать все столбцы по χ²». Если какая-то буква ключа вышла странной, покрутите её столбец вручную.

Индекс совпадений подскакивает на длине 8 и на кратной ей 16. У длин 4 и 12 он тоже выше фона: при длине 4 в каждом столбце смешаны всего две буквы ключа, а не восемь, и частоты сглажены слабее. Разбиваем депешу на восемь столбцов, каждый вскрываем как Цезаря и получаем ключ горизонт. Текст начинается словами: «Если вы читаете эти строки, значит, вы нашли длину ключа…»

Ключ выбран неплохо: восемь разных букв, ни одной А. Но и он не спас. Длинная депеша с повторяющимся ключом ломается за минуты.

Можно ли починить Виженера?

Вся атака держится на одном: ключ повторяется. Чем длиннее ключ по сравнению с текстом, тем меньше букв в каждом столбце и тем хуже работает статистика. А если ключ длиной с само сообщение? Тогда в каждом «столбце» по одной букве, и считать нечего.

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

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

Что взять с собой

  • Шифр Виженера — это несколько шифров Цезаря по очереди. Буквы ключевого слова задают сдвиги, ключ повторяется по всей длине текста.
  • Одна и та же буква шифруется по-разному, поэтому частоты в шифровке выравниваются, и простой частотный анализ не работает.
  • Повторяющийся ключ выдаёт свою длину: через повторы в шифровке (метод Касиски) и через индекс совпадений столбцов (метод Фридмана).
  • Когда длина известна, каждый столбец — обычный Цезарь, и он ломается подсчётом букв.
  • Стойким шифр становится только при случайном ключе длиной с сообщение, а это уже одноразовый блокнот.

Все шифры до сих пор заменяли буквы. В следующем уроке буквы останутся теми же, зато поменяются местами: шифры перестановки, от спартанской скиталы до военных шифров XX века. Дальше: шифры перестановки →

Утилиты урока

Всё из урока — в рабочем виде: вставьте свой текст.