恩尼格玛机模拟器
设置一台 Enigma I——从五个转子中选三个、反射器 B 或 C、环设置、起始位置以及最多十根接线——然后开始输入:转子步进,灯亮起,每次按键都会被完整追踪。该机器是自反的,因此使用相同设置即可解密。
加载示例
机器设置
最多十对字母,以空格分隔,例如 AV BS CG。每个字母只能出现在一对中。
该机器只有 26 个字母键,因此空格、数字和标点无法输入。操作员会把数字拼写出来,并用 X 代替句号。
机器
转子窗口
左
左窗口显示 A
I
中
中窗口显示 A
II
右
右窗口显示 F
III
上一次按键之后的状态。每次按键都会先使右侧转子前进,然后电流才通过,因此第一个字母是在起始位置之后一步才被加密的。
灯板
键盘
上一次按键的路径
- 按键A
- 接线板A
- III(右)G
- II(中)R
- I(左)U
- 反射器 BC
- I(左)Y
- II(中)V
- III(右)O
- 灯O
经过接线板、从右到左经过转子、经过反射器,再经过转子和接线板返回,点亮一盏灯。
输出
BDZGO
已输入 5 个字母
要解密,请设置相同的转子、环、接线板和起始位置,然后输入密文——Enigma 的加密与解密互逆。
按键记录
| # | 窗口 | 按键 | 灯 |
|---|---|---|---|
| 1 | AAB | A | B |
| 2 | AAC | A | D |
| 3 | AAD | A | Z |
| 4 | AAE | A | G |
| 5 | AAF | A | O |
如何使用恩尼格玛机模拟器
- 1. 设置机器。 选择反射器,然后为每个位置——左、中、右——选择转子、其环设置以及开始时窗口中显示的字母。
- 2. 插上接线板。 输入最多十对字母,例如 AV BS CG;每一对在输入和输出时都会互换这两个字母。
- 3. 输入报文, 可在输入框中输入,也可直接按键。该机器只有 26 个字母键,因此空格、数字和标点会被跳过——操作员会把数字拼写出来,并用 X 代替句号。
- 4. 观察它的运作。 窗口显示上一次按键之后的转子位置,灯板点亮最后输入的字母,信号路径和日志会追踪每一次按键。
- 5. 使用相同设置解密。 设置相同的转子、环、接线板和起始位置,然后输入密文。三个示例会加载已公布的测试案例。
Enigma I 的工作原理
按下一个键时会依次发生两件事。首先是转子步进:最右侧的转子总是前进一个位置,其环上的凹口每转一圈便带动中间转子前进一位。然后电流从按键出发,依次经过接线板、从右到左的三个转子、反射器、再从左到右经过转子,最后再经过接线板,点亮一盏灯。
每个转子都是对字母表的一种固定打乱,转子步进会使它相对于字母转动,因此同一个键每次点亮的灯都不同。反射器将字母两两配对,这使机器成为自反的:加密与解密使用同一套过程,而且任何字母都不会被加密成它自己。使用转子 I、II、III,反射器 B,环 AAA 与起始位置 AAA 时,输入 AAAAA 会依次点亮 B、D、Z、G 和 O:这是任何 Enigma 模拟器的标准首个检验。
| 部件 | A → Z 的接线 | 转位点 | 投入使用 |
|---|---|---|---|
| 转子 I | EKMFLGDQVZNTOWYHXUSPAIBRCJ | Q → R | 1930 年 |
| 转子 II | AJDKSIRUXBLHWTMCQGZNPYFVOE | E → F | 1930 年 |
| 转子 III | BDFHJLCPRTXVZNYEIWGAKMUSQO | V → W | 1930 年 |
| 转子 IV | ESOVPZJAYQUIRHXLNFTGKDCMWB | J → K | 1938 年 12 月 |
| 转子 V | VZBRGITYUPSDNHLXAWMJQOFECK | Z → A | 1938 年 12 月 |
| 反射器 B | YRUHQSLDPXNGOKMIEBFZCWVJAT | — | 1937 年 11 月 |
| 反射器 C | FVPJIAOYEDRZXWGCTKUQSBNMHL | — | 1940 年,短暂使用 |
转位点:转子窗口从第一个字母步进到第二个字母时(例如 Q → R),会带动其左侧的转子前进一位。
环设置与双步进
环设置 (Ringstellung) 使接线相对于带字母的环转动,而凹口仍与字母保持对应。若环设为 BBB 而非 AAA,同样的五次按键会得到 EWTYX。
中间转子有一个著名的特性:当它到达自己的转位位置时,在下一次按键时会再次步进,并带动左侧转子一起前进。从 ADU 开始,使用转子 I、II、III,窗口依次显示 ADV、AEW,然后是 BFX——中间转子从 D 走到 E,接着又直接走到 F。加载 双步进 示例即可观察。
实例:带环与接线板的报文
一条完整报文 加载的是德文维基百科 Enigma 条目中的示例:反射器 B,转子 I IV III,环 16 26 08 (P Z H),接线 AD CN ET FL GI JV KZ PU QY WX。操作员选择起始位置 QWE,键入报文密钥 RTZ,看到 EWG,并以明文发送 QWE EWG。
接收方设置 QWE,键入 EWG,并从灯上读出 RTZ。设置为 RTZ 后,密文 EJZLB SYEQP DWDUE EJJOU PSOFL B… 会解出 XAACH ENXAA CHENX ISTGE RETTE T…:Aachen ist gerettet,即“亚琛已获救”——空格和句号以 X 表示,地名重复出现,CH 写作 Q,这些都是德国军方报文的惯例。
破解 Enigma:雷耶夫斯基、布莱切利园与图灵
阿图尔·谢尔比乌斯 (Arthur Scherbius) 于 1918 年申请了转子机的专利,并于 1923 年售出第一台商用 Enigma。德国海军于 1926 年采用了改进版本,陆军于 1928 年加入了接线板,而 Enigma I 自 1930 年起投入使用。最先破解它的是波兰数学家:大约在 1932 年 12 月,波兰密码局的马里安·雷耶夫斯基运用置换理论,借助法国人从一名德国间谍汉斯-蒂洛·施密特那里获得的每日密钥,推算出转子的接线。他与耶尔齐·罗日茨基、亨里克·济加尔斯基一道制作了济加尔斯基纸片,并造出机电装置 bomba 来查找每日设置;1939 年 7 月,在华沙附近的皮雷,波兰人把这一切都与法国和英国的密码学家共享。
在布莱切利园,艾伦·图灵设计了英国炸弹机 (British bombe),它用 crib(已知明文,即破译人员预计报文中会出现的明文)来检验转子设置;戈登·威尔奇曼的对角线接线板使其效率大增,第一台炸弹机于 1940 年 3 月安装。由于任何字母都不会被加密成它自己,猜测的单词就不能放在会使某个字母与自身对应的位置上,这有助于确定 crib 的位置。来自 Enigma 及其他密码的情报(代号 Ultra)对盟军是重要的帮助。
Enigma 安全吗?
纸面上看,它相当坚固:从五个转子中选三个并排序、它们的起始位置以及十对接线,共得到 158,962,555,217,826,360,000 种设置——约 1.6 × 10²⁰,即 67 比特——尚未计入环设置。它的失守源于设计与使用方式:没有字母会变成它自己,操作员发送可预测的短语,并且直到 1940 年 5 月,他们都会把每个报文密钥连打两遍。如今计算机仅凭密文即可恢复 Enigma 的设置,因此本模拟器用于学习,而不用于保密。
常见问题
- 恩尼格玛机如何工作?
- 每次按键时,转子先步进,然后电流依次经过接线板、三个转子、反射器、再以反向经过转子,最后经过接线板,点亮一盏灯。由于转子在每次按键时都会移动,每个字母都用不同的字母表加密,因此报文中重复的字母在密文中不会重复。
- Enigma 的双步进异常是什么?
- 当中间转子到达自己的转位位置时,它会在连续两次按键中步进:第一次是右侧转子带动它到达那里,第二次是在下一次按键时,它带动左侧转子一起前进。使用转子 I、II、III 从 ADU 开始,窗口依次显示 ADV、AEW、BFX。许多模拟器在这一点上出错;本模拟器已针对它进行了测试。
- 为什么 Enigma 不能把字母加密成它自己?
- 这是反射器的作用:它总是把一个字母与另一个不同的字母配对,因此电流会沿另一根线返回,点亮的灯永远不会是所按的那个键。这使机器成为自反的,但也告诉破译人员:一个猜测的单词不可能出现在哪些位置。
- 如何解密 Enigma 报文?
- 设置发送方所用的同一反射器、转子顺序、环设置、接线板和起始位置,然后输入密文:灯会拼出明文。战时的报文还附带经加密的报文密钥,因此接收方要先解密该密钥,再把转子设置为该密钥。
- 谁破解了 Enigma 密码?
- 最早的破解来自波兰:大约在 1932 年 12 月,马里安·雷耶夫斯基重建了转子接线,并与耶尔齐·罗日茨基、亨里克·济加尔斯基一道,在战前多年间读取 Enigma 的通信。从 1939 年起,这项工作在布莱切利园继续进行,艾伦·图灵、戈登·威尔奇曼以及成千上万的人——其中许多是操作炸弹机的女性——把它变成了一项工业化的行动。