Математика и криптография — страница 19 из 23

Тут можно использовать такой нюанс. В латинском и русском алфавитах есть набор символов, которые совпадают по начертанию. Это следующие символы: A B C E H K M O P T X Y (12 символов). Что, если составить открытое сообщение только из этих символов? Это сложно, но возможно. Вот несколько примеров слов, которые можно из них составить: ВЕСНА, РОТ, АВТОХТОН, МОРЕ, МОРЕНА, ТОРТ, КАМОРКА, KYPOPT и т. д. Можно составить огромное количество таких слов. Вероятно, можно составить и тайное послание. Тогда эти слова можно спрятать среди латинских букв. Тогда у криптоаналитика возникнет меньше подозрений, чем если он будет смотреть на предыдущий текст, в котором были перемешаны символы латиницы и кириллицы. Также можно придумать систему кодирования из двух таких символов, и при помощи таких пар кодировать все буквы русского алфавита.

То же самое можно сделать и с греческим алфавитом, который более похож на кириллицу. Вот совпадающие символы: Α Β Γ Ε Η Κ Λ Μ Ο Π Ρ Τ Φ Χ (14 символов). С ними можно поступить абсолютно так же, как и с латиницей.

Возьмём латиницу (все знают латиницу, лишь немногие знают греческий алфавит). Закодируем тайное послание при помощи упомянутых двенадцати символов. Затем подберём слова на английском языке, в которых содержатся эти символы, но только те, что нам нужны. Подобрать такие слова намного легче, нежели решать задачу, с которой мы боролись ранее. Например, давайте попробуем закодировать то же самое послание «ЗАВТРА НАЧНУ». Пусть код выглядит следующим образом (снова воспользуемся алфавитом из тридцати двух символов для единообразия):

Внезапно оказалось кстати, что 32 = 4 × 8, а 12 = 4 + 8, и среди этих двенадцати символов 4 гласных и 8 согласных. Поэтому код получился очень забавным — это двухбуквенный код, где на первом месте стоит гласная, а на втором согласная буква. Гласная буква определяет номер четвёрки (то есть столбец, в котором записана шифруемая буква), а согласная — позицию внутри четвёрки. Всё очень логично. Кстати, хоть это и красиво, но сразу же снижает ценность кода, поскольку любая регулярность даёт криптоаналитику подсказки для взлома. Но сейчас мы воспользуемся именно таким методом.

Итак, наше послание

«ЗАВТРА НАЧНУ»

перекодируется при помощи созданного кода в такую последовательность:

«EBACAKOKOCACABETACYBETOM».

Здесь 24 символа латинского алфавита, из которых надо составить список английский слов. Например, вот так:

ZEBRA CAN KOFF KLON CAR UCLA BETA CYBER TIRO MUZZ

Опять же, не очень-то складно (вообще нескладно), но это свойство всех подобных способов сокрытия информации.

Итак, на текущей неделе необходимо сделать следующее:

1. Придумать короткое сообщение, которое будет скрыто в тарабарской грамоте.

2. Закодировать его при помощи приведённой выше таблицы.

3. Придумать англоязычный текст, в котором будет скрыто сообщение.

4. Написать обычное письмо своему ребёнку, а в качестве одного из абзацев привести сгенерированный на предыдущем шаге текст на английском языке. Хорошо, если само письмо будет как-то обыгрывать эту вставку английского текста.

5. Далее, надо быть готовым помочь ребёнку с расшифровкой, поскольку у него могут возникнуть затруднения, особенно если ещё не совсем хорошо знает латинский алфавит.

Кстати, задачка для вдумчивого читателя и неназойливых размышлений на досуге. Конечно же, для английского языка тоже есть таблица частоты проявления символов. Можно составить новую таблицу двухбуквенной кодировки при помощи двенадцати символов, в которой будут учтены частоты встречаемости букв как в русском, так и в английском языке. Например, буква «E» встречается в английском языке чаще всего, за ней на втором месте стоит буква «T», так что резонно код «ET» отдать пробелу. А вот буква «X» встречается очень редко, равно как и буква «Y», так что код «YX» отдаётся букве «Ъ». И так далее.

Неделя 6. Шифрование дырявой матрицей

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

