Музей Криптографии в Москве
Исследуем

Шифр Цезаря: принцип работы и примеры

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

Что такое шифр Цезаря и почему он так называется

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

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

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

Как работает шифр Цезаря: принцип замены

Алфавит — это последовательность символов. Представьте, что вы написали его дважды подряд, чтобы не останавливаться на последней букве. Теперь выберем ключ, например, 3. Это значит, что вместо «А» мы пишем «Г» (на три позиции правее), вместо «Б» — «Д», вместо «В» — «Е» и так далее.

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

Наглядно это выглядит так (для русского алфавита, сдвиг 3):

А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я А Б В

Это классический пример шифра Цезаря со сдвигом 3. Верхняя строка — исходный алфавит, нижняя — алфавит для шифрования.

Шифр Цезаря со сдвигом 3: пример

Возьмем слово «МУЗЕЙ» и зашифруем его с ключом 3, используя русский алфавит с буквой «Ё».

  • М → П
  • У → Х
  • З → К
  • Е → Ж
  • Й → М

Получаем шифротекст: «ПХКЖМ».

Теперь попробуем расшифровать шифр Цезаря с известным ключом. Если мы знаем, что сдвиг был 3, то двигаемся в обратную сторону:

  • П → М
  • Х → У
  • К → З
  • Ж → Е
  • М → Й

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

Как зашифровать текст шифром Цезаря самостоятельно

Процесс можно разбить на пять шагов.

Шаг 1. Выберите алфавит. Русский алфавит состоит из 33 букв, если считать «Ё». Английский — из 26. Это важно, потому что длина алфавита влияет на циклический сдвиг.

Шаг 2. Определите величину сдвига — любое целое число от 1 до 32 для русского алфавита (или от 1 до 25 для английского). Сдвиг 0 или 33 не меняет текст, поэтому его использовать бессмысленно.

Шаг 3. Пройдите по каждой букве исходного сообщения.

Шаг 4. Замените каждую букву на ту, что стоит на выбранное число позиций правее в алфавите.

Шаг 5. Выпишите полученный шифротекст.

Как расшифровать сообщение, если сдвиг известен

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

Например, у нас есть текст «НУЛТХСЁУ» и известно, что использовался сдвиг 3.

·       Н → К

·       У → Р

·       Л → И

·       Т → П

·       Х → Т

·       С → О

·       Ё → Г

·       У → Р

Получаем: «КРИПТОГР». Вероятно, исходное слово было «КРИПТОГРАФ», но последняя буква потерялась при передаче или была обрезана. Даже такой простой пример показывает, как важно передавать сообщения целиком.

Как расшифровать шифр Цезаря, если сдвиг неизвестен

Теперь самое интересное. Представьте, что вы нашли записку с текстом «ЛЁФШЬ», а ключа не знаете. Как вскрыть такой шифр?

Самый простой способ — полный перебор. Для русского алфавита существует всего 32 варианта сдвига (если считать «Ё»), для английского — 25. Даже вручную это займёт несколько минут. Вы просто выписываете все возможные варианты расшифровки и ищете тот, который выглядит как осмысленный текст.

Вот пример перебора для слова «ЛЁФШЬ»:

·       Сдвиг 1: КЕУЧЫ

·       Сдвиг 2: ЙЭТЦЪ

·       Сдвиг 3: ИЬСХЩ

·       ...

·       Сдвиг 25: НАЦЫЭ

·       Сдвиг 26: МЧХЮЬ

И так далее. Довольно быстро вы увидите знакомое слово.

Второй метод — частотный анализ. Это уже настоящий криптоанализ. В любом достаточно длинном тексте на конкретном языке буквы встречаются с разной частотой. В русском языке самая частая буква — «О», за ней следуют «Е», «А», «И», «Н». В английском — «E», «T», «A», «O», «I».

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

Для коротких сообщений частотный анализ работает плохо — слишком мало статистики. Поэтому для взлома коротких записок используется перебор, а для длинных текстов — статистический подход.

Шифр Цезаря на русском и английском: особенности алфавитов

Русский алфавит содержит 33 буквы, включая «Ё». Однако исторически с «Ё» возникают сложности. Многие реализации шифра Цезаря для русского алфавита игнорируют «Ё», работая с 32 буквами. Это упрощает нумерацию и делает сдвиг более предсказуемым, но создаёт неоднозначность: текст с «Ё» придётся предварительно нормализовать, заменяя её на «Е».

Английский алфавит короче — 26 букв. Это значит, что максимальный осмысленный сдвиг для него — 25. Сдвиг 26 возвращает нас к исходному тексту. Кроме того, в английском нет проблемы с буквами вроде «Ё», но есть свои нюансы: заглавные и строчные буквы обычно различаются, и это нужно учитывать при программной реализации.

Если вы решите зашифровать текст шифром Цезаря для русского алфавита, сразу определитесь с правилами для «Ё». Классический вариант — оставить её в алфавите. Современный упрощённый — убрать. Главное — чтобы отправитель и получатель использовали одинаковые правила.

Что происходит с цифрами, пробелами и знаками препинания

Классический шифр Цезаря работает только с буквами. Всё остальное — пробелы, точки, запятые, дефисы, цифры — остаётся без изменений.

Это, кстати, создаёт серьёзную уязвимость. Если злоумышленник видит шифровку, где сохранены пробелы между словами, он сразу понимает длину каждого слова. Зная контекст и длину слов, можно догадаться о содержании даже без ключа.

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

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

Шифр Цезаря на Python: минимальный пример

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

Ниже приведён короткий пример для английского алфавита:

def caesar_cipher(text, shift):

    result = ""

    for char in text:

        if char.isalpha():

            base = ord('A') if char.isupper() else ord('a')

            shifted = (ord(char) - base + shift) % 26

            result += chr(base + shifted)

        else:

            result += char

    return result

print(caesar_cipher("HELLO", 3))  # KHOOR

print(caesar_cipher("KHOOR", -3))  # HELLO

Насколько надёжен шифр Цезаря сегодня

Шифр Цезаря был эффективен в античности, когда большинство людей вообще не умели читать и писать. Сегодня он не защищает ни от чего.

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

Во-вторых, структура открытого текста сохраняется. Пробелы остаются на местах, длины слов видны, а частотное распределение букв не меняется — оно лишь сдвигается. Это делает шифр уязвимым даже без перебора.

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

Другие классические шифры и их отличия

Рядом с шифром Цезаря в истории криптографии стоит несколько родственных методов.

Атбаш

Древний шифр, в котором алфавит переворачивается задом наперёд: первая буква становится последней, вторая — предпоследней. В отличие от шифра Цезаря, Атбаш использует не сдвиг, а зеркальное отражение алфавита.

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

Вместо фиксированного сдвига используется последовательность сдвигов, задаваемая ключевым словом. Одна и та же буква может шифроваться по-разному в зависимости от позиции. Этот шифр считался невзламываемым вплоть до XIX века.

Шифр Атбаш и ROT13

ROT13 — это частный случай шифра Цезаря для английского алфавита со сдвигом 13. Он интересен тем, что применяя его дважды, вы возвращаетесь к исходному тексту, поскольку 13 + 13 = 26.

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

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

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

Заключение

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

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

Автор: Анна Глюз