淘客熙熙

主题:【原创】密码传奇(三):14、纯技术篇之活拆了ENIGMA(5) -- 1001n

共:💬9 🌺21
全看分页树展 · 主题
家园 【原创】密码传奇(三):14、纯技术篇之活拆了ENIGMA(5)

【单字替代模块】

这就是单字替代模块的核心——连接板([德]Steckerbrett,[英]Plugboard)。

点看全图
外链图片需谨慎,可能会被源头改

图截的有点黑,不好意思……这个连接板上,是用数字代表字母的

从图上可以看出:连接板这玩意儿,倒是没转轮那么复杂,以至瞟一眼就能让人晕过去——其实,如果图不是那么黑的话,还是满简单的嘛,嘿嘿。

顾名思义,连接板连接板,就是要连接点儿什么的板子;具体到ENIGMA上,就是“连接字母”。如果不那么严谨地概括一下的话,连接板起的就是这么个作用:把能映射出某字母的线路,经过手工调整连接,重新映射为另外一个字母。

比如,我们可以把字母T和字母M相互交换。办法很简单,连接板上不是有26个字母的插孔(每个字母两个插孔,一共52个插孔)么?找一根有俩插头的导线,一头插进字母T的插孔中,另一头插进字母M的插孔中——这么“短路”一下,T和M就被交换了。

点看全图
外链图片需谨慎,可能会被源头改

这就是插头,具体说就是海军型的M4上的插头

点看全图
外链图片需谨慎,可能会被源头改

两个插头,就这么被一根连线联接起来

点看全图
外链图片需谨慎,可能会被源头改

用两根连线,把AJSO分别连接起来的样子

如上图所示接好线后,进入连接板的字母信号中,A就被替代了成J,而J被替代成了A;S与O也是同样被互代了。

简单吧?

不得不承认:连接板这个设计的代价不大,操作也不繁,字母替代的效果却相当好——实在是很经典啊。

不过,连接板所起到的作用,却还不是严格意义上的“单字替代”。作为对比,严格的单字加密应该是类似这样的形式:

明文字母表 A B C D E F G H …… W X Y Z

| | | | | | | | | | | |

密文替代表 T K E M U Y L A …… Q C O J

可以看到,明文的A对应密文的T,而密文的A却对应明文的H,二者并无关联。

而如上文所述,连接板提供的字母替代,是互代的。也就是说,如果单一经过连接板加密的话,假设明文A对应密文的T,那么,明文的T也一定对应密文的A。再说白点儿,就是:如果A被加密成T,那么,T也一定会被加密为A。

类似地,这样的字母对一共有13对。

这样一来,如果说一张严格的单字替代换字表的长度是26的话,那么连接板所构造的换字表,长度就只有它的一半,也就是13了。思考一下不难发现:连接板提供的字母替代的变化数量,比规范的单字替代所能提供的要少的多

连接板操作简便、直观固然是个优点,但是模样多少有些失之粗糙。如果单单“以貌取机”的话,它实在是不怎么吸引人,也实在看不出有什么特别高的“技术含量”。

不过,我们只要稍微计算一下就会知道:这个其貌不扬的连接板,竟然也是个厉害角色!

关于这个计算,却又得容1001n在此稍微扯远一点了。。。

说来有趣的是,“连接板究竟能给ENIGMA带来多少变化”这个纯粹的排列组合问题,各种资料给出的答案却是五花八门——从理论上说,连接板的设计既然已经定型,这个问题就该只有一个答案;可1001n在查找各种资料的时候,却至少发现了六七种……

这六七种答案,还各有各的道理;更气人的是,它们之间的差距也实在大了点儿——最大的和最小的两个数字,之间差了可不是一星半点,也不是一倍两倍,而是一个难以描述的巨大差距……

具体点说,这个差距,居然是10的八十次方

——10的八十次方,又意味着什么?

按目前公认的学说,整个宇宙(还不是年轻得多的地球)到现在的年龄,如果以秒来计算的话,也才大约是4.4乘以10的十七次方。。。

假设我们有一台计算机,每秒可以运行1亿亿次——放心,这个速度,远远超过目前最牛的巨型计算机的水平;日本计划开发的地球模拟器倒是可以达到这个水准,可惜,预计到2010年才有希望造出来——同时,再假设世界上那个最善良的1001n基金组织,免费为地球上全部的六十亿人,每人发一亿亿台这样的计算机;并且,这些计算机都是从宇宙诞生那一刻开始计算,一直算到今天——那么,一共算了多少次呢?

