“谜”与“如谜的解谜者”(十三)
2019-02-05花卷
花卷
困难重重
我们之前讲过,波兰人已经把他们研究出来的所有资料都交给了英国人,不仅如此,波兰人还提供了他们制造的复刻版Enigma密码机,以及穿孔纸片、炸弹机等神器。这些东西当初漂洋过海的旅程可都挺不容易的,英国人自然把它们当宝贝。
话说回来,即便是图灵这样的大牛,面对一个新问题,那也不可能一下子就搞出什么大杀器,必须也得从头开始研究。既然波兰人有这么多好东西,那我们就先拿这些玩意儿试试看呗,顺便也检验一下波兰人的成果到底靠不靠谱。
波兰人的成果当然是靠谱的——只不过,只能说对于1939年之前的通信来说,是靠谱的。我们回忆一下,1938年底,德军把Eniqma的用法进行了升级,原来是3个转轮调换顺序使用,现在多加出来两个转轮,从5个转轮里面选3个再调换顺序使用。我们高中排列组合学过:P(3,3)=3!=6,而P(5,3)=5×4×3=60,规模整整扩大了10倍,这困难不是一般的大。这还不算完,1939年1月,德军又提高了连接板的复杂度,我们知道连接板的作用是将任意一对字母进行交换,之前大概也就换个6对,现在开始升级成换10对了。这里插个题外话,按理说,字母一共有26个,所以连接板最多可以交换13对字母,但是我们可以计算出来(题外话就不细讲算法了),交换10对才能带来最大的变化数量,超过10对的话,反而会让变化的数量缩小——看来德国人的数学也并不差。
眼看着德国人设置重重障碍,英国人当然也不能就这么破罐破摔了,毕竟他们看到了波兰人这么努力,而且现在还有图灵这些数学大神的加持,总不能丢了“日不落帝国”的面子。面对现在这个情况,首先炸弹机基本上是废掉了,因为德国人修改了指标组的用法,就没办法建立雷耶夫斯基所说的那种“循环模式”了。不过好消息是,齐加尔斯基搞的穿孔纸片还是可以用的,只不过原来只要用6张,现在要用60张,比对起来也需要更多的人力才能完成。
丹尼斯頓心想,我们现在有那么大的一座庄园,还造了一些临时板房,政府也答应出钱招人,那还等什么,难道我们英国缺人吗?于是,布莱切利开始大规模招募密码分析员,但你可能没想到的是,这些密码分析员里大部分都是女性。据统计,整个“二战”期间大约有10000多人在布莱切利庄园工作过,其中四分之三都是女性,至于原因嘛,我想应该不难猜——因为男人都上前线打仗去了呗。
当然了,有很多女性在布莱切利从事密码分析工作,并不代表当时女性的地位有多高,很无奈的是,大部分女性都只被安排一些基础的、重复性的工作——比如监听、转译、归档等等,而且拿的工资也比男性要少多了。制作和比对穿孔纸片也算是一种枯燥的重复性工作,只要按照预先规定好的手册就可以完成,就跟看着说明书拼装家具一样——只不过制作一套60张穿孔纸片工作量非常大,布莱切利只能靠拼人力“996”加班加点。在这样的情况下,即便速度跟不上,还算是能够勉强破译一部分德军的密电。
迁入布莱切利初期,由于计划的屋群还未建好,迪尔文·诺克斯、约翰杰弗里斯和艾伦图灵等大牛都曾在存放牲畜粮草和马具的马棚里工作过。
猜词游戏
我们之前讲过,波兰人的方法——无论是炸弹机还是穿孔纸片,都是严重依赖指标组来工作的。炸弹机依赖的是弱指标组(比如AAA、BBB)所形成的特殊循环模式,而穿孔纸片依赖的是指标组加密之后出现的等位重复字符(samiczki)。指标组作为一种操作规程,是很容易被改进的,图灵自然也看出了这个弱点,于是他就琢磨着能不能找到一种更“万能”的方法,哪怕将来有一天德国人把指标组改得连亲妈都不认识了,我也照样能应付自如。
你还别说,这样的方法还真有,而且是英国人自己用过的,有过成功经验的方法。我们知道,“二战”中欧洲的轴心国势力除了德国之外还有意大利,而德国和意大利在“二战”之前曾经支持过西班牙的弗朗哥政权打内战。既然都是朋友,那么德国自然也向他们提供了Enigma密码机——只不过,提供给意大利和西班牙的机器都是不带连接板的“阉割版”。连接板提供的额外变化对于破译来说可以形成非常强大的干扰,如果没有连接板的话,转轮的变化总共就只有几万种,而且还是有规律的连续步进变化,只要有足够的材料,破译起来并没有那么难。
1937年4月,迪尔文诺克斯就成功破译了西班牙弗朗哥政权用的“阉割版”Enigma密码机通信,只不过这个事儿英国一直没告诉别人。之前我们介绍过,诺克斯是个文科生,研究古籍学的,在他的眼里,密码就是一种猜词游戏,即使再加密得天花乱坠,你要传递的原始信息也是普通的文字,这种隐藏在原始文字之中的语言特性,是很难通过加密完全抹去的,因为语言代表的是人类思维的固有模式。
其实诺克斯在之前破译德国外长密电的时候就用过这种猜词技巧,比如说德国人发电报在开头都有一些固定的称呼和格式,如果我可以从密文中猜出某一个单词,那么就可以限定转轮的一串连续位置,继而为推测转轮的初始位置提供重要的线索。比如说,如果我知道(靠猜的)电报中某一组密文(比如“PGIUSSN”)解密之后的明文是单词“angriff”(进攻),那么就可以知道当最右侧转轮从某个位置开始连续步进时,就会有P-a、G-n、I-g、U-r、S-i、S-f、N-f这样一组限定的对应关系,通过一些技巧进行尝试,就可以找到相对应的转轮状态。这种猜词的方法,英国人管它叫作“crib”,就是考试作弊用的小抄,挺生动的吧。
不过,诺克斯的这种方法,面对带连接板的Enigma密码机时,就有点力不从心了,因为连接板的存在会严重搅乱这些对应关系,也正是因为这个难题,诺克斯才在破译Enigma这件事上输给了波兰人。不过现在好了,咱们英国也请来了数学家,说不定他们能让这个方法起死回生呢?
机器对抗
图灵听说诺克斯的这个方法之后,感觉这主意不错呀,也正好符合图灵所提出的“不能依赖指标组”的大方向。而且,图灵的想法还更进—步,他觉得猜词之后找到对应的转轮状态这件事,靠人力来做实在太累了,也太慢了,这个其实可以用机器来做嘛,你看波兰人的那个炸弹机,我们把它改一改可能就行了。其实,图灵之前上学的时候就特别喜欢摆弄机器,他在普林斯顿读博士的时候,就曾经亲手制作了一台二进制乘法器(不过好像没做完),所以无论是逻辑设计还是机械、电路设计,图灵可都是一把好手。
那么,图灵所说的这种“机器”,到底是个啥玩意儿呢?其实它看起来就是一个放大版的波兰炸弹机。
炸彈机复制品
这张图是现在展出于布莱切利庄园国家计算博物馆的炸弹机复制品,这台机器共有3排转轮的槽位,每一排从上到下都有3个转轮,这是因为Enigma密码机在工作的时候就是使用3个转轮。这些转轮共有5种颜色,因为1939年起德国一共启用了5个不同的转轮,实际使用的时候是5选3然后再按不同顺序排列。这些转轮的内部连线,早就由雷耶夫斯基他们算出来了,所以图灵他们可以直接批量生产——所以你看,波兰人的贡献的确是大大的。
我们可以发现,这台机器当中,每组从上到下的3个转轮,就相当于一台Enigma中从左到右的3个转轮,也就是代表一台Enigma的一种状态(当然,这里排除了连接板,不过没关系,我们后面再说),所以这一台机器相当于可以同时处理Enigma的36种状态。
我们拿上面一个例子来说,比如我们猜到电文中“PGIUSSN”对应的明文是“angriff”,那么我就可以有下面这张表:
我们假设中转轮和左转轮是不动的(大部分情况下都成立),而右转轮每过一个字母步进一格位置,那么当我把7组转轮放在一起,并且把右转轮的位置依次错开一格之后,当输入密文“PGIUSSN”时,必然会出现某一种状态同时满足这7个位置上匹配到明文“angriff”。也就是说,我只要让这7组转轮同步转动(每次每组都步进一格位置),必然可以找到一个满足条件的状态(当然,前提是猜词猜对了)。而当找到这样一个状态时,机器就会停止,这时就可以人工确认机器找到的这个状态是否正确。
可是还有一个问题,连接板要怎么办呢?之前诺克斯用这种方法,也是卡在了连接板上呀,图灵能不能破局呢?我们知道,连接板的作用是交换若干对字母,但这些字母必须是成对交换的,比如说(AE)交换,那么所有的A就都变成了E,而所有的E就都变成了A,除此之外没有其他可能。还是上面的例子,假设我们在某一个状态下得到了下面的对应关系:
我们来试想一下,“ARFEITF”有没有可能通过连接板的交换就能得到“angriff”呢?
第1个字母A是正确的,我们跳过。第2个字母是R,而正确的字母是N,那我们可以认为连接板上有一个(NR)交换。然而,第4个字母是E,而正确的字母是R,这意味着需要一个(ER)交换。我们知道,根据连接板的原理,不可能同时存在(NR)和(ER)两种交换;同理,上面的例子还必须同时存在(FG)(FT)(FF)三种交换,这也是不可能的。因此这个位置状态不可能是正确的,不但这个位置状态不可能是正确的,与它相关联的成千上万个位置状态也可以被一起排除掉了。
我们发现,图灵的思路非常巧妙,因为连接板的存在虽然会干扰结果,但是我们依然可以通过逻辑推理来排除那些必定不可能正确的结果,这样一来,连接板的干扰效应就会被大幅度削弱。那么接下来,图灵要解决的问题就是,如何在他的机器上实现这种逻辑推理和排除。
图灵设想了一种方法,通过电路的连接来排除错误的状态,在按照特定的crib进行配置的情况下,只有转轮之间形成一个特定的回路时,机器才会停下来。
不过,图灵这个方法的效率并不是很高,因为并不是说当机器停下来的时候,找到的那个解就一定是正确的。这是因为正确的解必定可以形成特定的回路,但错误的解也有一定概率可以形成特定的回路。因此当机器停下来的时候,就会有破译人员过来把机器当前的位置抄下来,然后用一台复刻版的Enigma密码机去验证一下,看看这个解是不是正确的。
图灵是个数学家,对于他设计的这个方法的效率,他自己必然是做过计算的,这里面使用了概率论和组合数学。具体的计算结果我们就不列举了,总之,根据图灵的计算,猜词人员给出的crib必须包含足够多的字母数量(最好10个以上),而且密文和明文之间必须包含足够多的闭合回路(最好2个以上),这样才能保证机器有足够高的概率检测到正确的解——换句话说,就是让机器停了但是没找到正确的解这种事发生的概率变得足够小。
(然而,符合这种要求的crib可不容易找,别忘了那可是要用猜的,还不能保证猜得准,因此图灵设计的机器效率并不高。那么图灵和他的伙伴们会如何解决这个问题呢?我们下期继续讲。)