“谜”与“如谜的解谜者”(三)
2018-10-31
连接板的秘密
德军大规模部署的这款Enigma I型可以说是一个十分经典的型号了。为什么这么说呢?因为这个型号被德军使用了整整8年,到1939年开始攻打波兰的时候才被后续型号取代。而且所谓的后续型号,其实也只是做了一些小修小改,而Enigma的基本框架,在这个型号就已经定型了。尤其值得一提的是,这个型号的Enigma加入了一个“邪恶”的新机关,正是这个新机关,让Enigma的加密强度有了“鸟枪换炮”股的飞跃。
这是什么新机关这么厉害?它的名字就叫“连接板”。所谓连接板,也可以叫接线板,其实就是一块电路板,上面标着26个字母,每个字母对应一个插线孔,如果用一根电线把任意两个插线孔连起来,这两个孔所对应的字母就会被交换。举个例子,如果我用线把A孔和T孔连起来,这时按下键盘上的A,实际上相当于按下了T,反过来,按下T实际上相当于按下了A。
为什么说这玩意儿邪恶呢?为了搞清楚这个问题,我们先做几道数学题吧。首先,我们知道Enigma的每个转轮上有26个触点,那么—个转轮通过旋转就相当于产生了26种不同的置换表,而Enigma配备有3个转轮,而且它们是像时钟上的秒针、分针、时针—样分级步进的,这就相当于总共产生了26×26×26=17576种不同的置换表。不仅如此,这3个转轮还可以按不同的顺序来安装,搬出高中数学讲的排列组合,我们不难计算出,3个转轮总共可以有P(3,3)=3x2x1=6种排列方式,于是置换表的总数就变成了,17576x6=105456种。
我们前面说过了,Enigma的本质就是一种多表置换密码,这一点跟维热纳尔方表没什么区别,但不同的是,维热纳尔方表只有26种置换表,而相比之下,Enigma的置换表数量至少有10万种,中间差了好几个数量级呢。但是你说10万种置换表算不算很多呢?唔,这个问题有点微妙。从手工破译的角度来看,这可以说是个天文数字了,而且除非电文的字数超过10万(一般是不可能的,这玩意儿又不是用来写小说的),否则在一篇电文里置换表根本就不會重复,这就意味着用来破译维热纳尔方表的“卡西斯基测试”(忘了的话回去翻一下《多表密码攻防战(五)》吧)在这里也完全失灵了。但是,由于转轮的步进方式实际上是固定的,那么破译者要做的就是找出3个转轮的初始位置。尽管这个初始位置的可能性也是10万种,但手工破译从来都是靠技巧吃饭的,通过一些线索的帮助,这个数量可以大大缩减。这意味着在知道每个转轮的连线方式的前提下,只有3个转轮的Enigma依然有可能被手工破译,这让本来就有点惊弓之鸟的德国人心里感觉还是有点虚。
这时候就该发挥连接板的邪恶威力了。我们刚才讲了,连接板的作用是可以让两个字母在进入转轮之前就互换位置,接—根线交换两个字母,那么总共26个字母最多可以接13根线。现在问题来了,接线板到底能给置换表增加多少种变化呢?又到了做数学题的时间,大家准备好了吗?
我们先来看接1根线的情况。用1根线把两个字母连接起来,总共有多少种连法呢?排列组合学得好的同学马上就能算出来,这相当于从26个字母中取出2个,且排列顺序无关,也就是G(26,2)=(26x25)/(2x1)=325种。这意味着,我只要在接线板上接1根线,就可以让置换表的变化数量扩大325倍!那么如果接2根线会怎样呢?还是一样的算法,接2根线相当于从26个字母中取出4个,即G(26,4)=(26x25x24x23)/(4x3x2xl)=14950种。但这还不算完,因为在选出的2个字母上接1根线只有1种接法,但在4个字母上接2根线可就不一样了,总共有3种接法,因此我们还得再乘以3,即:14 950x3=44 850种。
这真是太神奇了!只要接两根线,Enigma的置换表就能立马扩大4万倍!而实际使用中—股需要接几根线呢?根据资料记载,通常情况下接线板需要接10根线。我们不难算出,如果接10根线,也就是交换20个字母,那么光接线板产生的变化就超过了150万亿种,再乘上由转轮本身产生的10万种变化,这个数字已经大到无法描述了,反正很大很大就对了。
总之,相比3个转轮能产生的10万级别的变化,接线板则能够产生百万亿级别的变化,怪不得要用“邪恶”来形容这个设计了。但是,聪明的你一定也发现了,转轮的位置每打一个字母都会发生变化,但接线板的连法是不可能自动变化的,而是操作员按照密码本每天早上接好,然后一整天就保持不动了。因此尽管它能产生的变化数量极其庞大,但还是留下了一个不小的软肋。我们在这里先卖个关子,后面讲到盟军如何破译Enigma的时候,还要再细说这个问题,大家先在小本本上记—下哦。
德国变天
讲到这里你可能要问了,“一战”都打输了,德国为啥还要从1930年开始如此大规模地在军队里配备密码机呢?难不成他们在琢磨什么邪恶的计划?这还用说嘛,要不然“二战”是怎么打起来的嘛。
之前我们说过,“一战”之后的德国元气大伤,1918~1919年间爆发了一场大革命,把皇帝都给干翻了,德意志帝国也给改成了共和国。可是,推翻了皇帝,人们就真的能过上好日子了吗?当然没那么简单。德国在“一战”中吃了败仗,不得不默默地承受各种割地赔款裁军的制裁,这种状况下人民能过上好日子那就见鬼了。
俗话说屋漏偏逢连夜雨,这新上台的共和国政权还没坐稳,一场席卷世界的经济大萧条又给德国经济结结实实地来了一次暴击。虽然说大萧条本身是一发地图炮,并不是只打德国一家,但德国刚刚才割地赔款再加上政变,本来就已经弱不禁风了,这大萧条一来,就直接给打趴下起不来了。德国过得这么惨,欧洲其他国家的情况也好不到哪儿去,但大家都觉得,德国这样也挺好的,至少再也没力气到处挑事儿了吧?
结果怎么样呢?大家都太天真了,狗急了还能跳墙呢,越是日子不好过的地方越容易滋生极端思想,因为在这种水深火热的情况下,只要有人站出来振臂高呼一声,就一定会有人跟着干,毕竟再怎么折腾,情况也不会变得比现在更糟糕了是吧?那么这个站出来的人是谁呢?这个人大家都再熟悉不过了,他就是阿道夫.希特勒(Adolf Hitler)。
提到希特勒,我们都知道他是个臭名昭著的独裁者和战犯。希特勒1919年加入了德国工人党,仅仅用了两年的时间就当上了老大,主要是因为这个党总共就没几个人,希特勒又特别能吹,前任老大安东.德莱克斯勒( Anton Drexler)也很器重他。希特勒当上老大之后,立马给党改了个名,叫“国家社会主义德国工人党”,这里面“国家社会主义”这个词儿听起来有点陌生,其实“纳粹”就是它的缩写。
希特勒把他的纳粹党搞得风生水起,党员越来越多,势力也越来越大。1930年,大萧条的影响开始波及德国,像希特勒这种鼓吹国家民族主义的人,在这种时候特别吃香,一下子就有了跟现在的“网红”差不多的热度。希特勒一琢磨,既然如此,那我为啥不去竞选总统呢?搞笑的是,希特勒出生在奥地利,虽然在德国混了很多年了,但根本就没有德国户口!当然了,作为一党的老大,解决个户口问题有什么难的。于是1932年,希特勒真的去竞选总统了,然而他离成功就差了那么一点点,输给了“一战”时的著名将领保罗·冯-兴登堡( Paulvon Hindenburg)。
总统没选上?没关系,纳粹党现在已经是国会第一大党了,总统算个鸟啊?兴登堡虽然也是个右派,但他还是比较温和的,并没有想要侵吞民主共和的果实,看着希特勒和他的纳粹党在那边上蹿下跳,兴登堡也觉得这个人太极端了,非得捅出篓子不可。兴登堡想尽力法牵制希特勒的力量,俩人各种斗法,结果还是希特勒棋高一着,仅仅花了一年时间就当上了德国总理,后来又是解散国会又是颁布法案折腾了一大圈,把自己的权力搞得越来越大。1934年,兴登堡终于撑不住生病去世了,这下可没人能按得住希特勒了,他给自己封了一个“元首”的头衔,独揽军政大权于一身,德国从此彻底沦为纳粹獨裁下的“德意志第三帝国”。
希特勒这么一个疯狂的独裁者居然能赢得88%的民众支持率,可见当时德国的社会状况有多畸形。希特勒一上台就做了个大决定,他把凡尔赛条约给撕了!什么战争赔款?老子不交了!什么限制军备?老子不认了!这一下又赢得了民众的一片叫好,德国人早就对这个条约恨之入骨了,现在终于有人站出来帮我们出气了。希特勒对内狂打鸡血,对外各种挑衅,大张旗鼓地搞军国主义,扩充军备。你说希特勒这么干,旁边那些国家就真能坐得住?旁边那些国家都有谁啊,意大利的墨索里尼跟希特勒是穿一条裤子的,然后俩人出兵帮西班牙的独裁者弗朗哥打赢了内战,奥地利呢又被德国吞了,其他国家也都没什么实力,能说上两句话的也就英国跟法国了。然而英法两国在“一战”当中也被消耗得很厉害,再加上大萧条的影响,能把自己管好就不错了,根本没精力管德国,只能各种妥协,指望跟德国签几个协议让希特勒老实待着别惹事儿。但这种软绵绵的手段怎么拴得住希特勒呢?等英法缓过神儿来之后再—看,欧洲的形势早就失去控制了……
(一场世界大战一触即发,Enigma如何保障德军的通信安全,又是谁最先迈出了破译Enigma的第一步呢?我们下期继续讲。)