西西河

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

共:💬9 🌺21 新:
分页树展主题 · 全看首页 上页
/ 1
下页 末页
  • 家园 【原创】密码传奇(三):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 帖 引用 (帖内工具实现)
    • 家园 【击节送花】并转一篇破译日军密电之文

      【文摘】一片丹心破日密──抗战回忆录之一

      据此文:本文作者曾破译珍珠港密电和三本五十六密电!

      • 家园 粗粗评论一下

        谢谢转文。对池老钦佩之余,既然本版是科技版,又觉得有必要从技术角度评论一下,让大家对密码战有比较客观的了解。

        总的看法:

        1。池老破译的是日本的外交码,不是军码。

        2。从池老讲述的密码构成来看,他破译的是比较低级的外交码。因为其中只用到固定的代换,另外加些小手段比如打乱顺序。因为同种密码对日文字母和汉字的代换是固定的,所以频率分析比较有效。至于高级外交密码如紫密之类不固定代换的密码他好像根本不知道(日方在中国使用少是一个原因,但是设在江浙的监听站应该可以截收到其他地区如美国和太平洋发出的电报)。这种低级密码一般就是印刷一个码本发给各单位,比较适用于大范围内统一使用。坏处就是更新不便,另外一旦一本码本丢失就全网被破,所以只适用于低级密码。

        破出密码后下一步就是情报分析。情报来源是情报分级的一个重要因素,这也就是为什么池老的工作并没有起多大作用的原因。同样这也就是为什么破紫码,jn25,enigma之类更吸引眼球。它们的使用范围决定了它们所载情报的重要性。相反低级外交码就相对不被重视。当然这绝不是说这类分析没有用出,象佐尔格判断日本不会进攻西伯利亚的一个重要依据就是源于对满铁人员数目这种低密级信息的分析。但是这需要大量投入和高质量的分析,战时总体来看一般是得不偿失的。日本的外交码美国也破了,相关人员同样在珍珠港之前根据日本外交部要求领使馆销毁设备的电文发出警报。基于同样原因,这种情报未被重视。


        本帖一共被 1 帖 引用 (帖内工具实现)
        • 家园 老兄评论的好

          这也是为什么起先我对池先生破译“袭击珍珠港密电”持怀疑态度的原因。

          但看老先生的确写的诚恳,也有点拿不太准了。

          从道理上讲,檀香山领事馆与东京之间的密码不应该太简单,特别在战前。外交密码本身是分级的,以池先生文字来看,破解的的确是低级外交密码,而低级密码加密的文电,能带有多少真正的高战略性情报呢?

          文中又透露出,击毙山本五十六,也是中国政府通报美国的。

          这份电文本是军方密电,我看过原文,老兄应该也是看过的。明明是海军内部的文电,如何又会用外交密码再发一遍?何况,那份电文说的全是行程安排,基本没外交机构什么事啊。。怪的很。。

          而且,美国方面确实有证据,是他们破开了日本海军的JN25,才通读了密电,并且由于电文很长,日期和地点又进行了二次加密,所以不是一天,而是很多天才断续破开的。

          这……唉。。。

          但是,也确实不好怀疑池先生的文章。池先生以赤诚报国之心,单身匹马对付日本密码,本身就是极可赞赏的勇者行为。

          或许老人家记忆有误?可这么大的事情,应该不会记错吧。。

          按照我手中的资料判断,似该否定池先生之说。但是,但是,毕竟只是池先生同事的旁证,似也没有过硬的证据可以直接否定。

          真是很晕啊

        • 家园 【击节送花】内行看门道,外行看热闹

          一直在等您船长回来呢!

    • 家园 期盼已久,终于又出来了。

      借问一句:1001d是谁啊?是一千零一夜老兄的弟弟还是“领导”?

    • 家园 还没拆完呢

      这活可够费事的。俺等故事。

    • 家园 【引用】“令人头大的ENIGMA故事,又要开始了……”
分页树展主题 · 全看首页 上页
/ 1
下页 末页


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

Copyright © cchere 西西河