Для такого шифрования необходимо подготовить набор ключей. Каждый ключ представляет собой квадратную матрицу, в которой прорезаны отверстия. Другими словами, ключ — это квадратный лист картона, разделённый на знакоместа. В нем продырявлена ровно четверть знакомест. При этом отверстия сделаны таким образом, что при повороте квадрата на 90, 180 и 270 градусов их наложения друг на друга не происходит. Например, вот изображение ключа для перемешивания сообщения из 100 символов:

Как видно, это квадратный ключ. Цифрами в уголках обозначена последовательность, в которой углы ключа занимают верхний левый угол.

В прорезях пишется текст, который надо перемешать. Как только первые 25 символов текста записаны, ключ поворачивается на 90 градусов так, чтобы в верхнем левом углу теперь стояла цифра 2, и в прорези записываются следующие 25 символов перемешиваемого текста — и так далее до окончательного заполнения матрицы. Если в перемешиваемом тексте менее 100 символов, то остаток заполняется какой-нибудь буквой (например, наиболее часто используемой; но лучше подобрать сообщение так, чтобы в конце оставалось как можно меньше неиспользованных знакомест: заполнение их символами-пустышками повышает риск раскрытия — поразмыслите, почему так).

Самое важное в квадратном ключе заключается в том, чтобы при его повороте на 90, 180 и 270 градусов отверстия ни разу не совпадали. Вам необходимо будет потренироваться в создании таких ключей (кто-нибудь из читателей, умудрённых в математике, может составить систему уравнений и решить её; иной читатель, умудрённый в программировании, разработает программу для генерации подобных матриц). При этом желательно, чтобы отверстия были равномерно распределены по площади ключа, поскольку слишком отчётливые группировки опять снижают криптостойкость. Лучше всего сделать ключ, похожий на изображенный выше — отверстия не должны соприкасаться сторонами друг с другом. Понятно, что длина стороны такого ключа должна быть чётным числом.

Вот, что необходимо сделать на этой неделе:

1. Разработать свой вариант ключа размером не менее 10 × 10 для перемешивания сообщения из 100 символов.

2. Нарисовать разработанный ключ в каком-либо графическом редакторе (что-то типа MS Visio).

3. Распечатать ключ в двух экземплярах, заламинировать их оба при помощи скотча, а затем в скотче прорезать отверстия. Всё это надо сделать очень аккуратно.

4. Подготовить шифрограмму длиной не более 100 символов (лучше ровно 100, но точно не менее 90).

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

6. Отправить письмо, вложив в него один экземпляр ключа.

Ребёнок должен будет самостоятельно догадаться, как использовать ключ. Это упражнение призвано пробудить в нём желание сделать собственный ключ (или даже несколько ключей).

Неделя 7. Древние и кзотические алфавиты

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

Изучение древних и экзотических алфавитов интересно ещё и потому, что некоторые не очень опытные шифровальщики могут использовать такие алфавиты для засекречивания своих посланий. Если вы видите письмо, отправленное русским другому русскому, но написанное, например, при помощи деванагари, то первое, что можно сделать, это попытаться прочитать эти буквы письменности так, как это сделал бы индус. Возможно, что в результате такого прочтения проявятся именно русские слова, а не хинди или санскрит. В истории такое происходило не раз, в этом нет ничего удивительного.

Люди за свою историю изобрели огромное количество алфавитов и неалфавитных систем письма, которые использовались (и используются) для записи как существующих языков, так и искусственных, используемых только любителями. Далее я кратко охарактеризую системы письма без самих таблиц символов, поскольку считаю, что читатель, взявшийся за этот вопрос, самостоятельно может найти всю необходимую информацию в сторонних источниках.

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

После пиктографического письма стало появляться письмо иероглифическое. Причина его появления, скорее всего, в том, что людям нужно было упростить запись текстов и передавать знания о письме друг другу (обучение). Так что в иероглифическом письме постепенно появлялись типичные конструктивные элементы, повторяющиеся в разных знаках. Однако такое письмо сохраняло существенный недостаток своего предшественника: поскольку знаки были оторваны от звучания слова, письменная и устная речь существовали как бы по отдельности. А если в языке формы слов изменяются в зависимости от синтаксической роли, то к иероглифическим знакам приходилось добавлять большое количество модификаторов, обозначающих синтаксические отношения между словами.