Математика и криптография. Тайны шифров и логическое мышление

Текст
2
Отзывы
Читать фрагмент
Отметить прочитанной
Как читать книгу после покупки
Шрифт:Меньше АаБольше Аа

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

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

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

Давай потренируемся во всем этом на практике. Представь себе, что ты видишь такое послание:

ТИЪРУЫМТУНРШАТПЮАКЧЧЙАЙТГЗУШМНОЧЖАЧЗСЦСЮЙЗЗЫХШЮХАФЭБДЦПЯХИСЫУХЮЭАППЖХКТУИЩЩЖЗЭШУЗЭЫШНТБАЩЪБЗХЮЦПЗЭШПЙДБЕРЫБАЧ БТЪЮТПФАЫЗБМБЪФЯЫХЮТГЩФТСИАДШРБОГИБНАККВПУЭСУВООЦТБАИЫХФФЕЙФДДРДТПЧФГБЯЧЭАРОФЭЪЙТЛШПЭМНОХОРЫУУНЪНОГЫТРЦЛЕПФВТЛИЩТЙЗСТРШЮЛМГШТСИЦТ ЗДБШЫОЪБЖСЫУВОБАЧЮЯОЦШТВНАВПУФЪОЦАЕЙЗБУЛРДТЩРГГПКОЮБТЮЭАЙКТОРОФЭУПТЕУЧАБЗЩЯЯПТЩРГГПЛ ТНФПТГЗЩБОНЖАПФПЫУЦТШАЙВЧЖЪОХИУЮБХПТУНЫТЛЦЫЖАРЭЕЖШФДОЦОШЖЗАБЕНЩЙФЮШАХЮТВУПЦПМПГЗЛЕПФВТФЧУЗХФАЙЕОЕЭЗВЩЖЗЫБЗНЗНАЧЮА ЪЙТЙЗЯБЕЫЫУУВОАБЗБШНЫОЮБТОПОЭБАРЦЖХЧЕЫЗЛЕПЪОДРЦАБВЗЗЫХШЮХБХЧСАББВГОБОЗАЕБУОУВЩЮЯЯЪЭБАХФХИУПЭКПШНГЫТЕНЪБС

Если сделать здесь частотный анализ, то получится вот такая таблица:


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

Что делают настоящие криптоаналитики для анализа подобной ситуации? Они строят графики. Вот два графика (они называются «гистограммами»):


Гистограмма частот символов в шифрограмме


Гистограмма частот букв русского языка


Ты можешь представить себе, что эти графики – набор вертикальных штырьков, на которые нанизаны блины, как в детской пирамидке или головоломке «ханойская башня». Количество блинов на штырьке соответствует количеству целых процентов, а последний блин по толщине соответствует долям процента. Если расположить эти башни по убыванию количества блинов, то как раз получатся такие гистограммы. По горизонтали отложены буквы по убыванию частот их в языке, а по вертикали – относительные частоты в процентах.

Видишь, на этих графиках обозначены подсчитанные частоты символов. На левом графике отложены частоты символов из шифрограммы, а на правом – частоты букв русского языка. Вид графиков различается: для шифрограммы он более пологий. Это уже указывает на то, что нарушено распределение частот, а значит, для шифрования был избран не одноалфавитный шифр, а что-то другое. Кстати, в качестве тренировки рекомендую построить такую гистограмму для символов из шифровки первой недели: ты увидишь, что она очень похожа на гистограмму частот для букв русского языка.

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

Быстрый просмотр шифрограммы показывает, что есть одно семисимвольное сочетание «ЗЗЫХШЮХ», которое встречается в шифрограмме дважды. При этом повторяющихся восьмисимвольных сочетаний нет. (Надо отметить, что чем больше в повторяющихся сочетаниях символов, тем лучше). Проверим, на каких позициях стоят эти буквосочетания. Первое стоит на позиции 49, а второе – на 509. Разница: 509 – 49 = 460. Запомним.

Больше семисимвольных сочетаний нет, поэтому посмотрим на шестисимвольные. Есть четыре таких буквосочетания, но первые два из них – это префикс и суффикс семисимвольного сочетания, рассмотренного ранее, поэтому учитывать их не будем. Другие – это «ЛЕПФВТ» и «ТЩРГГП». Первое из этих двух буквосочетаний встречается на позициях 225 и 421. Их разница: 421–225 = 196. Второе стоит на позициях 294 и 330, и разница составляет 330–294 = 36.

