Шифр Виженера ( французское произношение: [viʒnɛːʁ] ) — это метод шифрования алфавитного текста, при котором каждая буква открытого текста кодируется различным шифром Цезаря , приращение которого определяется соответствующей буквой другого текста, ключом .
Например, если открытый текст attacking tonight
и ключ OCULORHINOLARINGOLOGY
, то
a
открытого текста сдвигается на 14 позиций в алфавите (поскольку первая буква O
ключа — это 14-я буква алфавита, считая с 0), что дает o
;t
сдвигается на 2 (поскольку вторая буква C
ключа означает 2), что дает v
;t
сдвигается на 20 ( U
), что дает n
, с переносом;и так далее; выдавая сообщение ovnlqbpvt eoeqtnh
. Если получатель сообщения знает ключ, он может восстановить открытый текст, обратив этот процесс.
Таким образом, шифр Виженера представляет собой частный случай полиалфавитной замены . [1] [2]
Этот шифр , впервые описанный Джованом Баттистой Белласо в 1553 году, легко понять и реализовать, но он сопротивлялся всем попыткам взломать его до 1863 года, три столетия спустя. Это принесло ему название le chiffrage indéchiffrable ( по -французски «нерасшифрованный шифр»). Многие люди пытались реализовать схемы шифрования, которые по сути являются шифрами Виженера. [3] В 1863 году Фридрих Касиски первым опубликовал общий метод дешифровки шифров Виженера.
В XIX веке схему ошибочно приписали Блезу де Виженеру (1523–1596), и поэтому она получила свое нынешнее название. [4]
Самое первое хорошо задокументированное описание полиалфавитного шифра было сделано Леоном Баттистой Альберти около 1467 года и использовало металлический шифровальный диск для переключения между шифралфавитами. Система Альберти переключала алфавиты только после нескольких слов, а переключение обозначалось путем написания буквы соответствующего алфавита в зашифрованном тексте. Позже Иоганнес Тритемиус в своей работе Polygraphiae (которая была завершена в рукописной форме в 1508 году, но впервые опубликована в 1518 году) [5] изобрел прямую таблицу , важнейший компонент шифра Виженера. [6] Шифр Тритемия , однако, обеспечивал прогрессивную, довольно жесткую и предсказуемую систему переключения между шифралфавитами. [примечание 1]
В 1586 году Блез де Виженер опубликовал перед судом французского короля Генриха III тип полиалфавитного шифра, названный шифром с автоматическим ключом , поскольку его ключ основан на исходном открытом тексте . [7] Однако шифр, ныне известный как шифр Виженера, основан на шифре, первоначально описанном Джованом Баттистой Белласо в его книге 1553 года «La cifra del Sig». Джован Баттиста Белласо . [8] Он основывался на прямой таблице Тритемия, но добавил повторяющийся «надпись» ( ключ ) для переключения шифралфавитов для каждой буквы.
В то время как Альберти и Тритемиус использовали фиксированную схему замен, схема Белласо означала, что схему замен можно было легко изменить, просто выбрав новый ключ. Ключи обычно представляли собой отдельные слова или короткие фразы, заранее известные обеим сторонам или передаваемые «вне канала» вместе с сообщением. Таким образом, метод Белласо требовал надежной защиты только для ключа. Поскольку относительно легко получить короткую ключевую фразу, например, в ходе предыдущего частного разговора, система Белласо была значительно более безопасной. [ нужна цитата ]
Однако обратите внимание, что в отличие от современного шифра Виженера, шифр Белласо не имел 26 различных «смещений» (разные шифры Цезаря) для каждой буквы, вместо этого имел 13 сдвигов для пар букв. В 19 веке изобретение этого шифра, по существу разработанного Белласо, было ошибочно приписано Виженеру. Дэвид Кан в своей книге « Взломщики кодов» посетовал на это неправильное приписывание, заявив, что история «проигнорировала этот важный вклад и вместо этого назвала для него [Виженера] регрессивный и элементарный шифр, хотя он не имел к этому никакого отношения». [9]
Шифр Виженера завоевал репутацию исключительно надежного. Известный писатель и математик Чарльз Лютвидж Доджсон ( Льюис Кэрролл ) назвал шифр Виженера невзламываемым в своей статье 1868 года « Алфавитный шифр » в детском журнале. В 1917 году журнал Scientific American назвал шифр Виженера «невозможным для перевода». [10] [11] Эта репутация не была заслужена. Известно, что Чарльз Бэббидж взломал вариант шифра еще в 1854 году, но не опубликовал свою работу. [12] Касиски полностью взломал шифр и опубликовал эту технику в 19 веке, но даже в 16 веке некоторые опытные криптоаналитики иногда могли взломать шифр. [9]
Шифр Виженера достаточно прост, чтобы быть полевым шифром, если он используется вместе с зашифрованными дисками. [13] Конфедеративные Штаты Америки , например, использовали латунный шифровальный диск для реализации шифра Виженера во время Гражданской войны в США . Сообщения Конфедерации не были секретными, и Союз регулярно взламывал их сообщения. На протяжении всей войны руководство Конфедерации в основном опиралось на три ключевые фразы: «Манчестерский блеф», «Полная победа» и, когда война подошла к концу, «Приди возмездие». [14]
Шифр Виженера с полностью случайным (и не подлежащим повторному использованию) ключом, который сохраняется до тех пор, пока сообщение становится одноразовым блокнотом , теоретически неразрушимый шифр. [15] Жильбер Вернам пытался восстановить сломанный шифр (создав шифр Вернама-Виженера в 1918 году), но использованная им технология была настолько громоздкой, что ее невозможно было реализовать. [16]
В шифре Цезаря каждая буква алфавита сдвинута на некоторое количество позиций. Например, в шифре Цезаря со сдвигом 3, a
станет D
, b
станет E
, y
станет B
и так далее. Шифр Виженера состоит из нескольких последовательных шифров Цезаря с разными значениями сдвига.
Для шифрования можно использовать таблицу алфавитов, называемую tabularecta , квадратом Виженера или таблицей Виженера . В нем алфавит записан 26 раз в разных строках, каждый алфавит циклически сдвинут влево по сравнению с предыдущим алфавитом, что соответствует 26 возможным шифрам Цезаря. На разных этапах процесса шифрования шифр использует другой алфавит из одной из строк. Алфавит, используемый в каждом пункте, зависит от повторяющегося ключевого слова. [ нужна цитата ]
Например, предположим, что открытый текст , который необходимо зашифровать, имеет вид
attackatdawn
.Человек, отправляющий сообщение, выбирает ключевое слово и повторяет его до тех пор, пока оно не будет соответствовать длине открытого текста, например, ключевое слово «ЛИМОН»:
LEMONLEMONLE
Каждая строка начинается с ключевой буквы. Остальная часть строки содержит буквы от A до Z (в смещенном порядке). Хотя показано 26 ключевых строк, код будет использовать ровно столько ключей (разных алфавитов), сколько уникальных букв в ключевой строке, здесь всего 5 ключей: {L, E, M, O, N}. Для последовательных букв сообщения будут взяты последовательные буквы ключевой строки, и каждая буква сообщения зашифрована с использованием соответствующей ключевой строки. Когда выбирается новый символ сообщения, выбирается следующая буква ключа, и строка, соответствующая этому символу, просматривается, чтобы найти заголовок столбца, соответствующий символу сообщения. Буква на пересечении [key-row, msg-col] является зашифрованной буквой.
Например, первая буква открытого текста a
соединяется с L
первой буквой ключа. Поэтому используются строка A
и столбец L
квадрата Виженера, а именно L
. Аналогично, для второй буквы открытого текста используется вторая буква ключа. Буква в строке T
и E
столбце X
. Остальная часть открытого текста шифруется аналогичным образом:
Дешифрование выполняется путем перехода к строке таблицы, соответствующей ключу, нахождению позиции буквы зашифрованного текста в этой строке и затем использованию метки столбца в качестве открытого текста. Например, в строке L
(from LEMON
) зашифрованный текст L
появляется в столбце A
, как a
и первая буква открытого текста. Далее в строке E
(из ) зашифрованный текст располагается в столбце . Это вторая буква открытого текста.LEMON
X
T
t
Виженера также можно описать алгебраически. Если за буквы A
– Z
взять цифры 0–25 ( , и т. д.), а сложение производить по модулю 26, то шифрование Виженера с использованием ключа можно записать как
и расшифровка с использованием ключа как
где находится сообщение, является зашифрованным текстом и является ключом, полученным путем повторения ключевого слова несколько раз, в котором указана длина ключевого слова.
Таким образом, используя предыдущий пример, для шифрования с помощью ключевой буквы вычисление приведет к .
Следовательно, для расшифровки с помощью ключевой буквы вычисление приведет к .
В общем, если длина алфавита , а длина ключа, шифрование и дешифрование Виженера можно записать:
обозначает смещение i -го символа открытого текста в алфавите . Например, если взять 26 английских символов в качестве алфавита , смещение A будет равно 0, смещение B равно 1 и т. д., и они аналогичны.
Идея шифра Виженера, как и всех других полиалфавитных шифров, состоит в том, чтобы замаскировать частоту букв открытого текста , чтобы помешать прямому применению частотного анализа . Например, если P
это самая часто встречающаяся буква в зашифрованном тексте, открытый текст которого написан на английском языке , можно предположить, что это соответствует P
наиболее часто используемой букве английского языка. Однако, используя шифр Виженера, его можно зашифровать как разные буквы зашифрованного текста в разных точках сообщения, что противоречит простому частотному анализу.e
e
e
Основной слабостью шифра Виженера является повторяющаяся природа его ключа . Если криптоаналитик правильно угадает длину ключа n , зашифрованный текст можно рассматривать как n чередующихся шифров Цезаря , которые можно легко взломать по отдельности. Длина ключа может быть определена путем грубой проверки каждого возможного значения n или проверки Касиски и критерия Фридмана, которые могут помочь определить длину ключа (см. ниже: § Исследование Касиски и § Тест Фридмана).
В 1863 году Фридрих Касиски первым опубликовал успешную общую атаку на шифр Виженера. [17] Ранее атаки основывались на знании открытого текста или использовании узнаваемого слова в качестве ключа. Метод Касиски не имел таких зависимостей. Хотя Касиски был первым, кто опубликовал отчет о нападении, очевидно, что другие знали о нем. В 1854 году Чарльз Бэббидж был вынужден взломать шифр Виженера, когда Джон Холл Брок Туэйтс представил «новый» шифр в Журнал Общества искусств . [18] [19] Когда Бэббидж показал, что шифр Туэйтса, по сути, был просто еще одним воссозданием шифра Виженера, Туэйтс бросил Бэббиджу вызов: предоставив оригинальный текст (из шекспировской « Бури : Акт 1, сцена 2») и его зашифрованную версию. Ему предстояло найти ключевые слова, которые Туэйтс использовал для шифрования исходного текста. Бэббидж вскоре нашел ключевые слова: «два» и «комбинированный». Затем Бэббидж зашифровал тот же отрывок из Шекспира, используя другие ключевые слова, и предложил Туэйтсу найти ключевые слова Бэббиджа. [20] Бэббидж никогда не объяснял метод, который он использовал. Изучение заметок Бэббиджа показывает, что он использовал метод, позже опубликованный Касиски, и предполагают, что он использовал этот метод еще в 1846 году. [21]
Экзамен Касиски , также называемый тестом Касиски, использует тот факт, что повторяющиеся слова иногда случайно зашифровываются с использованием одних и тех же ключевых букв, что приводит к повторяющимся группам в зашифрованном тексте. Например, рассмотрим следующее шифрование с использованием ключевого слова ABCD
:
Ключ: ABCDAB CDABCDABCD ABCDAB CDABCDОткрытый текст: «крипто» — сокращение от « криптография» .Зашифрованный текст: CSASTP KVSIQUTGQU CSASTP IUAQJB
В зашифрованном тексте легко заметить повторение, поэтому тест Касиски будет эффективным.
Расстояние между повторениями CSASTP
равно 16. Если предположить, что повторяющиеся сегменты представляют собой одни и те же сегменты открытого текста, это означает, что длина ключа составляет 16, 8, 4, 2 или 1 символ. (Все факторы расстояния являются возможными длинами ключей; ключ длиной один — это всего лишь простой шифр Цезаря , и его криптоанализ намного проще.) Поскольку длины ключей 2 и 1 нереально коротки, нужно пробовать только длины 16, 8. и 4. Более длинные сообщения делают тест более точным, поскольку обычно содержат больше повторяющихся сегментов зашифрованного текста. Следующий зашифрованный текст состоит из двух повторяющихся сегментов:
Зашифрованный текст: VHVS SP QUCE MRVBVBBB VHVS URQGIBDUGRNICJ QUCE RVUAXSSR.
Расстояние между повторениями VHVS
равно 18. Если предположить, что повторяющиеся сегменты представляют собой одни и те же сегменты открытого текста, это означает, что длина ключа составляет 18, 9, 6, 3, 2 или 1 символ. Расстояние между повторами QUCE
30 символов. Это означает, что длина ключа может составлять 30, 15, 10, 6, 5, 3, 2 или 1 символ. Взяв пересечение этих наборов, можно с уверенностью заключить, что наиболее вероятная длина ключа равна 6, поскольку 3, 2 и 1 нереально короткие.
Тест Фридмана (иногда известный как тест Каппа) был изобретен в 1920-х годах Уильямом Ф. Фридманом , который использовал индекс совпадения , который измеряет неравномерность частот зашифрованных букв для взлома шифра. Зная вероятность того, что любые две случайно выбранные буквы исходного языка одинаковы (около 0,067 для английского языка без учета регистра ) и вероятность совпадения для равномерного случайного выбора из алфавита ( 1 ⁄ 26 = 0,0385 для английского языка), ключ длину можно оценить следующим образом:
от наблюдаемой частоты совпадений
где c — размер алфавита (26 для английского языка), N — длина текста, а от n 1 до nc — наблюдаемые частоты букв зашифрованного текста в виде целых чисел.
Однако это лишь приближение; его точность увеличивается с увеличением длины текста. На практике было бы необходимо попробовать различные длины ключей, близкие к расчетным. [22] Лучшим подходом к шифрам с повторяющимся ключом является копирование зашифрованного текста в строки матрицы с количеством столбцов, равным предполагаемой длине ключа, а затем вычисление среднего индекса совпадения для каждого столбца, рассматриваемого отдельно. Когда это делается для каждой возможной длины ключа, наивысший средний индекс совпадения соответствует наиболее вероятной длине ключа. [23] Такие тесты могут быть дополнены данными экспертизы Касиски.
Как только длина ключа станет известна, зашифрованный текст можно переписать на такое же количество столбцов, причем каждый столбец будет соответствовать одной букве ключа. Каждый столбец состоит из открытого текста, зашифрованного одним шифром Цезаря . Клавиша Цезаря (сдвиг) — это просто буква клавиши Виженера, которая использовалась для этого столбца. Используя методы, аналогичные тем, которые используются для взлома шифра Цезаря, можно обнаружить буквы в зашифрованном тексте.
Усовершенствование анализа Касиски, известное как метод Керкхоффса , сопоставляет частоты букв каждого столбца со смещенными частотами открытого текста, чтобы обнаружить ключевую букву (сдвиг Цезаря) для этого столбца. Как только каждая буква ключа известна, все, что нужно сделать криптоаналитику, — это расшифровать зашифрованный текст и раскрыть открытый текст. [24] Метод Керкхоффса неприменим, если таблица Виженера была зашифрована, вместо использования обычных алфавитных последовательностей, но проверку Касиски и тесты на совпадения все же можно использовать для определения длины ключа.
Шифр Виженера с обычными алфавитами по существу использует арифметику по модулю, которая является коммутативной. Следовательно, если длина ключа известна (или угадана), вычитание зашифрованного текста из самого себя, смещенного на длину ключа, приведет к получению открытого текста, вычтенного из самого себя, также смещенного на длину ключа. Если какое-либо «вероятное слово» в открытом тексте известно или может быть угадано, можно распознать его самовычитание, что позволяет восстановить ключ путем вычитания известного открытого текста из зашифрованного текста. Удаление ключей особенно полезно для коротких сообщений. Например, используя LION
в качестве ключа ниже:
Затем вычтите зашифрованный текст из самого себя со сдвигом длины ключа на 4 LION
.
Это почти эквивалентно вычитанию открытого текста из самого себя с помощью того же сдвига.
Что алгебраически представляется как:
В этом примере слова brownfox
известны.
Этот результат omaz
соответствует буквам с 9 по 12 в приведенных выше более крупных примерах. Известный раздел и его местоположение проверены.
Вычтите brow
из этого диапазона зашифрованного текста.
Это дает окончательный результат — раскрытие ключа LION
.
Вариант шифра Виженера с рабочим ключом также одно время считался невзламываемым. В качестве ключа в этой версии используется блок текста такой же длины, как и открытый текст. Поскольку длина ключа равна длине сообщения, тесты Фридмана и Касиски больше не работают, поскольку ключ не повторяется.
Если используется несколько ключей, эффективная длина ключа равна наименьшему общему кратному длин отдельных ключей. Например, используя два ключа GO
и CAT
, длина которых равна 2 и 3, можно получить эффективную длину ключа 6 (наименьшее общее кратное 2 и 3). Это можно понимать как точку, где обе клавиши совпадают.
Двойное шифрование, сначала ключом GO
, а затем ключом, CAT
аналогично однократному шифрованию ключом, полученным путем шифрования одного ключа другим.
Это демонстрируется шифрованием attackatdawn
с помощью IOZQGH
, чтобы получить тот же зашифрованный текст, что и в исходном примере.
Если длины ключей относительно простые, эффективная длина ключа растет экспоненциально по мере увеличения длины отдельных ключей. Например, в то время как эффективная длина ключей 10, 12 и 15 символов составляет всего 60, эффективная длина ключей 8, 11 и 15 символов равна 1320. Если эта эффективная длина ключа больше, чем зашифрованный текст, он обеспечивает такую же защиту. к тестам Фридмана и Касиски как рабочий ключевой вариант.
Если кто-то использует действительно случайный ключ, длина которого не меньше длины зашифрованного сообщения, и используется только один раз, шифр Виженера теоретически неуязвим. Однако в этом случае ключ, а не шифр, обеспечивает криптографическую стойкость, и такие системы правильно называются системами одноразового блокнота , независимо от используемых шифров.
Простой вариант — зашифровать с помощью метода дешифрования Виженера и расшифровать с помощью шифрования Виженера. Этот метод иногда называют «вариантом Бофорта». Он отличается от шифра Бофорта , созданного Фрэнсисом Бофортом , который похож на шифр Виженера, но использует слегка измененный механизм шифрования и таблицу. Шифр Бофорта является взаимным шифром .
Несмотря на кажущуюся надежность шифра Виженера, он так и не получил широкого распространения в Европе. Шифр Гронсфельда - это вариант, приписываемый Гаспаром Шоттом графу Гронсфельду (Хоссе Максимилаан ван Гронсвельд , урожденный ван Бронкхорст), но на самом деле он использовался гораздо раньше послом герцога Мантуанского в 1560-1570-х годах. Он идентичен шифру Виженера, за исключением того, что он использует всего 10 различных шифралфавитов, соответствующих цифрам от 0 до 9: ключ Гронсфельда 0123 такой же, как ключ Виженера ABCD. Шифр Гронсфельда усилен, потому что его ключ не является словом, но ослаблен, потому что в нем всего 10 шифралфавитов. Именно шифр Гронсфельда получил широкое распространение по всей Германии и Европе, несмотря на свои недостатки.
Виженер фактически изобрел более сильный шифр — шифр с автоматическим ключом . Вместо этого название «шифр Виженера» стало ассоциироваться с более простым полиалфавитным шифром. На самом деле эти два шифра часто путали, и оба иногда называли le chiffre indéchiffrable . Бэббидж на самом деле взломал гораздо более надежный шифр с автоматическим ключом, но Касиски обычно приписывают первое опубликованное решение полиалфавитных шифров с фиксированным ключом.