Как расшифровать шифр Цезаря: перебор и частоты
Дано: шифртекст ИШЩЧЛЮЖЛУШЁ ОЖИЩЧЖ Ъ ШЩЖЧХЙХ УХШЩЖ, русский алфавит из 33 букв, ключ неизвестен. Найти: сдвиг и открытый текст.
У шифра Цезаря ровно 33 возможных ключа, поэтому расшифровка без ключа сводится к перебору: выписываем все сдвиги и оставляем тот, где текст читается. Частотный анализ работает не вместо перебора, а как наводка: он подсказывает, с какого сдвига начинать. Ответ: сдвиг , сообщение ВСТРЕЧАЕМСЯ ЗАВТРА У СТАРОГО МОСТА. Калькулятор сверху прогоняет все 33 ключа для любого шифртекста и показывает, у какого из них буквы ложатся на частоты русского языка.
Решение по шагам
Дано. Шифртекст ИШЩЧЛЮЖЛУШЁ ОЖИЩЧЖ Ъ ШЩЖЧХЙХ УХШЩЖ: 30 букв, пробелы шифр не трогает. Алфавит русский, 33 буквы, буква Ё на своём месте. Найти: ключ и исходное сообщение.
Шаг 1. Нумеруем алфавит с нуля. Шифр Цезаря работает не с буквами, а с их номерами, поэтому первым делом нужна таблица соответствия. Нумерация обязательно начинается с нуля: тогда сдвиг и остаток по модулю считаются без поправок.
| Буква | А | Б | В | Г | Д | Е | Ё | Ж | З | И | Й |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Номер | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| Буква | К | Л | М | Н | О | П | Р | С | Т | У | Ф |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Номер | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| Буква | Х | Ц | Ч | Ш | Щ | Ъ | Ы | Ь | Э | Ю | Я |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Номер | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
Шаг 2. Записываем формулу расшифровки. Шифрование сдвигает номер буквы на позиций по кругу:
Расшифровка - обратная операция, тот же сдвиг в другую сторону:
Если разность вышла отрицательной, к ней прибавляют 33: остаток по модулю всегда лежит в диапазоне от 0 до 32.
Шаг 3. Частотный анализ сужает поиск. Считаем, сколько раз встречается каждая буква шифртекста.
| Буква шифртекста | Ж | Ш | Щ | Х | Ч | И | Л | У |
|---|---|---|---|---|---|---|---|---|
| Сколько раз | 5 | 4 | 4 | 3 | 3 | 2 | 2 | 2 |
| Доля, % | 16,7 | 13,3 | 13,3 | 10,0 | 10,0 | 6,7 | 6,7 | 6,7 |
Чаще всего попадается Ж, её номер 7. Самые частые буквы русского языка - О (10,97 %), Е (8,45 %) и А (8,01 %), значит и проверять надо эти три гипотезы. Ключ считается как разность номеров: для О, для Е и для А.
Шаг 4. Проверяем гипотезы перебором. Расшифровываем текст каждым из кандидатов и смотрим, что получилось.
| Гипотеза | Ключ k | Начало расшифровки | Вывод |
|---|---|---|---|
| Ж отвечает О | 25 | рабяуёоуыан цорбяо | набор букв |
| Ж отвечает Е | 2 | жцчхйьейсцд межчхе | набор букв |
| Ж отвечает А | 7 | встречаемся завтра | текст читается |
Сработала третья гипотеза. Если бы не сработала ни одна, оставалось бы дописать таблицу до всех 33 строк: перебор конечен и всегда даёт ответ.
| Сдвиг k | Расшифровка | Оценка S(k), % |
|---|---|---|
| 0 | ишщчлюжлушё ожищчж ъ шщжчхйх ухшщж | 1,93 |
| 1 | зчшцкэёктче нёзшцё щ чшёцфиф тфчшё | 1,90 |
| 2 | жцчхйьейсцд межчхе ш цчехузу суцче | 2,88 |
| 3 | ёхцфиыдирхг лдёцфд ч хцдфтжт ртхцд | 2,50 |
| 4 | ефхузъгзпфв кгехуг ц фхгусёс псфхг | 2,40 |
| 5 | дуфтжщвжоуб йвдфтв х уфвтрер оруфв | 3,65 |
| 6 | гтусёшбёнта ибгусб ф тубспдп нптуб | 3,48 |
| 7 | встречаемся завтра у старого моста | 5,86 |
| 8 | брспдцядлрю жябспя т рсяпнвн лнрся | 3,67 |
| 9 | апрогхюгкпэ ёюарою с прюомбм кмпрю | 3,69 |
| 10 | яопнвфэвйоь еэяпнэ р опэнлал йлопэ | 4,29 |
Шаг 5. Дешифруем побуквенно и проверяем ключ. Берём первое слово и вычитаем 7 из каждого номера: И (9) даёт 2, то есть В; Ш (25) даёт 18, то есть С; Щ (26) даёт 19, то есть Т; Ч (24) даёт 17, то есть Р; Л (12) даёт 5, то есть Е. Дальше Ю (31) переходит в Ч, Ж (7) - в А, Л - в Е, У (20) - в М, Ш - в С. Последняя буква интереснее: Ё имеет номер 6, разность отрицательна, добавляем 33 и получаем 32, то есть Я. Складывается слово ВСТРЕЧАЕМСЯ.
Остальные слова расшифровываются так же: ОЖИЩЧЖ даёт ЗАВТРА, одиночная Ъ (27) переходит в У (20), ШЩЖЧХЙХ даёт СТАРОГО, УХШЩЖ даёт МОСТА.
Ответ. Ключ , открытый текст: ВСТРЕЧАЕМСЯ ЗАВТРА У СТАРОГО МОСТА.
Формула шифра и почему ключей ровно 33
В формулах - номер буквы открытого текста, - номер той же буквы в шифртексте, - ключ, то есть величина сдвига. Модуль 33 равен числу букв алфавита и отвечает за замыкание алфавита в кольцо: после Я снова идёт А, поэтому сдвиг никогда не выходит за пределы таблицы. У античного шифра Цезаря ключ был равен трём, но в задачах сдвиг берут любой.
Ключей ровно столько, сколько букв, - 33, причём оставляет текст без изменений, а совпадает с нулевым сдвигом. Осмысленных ключей, таким образом, 32. Именно поэтому шифр Цезаря считается учебным: пространство ключей слишком мало, чтобы устоять перед перебором.
Полезное следствие: расшифровка со сдвигом равносильна шифрованию со сдвигом , поскольку . Здесь , и шифрование с ключом 26 вернёт тот же открытый текст. Это удобная самопроверка.
Частотный анализ: почему он вообще работает
Сдвиг не меняет форму частотной картины, он только двигает её по кругу. Гистограмма частот шифртекста - это гистограмма русского языка, циклически сдвинутая на позиций: высокий пик О, пики поменьше на Е, А и И, прижатый к нулю хвост из Ъ, Ё и Ф. Задача сводится к тому, чтобы понять, на сколько позиций уехал этот профиль.
На длинных текстах наводка по самой частой букве почти всегда попадает в цель. На коротких - нет: в нашем шифртексте всего 30 букв, и на первое место случайно вышла Ж, отвечающая букве А, а не О. Отсюда правило: гипотезу по самой частой букве проверяют, а не принимают на веру, и проверяют сразу две-три штуки. Надёжной частотную наводку делает объём примерно от двухсот букв.
Помогают и редкие буквы. Ё, Ъ и Ю, которых в осмысленном тексте почти не бывает, выдают сдвинутый алфавит и дают быструю отбраковку: сдвиг, оставляющий в расшифровке много Ъ и Ф, точно неверен.
Автоматическая оценка сдвига
Чтобы не читать 33 варианта глазами, каждому сдвигу приписывают числовую оценку. Простой и устойчивый вариант - средняя табличная частота букв расшифровки:
где - число букв, - номер -й буквы шифртекста, а - частота буквы по таблице русского языка в процентах. У связного русского текста показатель держится около 5,58 %, у случайного набора букв - около 3,03 %. Чем выше , тем правдоподобнее сдвиг.
| Сдвиг k | 7 | 25 | 11 | 10 | 26 |
|---|---|---|---|---|---|
| S(k), % | 5,86 | 4,53 | 4,37 | 4,29 | 3,93 |
Верный ключ 7 набирает 5,86 % и отрывается от конкурента больше чем на процентный пункт - этого хватает, чтобы выбрать его без чтения текста. Ровно эту оценку по всем 33 сдвигам строит график в калькуляторе сверху.
Если алфавит другой: 32 буквы, латиница, ROT13
Модуль в формуле всегда равен числу букв алфавита, и это самое частое место расхождения ответов. Многие учебники исключают Ё и работают по модулю 32: тогда номера всех букв после Е уменьшаются на единицу и ключ получается другим. Читайте условие буквально.
Для латиницы модуль равен 26, формула та же: . Отсюда получается известный ROT13 со сдвигом 13: он самообратный, потому что , и одна и та же операция и шифрует, и расшифровывает. Номера букв в компьютере берут из кодовой таблицы, где кириллица лежит подряд, - как устроены такие таблицы, разобрано в статье про кодировку Windows-1251.
Шифр Цезаря - простейший случай моноалфавитной замены. Стоит сделать сдвиг переменным, и перебор ключей перестаёт работать: у шифра Виженера ключ задаётся словом, а у полиграфических шифров буквы шифруются блоками, и частотный анализ одиночных букв бессилен. Блочный вариант с матричным ключом разобран в статье про шифр Хилла. А в современных системах с открытым ключом сдвиг заменяет возведение в степень по огромному модулю, и весь расчёт держится на том, что его умеют делать быстро - см. бинарное возведение в степень.
Частые ошибки
- Нумеруют алфавит с единицы. Тогда формула смещает ответ на букву, а номер 33 выпадает из кольца. Нумерация только с нуля.
- Забывают про Ё. Пропуск буквы меняет модуль с 33 на 32 и ломает ответ: модуль задаёт условие, а не привычка.
- Оставляют отрицательный остаток. Разность нужно поднять до 32 прибавлением 33; иначе последняя буква слова ВСТРЕЧАЕМСЯ не восстановится.
- Путают направление сдвига. При шифровании к номеру прибавляют, при расшифровке вычитают: потерянный минус даёт правдоподобный, но нечитаемый результат.
- Слепо верят самой частой букве. На коротком тексте она часто отвечает не О, а А или Е, как здесь. Проверяйте минимум три гипотезы.
- Сдвигают пробелы и знаки препинания. Шифр Цезаря работает только с буквами алфавита, всё остальное переносится в шифртекст как есть.
FAQ
Сколько сдвигов надо перебрать, чтобы гарантированно расшифровать шифр Цезаря? Не больше 33 по русскому алфавиту и не больше 26 по латинскому, причём нулевой сдвиг проверять бессмысленно. Вручную это несколько минут работы, так что шифр вскрывается без всякой теории.
Можно ли расшифровать шифр Цезаря, если текст очень короткий? Перебором - да, всегда: 33 варианта выписываются целиком, и читаемый находится глазами. А вот частотный анализ на трёх-четырёх буквах бесполезен и может указать на неверный сдвиг.
Чем шифр Цезаря отличается от шифра Виженера? У Цезаря сдвиг один на весь текст, у Виженера он меняется от буквы к букве по ключевому слову. Одна и та же буква шифруется по-разному, частотная картина размывается, и перебор перестаёт помогать.
Что делать, если после расшифровки текст всё равно не читается? Проверьте модуль алфавита (33 или 32), нумерацию с нуля и направление сдвига. Если всё верно, а осмысленного варианта среди 33 нет, это не шифр Цезаря, а другая замена или перестановка букв.
Коротко
- Пронумеруйте алфавит с нуля: А равно 0, Я равно 32 при 33 буквах.
- Запишите формулу расшифровки и помните про прибавление 33 к отрицательной разности.
- Посчитайте частоты букв шифртекста и проверьте гипотезы, что самая частая буква отвечает О, Е или А.
- Проверьте кандидатов, а при неудаче переберите все 33 сдвига: вариант, где текст читается, и есть ответ.
- Для шифртекста ИШЩЧЛЮЖЛУШЁ ОЖИЩЧЖ Ъ ШЩЖЧХЙХ УХШЩЖ ключ равен 7, а сообщение - ВСТРЕЧАЕМСЯ ЗАВТРА У СТАРОГО МОСТА.
Похожие задачи
Как расшифровать шифр Виженера: ключ и метод Касиски
Разбираем, как расшифровать шифр Виженера: формула сдвига по модулю 33, таблица Виженера, поиск длины ключа методом Касиски и индексом совпадений, пошаговое решение с калькулятором.
Теория чисел/криптографияКак быстро возвести в степень: бинарный алгоритм
Как быстро возвести число в степень по модулю: разложение показателя в двоичную запись, таблица квадратов, пошаговый расчёт 7 в степени 93 по модулю 101 и число умножений.
Теория чисел/криптографияКак найти функцию Эйлера: разбор на числе 7560
Как найти функцию Эйлера: разбор числа 7560 по шагам, каноническое разложение, формула через произведение скобок по простым делителям, проверка мультипликативностью и теорема Эйлера.
Теория чисел/криптографияКак найти обратное по модулю: расширенный алгоритм Евклида
Как найти обратное по модулю: разбор на числах 37 и 120, условие существования через НОД, таблица расширенного алгоритма Евклида, приведение коэффициента и проверка остатка.
Теория чисел/криптографияКак найти первообразный корень: критерий и пример
Как найти первообразный корень по модулю: функция Эйлера, критерий через её простые делители, проверка кандидатов 2, 3, 5 и 6 по модулю 41 и таблица индексов.
Теория чисел/криптографияКак решить систему сравнений: китайская теорема об остатках
Как решить систему сравнений x = 2 (mod 3), x = 3 (mod 5), x = 2 (mod 7): проверка взаимной простоты модулей, сборка ответа по китайской теореме об остатках и проверка подстановкой.