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

Честно должен предупредить читателя, что дисциплину "Кодирование и Защита Информации" я сдал на тройку и с третьего раза. Данная статья - скорее попытка привлечь внимание к шифрованию на бумаге и его ограничениям. Тем не менее ниже будет приведен готовый пример шифра, которого хватит для того чтобы вести дневник и заметки в тюремной камере, общежитии, неблагополучной семье и т.п.

Фактически, в силу умственных способностей человека, нам подходит только табличный шифр. Не спешите закрывать статью. Мы его улучшим. Но начнем все равно с азов. Сперва мы придумываем 33 несуществующих буквы, и каждой реальной букве русского алфавита ставим в соответствие такую букву. Например:

А - S,   К - C,   Х - T,
Б - W,   Л - D,   Ц - U,
В - Y,   М - D,   Ч - W,
Г - Y,   Н - E,   Ш - Y,
Д - U,   О - F,   Щ - ?,
Е - I,   П - G,   ъ - ?,
Ё - L,   Р - N,   Ы - ?,
Ж - Z,   С - O,   ь - ?,
З - V,   Т - Q,   Э - ?,
И - ?,   У - R,   Ю - ?,
Й - T,   Ф - S,   Я - ? 

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

С таким псевдоалфавитом сообщение "МАМА МЫЛА МЫЛО" будет выглядеть как "DSDS D?DS D?DF". Такое сообщение может быть взломано даже вашим сокамерником, или в реалиях коммуналки, вредным соседом. Зная примерную частоту повторяющихся букв, можно делать гипотезы относительно того, какой символ что шифрует, а там уже можно подставлять распространенные слова русского языка. Например мы видим что первое слово состоит из двух одинаковых слогов. Предполагаем, что это "ПАПА", "МАМА" и тем самым получаем 4 буквы выдуманного алфавита, проверяя насколько угаданное слово соответствует остальному сообщению:

"ПАПА" - "ПАПА П??А П???"
"МАМА" - "МАМА М??А М???"

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

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

Усложняем шифр. Человеку будет труднее читать, если мы просто заменим пробел на какой-то символ. Например на "?". И наше "МАМА МЫЛА МЫЛО" превращается в "DSDS?D?DS?D?DF". Взгляду не за что зацепиться, нужно добавлять гипотезу какой именно из символов пробел. Таким образом, при угадывании, например в нашем сообщении первым словом может быть "КОРОНА" или "КОРОВА", что значительно увеличивает количество гипотез, которые нужно проверить. Для вас это все еще читаемо.

Но для частотного анализа это не проблема, алгоритм даже не придется менять. Просто где пробелы будет сразу неясно.

Теперь возьмемся за более серьезные усложнения. Будем вводить новые символы выдуманного алфавита. Для двух разных целей. Пустышки - символы, которые нужно пропускать при чтении. Второй тип нововведений - дубликаты высокочастотных букв.

Пустышки нужно писать довольно часто, но где угодно, чтобы они по частоте были в топе используемых символов. Введем 2 символа, которые читаются как пустое место - "$" и "#" . Наше исходное сообщение может быть теперь закодировано как "D#S$DS?$D?D$S?D?#DF". Все еще читается в уме, потому что единственная операция, пропуск нужного символа, легко подвалстна нашему мозгу. Так мы, например, не читаем знаки препинания. Расшифровать такое сообщение на бумажке уже вряд ли под силу человеку. Добавление же каждого символа-пустышки при частотном анализе увеличивает количество операций на... криптоаналитики, подскажите в комментариях.

С дубликатами все примерно то же самое. Для реальной буквы "А" вводим два выдуманных символа - "S" и "?". И попеременно меняем их. Таким образом наше сообщение(даже без пустышек) может выглядеть так: "DSD??D?DS?D?DF". Обычный частотный анализ даст уже совсем другую картину. Можно кодировать один реальный символ двумя выдуманными. Вводя дополнительные символы в наш алфавит мы сильно увеличиваем количество гипотез которые нужно проверить - есть ли там знаки препинания, цифры, заглавные буквы? И, поверьте, если сделать дубликаты для основных пяти символов, это все еще легко читаемо человеком.

Возвращаясь к пустышкам - можно использовать их как старт-стоп коды в сообщении. Например мы договорились, что у нас есть символ "!". До того как он встретился в сообщении - там идут намеренно искаженные слова, похожие на настоящие, но с ошибками типа "ЖОЖО", "БИЗАР". После того как встретился "!" идет обычный текст - с дубликатами, пустышками, потом опять "!" и снова белиберда. Наше сообщение превращается даже без пустышек в:

"??D!DSD??!FF!D?DS?D?DF"

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

Сокращения - часто используемые слова вы можете оформить в отдельные символы, затруднив анализ еще больше.

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

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

Взломщику будет труднее. Задача распознавания намеренно искаженного почерка ставит вопрос о том - сколько вообще символов в исходном выдуманном алфавите, что в принципе ставит перед криптоаналитиком вопрос: по правильному ли набору данных идет перебор и анализ? Или может быть что-то упущено, или наоборот добавлены лишние символы?

Это очень муторная работа, особенно если вы будете использовать непохожие на обычные буквы символы. Нужно при записи каждого вашего иероглифа проверять насколько он похож на остальные, и мозг аналитика не будет оперировать буквами, что делает процесс еще сложнее. Если задача взлома сколько-то интересна алгоритмически, то на вбивке данных много народу отсеется как на скучном занятии.

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

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

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

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

Насколько увеличение алфавита за счет пустышек замедляет подбор шифра?

Насколько добавление дубликатов замедляет/делает бессмысленным частотный анализ?

Насколько важен перенос полного алфавита с бумаги в цифровой вид?

Какие еще виды компьютерного анализа можно применить и что стоит добавить в табличный шифр?

Есть ли апробированные криптостойкие(в рассчитанных пределах) системы шифрования где ничего кроме головы не нужно?