Шифр Вернама — одноразовый блокнот, единственный шифр, который нельзя взломать, если ключ случайный, используется один раз и не короче текста. Шифруйте сложением по модулю алфавита или через XOR номеров букв, а случайный ключ нужной длины сгенерируем в браузере.
Всё считается в браузере — текст никуда не отправляется
Номер буквы с единицы и его запись в 6 бит. XOR — сложение битов без переноса: 1 ⊕ 1 = 0.
03
Как работает
Сложение с ключом
ш + к = г · 25 + 11 = 36 → 3
Номер буквы текста складывают с номером буквы ключа и берут остаток от деления на 33. Расшифровка — вычитание.
XOR номеров
26 ⊕ 12 = 22
Номера пишут в двоичном виде и складывают побитно. Тот же ключ, применённый к номерам шифровки, возвращает буквы.
Почему не взломать
ключ = длина текста
Случайный ключ, не короче текста и использованный один раз, делает любую расшифровку той же длины равновероятной.
04
Частые вопросы
К каждой букве текста прибавляют букву ключа: номера складывают и берут остаток от деления на число букв алфавита. «Шифр» с ключом «ключ» даёт «гфтз»: «ш» (25) плюс «к» (11) — 36, остаток от деления на 33 — 3, это «г». Второй вариант — XOR: номера букв пишут в двоичном виде и складывают побитно. Ключ при этом не короче текста.
Если ключ случайный, не короче текста и использован один раз, шифровка может с равной вероятностью означать любой текст той же длины. Подобрав ключ, можно получить и «да», и «нет» — и ничто не подскажет, какой вариант настоящий. Поэтому перебор бесполезен даже с бесконечными вычислениями. Слабое место не в шифре, а в ключах: их нужно создать, передать и уничтожить.
По модулю буквы складываются по кругу алфавита, как в шифре Виженера, и шифровка остаётся буквами. В XOR номера букв записывают в двоичном виде — шесть бит для русского алфавита — и складывают без переноса: 26 ⊕ 12 = 22. Результат часто выходит за пределы алфавита, поэтому шифровку пишут номерами. XOR сам себе обратен: тот же ключ возвращает текст.
Шифр перестаёт быть стойким. Если ключ короче текста и повторяется по кругу, это уже шифр Виженера, который взламывают по повторам. Если одним ключом зашифровать два сообщения, их разность не зависит от ключа и раскрывает оба текста. Так американские криптоаналитики в проекте «Венона» прочитали часть советской переписки 1940-х годов с повторно использованными блокнотами.
Гилберт Вернам предложил шифр для телетайпа в 1917 году, а Джозеф Моборн добавил требование случайного одноразового ключа. Абсолютную стойкость доказал Клод Шеннон: работа была закрытой в 1945 году и опубликована в 1949-м. Независимо от него то же доказал советский инженер Владимир Котельников в секретном отчёте 1941 года.
Нужен тот же ключ, что у отправителя. По модулю ключ вычитают: откройте вкладку «Расшифровать», вставьте шифровку и ключ. В режиме XOR вкладки нет: вставьте номера шифровки и тот же ключ — XOR вернёт буквы. Без ключа расшифровать нельзя: в этом и смысл одноразового блокнота, поэтому ключ в ссылку «Поделиться» не попадает.