Древние шифры: скитала, Цезарь и первые секреты

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

Спартанская скитала

Около 2500 лет назад спартанцы использовали скиталу — деревянный жезл. На него по спирали наматывали узкую полоску кожи и писали сообщение вдоль жезла. Когда ленту разматывали, буквы перемешивались и превращались в бессмыслицу. Прочитать текст мог только тот, у кого был жезл точно такого же диаметра.

Это пример перестановочного шифра: буквы остаются те же, но меняется их порядок.

Шифр Цезаря

Юлий Цезарь сдвигал каждую букву алфавита на 3 позиции вперёд. A становилась D, BE и так далее. Это шифр подстановки: каждая буква заменяется на другую по фиксированному правилу.

Запустим шифр Цезаря на латинском алфавите:

import string

def caesar(text, shift):
    result = []
    for ch in text.upper():
        if ch in string.ascii_uppercase:
            idx = (ord(ch) - ord('A') + shift) % 26
            result.append(chr(idx + ord('A')))
        else:
            result.append(ch)
    return ''.join(result)

message = "ATTACK AT DAWN"
enc = caesar(message, 3)
dec = caesar(enc, -3)
print("Исходный текст:", message)
print("Зашифровано:   ", enc)
print("Расшифровано:  ", dec)

Почему это слабо

У шифра Цезаря всего 25 возможных сдвигов. Враг может просто перебрать их все за минуту. Попробуем взломать:

import string

def caesar(text, shift):
    out = []
    for ch in text.upper():
        if ch in string.ascii_uppercase:
            idx = (ord(ch) - ord('A') + shift) % 26
            out.append(chr(idx + ord('A')))
        else:
            out.append(ch)
    return ''.join(out)

secret = "WKLV LV D VHFUHW"
print("Перебираем все сдвиги:")
for s in range(1, 26):
    print(f"сдвиг {s:2d}: {caesar(secret, -s)}")

Среди 25 строк глаз сразу находит осмысленную. Безопасность, которая держится на переборе из 25 вариантов, — не безопасность.

Вывод:

Древние шифры прятали сообщения перестановкой (скитала) или подстановкой (Цезарь). Их слабость — маленькое число ключей, которое легко перебрать.
Проверьте себя
1. Чем отличается шифр Цезаря от спартанской скиталы?
AЦезарь использовал жезл, а скитала — сдвиг букв
BСкитала переставляет порядок букв, а Цезарь заменяет каждую букву на другую
CЭто два названия одного и того же шифра
DСкитала надёжнее современного AES
2. Почему шифр Цезаря легко взломать?
AОн использует слишком длинный ключ
BВсего 25 возможных сдвигов, которые можно перебрать вручную
CОн работает только с цифрами
DЕго невозможно зашифровать дважды
Поддержать проект