Разбирая, как устроена Enigma M3, легко попасть в ловушку: почти любое учебное описание рисует машину, которой не было. Обычно это три ротора, фиксированный рефлектор, «одометр» вместо реального шага и коммутационная панель как необязательная вишенка. Между тем именно расхождения в этих деталях определяют, совпадёт ли ваш эмулятор с настоящей M3 или будет считать что-то своё.
Сразу оговорюсь о статусе материала. Это обзор, а не собственное исследование. Ни один доступный источник не даёт воспроизводимого протокола сверки эмулятора с физической машиной: нет эталонных шифротекстов, снятых с конкретного серийного номера при известных настройках. Поэтому дальше речь идёт о том, какие детали нужно воспроизвести и насколько надёжно они подтверждены, а не о том, что кто-то измерил совпадение с железом.
Что именно теряется
Автор русскоязычного разбора на Хабре (master_program, 23 августа 2025) формулирует тезис прямо: «Немало кода с объяснениями, что есть в учебниках и научно-популярных статьях моделируют не саму Enigma, а какую-то более упрощенную модель, которой в истории не существовало — и результат их работы не сходился с тем, как работают точные эмуляторы, а криптостойкость ниже, чем у реальной машины». Это утверждение, а не измерение: автор не сравнивал свою программу с физической M3, а лишь «убедился, что написанная мною программа работает идентично эмуляторам этой машины». При этом он же признаёт, что «все найденные мною в интернете эмуляторы глючат». Получается, эталоном служат программы, которым автор не доверяет.
Музей криптографии Crypto Museum описывает ту же проблему мягче, но по существу так же: «At the time, most websites only gave a rough description of the machine and important details were omitted». Их собственная страница о принципе работы появилась именно потому, что точное описание было нужно для надёжной симуляции Enigma-E.
Сменный рефлектор
Первое крупное отличие M3 от армейской Enigma I — рефлектор. У Enigma I он фиксированный, у M3 сменный: выбор между UKW-B и UKW-C входит в ключ. Проводки в источниках совпадают:
UKW-B: YRUHQSLDPXNGOKMIEBFZCWVJAT
UKW-C: FVPJIAOYEDRZXWGCTKUQSBNMHL
Это не косметика. Рефлектор — единственный элемент, который разворачивает ток обратно через роторы, и он же отвечает за знаменитое свойство: буква никогда не шифруется в саму себя. Crypto Museum формулирует это как «It is inherent to this design, that a letter can never be encoded into itself». Если в вашей модели рефлектор жёстко зашит, вы теряете часть ключевого пространства и, что важнее, воспроизводите не ту машину.
Восемь роторов, а не пять
Вторая деталь — набор роторов. Армейские машины имели пять роторов на выбор, флот — восемь. Первые пять (I–V) совпадали с армейскими, что давало частичную совместимость, а VI–VIII использовались исключительно Kriegsmarine. Crypto Museum подтверждает: «The wiring of rotors I-V is identical to the wiring of the first 5 rotors of the Enigma M3».
Здесь начинается интересное. Автор хабровского разбора в разделе 7 приводит строки проводки всех восьми роторов, но тут же пишет: «Здесь мы рассмотрим только первые 5 роторов». То есть статья, заявленная как разбор M3, фактически моделирует пять роторов из восьми. Это не придирка ради придирки: без VI–VIII вы не воспроизводите флотскую машину.
Хуже того, в тексте есть прямое противоречие. В разделе 7 ротор V записан как VZBRGITYUPSDNHLXAWMJQOFECKH, а в словаре ROTORS в разделе 8 — как VZBRGITYUPSDNHLXMWMJQQOFECKH. Таблица Crypto Museum даёт третий вариант: VZBRGITYUPSDNHLXAWMJQOFECK (без завершающей H). Три источника — три несовпадающие строки. Для ротора, который входит в базовую пятёрку, это серьёзный сигнал: даже «точные» описания расходятся в деталях, которые проверяются по железу.
Двойной шаг среднего ротора
Третья деталь — механика шага. Правый ротор делает шаг при каждом нажатии, это знают все. Но средний ротор ведёт себя не как одометр. Crypto Museum описывает это так: «the middle rotor steps twice (on two successive key presses) if the leftmost rotor also makes a step. This phenomena, known as the double stepping anomaly... has been described in detail by David Hamer in 1997».
Ссылка на работу Hamer в Cryptologia (январь 1997, Volume XX, Number 1) — это уже рецензируемая публикация, а не музейная страница, и она важна: аномалия не выдумана популяризаторами, у неё есть формальное описание.
Последствие измеримо. Вместо 26 × 26 × 26 = 17 576 стартовых позиций период сокращается на 25 × 26 = 650 и составляет 16 926. Crypto Museum приводит это число дважды — и в разделе о шаге, и в разделе о ключевом пространстве. Автор хабровской статьи реализует ту же логику в функции _step_rotors: сначала проверяется, стоит ли средний ротор на выемке, и если да, он делает дополнительный шаг вместе с левым. Код воспроизводит аномалию корректно по структуре, хотя и не проверен против железа.
Отдельная тонкость — роторы VI–VIII. У них по две выемки, что должно участить шаг. Но Crypto Museum отмечает неочевидный эффект: «as 2 shares a common factor with 26 (26 can be divided by 2) the cipher period is effectively halved». То есть попытка усилить машину дала обратный результат. Это ровно тот класс деталей, который теряется в упрощённых моделях: две выемки выглядят как «сложнее», а на деле сокращают период.
Коммутационная панель: много вариантов, мало стойкости
Четвёртая деталь — Steckerbrett. Здесь важно не спутать размер ключевого пространства с криптостойкостью. Число комбинаций при 10 кабелях — 150 738 274 937 250, и это число совпадает у автора статьи и у Crypto Museum. Но музей добавляет важное уточнение: «the Steckerbrett is static, which means that its configuration does not change during encipherment. Despite its huge number of possible settings, it is little more than a static monoalphabetic substitution cipher, which is relatively easy to break».
То же касается Ringstellung: «The effect of the Ringstellung (ring setting) on the strength of the cipher is marginal, as it only affects the turnover position of the adjacent rotor». Упрощённые модели часто либо игнорируют кольцевую настройку, либо, наоборот, переоценивают её вклад. Правильный ответ — она нужна для точного воспроизведения шага, но не как источник стойкости.
Формула, которую приводит автор статьи, — total_offset = position_offset - ring_offset — по смыслу соответствует описанию Crypto Museum: кольцо «can be regarded as creating an offset in the opposite direction». Это рабочая формула для эмулятора, но её происхождение — реконструкция, а не цитата из наставления Kriegsmarine.
Что это значит для эмулятора
Если собрать перечисленное, минимальный набор для совпадения с реальной M3 выглядит так: сменный рефлектор B или C как часть ключа; восемь роторов с корректными проводками и выемками, включая двойные у VI–VIII; двойной шаг среднего ротора; отдельный параметр Ringstellung; коммутационная панель с парами букв. Плюс честная обработка небуквенных символов — автор статьи сам признаёт, что в его коде «символы, которые не являются буквами, пропускаем без шифрования. В реальных машинах было не так».
Но главный вывод обзора не в списке деталей, а в статусе доказательств. Тезис «учебные модели описывают машину, которой не существовало» опирается на авторское утверждение, а не на измерение. Проверка шла против эмуляторов, которые автор считает глючными. Проводка ротора V расходится в трёх источниках. Поэтому корректная формулировка такая: детали, которые нужно воспроизвести, известны и в основном согласованы между независимыми описаниями, а вот воспроизводимого доказательства совпадения с железом в открытых источниках нет.
Это не отменяет ценности точных эмуляторов. Это лишь напоминание, что «работает как эмулятор» и «работает как машина» — два разных утверждения, и второе пока никем публично не проверено.
Источники и литература
- Как работает машина Enigma M3 (для флота) / Хабр — авторское мнение; доступный текст страницы
- Enigma — первичный документ; доступный текст страницы
- Enigma I — первичный документ; доступный текст страницы
- Enigma Cipher Machine — первичный документ; доступный текст страницы
- OMI Alpha — первичный документ; доступный текст страницы
- The Enigma cipher machine — первичный документ; доступный текст страницы
