Самые популярные товары с Али по лучшей цене:

Мужские носки, 5 пар за 458 руб.
Фляжка Jack Daniel’s. Нержавсталь, 200 ml 523 руб.
Мужской кошелёк с RFID-блокировкой 427 руб.

14 мая 2021, 14:00

Не для чужих глаз.

.

Ложкин Василий
Конечно, стебался. Но...
Вышло взаправду.

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

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

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

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

§1. Вводная.

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

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

§2. Компрессия сообщения.

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

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

Попутно можно немножко схитрить, ведь на примере «экономичного» алфавита для цифровых мод мы уже видели, как наиболее употребимые буквы (и даже их сочетания в виде CQ, DE и 73) могут кодироваться одним символом, а менее употребимые - двумя. Что-то подобное практикуется для zip и rar алгоритмов, кстати.

Конечно, можно выписать на листочке все те слова, которыми мы собираемся общаться в канале «Юстас - Алекс», и на этой специфической выборке, имеющей отдалённое отношение к классическому литературному русскому языку, определить частотность букв для нашего экономичного алфавита. Чтобы самые часто употребимые буквы кодировать одной цифрой, а остальные двумя.

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

Russian single letter frequencies are as follows (in percent %):
А 8.04 К 3.49 Х 1.02
Б1.55 Л4.32 Ц0.58
В4.75 М3.11 Ч1.23
Г1.88 Н6.72 Ш0.55
Д2.95 О10.61 Щ0.34
Е8.21 П2.82 Ъ0.03
Ё0.22 Р5.38 Ы1.91
Ж0.80 С5.71 Ь1.39
З1.61 Т5.83 Э0.31
И7.98 У2.28 Ю0.63
Й1.36 Ф0.41 Я2.00

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

Russian Language Letter Frequency:
О
10.61
Е
8.21
А
8.04
И
7.98
Н
6.72
Т
5.83
С
5.71
Р
5.38
В
4.75
Л
4.32
К
3.49
М
3.11
Д
2.95
П
2.82
У
2.28
Я
2.00
Ы
1.91
Г
1.88
З
1.61
Б
1.55
Ь
1.39
Й
1.36
Ч
1.23
Х
1.02
Ж
0.80
Ю
0.63
Ц
0.58
Ш
0.55
Ф
0.41
Щ
0.34
Э
0.31
Ё
0.22
Ъ
0.03

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

На роль гласных подходят «НТС», а согласных у нас больше: «ОЕАИ»

Теперь нужно придумать из этих букв что-нибудь осмысленное, длиной от 5 до 7 не повторяющихся знаков, в зависимости от подробности сжимающей таблицы (совсем простая или посложнее). Чем проще таблица, тем длиннее слово, и наоборот.

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

В частности, тут напрашивается ключевое слово «СОНЕТ».
Но и всякие «СЕНАТ», «СТЕНА», «САТИН», «ТИОНА» тоже пойдут.

Сама сжимающая таблица (straddling checkerboard) может иметь какой угодно дизайн, но наиболее простая и понятная выглядит вот так:

цифр
0
1
2
3
4
5

6

7

8

9
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

87

88

89
!
90
:
91
?
92
(
93
)
94
-
95
+
96
,
97
.
98
проб
99

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

Ещё ниже содержатся некоторые нужные знаки, обычно прямо в том порядке, как они прописаны на стандартной клавиатуре.

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

Теперь что касается циферок под знаками.

Это символьно-цифровая подмена, причём наиболее употребимые буквы (которые в первой строке) обозначаются одинокой цифрой, а все остальные знаки - двумя. Одинокие цифры с 6 по 9 вообще не используются, так как они указывают на соответствующую строку, где совместно с другой цифрой будут обозначать какой-то символ.

Попрактикуемся:

Русский: В коде:
банан61603603
батат61605605
горох63273276
латук706057469
лотос702521
перец72473477
редис73464671
тыква581696260
укроп746973272
Цифровая последовательность:
01984000119988440

На практике слово из пяти букв переводится в число из неопределённого количества цифр от пяти до десяти, и если все эти овощи записать через пробел (53 знака), а потом оцифровать, то получится 89 цифр (пробел кодируется тоже). Что несколько меньше ожидаемых 106 знаков, в чём и состоит предназначение сжимающей таблицы, или «шахматной доски», как её ещё называют в криптографии.

С цифрами всё чуть иначе, причём есть много возможных вариантов. Но мы договоримся при наличии числа в тексте выставлять ноль, затем каждую цифру числа писать два раза подряд, и завершать число тоже нулём. Таким образом, «1984» становится «0119988440», но в мешанине знаков после трансляции буковок в циферки всё-таки остаётся понятным, что тут какое-то число.

Реальные таблицы сжатия не будут такими очевидными, и не запоминаются так просто. К примеру, страница сайта scz.bplaced.net продемонстрирует кучу «шахматных досок» от самых разных спецслужб, среди которых встречаются и русскоязычные.

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

§3-OK. Правильный ключ.

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

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

Чуть позже мы ознакомимся с сутью операций сложения-вычитания по модулю 10, причём, как и обещано, нам понадобится только карандаш и очень немного мозгов.

