Внезапно Марк заявил:
– Пошли ко мне в гости. Покажу тебе, где я живу. Заодно позвоним моему папе и спросим его, что такое «многоалфавитная замена». Он посмотрит в Интернете.
Да, идея очень неплохая. Мой отец наверняка ничего не расскажет, но можно же попросить другого человека поискать информацию. Этим надо воспользоваться.
Я зашёл в дом и сказал деду Трофиму, что схожу в гости к своему новому приятелю. Дед Трофим махнул рукой и только сказал, чтобы я взял с собой телефон. Надо же… Значит, он умеет пользоваться мобильным телефоном. А говорил, что каменный век.
Мы с Марком пошли на другой конец деревни. Это был первый выход за пределы моей усадьбы, поэтому я шёл и осматривался с любопытством. Деревня была длинная, по обеим сторонам улицы стояли одноэтажные деревянные дома. Иногда, очень редко, попадались кирпичные дома. Также было много хозяйственных построек. Похоже, что когда-то это село было очень даже большим. Но сейчас тут никого не было видно, а на дверях многих домов висели замки.
Улица тянулась и тянулась, и вот минут через пятнадцать мы подошли к дому Марка. Он усадил меня на скамейку около палисадника (тут около многих домов были палисадники, а перед ними непременно – скамейка), а сам забежал внутрь. Через мгновение он вернулся со своим смартфоном. И мне показалось странным, что он не взял его с собой ко мне. Ну мало ли, забыл.
Марк набрал номер и стал говорить:
– Папа, привет. Мне нужна информация. Посмотри, пожалуйста, что такое «многоалфавитная замена». Да, это в применении к шифрованию. Мы с Кириллом нашли новую шифровку, оставленную его папой, и в ней используется многоалфавитная замена. Кирилл попробовал подсчитать количество букв, но у него ничего не вышло. Вернее, он всё подсчитал, но результат не такой, какой он ожидал. Шифр состоит из огромного количества обычных русских букв. Кирилл говорит, что они не могут быть просто переставлены местами, поскольку график частоты выглядит совершенно иначе. Что? Сколько ему лет? Десять, а что?
Я улыбнулся. Тем временем Марк положил трубку и сказал мне, что папа обещал посмотреть и перезвонить.
Чтобы ожидание прошло незаметно, мы решили поиграть в игры на смартфоне у Марка. Честно говоря, я уже просто изнемогал от желания это сделать, поэтому сразу воткнулся в его устройство. Но выбор был совсем небольшой. Единственное, что было достойно внимания, это была игра про битву злых птиц с хитрыми свиньями. В неё-то мы и начали играть, по очереди проходя уровень за уровнем.
Прошло часа полтора, когда папа Марка перезвонил. Марк поднял трубку и начал слушать. Я сам особо не слышал их разговора, а Марк только кивал и говорил «Угу». Когда они закончили говорить, он повернулся ко мне и торжественно заявил, что всё понял и сейчас расскажет мне о шифре многоалфавитной замены.
Марк объяснил, что для применения шифра многоалфавитной замены требуется ключ или пароль. Это должно быть слово, определяющее выбор алфавитов, символами которых заменяются буквы в шифруемом тексте. Сам ключ применяется циклически. То есть, например, если в этом ключе четыре буквы, то первая, пятая, девятая и далее каждая четвёртая буква текста будут зашифрованы при помощи одного алфавита, который определяется первой буквой ключа. Соответственно, вторая, шестая, десятая и так далее буквы текста шифруются при помощи второго алфавита, который определяется второй буквой ключа. И так далее.
Получается, что именно из-за использования разных алфавитов нарушаются частоты символов в шифровке. Я задумался. Потом достал таблицу, найденную в чемодане, и стал внимательно её рассматривать. Тут мне в голову, как обычно это происходит, молнией ударила идея. Я воскликнул:
– Смотри! Видишь, строки и столбцы таблицы помечены символами: от пробела до буквы «Я». А что, если строки обозначают символы ключа, а столбцы – шифруемого текста? Тогда на пересечении строки и столбца у нас получается та буква, которую надо записать в шифровке.
Марк ответил:
– А если наоборот. Столбец обозначает символ ключа, а строка – символ шифруемого текста?
– И что ж? Таблица-то у нас симметричная! Это совершенно неважно.
Я ухватился за эту идею и даже в возбуждении вскочил и начал ходить туда-сюда. В голове мельтешили мысли, и я даже не мог собраться, поскольку вихрь догадок захватил и закружил меня. Марк с ужасом в глазах смотрел на меня. Наконец я успокоился и сел. Немного посидев, я сказал:
– Таким образом, у нас получается две задачи. Сначала нам надо разгадать, какой ключ был использован. Как только мы это сделаем, вторая задача, то есть расшифровка, будет решена при помощи этой таблицы. Но как узнать, какой ключ был использован?
Марк оторопело смотрел на меня, потом отрицательно покачал головой. Я продолжил:
– Надо попробовать вычислить длину ключа. Как только мы будем знать длину ключа, мы сможем применить подсчёт частот букв, чтобы разгадать всё. Я уже один раз применил этот метод, когда расшифровывал первую найденную шифровку. Это долго и не так просто, но это работает.
– А как вычислить длину ключа?
– Можно просто перебирать от двух и далее. Поскольку мы видели, что частоты символов отличаются от той картинки, которая нарисована для русского языка, здесь ключ длиной определённо больше единицы. То есть можно предположить, что ключ представляет собой пару символов, и тогда попытаться подобрать ключ этой длины. Если не получится, то перейти к ключу длиной в три символа, и так далее.
– Ну а как подобрать ключ такой-то длины?
– Всё просто. Посмотри на таблицу. Видишь, в ней используется пробел. Это ужасная оплошность со стороны моего отца. Я вообще поражён, что он использовал именно такую таблицу. Почему? Да потому что пробел встречается в текстах в полтора раза чаще, чем наиболее часто встречаемая буква «О». То есть мы берём самый часто встречаемый символ и предполагаем, что это пробел. Потом смотрим в таблице и получаем первую букву ключа. Вернее, даже смотреть никуда не надо, поскольку пробел кодирует буквы сами в себя, поэтому самый часто встречаемый символ и будет буквой ключа. Понял?
Марк утвердительно кивнул. Я попросил объяснить его своими словами, и он сказал:
– Предположим, что ключ состоит из двух символов. Тогда мы выписываем все буквы на нечётных местах и считаем их количества. Самый часто встречающийся символ является первой буквой ключа. Потом также считаем все буквы на чётных позициях. Опять самый часто встречающийся символ является второй буквой ключа. Так?
– Да. А что дальше?
– Думаю, что если получилось какое-то слово, то ключ угадан верно. Если нет, то переходим к следующей длине ключа.
– Отлично! Но тут есть ошибка. Ключом необязательно должно быть какое-то осмысленное слово. Я так думаю, что это может быть произвольная последовательность букв. Но твой ход мыслей мне нравится. Проще сначала проверить так.
Я задумался. Ведь Марк может быть прав, а я как-то не подумал об этом. Это намного ускорит перебор, поскольку я сначала подумал о том, что после того, как получен ключ, надо будет попробовать расшифровать текст с его помощью и имеющейся таблицы. Если не получится, то переходить к следующей длине ключа. А при помощи метода Марка можно попробовать быстро перебрать ключи, и только в случае, если никаких осмысленных слов найдено не будет, попробовать мой метод.