Об этих методах шифрования мы поговорим позднее. А теперь предлагаю заняться взломом.
Вот, например, тебе пришло письмо, в котором есть такой текст:
Первый взгляд на этот текст заставляет отбросить «это» и заявить, что разгадать его смысл невозможно. Но так ли это? Давай попробуем разобраться.
Выше я уже говорил, что замена символов, которыми обозначаются буквы, не влияет на частоты букв. Именно этим мы сейчас и воспользуемся. Для начала я приведу таблицу, про которую в первую очередь вспоминает всякий уважающий себя криптоаналитик. Вот она:
О чём эта таблица? В ней указаны частоты встречаемости букв в русском языке в обычных текстах. Как видишь, буква «О» встречается чаще всего. Можно сказать, что каждая десятая буква в тексте на русском языке, — это буква «О». Второе место занимает буква «Е» (вместе с «Ё»). Далее, соответственно, идут буквы «А», «И» и т. д. Самая редкая буква в русском языке — «Ъ».
Теперь я приведу примерный алгоритм , то есть последовательность шагов для расшифровки сообщения. Вот он:
1. Сначала надо точно подсчитать количество букв в сообщении. Для этого можно взять чистый лист бумаги в клетку и для каждого символа шифрограммы откладывать одну незаполненную клеточку. Клеточки, соответствующие пробелам, надо подчёркивать. После того как всё сообщение будет переведено в клеточки, надо просто посчитать пустые клетки без подчёркиваний.
2. Дальше следует построить таблицу. В ней должно быть два столбца и столько строк, сколько разных символов используется в шифрограмме. В первый столбец надо вписать все использованные символы.
3. Затем необходимо подсчитать количество каждого из отдельных символов и записать результаты во второй столбец. Это самая занудная часть алгоритма, но сделать это необходимо. Может быть, это займёт у тебя очень много времени, поэтому приступай к подсчетам, только когда у тебя есть возможность и желание заниматься. Как только ты устанешь, надо отложить это занятие и заняться чем-нибудь другим. Так за несколько подходов ты сможешь довести дело до конца.
4. После того как частоты всех символов посчитаны, надо нарисовать ещё одну такую же таблицу. Однако теперь записывай в нее символы по убыванию частоты. В первой строке должен находиться самый часто встречаемый символ и его количество в тексте. Во второй строке — следующий по частоте и т. д. Ты уже понимаешь, к чему мы ведём?
5. Теперь организуй рабочий цикл. В шифрограмме ты видишь символ, который встречается чаще всего. А в русском языке чаще всего встречается буква «О». Можно выдвинуть гипотезу , то есть сделать предположение, что этот символ и есть буква «О». После этого впиши букву «О» в тот самый размеченный лист, с помощью которого мы считали буквы в сообщении — в те клетки, которые соответствуют самому часто встречающемуся символу.
6. Теперь посмотри на частично разгаданный текст. В нём могут встретиться слова, о значении которых можно догадаться. Например, если есть слово из двух букв, стоящее после запятой, и вторая буква в этом слове — «О», то наверняка это слово «НО». А уж если оно встречается несколько раз, и всегда после запятой, то это точно слово «НО». Значит, теперь у нас есть вторая буква — «Н». Но если таких предположений сделать нельзя, то надо вернуться к шагу 5 и предположить значение следующего неразгаданного и наиболее часто встречающегося символа.
7. К таблице, которую мы заполняли на шаге 4, необходимо пририсовать ещё один столбец. В него мы будем записывать расшифровки символов.
Так, повторяя шаги 5 и 6, ты сможешь расшифровать весь текст. Однако иногда предположения относительно соответствия символов могут оказаться неверными. Это часто происходит, когда разгаданных символов ещё не так много, чтобы уже можно было видеть целые слова, а частоты разгадываемых символов примерно одинаковы. Тогда надо делать шаг назад в рассуждениях и выносить иное предположение. Также возможно, что в шифрограмме намеренно снижены или повышены частоты некоторых букв, и это может ввести в заблуждение. Но грамотный криптоаналитик в конце концов расшифрует и такой текст.
Давай попробуем разгадать по этому алгоритму ту шифрограмму, которая приведена несколькими страницами раньше. А после этого ты сможешь самостоятельно сделать то же самое с любой другой шифрограммой, текст в которой зашифрован этим способом, но, возможно, при помощи других значков.
Итак, в шифрограмме 419 букв (если твой результат отличается на пару букв, это не страшно, поскольку такая неточность не повлияет на результаты. А вот если ты ошибёшься на десяток букв, то тут уже придётся пересчитывать).
Теперь начнём считать частоты символов. В результате должна получиться примерно такая таблица:
Надеюсь, что ты заполнишь все остальные строки самостоятельно.
После того как таблица будет построена, строчки необходимо отсортировать по убыванию количества символов. Если это сделать, то в результате получится что-то вроде этого:
Как видно, здесь частота первых двух символов отличается только на единицу. Это очень неприятная ситуация, поскольку придётся делать гипотезы и проверять их. Впрочем, криптоаналитик при дешифровке всегда строит гипотезы и пытается их проверить. Так что давай сейчас построим одну гипотезу. Поскольку самой частой буквой в русском языке является «О», то предположим, что значок из первой строки отсортированной таблицы — это и есть буква «О». Что получится, если в соответствии с догадкой подставить эту букву в наш текст? Вот:
−−−−−−. −−−−−−−, −−О −−−−−−−−−О−−−−−О−−, −−−−−−−−−−−−О−−−−−−. −−−−−−О −−−, −О −−О−−−О−−−−−−−−О−О−. −−−−−−−−−−−−О−−−−−−−, −−−−−−О−−О−−О−−−−−О−−−−О−−−−−−−О −−−О−−−−−−−−−−−−−−−−−−−−−−−−−−−−О−. −О−−О−−−−−О−−−−−−−−О−−−−−−−. −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−, −−−−О−−О −−−−−−О−−−−−−О−−О−−−−−−−−−, −−О−−−−−−О −−−О−−−−−−−−−−− (−−О−−−−−, −О−−−−−О−−−−−−−−О−−−−−−−−). −−О −−−−−−−О−−О, −−−−−О −О−−−−−−−−−−−−−−−−−−−−−−−−, −−О−О −−−−−−−−−−−−−−−−−−−−−−−−−О−−О−−−−−−О.
Не очень-то понятно. Тем не менее это уже что-то.
Что делать дальше? Теперь попробуем подставить следующую по частоте букву. Для русского языка это буква «Е», так что подставим её вместо символа, занимающего вторую строчку в отсортированной таблице. Вот что получится после этого:
−−−−−Е. −−−−−−−, −ЕО − Е−−−−−−−О−−−−−О−−, − Е−−−Е−−−−−ЕОЕ Е−−−Е. −−−−−ЕО Е−−, ЕО −−О−−−О−−−Е−−− ЕО−О−. −−− Е− Е−−−−−−О−−−−−−−, −−−−−−О−ЕО−−О−−Е−−О−−−−О−−−−−−−О −−−О−−Е−−−−−−−−−−−−−− Е−−−−−−−−−ЕО−. −О−ЕО−−−−−О−−−−−−−−О−−−−−−−. − Е−−−−−−−−Е−−−−−−−−−−−Е−− Е−−−−−−−−, −−−−О−−О −−−−−−О−−Е−−−О−−О−−−−−− Е−−, −ЕО−−−−−ЕО −−−О−−−−−−−−−Е− (−−О−− Е−−, −О−− Е−−О−−−−−−−−О−−−−−−Е−). −ЕО −− Е−−−−О−−О, Е−−−ЕО −О−−−−−−−−−−−−−−− Е−−−−−−−−, −−О−О Е−−−−−−−−−−−−−Е−−−−−Е−−−−О−ЕО−Е−−−−О.
Сразу видно, что тут что-то не то. Во-первых, можно обратить внимание на слово «ЕО» в первой строке (шестнадцатое слово). Такого слова нет в русском языке. Во-вторых, в тексте неоднократно встречается не до конца разгаданное слово «−ЕО», причём на первом месте стоит один и тот же символ (это слово встречается четыре раза). Какие слова из трёх букв, подходящие под эту форму, есть в русском языке? Посмотрим: ГЕО (довольно редкое болгарское имя), ЛЕО (фамилия или имя из английского языка), НЕО (это из «Матрицы») и РЕО (город во Франции). Как видно, обычного русского слова нет ни одного, и можно предположить, что мы неверно расшифровали первые буквы. Впрочем, уже несуществующее слово «ЕО» позволяет отбросить гипотезу насчёт буквы «Е».
Теперь ты понимаешь, что «короткие» слова на первом этапе могут принести очень большую пользу. Именно на короткие слова надо обращать внимание, когда ты только приступаешь к расшифровке секретного сообщения. Давай пойдём дальше. Таким же образом можно отвергнуть гипотезы о том, что этот второй символ — буква «А» (третья по частоте) или буква «И» (четвёртая). Да, слова «АО» (сокращение от «автономный округ») и «ИО» (спутник Юпитера или имя нимфы из греческой мифологии) в русском языке есть, но они редкие и вряд ли окажутся в этом тексте.
Идём дальше. Следующая по частоте буква — это «Н». Тут, казалось бы, всё нормально, поскольку слово «НО» в русском языке есть, и оно как раз часто стоит после запятой. И буквосочетание «−НО» может означать часто встречающееся слово «ОНО» (но не в нашем случае, ты же понимаешь почему?). Попробуем сформулировать гипотезу и заменить символ буквой:
−−−−−Н. −−−−−−−, −НО − Н−−−−−−−О−−−−−О−−, − Н−−−Н−−−−−НОН Н−−−Н. −−−−−НО Н−−, НО −−О−−−О−−−Н−−− НО−О−. −−− Н− Н−−−−−−О−−−−−−−, −−−−−−О−НО−−О−−Н−−О−−−−О−−−−−−−О −−−О−−Н−−−−−−−−−−−−−− Н−−−−−−−−−НО−. −О−НО−−−−−О−−−−−−−−О−−−−−−−. − Н−−−−−−−−Н−−−−−−−−−−−Н−− Н−−−−−−−−, −−−−О−−О −−−−−−О−−Н−−−О−−О−−−−−− Н−−, −НО−−−−−НО −−−О−−−−−−−−−Н− (−−О−− Н−−, −О−− Н−−О−−−−−−−−О−−−−−−Н−). −НО −− Н−−−−О−−О, Н−−−НО −О−−−−−−−−−−−−−−− Н−−−−−−−−, −−О−О Н−−−−−−−−−−−−−Н−−−−−Н−−−−О−НО−Н−−−−О.
Час от часу не легче. Но тут легко можно заметить одиннадцатое слово «−НОН», причём первой буквой у него стоит та же, что и в слове «−НО». В русском языке есть слово «ОНОН» (река в Сибири), но оно не подходит, поскольку букву «О» мы уже отгадали. То есть гипотеза о букве «Н» — некорректная. Попробуем следующую букву, и если она не подойдёт, то придется поставить под сомнение самую первую гипотезу о букве «О». Следующая по частоте буква — это буква «Т». Подставим:
−−−−−Т. −−−−−−−, −ТО − Т−−−−−−−О−−−−−О−−, − Т−−−Т−−−−−ТОТ Т−−−Т. −−−−−ТО Т−−, ТО −−О−−−О−−−Т−−− ТО−О−. −−− Т− Т−−−−−−О−−−−−−−, −−−−−−О−ТО−−О−−Т−−О−−−−О−−−−−−−О −−−О−−Т−−−−−−−−−−−−−− Т−−−−−−−−−ТО−. −О−ТО−−−−−О−−−−−−−−О−−−−−−−. − Т−−−−−−−−Т−−−−−−−−−−−Т−− Т−−−−−−−−, −−−−О−−О −−−−−−О−−Т−−−О−−О−−−−−− Т−−, −ТО−−−−−ТО −−−О−−−−−−−−−Т− (−−О−− Т−−, −О−− Т−−О−−−−−−−−О−−−−−−Т−). −ТО −− Т−−−−О−−О, Т−−−ТО −О−−−−−−−−−−−−−−− Т−−−−−−−−, −−О−О Т−−−−−−−−−−−−−Т−−−−−Т−−−−О−ТО−Т−−−−О.
Вновь обратим внимание на слова «−ТО» и «−ТОТ», у которых первая буква одинаковая. Тут вариант один: первая буква — это «Э». Попробуем подставить:
−−−−−Т. −−−−−−−, −ТО − Т−−−−−−−О−−−−−О−−, − Т−−−Т−−−− ЭТОТ Т−−−Т. −−−− ЭТО Т−−, ТО −−О−−−О−−−Т−−− ТО−О−. −−− Т− Т−−−−−−О−−−−−−−, −−−−−−О−ТО−−О−−Т−−О−−−−О−−−−−−−О −−−О−−Т−−−−−−−−−−−−−− Т−−−−−−−−−ТО−. −ОЭТО−−−−−О−−−−−−−−О−−−−−−−. − Т−−−−−−−−Т−−−−−−−−−−−Т−− Т−−−−−−−−, −−−−О−−О −−−−−−О−−Т−−−О−−О−−−−−− Т−−, −ТО−−−−−ТО −−−О−−−−−−−−−Т− (−−О−− Т−−, −О−− Т−−О−−−−−−−−О−−−−−−Т−). ЭТО −− Т−−−−О−−О, Т−−−ТО −О−−−−−−−−−−−−−−− Т−−−−−−−−, −−О−О Т−−−−−−−−−−−−−Т−−−−−Т−−−−О−ТО−Т−−−−О.