Итак, у нас есть три числа, три разницы: 460, 196 и 36. Рассмотрим наибольший общий делитель этих чисел. Он равен 4. В принципе, на этом можно остановиться, поскольку мы только что нашли длину ключа. Теоретически, ключ может быть длиной в 2 символа (поскольку 4 делится на 2), но можно предположить, что никто не будет кодировать сообщение при помощи такого короткого ключа. Если бы у нас в качестве наибольшего общего делителя получилось число 8, то нам пришлось бы проверить ещё и пятисимвольные сочетания, а потом и все остальные, чтобы убедиться, что длина ключа равна именно 8, а не 4.

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


ТИЪР

УЫМТ

УНРШ

АТПЮ

АКЧЧ

ЙАЙТ

ГЗУШ

МНОЧ

ЖАЧЗ

СЦСЮ

ЙЗЗЫ

ХШЮХ

АФЭБ

ДЦПЯ


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

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

А теперь, если ты внимательно изучишь таблицу, приведённую ранее, то увидишь, что у пробела – код 0. Это значит, что при сложении с ним символ не меняется. Получается, что самая часто встречающаяся буква в каждом столбце и есть буква ключа. Вот это да!

Давай подсчитаем. Вот первый столбец:


«ТУУААЙГМЖСЙХАДХУАЖУЖУШАЗППЕАТПЫБЫГСШГАПУОАХЙДПБАЭЛМОУОРПЛЙРМСШБУАОВПОЙЛЩПБАОЭЕБЯЩПНГОПУАЖИБУЛАЖОЖЕЙАВППФЗЙЭЖЗА ЙЕУБНБПАЖЫПРВХБАВОБВЯАИЭНЕБ».


Можно заметить, что чаще всего здесь встречается буква «А». Итак, первая буква ключа найдена. Я рекомендую тебе тщательно подсчитать в каждом столбце количество букв и определить наиболее часто встречающуюся, после чего понять ключ.

Если у тебя все получилось, то нашелся ключ – «АЗОТ» (это газ). И теперь можно легко расшифровать секретное послание. Как я уже писал, надо из шифрограммы вычесть ключ по модулю 32. Вот так:



Если всё сделано правильно, то проявится открытое сообщение: «САЛЮТУЮ ТЕБЕ. КАК ВИДИШЬ, В ДЕЛЕ ДЕШИФРОВКИ ШИФРОВ МНОГОАЛФАВИТНОЙ ЗАМЕНЫ ТАКЖЕ НЕТ НИЧЕГО СЛОЖНОГО. НЕОБХОДИМО ПРОСТО ОЧЕНЬ ТЩАТЕЛЬНО ВСЁ РАССЧИТЫВАТЬ, ВЫПОЛНЯТЬ МНОГО АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ И БЫТЬ КРАЙНЕ ВНИМАТЕЛЬНЫМ. ПОЭТОМУ, КАК И В ПРОШЛЫЙ РАЗ, Я ХОЧУ ЗАЯВИТЬ О ПОЛНОЙ БЕСПОЛЕЗНОСТИ ТАКИХ ШИФРОВ. КАКОЙ БЫ НИ БЫЛА ДЛИНА КЛЮЧА, ШИФРОГРАММА В КОНЕЧНОМ ИТОГЕ БУДЕТ ВЗЛОМАНА ТЕМ, КОМУ ИНТЕРЕСНО ЕЁ СОДЕРЖИМОЕ. НО БЛАГОДАРЯ ЭТОМУ УПРАЖНЕНИЮ ТЫ УЖЕ МОЖЕШЬ ПОНЯТЬ И ПОДУМАТЬ НА ТЕМУ, КАК МОЖНО ИЗМЕНИТЬ ЭТОТ СПОСОБ ШИФРОВАНИЯ, ЧТОБЫ ОН СТАЛ АБСОЛЮТНО НЕВЗЛАМЫВАЕМЫМ. ДЕРЗАЙ».


Что ж, ещё пара моментов:

1. Не всегда пробел будет самым частым символом в столбце. Если не удалось обнаружить ключ, то можно попробовать либо вычитать букву «О», либо попытаться использовать в качестве пробела второй по частоте символ. Ключ часто может быть каким-то словом.

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

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

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

Неделя 3. Стеганография и код Фрэнсиса Бэкона

