恩尼格玛密码机模拟器

恩尼格玛密码机是纳粹德国在二战期间用于加密军事通信的机电密码装置。凭借超过 158 千兆亿种可能配置,它曾被视为不可破解,直到布莱切利庄园的波兰和英国密码破译者——在 Alan Turing 的带领下——发现了其结构性弱点。使用本免费模拟器,配备真实的国防军恩尼格玛 I 型转子、反射板和插线板,加密和解密消息。

机器配置

左转子
转子:
位置:
环设置:
中转子
转子:
位置:
环设置:
右转子
转子:
位置:
环设置:
反射板:
插线板0/13 对
左I
Z
A
B
○ Q
中II
Z
A
B
○ E
右III
Z
A
B
○ V
加密
结果
0 字符
输入字符以查看信号路径

关于恩尼格玛密码机的常见问题

恩尼格玛密码机是什么?

恩尼格玛密码机是一种机电密码装置,主要由纳粹德国在二战期间用于加密军事通信。该机器由德国工程师 Arthur Scherbius 于 1918 年发明,1923 年起商业销售,德国军方于 1926 年采用。它结合转子、反射板和插线板,产生一种极为复杂的替换密码。凭借超过 158 千兆亿种可能设置,它曾被视为不可破解——直到波兰和英国密码破译者发现了操作员使用中的可利用弱点。

恩尼格玛密码机如何工作?

按下一个键时,信号先经过插线板(交换部分字母对),再依次通过三个转子(每个以不同方式置乱字母表),碰到反射板后反向通过所有三个转子,再次经过插线板,最终点亮输出灯。每次按键前,最右侧转子向前步进,机械缺口使中间和左侧转子在特定间隔步进。这意味着每个字母都用不同的替换字母表加密,使频率分析几乎不可能。

谁破解了恩尼格玛密码?

恩尼格玛最早由波兰数学家 Marian Rejewski 于 1932 年破解,同事 Jerzy Rozycki 和 Henryk Zygalski 也参与其中。1939 年战争爆发前夕,他们将成果分享给英国和法国。在英国布莱切利庄园,Alan Turing 和 Gordon Welchman 于 1940 年建造了 Bombe 机器,自动化寻找每日恩尼格玛设置的过程。他们的工作据估计使第二次世界大战缩短了至少两年,拯救了数百万生命。

恩尼格玛密码机的双重步进是什么?

双重步进是一种机械异常,中间转子在连续两次按键中都会前进。通常,中间转子只在右侧转子到达其缺口位置时才步进。但如果中间转子本身处于缺口位置,机械棘爪会在左侧转子前进时再次带动它步进。这略微缩短了机器的理论周期,是密码破译者需要考虑的特点之一。

恩尼格玛密码机上的插线板有什么作用?

插线板(Steckerbrett)是恩尼格玛密码机前面板上的一个面板,有 26 个插孔,每个字母一个。操作员可以用电缆连接字母对,使它们在转子加密前后互换。最多可同时连接 13 对。插线板是恩尼格玛密码强度的最大单项来源,为可能设置总数贡献了超过 150 万亿的因子。

恩尼格玛密码机有多少种可能配置?

国防军恩尼格玛 I 型约有 158,962,555,217,826,360,000(约 1.59 x 10^20)种可能配置。这来自:从 5 个转子中选择 3 个(60 种方式)、26^3 种起始位置(17,576)、26^3 种环设置(17,576),以及带 10 对的插线板连接(超过 150 万亿种组合)。即使是现代计算机也需要大量时间暴力破解所有可能,但机器已知的弱点使定向攻击可行。

按照现代标准,恩尼格玛密码机安全吗?

不安全。虽然恩尼格玛约 1.59 x 10^20 的密钥空间看起来很大,但现代计算机可以快速搜索。更重要的是,恩尼格玛存在根本性的密码弱点:字母永远不能加密为自身(由于反射板)、替换是对合的(加密 = 解密),转子会产生可被利用的规律。现代加密算法如 AES 使用 2^256 的密钥空间(远远更大),并避免了所有这些结构性弱点。

Alan Turing 在破解恩尼格玛中扮演了什么角色?

Alan Turing 于 1939 年 9 月加入布莱切利庄园的密码破译工作,设计了 Bombe 机器——一种每秒可测试数千种可能恩尼格玛设置的机电装置。Turing 利用了没有字母能加密为自身(反射板特性)这一事实,并使用已知明文攻击——猜测消息中可能出现的词语(称为「已知词」)——大幅缩小了可能设置的范围。他的工作以及 Gordon Welchman 的改进,使得能够足够快速地解密恩尼格玛消息,具有实际军事价值。

布莱切利庄园与恩尼格玛有何关联?

