Перейти к содержимому

Шифр Виженера

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

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

Ключевое слово выписывают под текстом и повторяют по кругу. Каждая буква ключа — сдвиг: «А» — ноль, «Б» — один, «Я» — тридцать два. Буква текста сдвигается вперёд на этот шаг, как в шифре Цезаря, но у каждой позиции шаг свой: c = (m + k) mod n, где m и k — номера букв текста и ключа, n — размер алфавита. Алфавит здесь русский, 33 буквы, «ё» между «е» и «ж», нумерация с нуля. Возьмём слово «АЛФАВИТ» и ключ «КЛЮЧ».

Буква текстаБуква ключаСдвигШифртекст
АК11К
ЛЛ12Ч
ФЮ31Т
АЧ24Ч
ВК11М
ИЛ12Ф
ТЮ31Р

Третья строка: у «Ф» номер 21, у «Ю» — 31, сумма 52, минус 33 даёт 19, это «Т». Две «А» превратились в разные буквы, «К» и «Ч», а вот «Л» и вторая «А» дали одну и ту же «Ч». В шифре Цезаря одинаковые буквы остались бы одинаковыми, а здесь частоты выровнялись, и подсчёт самой частой буквы не работает. Ключ из одной буквы возвращает обычный Цезарь: «Г» превращает «ПРИВЕТ» в «ТУЛЕЗХ», как в статье про шифр Цезаря.

То же читается по таблице Виженера, квадрату со всеми 33 сдвигами алфавита. Строка — буква ключа, столбец — буква текста, на пересечении результат. Фрагмент для букв нашего ключа:

Ключ / текстАБВГДЕЁ
ККЛМНОПР
ЛЛМНОПРС
ЮЮЯАБВГД
ЧЧШЩЪЫЬЭ

Откуда имя и почему шифр считали нерушимым

Имя носит Блез де Виженер, французский дипломат XVI века, но схему придумал не он. Первым шифр с ключевым словом описал итальянец Джованни Баттиста Беллазо в 1553 году. Виженер в «Трактате о шифрах» (1586) изложил другой, более стойкий вариант — с автоключом, где после короткого слова ключом служит сам открытый текст. Имя Виженера прикрепили к схеме Беллазо в XIX веке; историк Дэвид Кан возражал, что для её создания Виженер ничего не сделал. Около трёх столетий шифр считали неразгадываемым.

Как шифр взломали

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

  • Метод Касиски. Слово, которое встретилось дважды на расстоянии, кратном длине ключа, зашифруется одинаково. Фридрих Касиски опубликовал метод в 1863 году; Чарльз Бэббидж разработал метод вскрытия в 1854-м, но не опубликовал. Пример: текст «ТАЙНА ДВУХ ЭТО ТАЙНА» с ключом «ЛУНА» превращается в «ЮУЧНЛЧПУБРАОЮУЧНЛ». Фрагмент «ЮУЧНЛ» повторяется через 12 букв, значит, длина ключа делит 12: это 2, 3, 4, 6 или 12. В длинном тексте повторов много, и общие делители их расстояний сужают выбор.
  • Индекс совпадений. Вероятность того, что две случайные буквы текста одинаковы. Для русского текста она около 0,056, для случайных букв — 1/33, около 0,030 (расчёт по частотам букв из НКРЯ). Берут каждую t-ю букву шифртекста и считают индекс: близко к 0,056 — вероятно, длина ключа t. Тест предложил в 1920-х годах Уильям Фридман.

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

Виженер рядом с Цезарем, Атбашем и ROT13

У Цезаря один сдвиг на весь текст, у Атбаша — зеркальная замена без ключа, у ROT13 — сдвиг на 13 на латинице, у Виженера сдвиг меняется по ключевому слову. Сегодня это учебный пример и материал для головоломок. Шифртекст можно записать в QR-код с текстом для квеста, но QR-код его не защитит: сканер сразу покажет все буквы. Чем шифрование отличается от кодирования, разобрано в статье про кодирование информации.

Частые вопросы

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

Сначала найдите длину ключа: ищите повторы в шифртексте и раскладывайте расстояния между ними на делители (метод Касиски) или считайте индекс совпадений для разных длин. Затем разложите текст по столбцам и разберите каждый как шифр Цезаря по частоте букв.

Безопасен ли шифр Виженера сегодня?

Нет. Метод Касиски известен с 1863 года, индекс совпадений — с 1920-х, и сегодня шифр вскрывается небольшой программой. Данные защищают стойкими алгоритмами вроде AES, а Виженер остался учебным примером.

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

В шифре Цезаря сдвиг один на весь текст, поэтому каждая буква всегда превращается в одну и ту же. В шифре Виженера сдвиг зависит от позиции и ключевого слова: одна «А» может дать «К», другая — «Ч». Цезарь — частный случай Виженера с ключом из одной буквы.

Почему онлайн-калькуляторы шифра Виженера дают разный результат?

Различаются три договорённости: 32 или 33 буквы в алфавите (без «ё» результаты другие), шифруются ли пробелы и знаки (здесь пропускаются) и с какой буквы начинается ключ. Сверьте правила, прежде чем сравнивать ответы.