Enigma 密码机
加密通信在军事与外交领域的重要性是不言而喻的。在无线电发明之前,通信主要依靠实物(竹简、奏折、家书)来传递信息。在那个时代人们主要依靠封泥、密封等物理办法来防止信息泄露,当然也有通过化学反应的变色来书写的密信。在北宋时期,中国出现了用于军事的字验(类似于后来的加密解密用到的密码本)。那是关于替换加密法的最早历史记录。
由于无线电的开放性,传统的加密方式完全不能用在无线电通信上了。电报用到的摩尔斯电码是公开的,无线电信号也是很容易监听的。替换加密法成了唯一可用的加密方式。手工依靠密码本来加密和解密非常低效且容易出错。为了安全作想,密码本也是经常更换的,这近一步降低了手工加密和解密的效率及可靠性。德国人在1918年发明了一种专门用来加密解密的机器,名为Enigma。图灵(没错,就是教科书书里那个图灵)在二次世界大战中的重要贡献就是破解Enigma。
这种机器的结构十分巧妙。它包含26个按键和26个小灯用于输入输出26个字母。按下一个按键,对应加密后字母的小灯亮起。它还包括多个转子、一个反射板(Reflector)、一个插线板(pluginboard)。它的原理示意图如下:
原理图只画出了4个字母的通路,其他22个字母的通路与画出的4个通路是一样的。合并任何一个字母的一个单刀双掷开关,电流从电池正极出发,经过插线板,多个转子,经反射板后折返,回流过多个转子和插线板,最后经灯泡回到电池负极。电路上的原理很简单,好像乎没有任何巧妙可言。除连接电池正负极以外的每一根导线只能代表一个字母,合并一个开关时只能有一个灯泡亮起,一个灯泡亮起时也只能有一个开关合并。在转子保持静止时,插线板、转子、反射板中的一组通路把俩个灯泡的一端并联起来。合并被并联的两个灯泡中任意一个灯泡对应的一个开关时,另一个灯泡就会亮起。当开关S断开灯泡S,接到电池正极时,灯泡L亮起。反之当开关L接到电池正极时,灯泡S亮起。当转子旋转后,灯泡的并联关系发生变化,但是仍然每组最多有两个灯泡并联。
沿转子两个侧面的边沿各均匀分布有26个触点,两边一共52个触点。一侧的26个触点一一对应另一侧的26个触点。单个转子可能有26!种一一映射。转子的一一映射在出厂时设定好,出厂后不可以修改。单个转子可以进行一次简单的替换加密,转子之间的相对旋转又是一层加密。转子之间的旋转与钟表的指针一样,第一级转子旋转一圈后,下一级转子旋转1/26圈。一般的ENIGMA机有三个转子,最右边那个转得最快,中间的其次,左边的转到最慢。转子的替换周期为26^3,即在不更改其他部件的替换映射时,需要加密26^3 个字母,才会重复前面的替换映射。这让基于概率统计的破解办法变得十分低效。
插线板可以进行一次简单的替换加密,不过可以手动设定替换用的一一映射。
插线板有26对插孔,可以用线将两对插孔连起来。比如说,把A和O用交叉线连起来,当按下A键时,电流从键盘的端口A流出,就经过插线板的交叉线后就会从插线板的端口O流出。同样的,当O也会被转换成A。
反射板接在最左边转子的左侧,一共有26个触点,13根导线。一根导线两端分别连接两个触点。26个触点就被连成了13对。 信号流经反射板时,也是进行了一次一一映射的替换。反射板保证了一个明文字母永远不可能被加密为其自身,这是Enigma机最大的设计缺陷,图灵就是抓住了这一点才能破解Enigma机的。
Enigma 密码机在第二次世界大战中被德国军队发现并应用在军事通信中。Enigma在当时可算是最先进的加密机器了,加密复杂度也是最先进的。如果正确使用Enigma加密信息,以当时的技术水平几乎不可能破解密文。将第一次加密后的密文用另一个密钥再加密一次,第二次加密后的密文就有可能与原密文相同。