Приветствуем вас на обучающем модуле, посвященном одному из самых известных и древних алгоритмов в истории человечества – Шифру Цезаря. Этот шифр относится к категории моноалфавитных подстановок и на протяжении веков служил базовым инструментом защиты конфиденциальной информации.
Шифр Цезаря – это простейший подстановочный шифр, в котором каждая буква в шифруемом тексте заменяется другой буквой того же алфавита, находящейся от нее на некотором постоянном расстоянии (сдвиге). Этот сдвиг k и является секретным ключом шифрования.
Гай Юлий Цезарь использовал этот алгоритм с фиксированным сдвигом k = 3. Например, буква «А» заменялась на «Г», «Б» на «Д» и так далее. Если сдвиг выходил за рамки алфавита, происходил циклический переход к его началу.
В современной криптографии логику работы шифра Цезаря описывают строгим математическим языком с использованием модульной арифметики (вычислений по модулю n, где n – это количество букв в алфавите).
Математическая модель шифрования:
C = (P + k) mod n
Математическая модель расшифрования:
P = (C - k) mod n
Где:
P(Plaintext) – числовое значение исходной буквы алфавита (индекс от 0 до n-1).C(Ciphertext) – числовое значение зашифрованной буквы.k(Key) – секретный ключ (величина сдвига).n– мощность используемого алфавита (например, 33 для русского языка или 26 для английского).
Главная уязвимость алгоритма (Криптоанализ):
Несмотря на историческую значимость, шифр Цезаря абсолютно ненадежен в компьютерную эпоху из-за двух фундаментальных уязвимостей:
- Малое ключевое пространство: Для русского языка существует всего 33 возможных ключа (а реальных и того меньше, так как сдвиг на 0 или 33 возвращает исходный текст). Злоумышленник может мгновенно взломать шифр методом «грубой силы» (Brute Force), просто перебрав все варианты сдвига.
- Частотный анализ: Шифр является моноалфавитным. Это значит, что конкретная буква исходного текста (например, «О» – самая частая буква в русском языке) всегда будет превращаться в одну и ту же зашифрованную букву при неизменном ключе. Атакующему достаточно посчитать частоту символов в перехваченном тексте и сопоставить их со статистикой языка.
Ниже представлен простой код на языке Python, демонстрирующий, как работает алгоритм шифра Цезаря как для зашифрования текста, так и для его обратного расшифрования.