布莱切利庄园是英国白金汉郡的一座维多利亚时代庄园,二战期间曾是英国政府密码学校(GC&CS)的总部。鼎盛时期,超过 10,000 人在此工作,包括数学家、语言学家和国际象棋冠军。在布莱切利庄园完成的密码破译工作——特别是针对恩尼格玛和更先进的洛伦兹密码——产生了代号为「超级情报」的情报,使盟军提前获知德军军事计划,被普遍认为有助于缩短战争。

什么是恩尼格玛密码机(Enigma Machine)?

恩尼格玛密码机(Enigma machine)是一种机电密码设备,主要由纳粹德国在二战期间用于加密军事通信。该机器由德国工程师 Arthur Scherbius 于 1918 年发明,1923 年开始商业销售,德国军方于 1926 年采用。它结合插接板、三个(或更多)转子和反射器,产生一种多表替换密码,大约有 158 千兆亿种可能配置——以 1940 年代的技术使得暴力破解几乎不可能。

尽管密钥空间巨大,恩尼格玛密码机仍通过数学洞察力、操作员失误和专用机械的结合被破解。波兰数学家 Marian Rejewski 于 1932 年首次破解了恩尼格玛,其工作后来在布莱切利庄园被 Alan Turing 扩展,后者设计了"炸弹"机器来自动搜索每日设置。他们的集体努力估计使第二次世界大战缩短了至少两年。

恩尼格玛密码机的工作原理

信号路径

当按下恩尼格玛键盘上的一个键时,电信号沿以下路径传输:

  1. 插接板(Steckerbrett) — 信号首先通过插接板,该板交换字母对。最多可连接 13 根电缆,每根交换两个字母。
  2. 入口轮(Eintrittswalze) — 信号通过静态入口轮进入转子组件。
  3. 右侧转子 — 信号通过最右侧转子,根据其内部连线和当前位置替换字母。
  4. 中间转子 — 信号继续通过中间转子。
  5. 左侧转子 — 信号通过最左侧转子。
  6. 反射器(Umkehrwalze) — 反射器将信号反向通过各转子,确保没有字母能加密为其自身。
  7. 转子(反向) — 信号从左到右反向穿过全部三个转子,使用逆向连线路径。
  8. 插接板(再次) — 信号在点亮输出灯之前再次通过插接板。

转子步进机制

每个字母加密前,转子向前步进:

  • 右侧转子每次按键前进一个位置。
  • 中间转子在右侧转子到达其缺口位置(由转子类型决定的特定字母)时前进。
  • 左侧转子在中间转子到达其缺口位置时前进。

这产生了双重步进异常:如果中间转子正处于自身的缺口位置,当左侧转子前进时它会再次步进,导致在连续两次按键中都移动。这一机械怪癖略微缩短了密码的周期,是破译者的重要切入点。

转子

国防军恩尼格玛 I 型使用五个可互换的转子(标记为 I 至 V),每个转子有不同的内部连线和一个缺口位置:

转子缺口进位
IQR
IIEF
IIIVW
IVJK
VZA

从五个转子中选择三个以任意顺序放置,共有 60 种可能的转子排列。

环设置

每个转子有从 1 到 26 的环设置(Ringstellung),用于偏移转子内部连线与其可见位置指示器之间的关系。环设置在不改变连线本身的情况下,改变转子位置与其内部连线之间的映射关系。

反射器

反射器(Umkehrwalze)将全部 26 个字母两两配对,将信号反向通过转子。共使用了三种反射器:

  • UKW-A — 用于早期型号
  • UKW-B — 战争期间最常用的反射器
  • UKW-C — 备选反射器

反射器使恩尼格玛具有互反性(或对合性):用相同设置加密一条消息会产生原始明文。这意味着加密和解密是同一种操作。

插接板

插接板(Steckerbrett)是恩尼格玛密码强度的最大单项贡献者。使用 10 对电缆(标准操作配置),仅插接板就提供超过 150 万亿种可能配置。每根电缆在转子加密前后分别交换一对字母。

恩尼格玛密码机示例

如无特别说明,下面的例子都使用模拟器的默认配置预设:转子 I-II-III(从左到右),反射器 UKW-B,起始位置 A-A-A,环设置 1-1-1,插接板不接线。每次操作前先把转子拨回起始位置;下面每个结果都和模拟器一致。

示例 1:连按五次 A

输入: AAAAA → 输出: BDZGO

  • 右侧转子在每个字母加密之前先步进,所以第一个 A 实际是在 A-A-B 位置加密的,而不是 A-A-A。打完五个字母后,窗口显示 A-A-F。
  • 同一个字母连按五次,得到五个不同的输出,因为每按一次键转子位置都会变,替换字母表也跟着变。
  • 五个输出里没有一个是 A。反射器不会把信号原路送回,所以字母永远不会加密成它自己——这正是后来布莱切利庄园利用的弱点。

示例 2:加密和解密是同一种操作

输入: HELLOWORLD → 输出: ILBDAAMTAZ