Пока же несколько очень важных замечаний про ключ:

  1. Ключ должен быть составлен из истинно случайных чисел.
  2. Ключ обязан использоваться только однократно.
  3. Ключ доступен лишь отправителю и получателю.
  4. Ключ после применения физически уничтожается.
  5. Длина ключа изначально превосходит длину сообщения.
    Но используется только часть ключа, равная по длине сообщению.

Да, мы сейчас как раз говорим о листке шифроблокнота, на котором обычно можно видеть 50-60 групп по 5 десятичных цифр, ну или формально 250-300 случайных цифр, ибо разбивка на группы совершенно не важна.

Далее стоит знать, что любой генератор случайных чисел, либо кусок бесконечного числа ПИ, либо ещё что-то в том же духе, не выдаст на выходе истинно случайный набор чисел, и применять всё это нельзя. Потому-то и заходит речь о лототроне с немедленным возвращением обратно каждого выпавшего шара и тщательным их перемешиванием по ГОСТу и в присутствии сотрудника первого отдела, либо о подбрасывании игрального кубика два раза подряд, комбинация из двух выпавших граней которого (XY) даёт случайное число N, находимое по такой таблице:

XY N XY N XY N XY N XY N
110216312418514
121227323429525
132238334430536
143249345441547
154250356452558
165261367463569
Комбинации 6Y игнорируются.

Конечно, имеются и готовые спецсредства. Кубик с 10 гранями:

Кубик с 10 гранями.

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

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

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

Так, и только так, рождается «правильный ключ».

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

§3-NO. Неправильный ключ.

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

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

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

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

§4. Процедура шифрования.

Теперь, когда у нас есть «шахматная доска», она же сжимающая таблица, специально составленная в расчёте на компрессию сообщения, и само сообщение, например, «лотос», переведённое силами таблицы в число «702521», пришла пора зашифровать его ключом, полученного из ничего - давайте никакой кодовой фразы вводить в тулзу из §3-NO не будем, а просто нажмём кнопку создания ключа.

В первой строке той формы должны нарисоваться 5 групп:

17852 81106 66298 07409 68382

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

Над второй группой и дальше пишется наше цифровое сообщение, до этого бывшее русскими буквами:

      л ото с - -
      70252 18989
17852 81106 66298 07409 68382

Неполную группу обычно дополняют символами любой пустой клетки или пробела (87,88,89,99 в случае нашей «шахматной доски»), если не достаёт чётного числа символов, или ещё и нулём в конце, когда не хватает ещё одного символа. Потому как ноль - это признак перехода к цифрам, то есть по сути дела триггер, и никак не отображается на бумаге при дешифровке.

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

      л ото с - -
      70252 18989
17852 81106 66298 07409 68382
17852 99156 52791

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

Упражнения с карандашом могут не понадобиться, так как столь простую операцию способна выполнить даже форма. Но в форме из §3-NO должен быть сгенерирован ключ (либо подставлен свой готовый).

§5. Процедура дешифровки.

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

17852 99156 52791
17852 81106 66298 07409 68382
      70252 18989
      л ото с - -

Вот тут уже, сверяя третью строчку с «шахматной доской», нужен кое-какой навык. Понимание, что всё начинающееся с 6, 7, 8 и 9, должно содержать две цифры, и именно в таком комплекте его и надо переводить в буквы по таблице сжатия. А вот цифры с первой по пятую каждая символизирует самостоятельную букву.

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

§6. О порядке математических операций.

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

Достаточно, чтобы эти действия осуществлялись согласованно с двух сторон. Либо так, либо этак.

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

§7. О провалах.

Если не относиться со всем уважением к пяти основополагающим правилам из §3-OK, получится профанация.

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

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

Так что стоит проникнуться незыблемостью правил из §3-OK.

Итого.

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

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

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

Код на JS там открыт, и способен удовлетворить любопытство, как оно работает. Следует помнить, что местный автор вообще не знает JS, он тупо гуглил реализации нужного ему функционала. Будьте снисходительны :)

Другие статьи категории «Нужные вещи»

Ухватистый нож от дядюшки Ляо.

Ухватистый нож от дядюшки Ляо. Как-то так повелось, что суровые сибирские мужики почти поголовно весьма неравнодушны к колюще-режущему. Не то чтобы сидели за тяжкие телесные через одного, а в хорошем смысле, как ценители прекрасного. Правда, даже владея изящной карманной катаной, вряд ли кто пойдёт с такой по грибы или в поход.

Fixed Wireless Terminal, замена городской АТС.

Fixed Wireless Terminal, замена городской АТС. Сегодня у нас обзор очень странного для некоторых устройства, ценность которого тем выше, чем захолустнее и провинциальнее дистрикт юзера. Хотя и в префектуре ему применение тоже сыщется. Само устройство размером с карманный требник призвано заменить собой проводную АТС городского телефона, но с сохранением привычных пользователю оконечных устройств.

BitMessage: Когда паранойя - высокое искусство.

BitMessage: Когда паранойя - высокое искусство. Как говорил Вождь Народов в 1935 году, «жить стало лучше, жить стало веселее». Особенно параноикам. И особенно сегодня. Потому как современный софт дарит им море удовольствия. А возможно, и чуть ли не катарсис. И тут мы не стебёмся ни разу, потому как любая по-настоящему параноидальная идея всегда очень здравая, и обычно перспективная.
Все заметки категории «Нужные вещи»