Представь, что ты получаешь вот такое письмо:

Привет тебе, мой дорогой сын. Как поживаешь в деревне? Что нового слышно? Ругаешься ли с дедушкой и бабушкой? У нас с мамой всё как обычно. Ходим на работу. Приедем к тебе на следующих выходных, готовься. Кушай хорошо, не балуйся и слушайся старших. Ешь больше овощей и фруктов, поменьше играй на планшете и побольше гуляй. Катайся на велосипеде и купайся. До скорой встречи, твой отец.

 

И больше ничего. Никаких шифровок, ничего такого, о чём мы говорили раньше. Это странно.

А теперь посмотри на этот текст внимательнее. Почему в нём использованы обычные и жирные буквы? Обычно так никто не пишет. Нет ли тут какой-то тайны, над которой надо бы поломать голову?

Действительно, ты уже можешь догадаться, что в этой книге ничего не написано просто так. Тут явно что-то закодировано. Но для того чтобы это понять, необходимо немного отвлечься и изучить новую для тебя тему из математики. Тут уж ничего не поделаешь, поскольку криптография – это наука, в которой очень много математики. И даже если тебе математика не очень нравится, то я надеюсь, что ты её полюбишь, прочитав до конца эту книгу и вместе со мной попробовав все способы шифрования и расшифровки. Ведь математика позволяет решать такие интересные загадки! Честно говоря, математика позволяет делать практически всё, что только можно придумать.

Почему мы вообще используем счёт до десяти? Почему у нас десять цифр: 0 1 2 3 4 5 6 7 8 9? Почему, если прибавить к девяти единицу, то произойдёт так называемый перенос разряда и число станет двузначным? Для записи числа «десять» мы не вводим одиннадцатую цифру, а используем те же самые цифры, что и для первых десяти чисел от нуля до девяти. А что вообще обозначает запись «10»? Эта запись обозначает: один десяток и ноль единиц. А, к примеру, запись «156» обозначает: одна сотня, пять десятков и шесть единиц. А вот запись «7325» обозначает: семь тысяч, три сотни, два десятка и пять единиц.

А что, если бы у нас было не две руки и десять пальцев, а этакие щупальца, как у осьминога? Мы могли бы считать только до двух, и перенос разряда происходил бы, когда мы досчитывали бы не до десяти, а до двух. Это очень сложно воспринять при первом чтении, но ты постарайся: для записи любого числа можно обойтись всего лишь двумя цифрами: 0 и 1. Такова двоичная система счисления, и её постоянно используют программисты, а еще очень любят использовать математики, особенно криптографы.

Смотри: у нас есть всего две цифры, но мы хотели бы считать любое количество предметов, которое нам может встретиться. Когда предметов нет, мы используем цифру 0. Если предмет один, то мы используем цифру 1. А когда предмета два? Тут происходит перенос разряда, который в двоичной системе используется всегда, когда надо сложить 1 и 1. Так вот если надо посчитать два предмета, то мы запишем это так: 10. А три предмета? Это проще: 10 + 1 = 11. Если у нас четыре предмета, то надо к трём прибавить один, то есть 11 + 1. Что получится? Сложение делается точно так же, как и в десятичной системе. Сначала складываем единицы, получается 10, то есть происходит перенос разряда. Но в следующем разряде уже стоит 1, поэтому опять надо сложить единицы, и опять произойдет перенос разряда. Получается, что четыре предмета обозначаются как 100.

Вот так начинается счёт в этой замечательной системе счисления:



Ты сможешь определить, как в двоичной системе обозначается шестнадцать предметов?

Как перевести такие двоичные числа в привычный вид? Тут надо сделать то же самое, что и в десятичной системе, только роль разрядов – единиц, десятков, сотен, тысяч и т. д. играют единицы, двойки, четвёрки, восьмёрки. Всё это – так называемые степени основания системы счисления (основание двоичной системы счисления – двойка). Если в системе счисления десять цифр, то перенос разряда происходит на десятках, а когда у нас только две цифры, то приходится делать перенос разряда на двойках.

Таким образом, надо сложить друг с другом те степени двойки, для которых в двоичной записи числа стоит единица. Например, нам нужно перевести в десятичную систему двоичное число «101100110».



