Как происходит такое шифрование? У двух людей, которые желают обмениваться секретными данными этим абсолютно надёжным способом, должны быть специальные одинаковые блокноты с ключами. На каждой странице такого блокнота написаны случайные символы. Когда первый человек посылает второму секретное сообщение, он зашифровывает его при помощи ключа на первой странице блокнота. Второй человек, получив сообщение, расшифровывает его при помощи такого же ключа на первой странице его блокнота. После этого и первый и второй вырывают первую страницу блокнота и уничтожают её (лучше всего сжечь и смешать пепел; если просто выкинуть страницу с ключом в мусорное ведро, то она может быть найдена зловредным криптоаналитиком, и тогда всё пропало). Далее всё повторяется. Каждый раз после использования ключа с очередной страницы эта страница уничтожается. Потому-то метод и называется
Теперь ты знаешь, как расшифровать ту шифрограмму, которая пришла в письме на этой неделе. Поищи, у тебя должен быть ключ, который передан тебе заранее.
Теперь я расскажу тебе, почему этот способ шифрования не используется так широко. Если ты подумаешь, то поймёшь, что проблема заключается в передаче ключа. Одноразовый ключ должен быть заранее создан и получен теми двумя лицами, которые должны обмениваться секретной информацией. Это сделать не так сложно, если их действительно всего двое. А представь, к примеру, штаб, которому необходимо обмениваться секретной информацией с сотнями разведчиков по всему миру. Одноразовые блокноты не должны повторяться у разных людей. То есть для каждого разведчика надо создать свой блокнот, как-то передать его, а потом время от времени обновлять, когда блокнот заканчивается. Это связано с очень большими расходами и риском раскрыть свою агентурную сеть.
Передавать же секретный ключ по открытым каналам связи, как ты понимаешь, нельзя. Это должна быть надёжная передача, а пока не придумали ничего надёжнее, чем передача из рук в руки. Впрочем, существует метод скрытой передачи по открытому каналу. Но он связан с серьёзной математикой, и его описание выходит за рамки этой книги. К тому же он всё равно остаётся довольно громоздким и проблематичным. Так что мы изучим его в другой раз. Но и этот метод полностью не решает проблемы
Но возможно, ты можешь передать секретные ключи одному или нескольким своим коллегам по секретной переписке. Тогда я сейчас научу тебя генерировать такие ключи. И ты поймёшь, что это тоже непросто и связано с большим расходом времени и сил.
Вспомни, как мы научились кодировать все буквы алфавита при помощи пяти двоичных цифр (нулей и единиц). Для каждой буквы нужно пять двоичных цифр, то есть пять бит информации. Как получить случайные пять бит? Да очень просто. Для этого надо воспользоваться пятью монетками. Возьми пять монет разного достоинства (чтобы различать их): 10 копеек, 50 копеек, 1 рубль, 2 рубля и 5 рублей (или какие-то еще). Орёл обозначает 0, решка обозначает 1. Брось пять монет и запиши результат по порядку от 10 копеек до 5 рублей. Таким способом ты получишь один символ. Если все монеты выпадут орлом (это соответствует 00000, то есть пробел), то не используй этот символ.
Таким способом ты сможешь сгенерировать ключ произвольной длины. Его надо записать в двух экземплярах, один оставить у себя, а второй передать тому, с кем ты собираешься вести секретную переписку. Конечно, твой друг должен быть обучен методу использования одноразового блокнота.
На этом наше путешествие в мир криптографии и криптоаналитики заканчивается. Но я затрону ещё две интересные темы, которые останутся тебе в качестве домашнего задания (про них не будет знать тот, с кем ты переписывался всё лето). А в самом конце книги я перечислю, что интересного можно почитать на тему криптографии, если ты заинтересовался этой областью прикладной науки.
Домашнее задание 1. Шифр подстановки для пар символов
Вот тебе первое домашнее задание. Придумай шифр «одноалфавитной» подстановки, но не как обычно, для каждой буквы, а по одному символу для пары букв. Возьми уже знакомый алфавит из тридцати двух символов и составь таблицу размером 32 × 32. Строки и столбцы таблицы обозначь символами нашего алфавита. А в каждой ячейке придумай замену паре символов в виде какого-нибудь экзотического знака.
Использовать такой шифр будет просто. Весь открытый текст разбивается на пары символов. Например, пусть надо зашифровать текст «СЕГОДНЯ Я ДОДЕЛАЮ ЭТО ДЕЛО». Разбиение на пары символов происходит следующим образом: «СЕ-ГО-ДН-Я_-Я_-ДО-ДЕ-ЛА-Ю_-ЭТ-О_-ДЕ-ЛО». Каждой паре символов соответствует один символ замены из твоей таблицы.
Выбирать символ замены надо по строке и столбцу. Первая буква в паре соответствует столбцу, а вторая — строке. Соответственно, в шифрограмме будет в два раза меньше символов, чем в открытом тексте, а разнообразие символов будет больше.