Шифрование одноразовым ключом

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

Шифроблокнот. Настоящий.

Идея

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

Именно поэтому этот шифр используют нелегальные агенты по всему миру последние примерно лет сто.

Алгоритм в подробностях

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

Страница 1 
71584 59135 10873 05875 22115 62203 
61395 53834 20758 31021 93457 88709
36519 10145 18362 14721 87793 65382
30935 80228 05655 59467 60889 39496
63221 Страница 2 81355 12012 15231 21581 52793 95485
74645 24382 46745 01649 53642 83153
34052 16936 69602 12159 20701 19711
25368 98247 31598 02367 79890 62221
56445 Страница 3 31771 40261 36012 91130 85915 74089
69208 38521 11254 42708 … и т. д.

Отправка сообщения

Алиса хочет отправить Бобу сообщение «Проверка связи», она переводит его в цифровую форму, для этого служит особая таблица:

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

Кстати, если в тексте попадаются цифры, перед началом цифрового блока ставится особый код (в этой таблице — 0), и такой же — сразу после блока цифр, а каждую цифру внутри цифрового блока следует кодировать ее удвоением, то есть, например, 1917 превратиться в 0119911770, а 3.14 — в 033090011440.

А вот что получилось у Алисы:

П  Р  О  В Е Р  К  А  пробел  С  В  Я  З  И 
72 73 2 62 4 73 69 60   99    1 62  86 66 67

Алиса записывает цифры для последующего шифрования: 727326247369609916286667. В качестве ключа она использует вторую страницу блокнота, показанного выше. Первые пять цифр (81355) ключа— индикатор, они не используются в шифровании. Итак, Алиса записывает ключ под кодированным текстом:

72732 62473 69609 91628 66667 
12012 15231 21581 52793 95485

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

7 и 1 = 7 – 1 = 6
2 и 2 = 2 – 2 =0

2 и 5 = 12 – 5 = 7

Итого:

72732 62473 69609 91628 66667  -  текст 
12012 15231 21581 52793 95485  -  ключ 
60720 57242 48128 49935 71282  -  шифровка

Алиса дописывает в начало шифротекста первые пять цифр ключа (индикатор) и отправляет Бобу шифровку:

81355 60720 57242 48128 49935 71282

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

Прием сообщения

У Боба есть копия блокнота «Алиса—Бобу», и он, получив шифровку, ищет в нем страницу, начинающуюся с 81355 (индикатор). Теперь он записывает цифры ключа (пропуская индикатор) под шифротекстом:

60720 57242 48128 49935 71282
12012 15231 21581 52793 95485

Чтобы получить исходный текст, он по одной складывает цифры шифротекста и ключа, отбрасывая десятки:

6 и 1 = 6 + 1 =7
0 и 2 = 0 + 2 = 2

7 и 5 = 7 + 5 = 12 = 2

Итого:

60720 57242 48128 49935 71282 
12012 15231 21581 52793 95485 
72732 62473 69609 91628 66667 - расшифровка

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

Таким образом, Алиса использует блокнот «Алиса—Бобу» для зашифровывания сообщений, а Боб — для расшифровки. Для отправки сообдений от Боба к Алисе у них есть по копии другого блокнота, «Боб-Алисе».

Чуть больше о кодировании

Кодировочная таблица не влияет на стойкость шифра, даже если третьей стороне известен способ кодирования, это не приблизит ее к расшифровке. Так что таблица должна быть просто удобной.

Вот развитие упомянутой ранее таблицы для кодирования русского и латинского алфавитов:

Для ввода дополнительного алфавита (в данном случае, латинского) следует ввести код перехода на дополнительный алфавит (88), для возврата к основному – код перехода к основной таблице (87).

Плюсы, минусы, подводные камни?

Основная сложность в работе с этим шифром — организация обмена ключами. Достаточно использовать один ключ дважды, чтобы переписка была без проблем расшифрована, так что ключей должно быть… скажем, достаточно.

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

Вторая сложность — генерация ключей. Вся система работает только если цифры в шифоблокнотах действительно случайные. Большинство компьютерных программ используют так называемые «псевдослучайные числа», последовательность которых может быть воспроизведена третьей стороной. На юниксоподобных системах (Linux, BSD, Mac OS) есть встроенные в систему генераторы почти совсем случайных чисел, но и к ним есть вопросы. Хотя на первое время, пока за вами не охотится ФСБ и ФБР, сойдёт.

Третья сложность — безопасная среда для зашифровки и расшифровки. Если вам достаточно «безопасности» домашнего компьютера, скорее всего, вам не нужен шифр с одноразовым ключом.

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

Ссылки по теме:

  • Википедия — больше теории
  • Очень много и подробно, с историей, но по-английски.
  • 71584 24571 13491 79921 52889 53636 36832 54036 50928 95065 06375 86945 47147 86954 44370 87278 19269 34350 87391 61344 79805


    Если понравилось: у меня есть канал в Телеграме, и он не спамит уведомлениями. Подписывайся!

    2016.03.31