Меня всегда завораживали шифры. Не настолько, чтобы написать свою реализацию SSL или пойти учиться на «Компьютерную Безопасность», однако в детстве я исписывал своими «изобретениями в области криптографии» целые тетрадки в клетку. Конечно, я изобретал велосипеды, типа Цезаря, Виженера и той книжки Штирлица. Обособленно для меня всегда стоял шифр простой подстановки. Википедия со мной не согласна по поводу названия, она говорит, что есть класс «шифров подстановки», а есть «простой замены». Споры с терминологией — это тоска, поэтому я просто расскажу, что я имею в виду.
Берётся алфавит, в моём детстве, разумеется, он всегда был русский. Для каждой буквы подбирается один к одному абсолютно случайный (без всяких закономерностей типа похожести или последовательности) символ замены. Например, вместо буквы «А» будет кружок, вместо буквы «Б» — снежинка, вместо буквы «В» — значок Nike и т.д. Затем текст, который нужно зашифровать, просто зарисовывается этими символами. Пробелы остаются как есть, знаки препинания — как правило тоже.
В младших классах мы с друзьями баловались таким. Придумывали очередной набор картинок, раздавали копии ключей доверенным лицам, а потом перекидывались на уроке сверхсекретными училконечитаемыми записками. Конечно, пока втихую зашифруешь/расшифруешь — мог уже и урок пройти. Да и, при огромном желании, учительница могла отобрать ключ так же легко, как и саму записку. Ну и сам факт кодирования и тип кода угадываются на ура, ведь это, наверное, самый естественный код, что только можно придумать.
Но если заморочиться, выучить ключ, натренироваться писать и читать на этом своём языке значков, то такую записку чужаку не прочесть никак! Это же абсолютно невозможно! Не какой-нибудь Цезарь, где после нескольких итераций информация выкатывается на блюдечке.
Так я думал, пока не прочитал «Золотой жук» от Эдгара Аллана По, и это просто снесло мне башню. Главный герой использовал факт, что в английском самая частая буква — это «e», а самое частое слово — это «the». Ну конечно же! Хоть у нас в русском и нет артиклей, выдающих шпионов, но есть предлоги, союзы и прочие мелкие слова! А узор значков повторяет в нашей криптограмме ту же структуру, что была у оригинального текста! Получается, стоит мне напрячь мозг, и я смогу прочесть текст из значков, даже не зная ключа!
Девчонки в нашем классе тоже баловались шифром простой подстановки. Аналогично, они скрывали так от чужих глаз личные записки и особо секретные места в женских тетрадках. Хм! «Женские тетрадки»! Это что-то такое из области «мам, ну не читай». Девочки там рисовали, анкеты заполняли друг другу, писали, кто из класса кому нравится. Не знаю, занимаются ли этим школьницы сейчас. Теперь вроде как и записки не нужны — у каждого есть смартфон, да и анкеты уже в соцсетях… Блин, ладно, этот текст не про то, какой я старый, а про то, какой я тупой, так что на этом не буду останавливаться. Короче, девчонки были в теме.
Как-то на уроке, когда учительница вышла из класса, мы разболтались с одноклассницей, которая сидела впереди меня. Я увидел у неё ключ с рисунками и, слово за слово, начал выпендриваться, что шифр этот я на своём огромном карандаше вертел, и что если она напишет мне записку, то я, включив свой гениальный мозг, дома декодирую её как нефиг за часик. Она мне, конечно, не поверила, но сильно заинтересовалась. Мы обговорили правила, что это будет не пара слов и не случайный набор букв, и она написала записку.
Я два дня ломал голову. Ни интернета, ни даже компьютера у меня тогда не было — всякую информацию о языке получить либо не представлялось возможности, либо можно было только опытным путём. Я даже, в отличие от персонажей «Жука», не знал, какая самая частотная буква в русском. Если вам интересно, это буква «о» (что тоже было откровением, потому что я грешил на «а», даже в «Поле Чудес» всегда её игрокам в телевизоре первой советовал). Как я узнал про «о»? Нет, не загуглил. Я взял книжку «Незнайка на Луне» и посчитал там количество каждой из букв на трёх открытых наугад страницах. Как мне помогла моя статистика? Да никак! Может, если бы Вера зашифровала мне «Войну и Мир», то какой-то узорчик и нарисовался бы подстановкой по частоте, да и то вряд ли. Мне не помогла даже «о», потому что кандидатов на неё было аж два! Самое частотное слово в русском я тоже не знал, подозревал, что это был какой-нибудь союз или предлог, но кандидатов на всякие простые слова я тоже не нашёл.
Я попробовал предположить, что там может быть написано. Моё имя, её имя, оскорбления в мой адрес о том, что ни черта я не смогу расшифровать. Подстановки из этого перебора не давали мне ничего — предположения открывали слишком мало соседних букв, чтобы служить индикаторами правды. Перебирать же по два слова — ужас, это же в количество слов больше работы, чем по одному!
— Всё понятно! Эдгар По же писатель! Он замечательно расшифровал своим персонажем то, что сам зашифровал. Наверное, и текст такой подобрал специально, чтобы у него всё в ёлочку сошлось. Эх, ну я и дурак, поверил в сказки!
В общем, пришлось мне признать своё полное и безоговорочное поражение перед Верой, поинтересовавшись в конце:
— Так что же там было?
— Но ты же сказал, что сможешь и так прочитать.
— Нет, не смог. Ну так, чё там?
— Да ничего. Раз не смог, то и не смог.
Что там было — до сих пор не знаю. Зато отчётливо помню, что в тот момент я был так измучен этой загадкой, что даже не хотел знать ответ. Записку, если что, я потерял практически сразу. Забил и забыл.
Через какое-то время я вспомнил эту историю. Мне стало очень обидно, что я так быстро сдался в задаче взлома шифра простой подстановки. Я пошёл в библиотеку, взял какие-то талмуды по анализу русского текста, ничего из написанного там не понял, хотя долго с умным видом в них пялился, и решил, что готов к реваншу! На этот раз подопытным был мой батя. Он очень любит рассказы Эдгара По, поэтому согласился сделать новую шифровку для меня. Я получил от него… длинные строчки цифр.
Ну да, конечно, заменять буквы можно не обязательно на рисунки, можно и на числа, и на те же самые буквы, но в другом порядке, и ещё много как. Но дело в том, что его числа были без пробелов, подряд, прямо как символы в «Жуке». Задача стала ещё сложней! Отец настаивал именно на этой форме задачи и не принимал возражений:
— Ты же просил, вот, решай! Если я буду подсказывать, то какой смысл?
— Ну ладно.
И тут батю постигло сильное удивление, потому что я прямо на его глазах по почерку легко вычленил как отдельные «буквы» (они все состояли из трёхзначных чисел), так и отдельные «слова» (там были пробелы явно длиннее, чтобы он сам не сбился, пока шифровал). За это он меня потом похвалил. Но только за это, потому что дальше моя работа встряла ровно на том же месте, что и в первый раз. Я снова долго колупался, пробовал всё, что приходило в голову, и… сдался. Опять. Батя показал оригинал — им оказались предложения из инструкции к какому-то лекарству, которое у него валялось на столе, при этом ещё и с одной грамматической ошибкой — не помню, намеренно ли.
Прошло шесть лет. За это время у меня появился компьютер, затем компьютер получше, затем даже и интернет. Я кой-как освоил свой первый язык программирования (им был VBA, язык макросов из офиса, который почти не отличался от VB6.0). И вот, в какой-то из летних, свободных от школы вечеров я вдруг вспомнил про этот шифр! Я нашёл в интернете частотный словарь, нашёл статистику по буквам в Википедии и засел на всю ночь за реализацию программы, которая, нет, не расшифровывала бы всё сама, а просто помогала с перебором. Я писал себе именно тулзу, которая работала бы со мной как единое целое, компьютер умеет перебирать по словарю, выдаётся статистика, есть всякие автоподстановки, но решения и гипотезы из предложенных выбираю я. Подумал, что так будет гораздо проще и нагляднее. Заодно написал себе отдельную программу, которая шифровала бы текст случайными символами, набор которых был, в память о прошлом, из трёхзначных чисел (и потому что так проще реализовать). И всё получилось, я сам себе зашифровал несколько текстов и сам успешно их расшифровал.
Но, разумеется, так нечестно. Поэтому я объяснил суть одной подруге в моей аське, и она согласилась поучаствовать. Я скинул ей свою программу для шифрования, чтобы она не мучилась вручную. Она сгенерировала новый случайный словарь подстановок, вставила туда свой текст и прислала мне шифровку.
И да, я смог его взломать. Там было признание мне в любви от неё. Про то, что это единственный способ, которым она способна выразить свои запретные чувства. Она писала, что я никогда не смогу взломать этот шифр, но где-то в глубине души всё же она надеется, что я справлюсь. Что если это не идеальный способ намекнуть, как бы сказать эту тайну и при этом её не говорить, то она даже и не знает… Ахахах, ладно, нет, она туда скопировала несколько предложений из правил локального форума, на котором мы в нашем городе тогда все сидели, вот и всё.
Это был момент моего триумфа! Я наконец-то смог решить проблему, которую… серьёзно, правила форума? Ну я думал, что ты хоть… Я тут вообще-то взломал… Вот лажа-то!
На этом можно было бы и закончить, но нет, давайте промотаем время ещё на шесть лет вперёд. В один день выходят два моих новых видео сразу. В первом — огромная куча пасхалок, которые связаны с очередным шифром простой подстановки. Тем самым, три цифры на букву, только алфавит теперь английский. И, хотя он выдаётся вместе с ключом, да и главная сложность, наверное, не в нём, я правда очень рад, что настолько многим людям было не всё равно. Спасибо!
Ещё через шесть лет, то есть сейчас, я пишу этот текст, в котором рассказываю свою историю, связанную с шифрами простой подстановки. Интересно, как они догонят меня ещё через 6 лет?