Пока я шёл домой, а это всё-таки был неблизкий путь, у меня в голове вертелась мысль о том, что негоже сыну математика использовать тупой переборный метод взлома, который к тому же не гарантирует обнаружения правильного ключа. Надо придумать что-то более хитрое и интересное. Но что?
Внезапно окружающий мир дал подсказку. Я обратил внимание на то, что многие дома на улице покрашены в разные цвета. И время от времени цвета повторялись. Часто использовался голубой цвет. Реже зелёный, ещё реже светло-бурый. Пока я шёл, мне дважды попались пары домов, которые шли друг за другом – сначала голубой, а сразу вслед за ним зелёный. Тут дома в моей голове превратились в буквы, и я всё понял. Я ускорил шаг, а потом побежал.
Когда я прибежал к дому, на крыльце стоял дед Трофим и пристально смотрел в мою сторону. Увидев меня, он воскликнул:
– А, вот и ты! Ты опять опоздал. Давай быстро обедать, а то всё остынет.
Я только махнул рукой и припустил в свой штаб. Там я взял шифровку и уже спокойным шагом пошёл в дом, чтобы поесть и собраться с мыслями.
Дед Трофим посмотрел на шифровку, которую я принёс, и сказал, что это всё ерунда и кибернетика. Я вспомнил его разговор с папой насчёт этого и ухмыльнулся. Потом сказал, что в этом хаотичном наборе букв должны быть повторы, и их надо найти. Дед Трофим возразил, что он мне тут не товарищ, поскольку даже в очках ничего не разберёт – папа, как обычно, писал всё очень мелко.
Я быстро поел и стал оформлять свои мысли. Их действительно надо было привести в порядок, чтобы начать использовать тот метод, который подсказали мне дома на улице. Итак, в тексте надо искать повторы. Зачем? Всё дело в том, что есть ключ, который использовался для выбора алфавита замены циклично. А это значит, что иногда в достаточно большом тексте будут происходить такие ситуации, когда ключ будет накладываться на одинаковые буквосочетания в шифруемом тексте. Не секрет, что в русском языке много повторяющихся буквосочетаний. Например, «ОЛО» и «ОРО». Вполне может так случиться, что ключ совместится с ними идентично, и тогда в шифровке должны получиться одинаковые сочетания букв. Их-то и надо искать.
Что это даст? Позиции таких повторов будут указывать на цикличность применения ключа. Другими словами, если взять два повтора и посчитать, на каких местах в шифровке они стоят, то разница между этими местами должна делиться на длину ключа. Если взять несколько разных повторов и посчитать несколько разниц, то для определения длины ключа надо будет просто подсчитать наибольший общий делитель.
Этот метод показался мне безупречным. Единственно смущала возможность получения в качестве наибольшего общего делителя единицы, а ключа длиной в один символ тут быть не может, я уже это доказал. Похоже, что этот метод не совсем математически точен. Впрочем, объяснение может быть простым. Несколько разных буквосочетаний в шифруемом тексте могут наложиться на разные позиции в ключе, а в результате получатся одинаковые последовательности символов в шифрограмме. Это возможно, хотя становится очень неправдоподобным, если выбирать повторы длиннее. Так я понял, что надо искать максимально длинные повторы.
Я взял шифровку и стал смотреть на неё. Повторы виднелись сразу, но они состояли из двух и из трёх букв. Я посчитал это недостаточным. Надо больше. Хорошо, что буквы были печатными и по ширине практически одинаковыми. Это натолкнуло меня на мысль о том, что в листе бумаги можно вырезать окошко шириной в нужное количество букв, после чего двигать его по тексту и смотреть на видимые сквозь него символы. Я решил начать с длины в четыре буквы. Действительно, при помощи вырезанного окошка в листе бумаги было очень удобно отсекать массу ненужной и отвлекающей информации. Но вот сложно было удержать в голове огромное количество четырёхбуквенных сочетаний. Это действительно было очень непросто. Но я не унывал и продолжал двигать окошко. Дед Трофим только изумлённо смотрел на мои упражнения.
У меня получилось найти два повтора. Первый – сочетание «ШМИГ», которое было в тексте три раза. Второе сочетание, которое я нашёл, было «ВЕЖА», оно встречалось дважды. Думаю, что есть ещё много, но эти найти было просто, поскольку сочетания напоминали обычные слова, и их было легко запомнить. Что ж, это неплохо. Посмотрим…
Сочетание «ШМИГ» встретилось в шифровке на 476, 506 и 571 позициях. А сочетание «ВЕЖА» нашлось на 232 и 637 позициях. Я подумал, что для сочетания «ШМИГ» можно использовать все три позиции, чтобы получить три разницы. Вот что вышло:
506 – 476 = 30
571 – 476 = 95
571 – 506 = 65
637 – 232 = 405