把转子拨回 A-A-A,输入 ILBDAAMTAZ,机器打出来的就是 HELLOWORLD。所以操作员只需要掌握一套流程,接收方用同样的当日设置把密文重新敲一遍就能读出明文。注意输出里连着两个 A:密文里重复的字母来自不同的明文字母(这里是 O 和 W),并不是因为输入重复。

示例 3:亲眼看到双重步进

设置: 默认转子,起始位置 A-D-U。右侧的 III 号转子越过 V 时带动中间转子;中间的 II 号转子越过 E 时带动左侧转子。

按键按键后的位置发生了什么
第 1 次A-D-V只有右侧转子步进
第 2 次A-E-W右侧转子原本在 V,中间转子跟着步进
第 3 次B-F-X中间转子原本在 E,它再次步进,同时带动左侧转子
第 4 次B-F-Y恢复正常步进

中间转子连续两次按键都动了(D→E→F),这就是前面讲到的双重步进异常。

示例 4:环设置与起始位置

  • 环设置 2-2-2(B-B-B),起始位置 A-A-A:AAAAA → EWTYX
  • 环设置 2-2-2,起始位置 B-B-B:AAAAA → BDZGO

第二个结果和示例 1 完全一样。环设置改变的是内部连线相对于窗口字母的偏移,所以环设置和起始位置同时加一,连线实际所处的位置并没有变。唯一变的是进位时机:分别用默认配置和“环设置 2-2-2、起始位置 B-B-B”连按 30 个 A,两者前 20 个字母完全一致,到第 21 个字母才分开,因为后者的右侧转子提前一次带动了中间转子。环设置主要影响进位时机,所以破译者往往能先找出转子顺序和位置,最后再确定环设置。

示例 5:插接板配置与典型的“已知明文”

设置: 模拟器的巴巴罗萨行动预设——转子 II-IV-V,起始位置 B-U-L,环设置 2-1-12(B-A-L),反射器 UKW-B,插接板 AV BS CG DL FU HZ IN KM OW RX。

输入: WETTERBERICHT(德语“天气预报”)→ 输出: HXPFAPJVBFAFB

天气预报每天按固定格式发送,WETTERBERICHT 这样的词因此成了可靠的“已知明文”(crib)。把它和密文上下对齐逐位检查:没有一个字母对着它自己(W 对 H,E 对 X,T 对 P……)。破译者把这个词沿着截获的密文逐位滑动,凡是出现某个字母要加密成自己的位置,就可以直接排除。

恩尼格玛的历史与破解

波兰破译者(1932-1939)

1932 年,波兰密码局的数学家 Marian Rejewski 利用一个程序性弱点——操作员在每条消息开头将每日消息密钥加密两次。利用这种冗余和数学群论,Rejewski 在未曾见过实物机器的情况下重建了转子连线。

他与同事 Jerzy Rozycki 和 Henryk Zygalski 一起建造了**炸弹(Bomba)**机器并创建了 Zygalski 图表来寻找每日设置。1939 年 7 月,就在德国入侵波兰前几周,他们将完整知识分享给了英国和法国情报部门。

布莱切利庄园(1939-1945)

在布莱切利庄园,Alan Turing 设计了一种改进的"炸弹"机器,利用不同的弱点:已知明文(称为"已知词")。操作员经常以可预测的短语开头消息,如天气报告或"无可报告"(NIHIL NOVI)。结合没有字母能加密为自身的反射器特性,已知词大幅缩小了搜索空间。

Gordon Welchman 通过"对角板"改进了 Turing 的设计,利用了插接板的对称性。鼎盛时期,超过 200 台炸弹机器在布莱切利庄园及其分站同时运行,每秒处理数千种可能设置。

解密恩尼格玛消息产生的情报,代号为 Ultra,使盟军提前知晓德国军事计划,被普遍认为使战争缩短了两年或更长时间。

恩尼格玛的主要弱点

尽管密钥空间巨大,恩尼格玛仍有几个可利用的弱点:

  1. 无自加密 — 一个字母永远不能加密为其自身(由于反射器)。这是 Turing 的主要利用点。
  2. 互反加密 — 相同设置既加密又解密,限制了密码的数学结构。
  3. 操作员失误 — 重复消息密钥、可预测的已知词,以及懒惰的操作员重复使用设置。
  4. 转子顺序规律 — 机械步进在连续字母之间产生可预测的数学关系。

恩尼格玛与现代加密的比较

特征恩尼格玛AES-256
密钥空间~1.59 x 10^202^256 (~1.16 x 10^77)
自加密不可能可能
已知明文抵抗力弱强
算法保密性必须保密不需要(Kerckhoffs 原则)

现代加密算法避免了恩尼格玛所有的结构性弱点,同时在难以想象的更大密钥空间上运行。然而,恩尼格玛在密码学史上仍是一个里程碑式的成就,也是理解密码机制的极佳教育工具。