1709

Шифр Вернама: победил криптоанализ — и проиграл реальности

Серия Вехи криптографии через геймификацию

Можно ли создать шифр, который невозможно взломать вообще?

Не «очень трудно». Не «требует тысяч лет вычислений».

А именно невозможно в принципе. В криптографии такой шифр действительно существует.
И что удивительно — он предельно простой. Его можно записать одной строкой:
C = P XOR K
Это шифр Вернама, его частный случай известнен как одноразовый блокнот (One‑Time Pad).

Интерактивная модель шифра Вернама в <a href="https://pikabu.ru/story/shifr_vernama_pobedil_kriptoanaliz__i_proigral_realnosti_13909447?u=https%3A%2F%2Fludus-lab.ru%2Fgames%2Fvernamcipher%2Findex.html&t=Ludus%20Lab&h=a7765dc70aecab6f4143ac52e9cb3c9db0df9924" title="https://ludus-lab.ru/games/vernamcipher/index.html" target="_blank" rel="nofollow noopener">Ludus Lab</a>

Интерактивная модель шифра Вернама в Ludus Lab

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

Это не маркетинговое утверждение.
В 1949 году Клод Шеннон, один из основателей теории информации, строго доказал, что такой шифр невозможно взломать никаким криптоанализом. Более того — это единственный известный шифр, для которого существует подобное доказательство.

От телеграфа к криптографии

История шифра начинается не с математиков, а с телеграфных инженеров. В начале XX века сообщения уже передавались не буквами, а кодами. Один из самых распространённых был
код Бодо (Baudot code).

Каждый символ в нём кодировался 5 битами. 5 бит дают 32 комбинации — этого мало для букв, цифр и знаков одновременно. Поэтому код использовал два режима:
— режим букв
— режим цифр и знаков

Переключение между ними происходило специальными управляющими символами.
Именно с такими потоками бит работали телеграфные машины начала XX века.

В 1917 году инженер AT&T Гилберт Вернам (Gilbert Vernam) предложил шифровать телеграфный сигнал. Идея была неожиданно простой: если сообщение уже представлено в виде битов,
можно смешать его с другим потоком битов — ключом. Для этого используется логическая операция XOR. Метод был запатентован в 1919 году: 📄 Vernam, G. S. Secret signaling system

Как работает XOR

Правило операции очень простое:
0 XOR 0 = 0
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0
Результат равен 1 только тогда, когда биты различаются.
Если обозначить:
P — бит открытого текста
K — бит ключа
C — бит шифротекста
получается формула:
C = P XOR K

У операции XOR есть удивительное свойство. Если применить её дважды с тем же ключом:
(P XOR K) XOR K = P
То есть та же самая операция выполняет и шифрование, и расшифровку.
С инженерной точки зрения это почти идеально:
— одна операция
— одинаковый алгоритм в обе стороны
— легко реализуется аппаратно

Но магия совершенной секретности появляется только при одном условии.
Ключ должен быть:
— полностью случайным
— длиной не меньше сообщения
— использован только один раз
Так появляется концепция одноразового блокнота (One‑Time Pad).

Почему его нельзя взломать

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

Факт, который часто удивляет

Шифр Вернама (а точнее его частный случай - одноразовый блокнот) — единственный шифр, который доказанно обладает абсолютной криптографической стойкостью.
Все современные алгоритмы — Кузнечик, AES, ChaCha20 — не имеют такого доказательства.
Они считаются стойкими потому что их пока не смогли взломать, а не потому что доказано,
что это невозможно. Это принципиальная разница.

Почему его почти не используют

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

Попытки взлома

Криптоаналитики пытались атаковать одноразовый блокнот с разных сторон. Но почти всегда проблема оказывалась не в алгоритме, а в его использовании. Самая известная уязвимость — повторное использование ключа. Если один и тот же ключ применить к двум сообщениям:
C1 = P1 XOR K
C2 = P2 XOR K
то
C1 XOR C2 = P1 XOR P2
Ключ исчезает из уравнения.
А дальше можно использовать статистику языка и постепенно восстанавливать сообщения.
Эта атака называется two‑time pad attack.

Кодировки, которые я применил в визуализации шифра

Кодировки в игре добавлены скорее как справочный элемент.
Они показывают, как текст превращается в поток бит перед шифрованием.
Доступны:
— Код Бодо
— ASCII‑7
— ASCII‑8
— UTF‑8
В оригинальной системе Вернама использовался ранее упомянутый код Бодо, имеющий на борту 5 бит в два режима (для букв и для цифр + доп. символы). Остальных кодировок тогда просто не существовало.