结果是大约2.6乘以10的四十三次方,离10的八十次方还差不知道多远呢……

《金刚经·妙行无住分第四》中,弟子须菩提没听懂佛的说法,就问佛:您所说的“菩萨应如是布施,不住于相”,是个什么意思?佛(也就是文中的世尊)是这么回答的(其中须菩提的回话用蓝字标注):

东方虚空,可思量不。不也世尊。须菩提,南西北方四维上下虚空,可思量不。不也世尊。菩萨无住相布施福德,亦复如是不可思量。

而这个差距,真真正如这“四方虚空”一般的“不可思量”!10的八十次方,这实在是个远超过人类感性所能理解的数学概念啊。。

——说来说去,不过是计算一个连接板的变化,就算有差池,也不至于如此离谱吧?

没办法,还是得自己来;毛主席不是教导我们“自己动手,丰衣足食”么?经过四处求援,现在终于有了一个比较清晰的思路和答案;在此要感谢雪个马鹿以及1001d……,多谢各位!

首先,字母对是用一条连线沟通的。这就是说,每条连线可以连通两个字母;那么,n条连线就可以连通2n个字母。每插好一条线,候选的字母数量就减2;于是,下次可选的字母数量就是( 2n - 2 )。

那么,连接板所提供的变化,其实就是两个过程的积;

2n

首先,C 表示26个字母里选择2n个字母进行连接的变化。

26

其次,( 2n - 1 ) * ( 2n - 3 ) * .... * 1 为这2n个字母可组成的所有字母对的数量。

那么,这二者的乘积,就是连接n对字母的变化总数。于是我们就有

2n

变化总数 = C * ( 2n - 1 ) * ( 2n - 3 ) * .... * 1

26

26!

= ------------------------ * ( 2n - 1 ) * ( 2n - 3 ) * .... * 1

( 26 - 2n )! ( 2n )!

26! * ( 2n - 1 ) * ( 2n - 3 ) * .... * 1

= -----------------------------------------------------

( 26 - 2n )! ( 2n )!

26!

= ---------------------------------------------------------

n

( 26 - 2n )! 2 * [ n ( n - 1 )( n - 2 ) * ....* 1 ]

26!

= -----------------------------------

n

( 26 - 2n )! 2 * n!

这个闪着红光的结果,就是连接板上,接插了n条连接线后的变化总数!

即便连线全用上,插满26个字母,n最大也无非就是13;这就是说,n的取值范围,必然落在0到13之间。下面,给出n从0到13的时候,连接板所提供的变化总量:

n = 0 , 可能变化总量为 1

n = 1 , 可能变化总量为 325

n = 2 , 可能变化总量为 44850

n = 3 , 可能变化总量为 3453450

n = 4 , 可能变化总量为 164038875

n = 5 , 可能变化总量为 5019589575

n = 6 , 可能变化总量为 100391791500

n = 7 , 可能变化总量为 1305093289500

n = 8 , 可能变化总量为 10767019638375

n = 9 , 可能变化总量为 153835098191875

n = 10 , 可能变化总量为 150738274937250

n = 11 , 可能变化总量为 205552193096250

n = 12 , 可能变化总量为 102776096548125

n = 13 , 可能变化总量为 7905853580625

——看看,虽然这连接板长的不好看,可要说它相当强悍,却也并非言过其实啊。

观察上面结果,我们会发现一个似乎有点不合情理的现象——当n取11时,连接板能提供的变化达到了登峰造极的程度;再继续接插,变化总量反而会减少……

为什么呢?为什么呢?

此外,当n取12时,连接板上只剩下最后两个字母未被连接。粗粗看来,这时候无论再怎么连,结果应该也不变——换言之,n取12,和取13时,结果应该是相当的。可是,根据公式算出的结果,却显然不是这样。

这又是为什么呢?为什么呢?

再说句题外话吧。1001n所能查到的资料,要么直接给出个数字,要么直接给出个错误公式——别笑,至少有三种文献给的公式都在某个地方少了个n;更有甚者,直接用组合相乘计算,即(26选2)乘以(24选2)乘以(22选2),直到最后2选2为止……总之,如果从资料上一抄了事,那么这里提供的结果只能是1001n最先看见的那一个,也就是令人肃然起敬四方虚空的那个了,呵呵。

