Эта статья входит в число добротных статей

Шифр Вернама

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Шифр Вернама (англ. Vernam cipher) — система симметричного шифрования, изобретённая в 1917 году Гилбертом Вернамом[1].

Шифр является разновидностью криптосистемы одноразовых блокнотов. В нём используется булева функция «исключающее или». Шифр Вернама является примером системы с абсолютной криптографической стойкостью[2]. При этом он считается одной из простейших криптосистем[3].

История[править | править код]

Патент на систему Гилберта Вернама

Впервые описан Фрэнком Миллером в 1882[4][5][6].

Шифр назван в честь телеграфиста Гильберта Вернама, который в 1917 году изобрёл, а в 1919 запатентовал систему автоматического шифрования телеграфных сообщений.

Вернам не использовал понятие «исключающее или» в патенте, но реализовал именно эту операцию в релейной логике. Каждый символ в сообщении преобразовывался побитовым XOR (исключающее или) с ключом бумажной ленты[7]. Джозеф Моборн (бывший тогда капитаном армии США, а впоследствии начальником корпуса связи) доработал эту систему так, чтобы последовательность символов на ключевой ленте была полностью случайной, поскольку в этом случае криптоанализ будет наиболее трудным.

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

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

Описание[править | править код]

Криптосистема была предложена для шифрования телеграфных сообщений, которые представляли собой бинарные тексты, в которых открытый текст представляется в коде Бодо (в виде пятизначных «импульсных комбинаций»). В этом коде, например, буква «А» имела вид (1 1 0 0 0). На бумажной ленте цифре «1» соответствовало отверстие, а цифре «0» — его отсутствие. Секретный ключ должен был представлять собой хаотичный набор букв того же самого алфавита[8].

Для получения шифротекста открытый текст объединяется операцией «исключающее или» с секретным ключом. Так, например, при применении ключа (1 1 1 0 1) на букву «А» (1 1 0 0 0) получаем зашифрованное сообщение (0 0 1 0 1): Зная, что для принимаемого сообщения имеем ключ (1 1 1 0 1), легко получить исходное сообщение той же операцией: Для абсолютной криптографической стойкости ключ должен обладать тремя критически важными свойствами[2]:

  1. Иметь случайное дискретное равномерное распределение: , где k — ключ, а N — количество бинарных символов в ключе;
  2. Совпадать по размеру с заданным открытым текстом;
  3. Применяться только один раз.

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

Например, кодирование шифром Вернама по модулю m = 26 (A=0,B=1,…, Z=25):