ASCII появится только в 1963 году. Он является примером фиксированной кодировки.
Каждый символ занимает одинаковое количество бит.

ASCII‑7
7 бит → 128 символов

ASCII‑8
8 бит → 256 символов

Это делает обработку очень простой: каждый символ начинается через одинаковый интервал.

Чуть более инетересной выглядит UTF‑8, появившаяся в 1992 году.

Как работает UTF‑8

UTF‑8 — кодировка переменной длины. Символ может занимать:
1 байт (8 бит)
2 байта (16 бит)
3 байта (24 бита)
4 байта (32 бита)
Как декодер понимает длину символа? По первому байту. Он содержит специальный префикс:
0xxxxxxx → 1 байт
110xxxxx → начало 2‑байтового символа
1110xxxx → начало 3‑байтового символа
11110xxx → начало 4‑байтового символа
Все последующие байты начинаются с:
10xxxxxx
Поэтому границы символов можно определить однозначно.
Примеры:
A
01000001
Ж
11010000 10010110
😊
11110000 10011111 10011000 10001010

Как это реализовано в геймплее визуализации

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

Выбор кодировки

Выбираем кодировку, в правой панели представлены примеры закодированных символов

Выбираем кодировку, в правой панели представлены примеры закодированных символов

Ввод сообщения

Вводим сообщение

Вводим сообщение

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

Генерация ключа

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

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

Всё в порядке! Секрет останется секретом

Всё в порядке! Секрет останется секретом

Помните?) Не менее длины сообщения. В данном случае длина сообщения 392 бита
и ключ в 512 бит вполне удовлетворяет этому условию. Хотя, можно было выбрать и вариант
"По длине сообщения".
А что насчет условия по случайности генерации ключа? Ну, на качественный генератор случайных чисел или оборудование квантового распределения ключей я не накопил, так что для демо целей сойдёт и Math.random()

Ключ сгенерировали, считай треть дела сделано!

Ключ сгенерировали, считай треть дела сделано!

Зашифровываем сообщение

Два режима:
Ручной (Следующий бит) - кликаем, наблюдаем постепенное побитовое преобразование, под кнопками в реальном времени наблюдаем XOR операцию.
Автоматический (Мгновенное шифрование) - надоело кликать, а 392 клика подряд не каждому дано осилить, добиваем процесс зашифрования в одно нажатие.

Процесс передачи как ключа так и шифротекста

Это база! Основа основ. Вечная проблема

Это база! Основа основ. Вечная проблема

Этот этап был и в Полибии, и в Цезаре, и в Виженере. Потому что это по сути ключевая проблема криптографии. Во всех смыслах.
Я даже позволил себе некоторые фривольности, так сказать, решил сделать небольшой подкольчик. Если шифротекст (по нажатию кнопки) отправляется по прямой, то ключ же полетит по кривой Безье. Владельцы большого парка СКЗИ, решившие вопрос без костылей по гарантировано безопасной передаче, выработке и загрузке ключей в ПАК - моё почтение!

Процесс расшифроки шифротекста

Тут без креатива, обратная функция. Я не знаю что еще сказать.

Тут без креатива, обратная функция. Я не знаю что еще сказать.

Комментарии излишне. Хотя... Отмечу что на 42 клике мне стало скучно и я воспользовался функцией "Мгновенное шифрование".

Декодирование

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

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

Итоги сеанса

Thats all folks

Thats all folks

Итоги статьи

На этом всё ребятушки, подписывайтесь на канал, ставьте лайк, всем пока...
Раньше здесь был мат пара-папам-па-па-пам

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

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

👉 Игра «Шифр Вернама» в Ludus Lab

Правила сообщества

Обязательно к прочтению для авторов:

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

Обязательно к прочтению для всех:

Добавление ссылки разрешено если она не содержит описание коммерческих (платных) продуктов и/или идентификаторов для отслеживания перехода и для доступа не нужен пароль или оплата в т.ч. интернет-ресурсы, каналы (от 3-х тематических видео), блоги, группы, сообщества, СМИ и т.д.


Запрещены политические holy wars.

По решению модератора или администратора сообщества пользователь будет забанен за:

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

2. Публикацию поста/комментария не соответствующего тематике сообщества, в том числе обсуждение администраторов и модераторов сообщества, для этого есть специальное сообщество.

3. За обвинение в киберпреступной деятельности.

4. За нарушение прочих Правил Пикабу.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества