一台三转子的恩尼格玛,陈列于美国国家安全局的国家密码学博物馆。上部是转子,中间是灯板,下面是键盘,最前面是接线板。
一台三转子的恩尼格玛,陈列于美国国家安全局的国家密码学博物馆。上部是转子,中间是灯板,下面是键盘,最前面是接线板。National Security Agency · Wikimedia Commons · 公有领域

恩尼格玛看上去像一台装在木箱里的打字机。操作员在键盘上按下一个字母,灯板上就亮起另一个字母。第二个操作员记下亮起的字母,这串字母再用摩尔斯电码通过无线电发出去。在另一端,一名操作员用一台同样设置的同型机器,敲入密文,就能在灯板上读出原文。

在键与灯之间,电流穿过一座迷宫:接线板、三个内部交叉布线的转子、一个把电流送回去的反射器,再经过三个转子,再经过接线板。而且每按一次键,第一个转子就转一格,整座迷宫随之改变。

数一数密钥

德国人信任恩尼格玛,是因为可能的设置数量庞大。我们用帕斯卡教给我们的组合数学,为 1939 年的陆军型号数一数。

转子。 从一盒 5 个转子中选出 3 个,顺序有关:

$$5\cdot4\cdot3=60.$$

初始位置。 每个转子从 26 个字母中的某一个开始:

$$26^3=17\,576.$$

接线板。 十根连线把字母两两相连,互相交换。用 26 个字母组成 10 对,有多少种方法?把 26 个字母排成一排,有 $26!$ 种排法,用前 20 个字母两两配对。最后 6 个不接线,它们的顺序无关紧要:除以 $6!$。10 对之间的顺序无关紧要:除以 $10!$。每对内部的顺序无关紧要:除以 $2^{10}$。结果是

$$\frac{26!}{6!\cdot10!\cdot2^{10}}=150\,738\,274\,937\,250.$$

总数。 相乘:

$$60\cdot17\,576\cdot150\,738\,274\,937\,250\approx1.59\times10^{20}.$$

大约 1.59×10²⁰ 个密钥,还没算转子的字母环。每秒试一百万个密钥,也要大约五百万年才能全部试完。

缺陷

反射器有一个实际的好处:同一种设置下,机器既能加密也能解密。但它也带来了一个先天缺陷:由于电流总是从不同的路径返回,没有一个字母能被加密成它自己。A 永远不会变成 A。

这看起来微不足道,却是决定性的。密码分析员知道,许多电报含有可以预料的词,他们称之为 crib,“提示词”:早上 6 点的天气预报以 WETTERVORHERSAGE 开头,许多报告写着 KEINE BESONDEREN EREIGNISSE,“无事可报”。要找出提示词在密文中的位置,只需把它沿着密文滑动,凡是某个字母与它下方密文字母相同的位置,统统排除。

Q F Z W R W I K T Y R E S X B F O G K U H Q
W E T T E R V O R H E R S A G E              ← S 对 S:不可能
        W E T T E R V O R H E R S A G E      ← 没有重合:可能

在第一个位置,提示词中的 S 会落在密文的 S 上,而恩尼格玛从不这样做:这个位置被排除。往后四格,没有字母重合,这个位置仍是候选。

炸弹机

布莱切利园重建的图灵–韦尔奇曼炸弹机。每组三个彩色鼓模仿一台恩尼格玛的三个转子;机器依次测试各个位置,排除与提示词矛盾的位置。
布莱切利园重建的图灵–韦尔奇曼炸弹机。每组三个彩色鼓模仿一台恩尼格玛的三个转子;机器依次测试各个位置,排除与提示词矛盾的位置。Mike Peel · Wikimedia Commons · CC BY-SA 4.0

波兰人马里安·雷耶夫斯基、耶日·鲁日茨基和亨里克·佐加尔斯基从 1932 年起就在阅读恩尼格玛电报,还为此造了一台机器,叫 bomba。1939 年 7 月,在德国入侵波兰前几周,他们把一切都交给了英国人和法国人。但德国人已经让恩尼格玛变得更复杂,而波兰的方法依赖于一个德国人已经放弃的习惯。

图灵设计了一台基于提示词的、更通用的新机器。思路是逻辑的:把提示词放在某个位置,就会在字母之间强加联系,比如“如果 A 接到 E,那么三步之后,T 接到 R”。这些推论构成回路,错误的转子设置很快就会导致矛盾,比如“A 同时接到 A 和 B”。炸弹机用电的方式遍历 17 576 个转子位置,只在不产生矛盾的位置停下。戈登·韦尔奇曼加了一块“对角板”,使搜索效率大大提高。第一台炸弹机在 1940 年 3 月开始工作;到战争结束时,已有两百多台。

练习:如果有 8 个转子呢?

德国海军从一盒 8 个转子中选 3 个。转子顺序有多少种?

$8\cdot7\cdot6=336$,是陆军 60 种的五倍多。这就是为什么图灵攻克的海军恩尼格玛最难。

练习:只接一根线

在接线板上只接一根线,有多少种接法?两根线呢?

一根线就是选一对字母:$\binom{26}2=\frac{26\cdot25}2=325$。两根线:先选第一对,再从剩下的 24 个字母中选第二对,因为两根线的顺序无关,所以除以 2:$\frac{325\cdot276}{2}=44\,850$。通用公式给出同样的结果:$\frac{26!}{22!\cdot2!\cdot2^2}=44\,850$。

来源: Andrew Hodges, Alan Turing: The Enigma(1983)· Simon Singh, The Code Book(1999)· The Turing–Welchman Bombe, The National Museum of Computing。


艾伦·图灵的全部主题 · ← 通用机:程序也是数据 · 班伯里法:用分班衡量证据 →

图片来源.