Эта таблица показывает, как это сделать. Для этого надо сложить числа 256, 64, 32, 4 и 2, и у нас получится 358. Впрочем, когда ты научишься пользоваться двоичной системой счисления так же обыденно, как и десятичной, тебе не надо будет ничего никуда переводить – ты сможешь считать и выполнять все необходимые математические операции прямо в этой системе (кстати, она намного проще, чем десятичная).

Итак, теперь ты понимаешь, что для тех, кто умеет пользоваться двоичной системой счисления, «круглые» числа – это не 10, 100, 1000 и далее, а числа, которые в десятичной системе записываются так: 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 и т. д. Запомни эти числа, они, можно сказать, «волшебные». Например, их очень часто используют программисты. Есть даже такой анекдот: программисты думают, что в километре 1024 метра, а в килограмме 1024 грамма, поскольку в килобайте – 1024 байта. И в этом есть доля правды: число 1024 в двоичной системе счисления записывается как единица с десятью нулями: 10000000000. (Это абсолютно «круглое» число: даже число его нулей – 10 – является круглым как в десятичной, так и в двоичной записи).

Есть и ещё одна шутка: в мире существует 10 типов людей – те, кто знает двоичную систему, и те, кто не знает её. Надеюсь, что теперь ты можешь посмеяться над ней вместе со мной, поскольку и ты теперь знаешь двоичную систему.

Вот тут необходимо остановиться и запомнить новый термин. Ты уже давно знаешь, что такое «цифра». Так вот двоичные цифры, то есть 0 и 1, называются битами. Когда ты услышишь слово «бит», то сразу поймешь, что речь идёт о двоичных цифрах.

Теперь вспомни, что мы договорились использовать в нашем специальном алфавите (который ввели на прошлой неделе) ровно 32 символа. Теперь ты понимаешь, почему на прошлой неделе я выделил слово «ровно»? Число 32 действительно «ровное» или «круглое», поскольку в двоичной системе счисления для его записи используется число 100000. Что это значит для нас? То, что для двоичного представления любого символа из нашего алфавита требуется пять двоичных цифр. Единственное, о чём нужно договориться: мы всегда будем использовать именно пять цифр, даже если в начале числа надо ставить нули: 00100, 01011 и т. д.

Таким образом можно закодировать все символы нашего алфавита от пробела до буквы «Я». Все они получают номер от 0 до 31 в десятичной системе счисления и код от 00000 до 11111 в двоичной. Вот интересная таблица, которую я рекомендую тебе выучить наизусть:



Это достаточно простое кодирование. По сути, это шифр одноалфавитной замены, то есть код, не скрывающий тайную информацию. Но что нам это даёт?

Давай вновь обратимся к полученному сообщению. Итак, в нём использованы обычные и жирные буквы. Что, если обычная буква обозначает «0», а жирная – «1»? Надо попробовать декодировать шифр таким способом. Если подставить цифры 0 и 1 вместо обычных и жирных букв, то получится вот такая кодограмма (я сразу же разделил поток символов на группы по пять цифр, чтобы было удобно, и тебе советую сразу научиться всегда делать именно так):


00010 00110 10001 00110 00100 01001 10010 11011 00000 00010 00001 00010 10100 11001 01011 10100 00000 01111 01110 00001 00000 01001 01110 01111 10000 01100 00001 01110 00110 10011 11111 01110 01011 00001


Оставляю тебе возможность потренироваться в раскодировании текста. Тем более что здесь его не так уж и много.

Чему же мы научились на этой неделе? Мы научились очень важной вещи. Оказывается, можно скрывать информацию в другой информации так, что найти её сможет только тот, кто знает, как искать. Это как спрятать иголку в стоге сена. Более того, в стогу вообще мало кто будет искать иголку! Добиться этого – и есть основная задача стеганографии, то есть науки о сокрытии информации. Если криптография шифрует смысл текста, то стеганография скрывает само присутствие тайны. Получается, криптография и стеганография – очень близкие науки. Одна прячет смысл сообщения, а другая – само сообщение. А метод, который мы с тобой сейчас изучаем, называется методом Фрэнсиса Бэкона.

Бесплатный фрагмент закончился. Хотите читать дальше?
Купите 3 книги одновременно и выберите четвёртую в подарок!

Чтобы воспользоваться акцией, добавьте нужные книги в корзину. Сделать это можно на странице каждой книги, либо в общем списке:

  1. Нажмите на многоточие
    рядом с книгой
  2. Выберите пункт
    «Добавить в корзину»