Шифр Вернама

Шифр Вернама
Шифр Вернама (одноразовый блокнот) — шифр, в котором каждый бит текста складывается по модулю 2 (XOR) с битом ключа. Если ключ из случайных байтов, не короче сообщения и используется один раз, шифр невозможно взломать. Сервис зашифрует текст на русском или английском, выдаст шифровку в Base64 и расшифрует её тем же ключом; кнопка рядом с полем ключа создаст случайный ключ нужной длины.
Отправка формы возможна не чаще, чем раз в 3 сек.

Шифр Вернама — симметричный потоковый шифр, основанный на операции исключающего ИЛИ (XOR). Текст и ключ представляют в виде битов и складывают побитно по модулю 2. Тот же ключ, применённый к шифровке ещё раз, возвращает исходный текст, поэтому шифрование и расшифровка выполняются одной и той же операцией.

Как работает шифр Вернама

Операция XOR (сложение по модулю 2) даёт 1, если биты разные, и 0, если одинаковые:

A B A XOR B
0 0 0
0 1 1
1 0 1
1 1 0

Главное свойство: (A XOR K) XOR K = A. Если сложить шифровку с тем же ключом, ключ «сокращается» и остаётся исходный текст.

Сервис переводит текст и ключ в байты (кодировка UTF-8: латинская буква — 1 байт, русская — 2 байта) и складывает каждый байт текста с очередным байтом ключа. Если ключ короче текста, он повторяется по кругу. Результат XOR — произвольные байты, многие из которых не отображаются как символы, поэтому шифровка выводится в кодировке Base64: латинскими буквами, цифрами и знаками «+», «/», «=». Для расшифровки вставьте эту строку и укажите тот же ключ.

Пример шифрования по битам

Зашифруем слово «Hi» ключом «ok». В кодировке ASCII (и UTF-8) буква H — байт 01001000, i — 01101001, o — 01101111, k — 01101011:

1-й байт 2-й байт
Текст 01001000 (H) 01101001 (i)
Ключ 01101111 (o) 01101011 (k)
XOR 00100111 00000010

Шифровка — байты 00100111 и 00000010, в Base64 это «JwI=». Сложив их снова с ключом «ok», получим исходные байты 01001000 и 01101001, то есть «Hi».

Требования к ключу

Шифр Вернама абсолютно стоек — его нельзя взломать даже перебором всех ключей, — только при трёх условиях:

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

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

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

История

Гилберт Вернам, инженер американской телеграфной компании AT&T, в 1917 году придумал шифровать сообщения телетайпа, складывая их с перфолентой ключа, и в 1919 году получил на это патент. Джозеф Моборн предложил брать для ключа случайную ленту и не использовать её повторно — так появился одноразовый блокнот. Клод Шеннон в работе 1945 года, опубликованной в 1949-м, доказал, что такой шифр абсолютно стоек. Одноразовые блокноты применяли дипломаты и разведки, а по одной из версий, на них работала и «горячая линия» Москва — Вашингтон.

Вопросы и ответы

Как расшифровать шифр Вернама?

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

Можно ли расшифровать шифр Вернама без ключа?

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

Как решить школьную задачу на шифр Вернама?

В учебниках текст обычно записывают в двоичном коде (по таблице ASCII или по номерам букв алфавита) и складывают по модулю 2 с двоичным ключом, как в примере выше. Сервис выдаёт шифровку в Base64 и работает с байтами UTF-8, поэтому для задач с другой кодировкой букв результат может не совпасть с ответом учебника — используйте пример по битам как образец.

Работает ли шифр с русским текстом?

Да. Русские буквы в UTF-8 занимают по 2 байта, и каждый из них складывается с байтом ключа. Ключ тоже может быть на русском: шифр работает с любыми символами ключа.

Чем шифр Вернама отличается от шифра Виженера?

Оба складывают текст с ключом, но шифр Виженера сдвигает буквы по алфавиту, а шифр Вернама складывает биты по модулю 2. Шифр Виженера с коротким повторяющимся ключом взламывается, а шифр Вернама со случайным одноразовым ключом длиной с сообщение — нет.

Комментарии к сервису

Количество комментариев: 0
Похожие калькуляторы
Работа с текстом Шифр Виженера

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

Перейти к расчету
Работа с текстом Шифр Цезаря

Расшифровать или зашифровать текст шифром Цезаря онлайн с любым сдвигом, а если ключ неизвестен — подобрать все сдвиги. Русский алфавит с Ё и без Ё, английский, ROT13, таблица шифра.

Перейти к расчету
Работа с текстом Шифр Гронсфельда

Зашифровать и расшифровать текст шифром Гронсфельда онлайн: числовой ключ, русский алфавит с Ё и без Ё, английский и другие. Пример шифрования по шагам и отличие от шифра Виженера.

Перейти к расчету