说实在的,这连接板能提供的变化无论怎么算,都是个极为庞大的数字。那么,非要精准地得知到底是几,有没有意义呢?

我个人认为,结果究竟是234567还是4567890,其实都没什么区别;但是,如何正确求出这个234567或者4567890,才是真正有意义的地方——比如说,有资料给出的公式就很搞笑;插上一根线,结果是对的,再插上第二根就完全错了……如果不去仔细分析计算的思路,当五花八门的答案都出现在自己面前的时候,随便挑一个自己看得顺眼的列上来,估计兄弟们也未必会认真复核——也就蒙混过关了,呵呵。

但是我始终觉得,这个系列的写作,绝对不是一个卖弄和表演的机会,而是一个自我学习的过程。我也一直认为,这个学习的过程很快乐——ENIGMA在这里,更象一个思维游戏;而且以我并不很高的智力来说,它的挑战性很强,也很有意思。

我本人的数学一塌糊涂,以上的分析过程,怕是要让各位擅长理工的兄弟暗笑不已:如此罗嗦,三两行解决的问题,非要写三两千字,真是拖沓得可以——但是,昨天不懂的问题,今天懂了,我还真是很高兴;也愿意献丑,把自己的心得和大家分享。

以前有兄弟抬举我,说我是什么什么“牛人”。现在大家怎么也该看出来了,1001n就是个很一般的人。以上这些,其实任何一位兄弟真有兴趣的话,都会研究出来,而且很可能比我写的更好。因此,大家多写写吧,科学技术,好像真没那么可怕——连我这样的都能写这么多,何况各位兄弟了,呵呵。

拉回来,继续说为什么n取12,和13时结果不同吧。最最简单的一个解释是——虽然这个解释1001d整整想了半个小时,而1001n连想都没想出来——当n取13时,所有的字母均被配了对儿,一切可能的变化都最终明晰了;而n取12时,这个结果却没有那么明晰,因此可能性要多——这句话不好理解,我们还是举例吧:

假设我们按以下最简单的规则配对,即:

A-B,C-D,E-F,……W-X,Y-Z

现在,令n=12,也即配12对,并空出最后两个字母Y和Z不连接,即:

集合1 = { A-B,C-D,E-F,……W-X }

这是一种连法。之后,再设置另外一个连法,就是空出头两个字母A和B不连接,而把剩余的24个字母分别配对连接起来,即:

集合2 = { C-D,E-F,……W-X,Y-Z }

显然,这是不同的两种变化,即:

{ A-B,C-D,E-F,……W-X } ≠ { C-D,E-F,……W-X,Y-Z }

在此基础上,我们再把第13根线,也就是最后一根线连上。这就是说,当n=13的时候,所有字母都将被连上——上面所说的集合1里,空出的字母Y和Z将被连上;集合2空出的字母A和B也将被连上。结果,自然是下面这样的:

集合1 = { A-B,C-D,E-F,……W-X,Y-Z }

集合2 = { A-B,C-D,E-F,……W-X,Y-Z }

显然,

集合1 = 集合2

这就意味着:在连通12对字母的变化基础上,再连通第13对字母,必然将出现重复计算的情况;在本例中,本来关系“暧昧”的Y-Z和A-B,由于连通后变得“清晰”,导致最终集合相等——而相等的集合只会被公式计为一次,从而使重复的情况被排除。

扩展开说,n取12时,用公式计算的结果,正好是n取13的结果的13倍。这个又是为什么,也请各位兄弟做回脑力体操吧:)

至于n取11的结果比n取12要大,其实倒不难理解。仔细观察公式

26!

变化总数 = -------------------------

n

( 26 - 2n )! 2 * n!

就会发现,分母的大小,跟n实在是密切相关。由于公式参数已定,形式已定,n取11时公式的结果将出现极大值,倒也不是很难理解的问题,呵呵。

这个结果也告诉我们,对于ENIGMA而言,最棒的选择应该就是连接11对字母——而当年的德军却往往并非如此:他们经常是连接上所有的字母对,也就是把13条连线全用上。

