今天本来是想推《模仿游戏》这部电影,因为笔者实在太爱卷福了!

卷福扮演的是人工智能之父阿兰·图灵Alan Turing,影片中图灵应召,为英国政府破解二战期间纳粹德国的超级密码机:恩格玛(Enigma)

在一群科学家,采用人工暴力破译法时,图灵率先提出机械运算的设想,并制造了恩格玛的天敌:炸弹机(Bombe)(影片中被命名为Christophe)

这一发明,是盟军在欧洲战场反败为胜的关键。据说,图灵的贡献,让战争至少提前了两年结束。故事是相当精彩的,但是很多影评都反应一个问题,就是很多人没看懂恩格玛机的操作原理 & 图灵的破解思路。
今天,笔者就来给大家唠一唠,这场没有硝烟的“密”之战争。
在介绍恩格玛机之前,我们先了解一下战争中常用到的一种密码:单字母替换加密。顾名思义,就是将26个英文字母,按照某种配对关系,替换成其他的字母,比如:密码本是这样的

如此一来,一句非常简单的Attack at midnight(午夜发动攻击),一经加密可能就变成了BUUBDM BU SFEXFVAU(%¥#&*……%)
很简单,对吧?恩格玛机的核心原理,就是这个。
那不是用一张纸,就能解决了吗?还需要专门研制一个密码机?听我说完……下图是恩格玛机的真相。

键盘(Keyboard),很好理解,用来输入明语。
灯盘(Lampboard),在明语输入后,显示替换过的字母,即暗语。操作员把暗语记下再传送出去。反之,输入暗语后,灯盘上显示的就是明语,也就是解密啦。
转子(Rotors),核心部NO.1,相当于密钥对明语进行加密。
插线板(Plugboard),核心部件NO.2,加密任务的双保险。
下面,我们就来解释转子和插线板这两个核心部件,是怎么玩的。

上面这个就是转子的真相。轮子上有26个英文字母,通过一堆电线进行互换。
Ex:
输入A,通过电线之后变成X
输入B,通过电线之后变成R
单个转子,只能实现一次字母互换。并且对应关系从此固定,一旦盟军截获足够多的密电,通过分析字母出现的频率,密码被破译的可能性就很高了。
所以,德国人非常“机智”地用了三个转子。

有童鞋要问了,就算是N个转子串联起来,将一个字母替换N次,得出的暗语也只能是26个字母中的一个。并且,对应关系也还是固定的啊!这不是画蛇添足吗?
恭喜你!成功透过现象看到了本质!但是,你忘了人家叫什么名字了?转子啊!转子的意思就是人家会!转!啊!
操作员每输入1个字母,第1个转子就会自动转1格。当第1个转子转完1圈后,第2个转子就转1格。同样的道理,第2个转子转完1圈后,第3个转子转1格……而转子每转动一次,字母的对应关系就会发生变化。
也就是说,操作员每输入一个字母,机器就会产生新的密钥。
Ex:
操作员第一次输入A
A ➡️ B
同时转子转动1格
字母对应关系发生变化
当第二次再输入A时
A ➡️ C
同理
第三次输入A时
A ➡️ D
这就是所谓的复式替换加密,由于每个转子都有26个字母,这种加密方法能够提供26*26*26=17576种不同的密钥。更奇葩的是,这三个转子的摆放顺序还可以调换,总共有3*2*1=6种排列顺序。So,密钥的可能性又增加到17576*6=105456.
你以为这样德国人就满足了吗?别忘了还有核心部件NO.2啊!

加密双保险——插线板
插线板上也有26个字母,操作员可以用一条电线,将任意两个字母连接起来,这两个字母就会先进行互换,然后再进入转子进行加密。
Ex:
如果操作员不连插线板
那么当他输入A时
转子直接对A进行加密
将结果输出在灯盘上
假设是Y
so easy
而如果他先在插线板上把
A和J连起来了
当他在键盘上输入A时
J就会代替A进入转子
转子就对J进行加密
灯盘上显示的结果
就变成N了
1台恩格玛机,1次最多能连6对字母,一共26个字母,选6对进行互换。掐指一算
(不会算的自己去数学老师办公室跪着!)

emm……大约……也就……1000亿种组合吧。
that means,核心部件NO.2,进一步将恩格玛机所能提供的密钥的数量,提高了1000亿倍。
假如盟军方面用蛮力破解,一群眼疾手快的科学家聚在一起,每秒钟能验算10000个密钥,列完所有的组合,也需要三万多年……
电影里呈现的是1939年的场景,那时候恩格玛机已经可以用到5个转子,互换10对字母了。那就是

作为一台密码机,恩格玛已经足够变态了,但作为世界上最严谨的德国人,他们仍然觉得不够安全。
所以,他们的操作流程是怎样的呢?
操作员每个月都会收到一本说明书,里面会规定好,本月恩格玛机的设定方法。
1 转子的排列顺序3个转子从左至右如何排列,1-2-3 or 2-3-1 or 3-1-2……
操作前,将3个转子分别转至3个字母处,如 R-U-F
选定哪几对字母进行交换,如 A—C,T—I,U—K ……
只要两台恩格玛机,按以上步骤进行初始设置,就可以完美沟通了。
而且,每条设置规则的实效性只有24h!!!按照之前估算的解密工作量,盟军还来不及触摸密码的边缘,新的一天就开始了,一切归零。

电影里图灵的同事在听见午夜12点的钟声时,气的掀桌子。
然 鹅,谨(bian)慎(tai)的德国人表示:OK,我知道你们盟军破译不了!但!是!我们一天之内有成千上万条电文,在你们面前路过,我们觉得很不安全啊!而且,万!一!我们的说明书,被你们截获了咋办?!
So!他们又想出了一个神一样的第三重加密方法。(前方高能预警……)
对电文内容进行加密前,操作员必须随机想三个字母,作为本条电文的新密钥,收到电文的人,必须按照新密钥设置他手上的恩格玛机,才能正确解密电文。
Ex:
笔者朋友A,按照说明书的指示,对恩格玛机进行初始化设置,根据说明书给出的原始密钥。
比如:R-U-F
把转子转到指定的字母位置,按理说这时候,她就可以将电文输入恩格玛机,进行加密了。
But no!接下来,她要随机想三个字母,注意是随机哦,想到啥就输啥。
比如:K I T
然后,在恩格玛机上连续输入两遍,据说是为了防止手抖打错字。
前面说过,每输入一个字母,转子就会自动转一格。所以,假设笔者朋友A第一遍输入字母的时候
K I T ➡️ B H D
那么,再次输入后得到的就是三个完全不同的字母
K I T ➡️ Y O P
笔者朋友A,将 B H D Y O P,这6个字母写在电文的最前面,然后,再把3个转子分别转到 K-I-T 的位置,接着才开始输入电文的正文,进行加密。
经过传送,笔者收到了密电。此时,笔者手中的恩格玛机,也按照同一本说明书,进行了初始化设置,把转子转到R-U-F的位置。接下来,如果笔者对电文内容进行解密,会很懵逼地得到一堆乱码。因为,电文的内容是按照新密钥进行加密的。
所以,笔者先在恩格玛机上输入密电的前6个字母B H D Y O P,得出了K I T K I T,即两个重复的 K I T。也就是,这封电文的新密钥,于是笔者也把转子的位置,由 R-U-F 调成 K-I-T,接下来再开始输入密电的正文,这才得出了电文的真正内容。
以上,就是超级密码机恩格玛的工作原理。不得不说,德国人这个发明,确实是那个时代的奇葩,奇葩到让整个欧洲大陆咬牙切齿。

纳粹德国,用这种方式在大西洋,部署U型潜艇,把盟军的战舰打的鸡飞狗跳,还切断了英国人的补给。

而破译不了恩格玛密码,就无法提前知晓德军的兵力部署和作战计划。盟军只能眼睁睁看着一艘艘舰艇,沉入海底,毫无还击之力。

影片中德军U型潜艇内的士兵正在使用恩格玛机
直到卷福,哦,不是,图灵的出现。辣么,图灵是如何攻克恩格玛机的呢?

知道今天晚上应该干什么了吗?😜😜😜
更多精彩文章,请关注TABS创新实验室公众号!

TABS创新实验室——出国留学、自主招生的学术背景提升专家!