Энигма, Тьюринг и рождение современной криптографии
Во Вторую мировую немцы шифровали приказы машиной Энигма и считали её непробиваемой. Команда Алана Тьюринга в Блетчли-парке доказала обратное — и изменила ход войны.
Историки считают, что взлом Энигмы сократил войну на годы и спас миллионы жизней.
Что такое Энигма
Энигма — электромеханическая машина с роторами. Нажимаешь букву — ток проходит через несколько вращающихся дисков и зажигается другая буква. После каждого нажатия роторы поворачиваются, поэтому одна и та же буква каждый раз шифруется по-новому. По сути это очень мощный, постоянно меняющийся шифр подстановки.
Число настроек было гигантским — порядка 150 квинтиллионов комбинаций. Немцы меняли ключ каждый день.
Простейшая модель ротора
Покажем главную идею: ротор — это подстановка, которая сдвигается после каждой буквы.
import string
A = string.ascii_uppercase
ROTOR = "EKMFLGDQVZNTOWYHXUSPAIBRCJ" # один из роторов Энигмы
def toy_enigma(text, start=0):
out = []
pos = start
for ch in text.upper():
if ch in A:
i = (A.index(ch) + pos) % 26 # ротор повернулся
enc = ROTOR[i]
out.append(enc)
pos = (pos + 1) % 26 # поворот после буквы
else:
out.append(ch)
return ''.join(out)
msg = "AAAAA"
print("Пять одинаковых букв A:", msg)
print("Энигма-демо: ", toy_enigma(msg))
print("Каждая A стала РАЗНОЙ буквой из-за поворота ротора!")
Роковая слабость
У реальной Энигмы был рефлектор, из-за которого буква никогда не шифровалась сама в себя: A не могла стать A. Эта мелочь дала зацепку. Плюс немцы передавали предсказуемые слова — например, ежедневный прогноз погоды или «Heil Hitler». Такие угаданные куски текста называли «crib» (шпаргалка).
Тьюринг и бомба
Алан Тьюринг построил электромеханическую машину Bombe, которая перебирала настройки Энигмы, отбрасывая невозможные варианты с помощью крибов и правила «буква не равна себе». То, что человек не сделал бы за миллионы лет, машина проверяла за часы.
# Принцип крибов: буква не шифруется сама в собой -> отбрасываем настройки
cipher = "PLTQ"
crib = "WETT" # ждём слово WETTER (погода)
print("Шифровка:", cipher)
print("Догадка: ", crib)
for c, g in zip(cipher, crib):
bad = (c == g)
mark = "НЕВОЗМОЖНО (буква = себе)" if bad else "ok"
print(f" {c} vs {g}: {mark}")
print("Так Bombe отбрасывала противоречивые настройки.")
Рождение современной криптографии
Блетчли-парк стал колыбелью информатики: Тьюринг заложил идеи вычислимости, а машина Colossus стала одним из первых программируемых компьютеров. После войны Клод Шеннон превратил криптографию в строгую математическую науку, доказав, что стойкость должна опираться на математику и размер ключа, а не на секретность самого устройства.
Вывод:
Энигма казалась непробиваемой из-за вращающихся роторов и квинтиллионов настроек. Её сломали крибы, правило «буква не равна себе» и машина Bombe Тьюринга. Блетчли-парк дал толчок информатике и современной криптографии.