Ключ:           EVTIQWXQVVOPMCXREPYZ 
Открытый текст: ALLSWELLTHATENDSWELL (All's well that ends well)
Шифротекст:     EGEAMAIBOCOIQPAJATJK

При шифровании преобразование производится по таблице Виженера (сложение индексов символов по модулю длины алфавита даёт эту таблицу).

При этом буква ключа — это столбец, буква открытого текста — строка, а шифротекст — это буква на пересечении.

Без знания ключа такое сообщение не поддаётся анализу. Даже если бы можно было перепробовать все ключи, в качестве результата мы получили бы все возможные сообщения данной длины плюс колоссальное количество бессмысленных дешифровок, выглядящих как беспорядочное нагромождение букв. Но и среди осмысленных дешифровок не было бы никакой возможности выбрать искомую. Когда случайная последовательность (ключ) сочетается с неслучайной (открытым текстом), результат этого (шифротекст) оказывается совершенно случайным и, следовательно, лишённым тех статистических особенностей, которые могли бы быть использованы для анализа шифра.[9].

Криптографическая стойкость[править | править код]

В 1945 году Клод Шеннон написал работу «Математическая теория криптографии» (рассекреченную только после Второй мировой войны в 1949 г. как «Теория связи в секретных системах»), в которой доказал абсолютную криптографическую стойкость шифра Вернама. То есть перехват шифротекста без ключа не даёт никакой информации о сообщении. С точки зрения криптографии, невозможно придумать систему безопаснее шифра Вернама[2]. Требования к реализации подобной схемы достаточно нетривиальны, поскольку необходимо обеспечить наложение уникальной гаммы, равной длине сообщения, с последующим её гарантированным уничтожением. В связи с этим коммерческое применение шифра Вернама не так распространено в отличие от схем с открытым ключом и он используется, в основном, для передачи сообщений особой важности государственными структурами[8].

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

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

Легальный пользователь знает ключ и осуществляет расшифрование:

Найдём вероятностное распределение N-блоков шифротекстов, используя формулу:

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

Запишем совместное распределение открытых текстов и шифротекстов:

Найдём условное распределение

так как ключ и открытый текст являются независимыми случайными величинами. Итого:

Подстановка правой части этой формулы в формулу для совместного распределения даёт

Что доказывает независимость шифротекстов и открытых текстов в этой системе. Это и означает абсолютную криптографическую стойкость[10].

Область применения[править | править код]

В настоящее время шифрование Вернама используется достаточно редко. В большой степени это обусловленно существенным размером ключа, длина которого должна совпадать с длиной сообщения. То есть, использование таких шифров требует огромных затрат на производство, хранение, уничтожение ключевых материалов. Тем не менее, совершенно стойкие шифры типа Вернама всё же нашли практическое применение для защиты особо важных линий связи с относительно небольшим объёмом информации. Так, например, англичане и американцы использовали шифры типа Вернама во время Второй мировой войны. Шифр Вернама по модулю 2 использовался на правительственной «горячей линии» между Вашингтоном и Москвой, где ключевые материалы представляли собой бумажные ленты, на которые знаки ключевой последовательности наносились с помощью перфорации[2].

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

Недостатки[править | править код]

  • Для работы шифра Вернама необходима истинно случайная последовательность (ключ). По определению, последовательность, полученная с использованием любого алгоритма, является не истинно случайной, а псевдослучайной. То есть, нужно получить случайную последовательность не алгоритмически, а, например, используя радиоактивный распад, создаваемый электронным генератором белого шума или другие достаточно случайные события. Чтобы сделать распределение предельно близким к равномерному, случайная последовательность обычно пропускается через хеш-функцию наподобие MD5[12].
  • Недостатком использования шифра Вернама является отсутствие подтверждения подлинности и целостности сообщения. Получатель не может удостовериться в отсутствии повреждений или в подлинности отправителя. Если третья сторона каким-нибудь образом узнает сообщение, она легко восстановит ключ и сможет подменить послание на другое такой же длины. Решением проблемы является применение хеш-функции. От открытого текста вычисляется хеш-функция, и её значение шифруется вместе с сообщением. При каком-либо изменении сообщения значение хеш-функции изменится. Таким образом, даже если злоумышленник заполучил шифроблокнот, не зная алгоритм вычисления хеш-функции, он не сможет использовать его для передачи информации[11].
  • Под рукой всегда необходимо иметь достаточное количество ключей, которые могут понадобиться в дальнейшем для шифрования больших объёмов открытого текста. Реальный же объём текста зачастую трудно оценить заранее, в особенности это касается дипломатической и военной сферы, где ситуация способна меняться быстро и непредсказуемо. Это может приводить к нехватке ключей, что может заставить шифровальщика либо использовать ключ(и) повторно, либо полностью прервать шифрованную связь.
  • Проблемой является защищённая передача последовательности и сохранение её в тайне. Если существует надёжно защищённый от перехвата канал передачи сообщений, шифры вообще не нужны: секретные сообщения можно передавать по этому каналу. Если же передавать ключ системы Вернама с помощью другого шифра (например, DES), то полученный шифр окажется защищённым ровно настолько, насколько защищён DES. При этом, поскольку длина ключа та же, что и длина сообщения, передать его не проще, чем сообщение. Шифроблокнот на физическом носителе можно украсть или скопировать[11].
  • Шифр Вернама чувствителен к любому нарушению процедуры шифрования. Бывали случаи, когда одна и та же страница блокнота по различным причинам применялась дважды. Например, среди всего объёма советской шифрованной переписки, перехваченной разведкой США в 40-х годах прошлого века, были обнаружены сообщения, закрытые дважды использованной гаммой. Период этот длился не очень долго, потому что уже после первых успехов американских криптоаналитиков в конце 1940-х годов в спецслужбах СССР узнали о серьёзных проблемах с надёжностью своей шифропереписки. Такие сообщения были расшифрованы в течение 40 последующих лет в рамках секретного проекта «Venona», документы которого были позднее рассекречены и выложены на сайте АНБ[13].

Примечания[править | править код]

  1. Симметричные алгоритмы.
  2. 1 2 3 4 5 Фомичёв, 2003.
  3. Мао, 2005.
  4. Miller, Frank. Telegraphic code to insure privacy and secrecy in the transmission of telegrams. — C.M. Cornwell, 1882.
  5. Bellovin, Steven M. (2011). "Frank Miller: Inventor of the One-Time Pad". Cryptologia. 35 (3): 203—222. doi:10.1080/01611194.2011.583711. ISSN 0161-1194. S2CID 35541360. Архивировано из оригинала 4 февраля 2022. Дата обращения: 14 сентября 2022.
  6. John Markoff (2011-07-25). "Codebook Shows an Encryption Form Dates Back to Telegraphs". The New York Times. Архивировано из оригинала 21 мая 2013. Дата обращения: 26 июля 2011.
  7. US 1310719 A Patent. Дата обращения: 19 октября 2015. Архивировано 24 сентября 2015 года.
  8. 1 2 3 Бабаш, et al., 2003.
  9. Криптография. Дата обращения: 8 февраля 2014. Архивировано из оригинала 2 ноября 2013 года.
  10. Габидулин, Кшевецкий, Колыбельников, 2011, с. 41—43.
  11. 1 2 3 One-time Pad.
  12. Frequently Asked Questions.
  13. Киви, 2005.

Литература[править | править код]

Ссылки[править | править код]