从道理上讲,无论是连13对,还是连12对或11对,其变化都是个非常庞大的数字,其中的差距只有用纸和笔才能算清楚。如果脱离这个对于理性思考最重要的工具,只是靠感性泛泛去“估计”和“判断”出个正确的结论,即便不是不可能,起码也是非常困难的。我想,这大概就是为什么德军会选择插接全部13个字母对最根本的原因——很有可能,他们根本就没仔细算过到底交换多少字母对,才会给敌人造成最大的麻烦;进而,也就“跟着感觉走”一般地用上了全部连线。

不过,连13对字母也还不是很差的选择。

首先,从上表中我们虽然可以看出,连接13对字母以后,连接板的变化将减少为11对的二十六分之一;即便如此,这时它所能提供的7905853580625种变化,也绝不是个小数字了。。

其次,德军常常使用13对连线而不是使用13对连线,倒也有个不错的结果,那就是:无法使敌方密码分析人员在公式中“固定”这个连线数量。从道理上讲,虽然常常是交换13对,但是也许有时就只交换8对,有时候就交换10对;这样,敌人在破译的时候,还真不能只考虑某种固定的连线数量——比如13——于是使破译工作更加麻烦。

饶是如此,连接板在使用的时候还是有纰漏的:且不说交换13对字母,本身已经削弱了反射板的加密潜力;更让人哀其不幸怒其愚昧的是,德国人大概是唯恐敌人破不了自己的机密,又自废武功地制定了使用时的规则:连线时,不能选择相邻的字母。所谓相邻,指的是按字母表顺序,前后相邻的字母——这就是说,字母B既不能连接A,也不能连接C;字母K既不能连接J,也不能连接L。

老实说,如此规定倒也不全是没动过脑子的——他们认为,这样连接的话,会给对手提供某种令人不放心的可乘之机;虽然不知道对手会用什么方式利用这样的可乘之机,但是还是从制度上消灭了它比较好——从道理上说,德国人的担心好像也不能简单说成是杞人忧天。

但是,历史一再告诉我们:好的动机未必一定导致好的结果。德国人这么一规定,东边倒是不出太阳了,西边可就下起瓢泼大雨了——诸如A-B,B-C,K-J等等这样的交换组合,现在已经是不可能出现的了。

不可能出现,自然就意味着这样的情况可以直接排除!

盟军的分析专家们当然不会放过这个密码学意义上的漏洞。其一,这样本身就减少了因连接板导致的变化数量,让计算变得更加容易一些;其二,在利用种种手段破译出密钥后,当分析专家反过来推算当天ENIGMA机器设置时,如果推算出连接板上出现了相邻字母被两两互换,那么肯定就是算错了——就这样,德国人又慷慨地送上了一份供对手验算破译结果的礼物!

就这么着,连接板继反射板之后,成为了第二个可以部分地判断密文正误的根据。。

写到这里也有点想笑:密码机这东西,看起来神秘和强大的不得了,但是实际一用起来,居然就会出现可以用来验算破译结果的特征,而且还不止一个——如果不是ENIGMA的机理及使用规则确实如此,说出去又有谁信呢。。

不过,尽管德国人制定了愚昧的规则,这连接板依然绝对不是ENIGMA的败笔——相反,如果没有它的话,ENIGMA或许早就被敌方的数学家击败了。正因为它的存在,使ENIGMA在转轮组提供的多表替代加密之上,又复合了单字替代的大锁,使得那些可以用来分析多表替代的路数,在ENIMGA面前变得毫无用武之处。

连接板的出现,使转轮组“安全”了;而转轮组,反过来又保证了连接板的“安全”——那些能够对付单字替换的路数,现在也不灵了!

这也提示我们:

至少在古典密码体系下,若要获得更大的安全强度,多种不同结构的复合加密应该比多次同类加密更可取。

关于连接板,就分析到这里吧。同时,对于整个ENIGMA的加密系统的介绍,也就全部结束了——这一路上拆出了这么多零件,也难为各位坚持观看了,呵呵。

不过,光有这么一堆乱七八糟的零件,也是没法工作的。那么在下一节,还是让我们打开管状视野,来看看全豹吧。

关键词(Tags): #密码#破译#二战#ENIGMA#布莱奇利元宝推荐:ArKrXe,

本帖一共被 1 帖 引用 (帖内工具实现)
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河