Когда я вышел, мой товарищ кинулся ко мне:
– Ты уже читал послание из бутылки?
Я отрицательно покачал головой, а потом спросил:
– Марк, вот ты мне скажи, какая у тебя оценка по русскому языку?
Он ответил, что пятёрка. Я же удовлетворительно кивнул и сказал:
– Я не смог прочитать, что там написано. Это очередная шифровка. И, похоже, она намного труднее и мудрёнее, чем была у моего папы в дневнике. Я ещё не изучал вопрос, но на первый взгляд – это что-то другое, какой-то иной способ шифрования.
Марк попросил меня показать ему, и я достал из кармана лист бумаги, на который я прямо с утра переписал найденную шифровку (саму бутылку с письмом внутри я завернул в тряпицу и спрятал в своём чемоданчике в штабе). На листе была запись:
ФЯСМАБЗЕЬЙБНЛЭЭОЙШТАЯХЧ
НЮМНСБЖХШГУЙМЧРПТМЦДТЗХЫФПСНШ
АЬЬГГРФЮИЧЯОФЖУЙАИЕЖАУЫЛЖО
ЧЧЛГЙОЛЕФБУМНДАБТЗВАЩТТГВЙМШЯАЭХЕ
ЕЬЫМХФЖУЭФПБТНГГШБЬЕЦЬОЩФНАРШОЛ
ЛЧЦЕММЧМКДМФЧОНА
ЯЬШТНЮЧЕДАЦЫЖЬЙБМДГНЮРЩГЕЮПЛФЙБИЕЦЖРТЕХГЮКЕЦБШЫЩГОПЦКМАУТЧВУКМЧУСН ЖСОЙВЕЖА ННСЬ
ДМТЙТБНЬГНЮТЙТАXXНСЖЭЫФЗПОЭЦ
ТТБЮЖСТБПЖГЛЫКЮЙКОХЕЦЬОПАНЕФЕБ
ГОПМУТГЙЦЕЧСЮПЛСЭОЧСБШ
ЧМУДЦЮСДЦТНМИГШФЮУЯЦОЕЖФБДМРДЗУЗПГЙЦМРТУЮЮАЩААЭЦВУПЫЕ
ЖАА ЦТЖЭХОГРФЮИЯКОЫЖГШФЮКДЛ
ФМКТНПМИЦП ЬПГГОЯШДСЮЦЕЕБЭТЕЦСФ ОНАЭНЕИБЖТЕЬЖБПЛФУЙЦЕЖА ЗЙЙАЯЬК
ГИФЩСЙКОЭДЦЬШМИГН
Ю ФЫЙЩШЛЦОЮЩЕЗБ НМЙАЗТЧЦПШМИГ
ТПЮЖЙААТК НЮЦЕЖАЫТКСЙЩТЕЖПАИТ
ТКОПЕФЖЦХКЙОЕХОГЕНСОГЩ
ВЮАГЕФПДЦЬШМИГБЬОЖФЖОСЛХ БЗПГФО ЛЦФЗТРГИПМХЙШЩЬПГОПЦКМАСЯЛГЛЫКЮ
МАЧМЧТЖУХУМАЧВЕЖА
РЬС ЩЮЦЕОММДЕОПБЬЦЯКОЬШОСЮТШГУП
ЦУЧАЯХЧ НПМЧДНЮМХМТКЩФГОПВФИЙ
БЯДГГОНС ЕЧХЕЧАЬНЯМА
ЭЬЕТОПМФЦЕПЯШГЖТЬЕЦПЫИРТАБЬТЧАЩ ФГОПФФЖЖБМИТМЗТЗСПФМЧППСЬЕОПБЬ
ЦТЖОТЧЦЭОЙРХЛПШОЕФ
МКЙСЦНП
Присвистнув, Марк воскликнул, что это вряд ли можно расшифровать. Я ответил ему, что он слишком спешит, и надо попробовать. В любом случае мы же всегда можем позвонить моему отцу и попросить у него помощи. Впрочем, на это надо рассчитывать в самую последнюю очередь.
Мы сделали для Марка ещё одну копию послания. Я попросил его подумать в свободное время, как можно подступиться к этой шифровке. Ну а пока можно было показать моему новому товарищу, что делает взломщик шифра в самую первую очередь. Я сходил в свой штаб и принёс блокнот, в котором делаю записи. В блокноте я нарисовал таблицу, состоящую из двух столбцов. В первом, как обычно, перечислил все буквы алфавита, а во втором собирался указывать количество соответствующих букв в шифровке.
Меня удивило то, что в этой шифровке не использовались какие-либо мудрёные значки, а были только русские буквы и ничего более. Это могло значить, что шифровка могла быть простой мешаниной букв, и их надо было выстроить в правильный порядок, чтобы прочитать послание. А возможно, что одни буквы просто заменяли другие буквы, как в шифре замены, один вариант которого я уже взломал. Но это надо было проверить. У меня уже был способ проверки подобных гипотез, и для этого надо было построить гистограмму. А чтобы построить гистограмму, надо подсчитать количество различных букв в шифровке.
Мы принялись за дело. Я шёл по строкам шифровки и искал одинаковые буквы. Когда буква попадалась мне на глаза, я называл следующее по счёту число, а Марк рисовал в блокноте чёрточку. Так мы начали с пробела (похоже, что он тоже что-то обозначает, это не просто пробел между словами), потом подсчитали букву «А», потом «Б» и так далее до конца алфавита. Получилась вот такая таблица:
Уже составление этой таблицы меня озадачило. Даже без гистограммы видно, что здесь что-то не то с частотами букв. Нет явных лидеров, как и нет очень редких букв, за исключением букв «Ё» и «Ъ», которые вообще ни разу не встретились. Единственной редкой буквой, которая нам попалась, оказалась буква «В» – она встретилась всего 8 раз.
Всего в шифровке было 808 символов. Я усмехнулся, потому что тут папа отошёл от своего стремления к совершенству, а ведь мог бы сделать ровно 800. Я быстро сложил все частоты символов в таблице, и их сумма сошлась. К счастью, у Марка в его смартфоне был калькулятор, и деление уже не было помехой, так что мы быстро подсчитали проценты. Вот что вышло:
Гистограмму я рисовать уже умел, так что принялся за дело быстро и аккуратно. Марк со всем вниманием смотрел за мной, но ничего не говорил. Похоже, что он находился под впечатлением и до сих пор не верил, что это можно расшифровать. Впрочем, я тоже не особо надеялся быстро получить расшифровку, но в том, что послание можно взломать, я не сомневался.
Через десять минут работы у меня получилась новая гистограмма:
Да уж. Это точно не шифр замены. Этот график выглядит очень пологим, и мне кажется, что частоты встречаемости букв в языках не могут быть такими. Должны быть как буквы, которые очень часто встречаются, так и буквы, встречающиеся очень редко. Я, конечно, не знаток языков, но что-то мне подсказывает, что я прав.
Я продемонстрировал получившийся рисунок Марку:
– Смотри, это называется «гистограмма». На этом графике перечислены буквы, а столбиками показаны их частоты. Частоты мы получили при помощи деления количества найденных букв на общее количество букв в шифровке.
Марк согласно кивнул, а я продолжил:
– А вот такая же гистограмма, которую я недавно построил для русского языка. Я нарисовал её для того, чтобы расшифровать первую шифровку, которую я нашёл в дневнике. Ты видишь, насколько они непохожи.
Марк опять кивнул. Потом немного подумал и спросил:
– Как нам этот рисунок поможет в расшифровке послания?
– Думаю, что никак, – ответил я. – В первую очередь нам надо понять, какой это шифр. Вот потому я и спросил тебя, какая у тебя оценка по русскому языку.
– Оценка-то отличная, только я даже не могу понять, как это тут поможет.
– Я предполагаю, что эта шифровка на русском языке. Не думаю, что папа использовал тут иностранный язык. Тем более что для сокрытия информации используются русские буквы.
Я задумался. А ведь построенная гистограмма также показывает, что эта шифровка не является перестановкой букв. Ведь если бы это была перестановка, то гистограмма частот для букв русского языка совпадала с той, которую я построил ранее. Я продолжил:
– Значит, надо искать зацепки. А их может подсказать сам язык. Я так себе это понимаю.
Но у меня уже совершенно не варила голова. Подсчёт букв и неоднократное переписывание шифровки вытянули из меня все силы. Я предложил Марку оставить решение задачи на следующий день, а теперь немного отдохнуть. Он нехотя согласился.
До конца дня оставалось ещё немного времени, и мы решили поиграть на его смартфоне. Но игр у него особо не было, а возможность скачивать новые была заблокирована. Да и если бы не была, то это не помогло, поскольку в этих краях доступ в сеть был очень ограниченным. В общем, мы немного потыкали в экран и разошлись по домам.
Вечером у себя в штабе я продолжил размышлять над шифровкой, но в голову ничего не приходило. Тогда я написал папе телеграмму:
HE MOΓY ΠOHRTb, 4TO 3A WUΦP. ΓUCTOΓPAMMA COBEPWEHHO ΔRYΓAR. ΠOΔCKA>|<U.
В ответ пришло сообщение:
TbI BbIKOΠAΛ 6YTbIΛKY? MOΛOΔEV,! -)TO MHOΓO AΛΦABUTHAR 3AMEHA. UW,U B 4EMOΔAHE.
Надо же! Вот уж не ожидал, что папа так просто даст подсказку. Впрочем, это ничего не значит, поскольку я пока что-то не могу понять, что значит «многоалфавитная замена». Но утро вечера мудренее, и надо ложиться спать. С этой ободряющей мыслью я и заснул.
Утром я первым делом полез в свой заветный чемодан. Честно говоря, там было много всяких вещей, о предназначении некоторых я мог только догадываться. На этот раз я даже не знал, что искать. Тем не менее я начал перебирать то, что там было. Отложив уже известные мне книги в сторону (книгу про золотого жука я сразу же решил захватить с собой, чтобы дать её почитать Марку), я наткнулся на новую интересную таблицу.
Она была распечатана и бережно заламинирована. Я достал её и отложил вместе с книгой, которую собирался дать своему новому товарищу. Остальные вещи я убрал в чемодан, закрыл его, спрятал под кровать и с новыми мыслями пошёл завтракать.
Когда пришёл Марк, то прямо с порога начал говорить:
– Знаешь, я вчера вечером разговаривал со своим папой, и он очень рад, что мы с тобой познакомились. А особенно он рад тому, что мы занимаемся разгадыванием тайн и загадок.
– Я не удивлён, – буркнул я. Настроение у меня с утра было не очень, поскольку в голову вообще ничего не шло. – Мне мой отец прислал подсказку и сказал, что в бутылке мы нашли шифр многоалфавитной замены. Но я не знаю, что это такое. А ещё я нашёл вот это.
И я показал Марку найденную таблицу. Он присвистнул. Потом взял её и начал крутить в руках. Потом вернул её мне и сказал:
– Она симметрична. Ты видишь, что если сложить её по диагонали, то каждая буква в ней соприкоснётся с самой собою?
Я кивнул. Да, я это сам заметил. А ещё я заметил то, что если взять строку и столбец и найти букву на их пересечении, то такая же буква будет на месте пересечения столбца и строки с теми же буквами. Но мне кажется, что это следует из того, что таблица симметрична. А симметрию обуславливало то, что одни и те же буквы шли по диагонали от верхнего правого угла к нижнему левому. Пока это всё, что я мог сказать про эту находку, и я объяснил это Марку.
Внезапно Марк заявил:
– Пошли ко мне в гости. Покажу тебе, где я живу. Заодно позвоним моему папе и спросим его, что такое «многоалфавитная замена». Он посмотрит в Интернете.
Да, идея очень неплохая. Мой отец наверняка ничего не расскажет, но можно же попросить другого человека поискать информацию. Этим надо воспользоваться.
Я зашёл в дом и сказал деду Трофиму, что схожу в гости к своему новому приятелю. Дед Трофим махнул рукой и только сказал, чтобы я взял с собой телефон. Надо же… Значит, он умеет пользоваться мобильным телефоном. А говорил, что каменный век.
Мы с Марком пошли на другой конец деревни. Это был первый выход за пределы моей усадьбы, поэтому я шёл и осматривался с любопытством. Деревня была длинная, по обеим сторонам улицы стояли одноэтажные деревянные дома. Иногда, очень редко, попадались кирпичные дома. Также было много хозяйственных построек. Похоже, что когда-то это село было очень даже большим. Но сейчас тут никого не было видно, а на дверях многих домов висели замки.
Улица тянулась и тянулась, и вот минут через пятнадцать мы подошли к дому Марка. Он усадил меня на скамейку около палисадника (тут около многих домов были палисадники, а перед ними непременно – скамейка), а сам забежал внутрь. Через мгновение он вернулся со своим смартфоном. И мне показалось странным, что он не взял его с собой ко мне. Ну мало ли, забыл.
Марк набрал номер и стал говорить:
– Папа, привет. Мне нужна информация. Посмотри, пожалуйста, что такое «многоалфавитная замена». Да, это в применении к шифрованию. Мы с Кириллом нашли новую шифровку, оставленную его папой, и в ней используется многоалфавитная замена. Кирилл попробовал подсчитать количество букв, но у него ничего не вышло. Вернее, он всё подсчитал, но результат не такой, какой он ожидал. Шифр состоит из огромного количества обычных русских букв. Кирилл говорит, что они не могут быть просто переставлены местами, поскольку график частоты выглядит совершенно иначе. Что? Сколько ему лет? Десять, а что?
Я улыбнулся. Тем временем Марк положил трубку и сказал мне, что папа обещал посмотреть и перезвонить.
Чтобы ожидание прошло незаметно, мы решили поиграть в игры на смартфоне у Марка. Честно говоря, я уже просто изнемогал от желания это сделать, поэтому сразу воткнулся в его устройство. Но выбор был совсем небольшой. Единственное, что было достойно внимания, это была игра про битву злых птиц с хитрыми свиньями. В неё-то мы и начали играть, по очереди проходя уровень за уровнем.
Прошло часа полтора, когда папа Марка перезвонил. Марк поднял трубку и начал слушать. Я сам особо не слышал их разговора, а Марк только кивал и говорил «Угу». Когда они закончили говорить, он повернулся ко мне и торжественно заявил, что всё понял и сейчас расскажет мне о шифре многоалфавитной замены.
Марк объяснил, что для применения шифра многоалфавитной замены требуется ключ или пароль. Это должно быть слово, определяющее выбор алфавитов, символами которых заменяются буквы в шифруемом тексте. Сам ключ применяется циклически. То есть, например, если в этом ключе четыре буквы, то первая, пятая, девятая и далее каждая четвёртая буква текста будут зашифрованы при помощи одного алфавита, который определяется первой буквой ключа. Соответственно, вторая, шестая, десятая и так далее буквы текста шифруются при помощи второго алфавита, который определяется второй буквой ключа. И так далее.
Получается, что именно из-за использования разных алфавитов нарушаются частоты символов в шифровке. Я задумался. Потом достал таблицу, найденную в чемодане, и стал внимательно её рассматривать. Тут мне в голову, как обычно это происходит, молнией ударила идея. Я воскликнул:
– Смотри! Видишь, строки и столбцы таблицы помечены символами: от пробела до буквы «Я». А что, если строки обозначают символы ключа, а столбцы – шифруемого текста? Тогда на пересечении строки и столбца у нас получается та буква, которую надо записать в шифровке.
Марк ответил:
– А если наоборот. Столбец обозначает символ ключа, а строка – символ шифруемого текста?
– И что ж? Таблица-то у нас симметричная! Это совершенно неважно.
Я ухватился за эту идею и даже в возбуждении вскочил и начал ходить туда-сюда. В голове мельтешили мысли, и я даже не мог собраться, поскольку вихрь догадок захватил и закружил меня. Марк с ужасом в глазах смотрел на меня. Наконец я успокоился и сел. Немного посидев, я сказал:
– Таким образом, у нас получается две задачи. Сначала нам надо разгадать, какой ключ был использован. Как только мы это сделаем, вторая задача, то есть расшифровка, будет решена при помощи этой таблицы. Но как узнать, какой ключ был использован?
Марк оторопело смотрел на меня, потом отрицательно покачал головой. Я продолжил:
– Надо попробовать вычислить длину ключа. Как только мы будем знать длину ключа, мы сможем применить подсчёт частот букв, чтобы разгадать всё. Я уже один раз применил этот метод, когда расшифровывал первую найденную шифровку. Это долго и не так просто, но это работает.
– А как вычислить длину ключа?
– Можно просто перебирать от двух и далее. Поскольку мы видели, что частоты символов отличаются от той картинки, которая нарисована для русского языка, здесь ключ длиной определённо больше единицы. То есть можно предположить, что ключ представляет собой пару символов, и тогда попытаться подобрать ключ этой длины. Если не получится, то перейти к ключу длиной в три символа, и так далее.
– Ну а как подобрать ключ такой-то длины?
– Всё просто. Посмотри на таблицу. Видишь, в ней используется пробел. Это ужасная оплошность со стороны моего отца. Я вообще поражён, что он использовал именно такую таблицу. Почему? Да потому что пробел встречается в текстах в полтора раза чаще, чем наиболее часто встречаемая буква «О». То есть мы берём самый часто встречаемый символ и предполагаем, что это пробел. Потом смотрим в таблице и получаем первую букву ключа. Вернее, даже смотреть никуда не надо, поскольку пробел кодирует буквы сами в себя, поэтому самый часто встречаемый символ и будет буквой ключа. Понял?
Марк утвердительно кивнул. Я попросил объяснить его своими словами, и он сказал:
– Предположим, что ключ состоит из двух символов. Тогда мы выписываем все буквы на нечётных местах и считаем их количества. Самый часто встречающийся символ является первой буквой ключа. Потом также считаем все буквы на чётных позициях. Опять самый часто встречающийся символ является второй буквой ключа. Так?
– Да. А что дальше?
– Думаю, что если получилось какое-то слово, то ключ угадан верно. Если нет, то переходим к следующей длине ключа.
– Отлично! Но тут есть ошибка. Ключом необязательно должно быть какое-то осмысленное слово. Я так думаю, что это может быть произвольная последовательность букв. Но твой ход мыслей мне нравится. Проще сначала проверить так.
Я задумался. Ведь Марк может быть прав, а я как-то не подумал об этом. Это намного ускорит перебор, поскольку я сначала подумал о том, что после того, как получен ключ, надо будет попробовать расшифровать текст с его помощью и имеющейся таблицы. Если не получится, то переходить к следующей длине ключа. А при помощи метода Марка можно попробовать быстро перебрать ключи, и только в случае, если никаких осмысленных слов найдено не будет, попробовать мой метод.
Я сказал:
– Предлагаю устроить соревнование. Сфотографируй таблицу, чтобы она у тебя тоже была. И каждый из нас применит этот метод, а завтра сравним результаты. Идёт?
Марк опять кивнул. На этом мы и расстались.
Пока я шёл домой, а это всё-таки был неблизкий путь, у меня в голове вертелась мысль о том, что негоже сыну математика использовать тупой переборный метод взлома, который к тому же не гарантирует обнаружения правильного ключа. Надо придумать что-то более хитрое и интересное. Но что?
Внезапно окружающий мир дал подсказку. Я обратил внимание на то, что многие дома на улице покрашены в разные цвета. И время от времени цвета повторялись. Часто использовался голубой цвет. Реже зелёный, ещё реже светло-бурый. Пока я шёл, мне дважды попались пары домов, которые шли друг за другом – сначала голубой, а сразу вслед за ним зелёный. Тут дома в моей голове превратились в буквы, и я всё понял. Я ускорил шаг, а потом побежал.
Когда я прибежал к дому, на крыльце стоял дед Трофим и пристально смотрел в мою сторону. Увидев меня, он воскликнул:
– А, вот и ты! Ты опять опоздал. Давай быстро обедать, а то всё остынет.
Я только махнул рукой и припустил в свой штаб. Там я взял шифровку и уже спокойным шагом пошёл в дом, чтобы поесть и собраться с мыслями.
Дед Трофим посмотрел на шифровку, которую я принёс, и сказал, что это всё ерунда и кибернетика. Я вспомнил его разговор с папой насчёт этого и ухмыльнулся. Потом сказал, что в этом хаотичном наборе букв должны быть повторы, и их надо найти. Дед Трофим возразил, что он мне тут не товарищ, поскольку даже в очках ничего не разберёт – папа, как обычно, писал всё очень мелко.
Я быстро поел и стал оформлять свои мысли. Их действительно надо было привести в порядок, чтобы начать использовать тот метод, который подсказали мне дома на улице. Итак, в тексте надо искать повторы. Зачем? Всё дело в том, что есть ключ, который использовался для выбора алфавита замены циклично. А это значит, что иногда в достаточно большом тексте будут происходить такие ситуации, когда ключ будет накладываться на одинаковые буквосочетания в шифруемом тексте. Не секрет, что в русском языке много повторяющихся буквосочетаний. Например, «ОЛО» и «ОРО». Вполне может так случиться, что ключ совместится с ними идентично, и тогда в шифровке должны получиться одинаковые сочетания букв. Их-то и надо искать.
Что это даст? Позиции таких повторов будут указывать на цикличность применения ключа. Другими словами, если взять два повтора и посчитать, на каких местах в шифровке они стоят, то разница между этими местами должна делиться на длину ключа. Если взять несколько разных повторов и посчитать несколько разниц, то для определения длины ключа надо будет просто подсчитать наибольший общий делитель.
Этот метод показался мне безупречным. Единственно смущала возможность получения в качестве наибольшего общего делителя единицы, а ключа длиной в один символ тут быть не может, я уже это доказал. Похоже, что этот метод не совсем математически точен. Впрочем, объяснение может быть простым. Несколько разных буквосочетаний в шифруемом тексте могут наложиться на разные позиции в ключе, а в результате получатся одинаковые последовательности символов в шифрограмме. Это возможно, хотя становится очень неправдоподобным, если выбирать повторы длиннее. Так я понял, что надо искать максимально длинные повторы.
Я взял шифровку и стал смотреть на неё. Повторы виднелись сразу, но они состояли из двух и из трёх букв. Я посчитал это недостаточным. Надо больше. Хорошо, что буквы были печатными и по ширине практически одинаковыми. Это натолкнуло меня на мысль о том, что в листе бумаги можно вырезать окошко шириной в нужное количество букв, после чего двигать его по тексту и смотреть на видимые сквозь него символы. Я решил начать с длины в четыре буквы. Действительно, при помощи вырезанного окошка в листе бумаги было очень удобно отсекать массу ненужной и отвлекающей информации. Но вот сложно было удержать в голове огромное количество четырёхбуквенных сочетаний. Это действительно было очень непросто. Но я не унывал и продолжал двигать окошко. Дед Трофим только изумлённо смотрел на мои упражнения.
У меня получилось найти два повтора. Первый – сочетание «ШМИГ», которое было в тексте три раза. Второе сочетание, которое я нашёл, было «ВЕЖА», оно встречалось дважды. Думаю, что есть ещё много, но эти найти было просто, поскольку сочетания напоминали обычные слова, и их было легко запомнить. Что ж, это неплохо. Посмотрим…