西西河

主题:【原创】密码传奇(一):5、重压之下的超一流天才破解 -- 1001n

共:💬14 🌺37 新:
分页树展主题 · 全看首页 上页
/ 1
下页 末页
  • 家园 【原创】密码传奇(一):5、重压之下的超一流天才破解

    现在,我们还是回到那个让法军中尉Painvin无比郁闷的愚人节――1918年4月1日吧。

    前文提到,这一天,法军一共截获了德军采用ADFGX战地密码加密的18份密电。

    其中,有两份电文因为太长,被德军截成三段,分成三次发送。吃过亏的德军很谨慎,这三段长度是不相等的。

    即便是这样,这两份电文还是被Painvin盯上了。前文不是提到过CHI-110和CHI-104两份电文么?实际上,它们就是这两份电文的第一段。

    CHI-110是由VI台发往B8台的电报,共110个字母;

    CHI-104是13分钟后,由VI台发往BF台的电报,共103个字母。

    顺便说一句,这CHI是协约国一方给截获的德军密电起的标头,而后面的110、104就是密电的长度。

    前文曾经提到,德军启用当天就被破掉的短命密码,其代号不是有CHI-13和CHI-14么?道理是一样的,也是把数字或者字母分成组,数出这些数字组或字母组的数量,以此来命名的。比如,那个CHI-13,意思就是协约国军队截获的德军电报,长度为13个数字组;CHI-14则表示该德军电报有14个字母组。

    而这个ADFGX密码由于截获时根本不知道该怎么分组,于是直接使用了字母的总数而不是密文段的数量来编号。

    关于这CH1-104,这里得专门说一下。按Kahn在《破译者》一书中所说,应该是104个字母,也正是因此才被命名为CHI-104。但是,其中似乎多了一个字母,具体说就是在……DXFDAF……这里,多了一个字母F。

    本来想偷个懒忽略掉这个问题,但是写着写着发现,在后面的拆解过程中,有没有这个F直接关系到具体的分组情况;如果有,结果就不会是后来分析的那样了,这个密文必被破的乱七八糟……没办法,只好在这里强调一下:文中按照新近的著作所提,将这个F去掉了。。。至于是不是该叫CHI-103,呵呵,还是沿用大家都习惯了的CHI-104吧。

    继续说这两份宝贝电文。它们的内容分别是

    CHI-110:

    ADXDAXGFXGDAXXGXGDADFFGXDAGAGFFFDXGDDGADFADGAAFFGXDDDXDDGXAXADXFFDDXFAGXGGAGAGFGFFAGXXDDAGGFDAADXFXADFGXDAAXAG

    CHI-104:

    ADXDDXGFFDDAXAGDGDGXDGXDFGAGAAXGGXG?DDFADGAAFFFDDDFFDGDGFDXXXADXFDAXGGAGFGFGXXAGXXAAGGAAAADAFFADFFGAAFFA

    其中,CHI-104电文中遗失了一个字母,以问号替代。

    ――喜欢这乱七八糟毫无头绪的字母组合不?呵呵。。。

    根据前文的介绍我们不难知道,对于经过换位表加密的密文,最最重要的第一步就是要知道密文是如何分的段。换言之,不知道分段的情况,就无法得知这个换位表的长度和宽度。而不知道换位表的长度和宽度,如何构造换位表?不构造换位表,如何往之后的方表里填写字母,进而破译密电?

    层层推理的结果就是,必须首先攻破密电的分段。而ADFGX的密文分段并不是均匀的,这个原理并不难理解――前文说过,这主要跟每个字母在换位表中的位置有关系。比如,有长列,有短列;一长一短之间,密文段自然也就不一样长了。

    ――怎么分这个段呢?Painvin陷入了长考……

    经过超仔细的观察,Painvin发现:对比这两份密电,有不少的字母组合在两份电文中都出现过,比如DFX,AA这样的组合。更重要的是,它们是在大致相当的位置对应出现的!

    比如我们从两份密文中各截取开头的一段,如下:

    CHI-110 ADXDAXGFXGDAXXGXGD

    CHI-104 ADXDDXGFFDDAXAGDGD

    也即

    CHI-110 ADXDAXGFXGDAXXGXGD

    CHI-104 ADXDDXGFFDDAXAGDGD

    对照不难看出,ADXD、XGF、DAX、GD都是上下对应着出现的;实际上,这两份电文非常相似。。。

    显然,德国人不会拿电报打镲,把同一份电文发个没完,来逗法军玩儿。电报明文既然内容不同,为什么密文会这么相似呢?

    锻炼破译者脑筋的地方出现了:为什么会这样呢?

    前面我们说过,ADFGX是3月5日正式启用的。换言之,到4月1日这一天,法军已经截获了不少德军电报。但是在这之前,由于截获数量不多,难以达到密码分析所必须的样本量的要求。

    即便如此,Painvin也已经根据初步的计算,得出以下3个判断:

    1、德军所用的是复合加密,即先利用方表加密,之后再利用换位表进行加密;

    2、经过频率分析得知,该方表每天一换――也就是说,每天的方表虽然都是5*5,但是填写顺序完全不同;

    3、经过频率分析得知,该换位表的密钥每天一换――也就是说,每列字母头顶上的数字,它们之间的排列顺序每天都要变。

    这个时候,Painvin想起了他的判断。CHI-110和CHI-104都是同一天截获的,那么,它们必定是使用了同样的方表,并且,在换位的时候,用的也必定是同一个换位密钥。

    而CHI-110和CHI-104都是电文的第一段,也就是说,包含着电文的报头部分。现在看来,这一段这么相象,莫非说明它们的报头本来就是相同的?

    根据这个猜测,Painvin又进而想到,那些出现在两份电文中对应位置上的,相同的字母组合,莫非其实本来就是对同样明文字母加密的结果?

    而有些字母还是不同,这个不同产生的原因又是什么呢?

    Painvin迅速判断出:这个不同,应该是经过换行操作之后产生的。我想了想,生造了个词“漂移”,来帮助大伙理解这个不同产生的原因,呵呵,不知道效果如何。。。

    这样,两份电文就可以用下面的结构来说明:

    相同的字母组合--不同的字母--相同的字母组合--不同的字母--相同的字母组合……

    如果不考虑那些不同的字母,只看相同的字母组合,就成了

    相同的字母组合……相同的字母组合……相同的字母组合……

    这么一审视,密文就成为一截截的了――Painvin眼前一亮:老天啊,这不就是他苦苦寻觅的密文的分段么?!

    原来一切都藏在这两份看上去相似的电文里:相同的字母组合就是每个密文段的开头,后面跟着若干个不相同的字母,直到再次出现相同的字母组合,构成下一个密文段……

    再以刚才所举的电文的开头为例子:

    CHI-110 ADXDAXGFXGDAXXGXGD

    CHI-104 ADXDDXGFFDDAXAGDGD

    取相同的字母组合为每段密文的起始,并以空格适当隔开,则有

    CHI-110 ADXDA XGFXG DAXXGX GD

    CHI-104 ADXDD XGFFD DAXAGD GD

    后面的工作就简单了:轰的一声,Painvin就把两份电文按这个规则一段段锯好:

    CHI-110:ADXDA XGFXG DAXXGX GDADFF GXDAG AGFFFD XGDDGA DFADG AAFFGX DDDXD DGXAXA DXFFD DXFAG XGGAGA GFGFF AGXXDD AGGFD AADXFX ADFGXD AAXAG

    CHI-104:ADXDD XGFFD DAXAGD GDGXD GXDFG AGAAXG GXG?D DFADG AAFFF DDDFF DGDGF DXXXA DXFDA XGGAGF GFGXX AGXXA AGGAA AADAFF ADFFG AAFFA

    锯好了还不能算完,他给这两份电文的密文段一个个对齐,并按顺序编好了号,构成了一个密文段全表,就是这个样子:

    CHI-110 ①ADXDA ②XGFXG ③DAXXGX ④GDADFF ⑤GXDAG ⑥AGFFFD ⑦XGDDGA

    CHI-104 ①ADXDD ②XGFFD ③DAXAGD ④GDGXD ⑤GXDFG ⑥AGAAXG ⑦GXG?D

    CHI-110 ⑧DFADG ⑨AAFFGX ⑩DDDXD ⑾DGXAXA ⑿DXFFD ⒀DXFAG ⒁XGGAGA

    CHI-104 ⑧DFADG ⑨AAFFF ⑩DDDFF ⑾DGDGF ⑿DXXXA ⒀DXFDA ⒁XGGAGF

    CHI-110 ⒂GFGFF ⒃AGXXDD ⒄AGGFD ⒅AADXFX ⒆ADFGXD ⒇AAXAG

    CHI-104 ⒂GFGXX ⒃AGXXA ⒄AGGAA ⒅AADAFF ⒆ADFFG ⒇AAFFA

    累死我了,打这表……

    这样,初步工作完成了。Painvin工作的很出色,到现在为止,他已经成功地把这两份密文给分了段。

    如前所述,ADFGX密码是经过方表和换位两次加密形成的;对于这样的复合加密,想要剥离出明文,必须得一个个予以解密,而不能简单地试图对两种加密同时发起攻击。于是,Painvin首先把目标瞄准了换位加密。

    观察他编号过的密文段全表,不难看出:这密文段有的长度是5,有的长度是6。现在,我们把长度为5的密文段称为短密文段,而长度为6的密文段为长密文段。

    Painvin开始归纳这两份电文的长短密文段的信息。比如,

    第17段,上下两个密文段的长度都是5,是两个短密文段。

    第18段,上下两个密文段的长度都是6,是两个长密文段。

    第19段,上下两个密文段长度不一,有5有6。

    概括起来说,同样编号的密文段,也就是对应的上下密文段的长度关系,无非这么三种:

    都长:长度为6;

    有短有长:长度有5有6;

    都短:长度为5。

    把密文段全表里的所有密文段进行分类,以上述三种情况分别记录下来,按编号整理可得:

    都长的密文段: 3 6 14 18

    有长有短的密文段:4 7 9 11 16 19

    都短的密文段: 1 2 5 8 10 12 13 15 17 20

    现在,我们可以把它们写成集合的形式,也即:

    (1 2 5 8 10 12 13 15 17 20)

    (3 6 14 18)

    (4 7 9 11 16 19)

    控水晾干,放在案板上,备用。

    这里我们可以看到,本文开头提到的那个多出来的F,实在不是可有可无的。如果有这个F的话,那么13就不该归于第一组,而该归第三组了。这么一搞,下面的分析必然是一塌糊涂……这也提醒我们,在研究科学史的时候,能够仔细一点就尽量仔细一点;为了生动起见,可以稍微演绎一下,但是不能对着原则问题想当然――特别是,1001n还曾试图偷懒,干脆忽略掉这个F的问题――实在是个教训,各位兄弟一定要吸取啊。。。

    把话题再拽回来……我这怎么回事啊,好像方向盘被固定了似的,总是要往一边歪……

    根据上面的整理结果,Painvin实际上就知道了:这些长长短短的密文段,在第二次加密时所使用的换位表(不是方表!)中的位置。这句话是什么意思呢?

    原来,根据前文的分析,所谓长的密文段,就是长列;短的密文段,就是短列;有点不同的是,这次多了个有长有短的密文段。而这有长有短的原因,是因为它们实际上属于两份电文――如果只分析一份电文的话,自然就不会出现这有短有长的喜人局面了。。。

    回想前文提到那个换位表的构成,Painvin可以知道,这长列必然位于换位表的一侧,而短列位于换位表的另一侧。于是,有长有短的密文段,则必定被这一长列一短列夹在中间,也就是说,位于这换位表的中间。

    现在就可以开始着手分析密文段在换位表中的具体位置了。而在这以前,Painvin还必须要赌一把。

    赌什么呢?

    那就是:这个长列应该在表的最左边,还是在最右边?从道理上我们知道,无论在左在右,都是符合ADFGX的加密规则的。

    Painvin押在了左边。而结果是:他对了。

    其实这个结果也是合理的,本来嘛,正常书写的表格,肯定是左边的列长,右边的列短,很少会相反;除非德军规定:向换位表里一个个填字母的时候,不是从左到右一个个填写,而是从右向左一个个填写。而以横行方式书写文字的时候,无论是文本还是密码,习惯上没人会采用从右到左的方式的――有兄弟说了,中国古代的书写,不就是从右到左的么?但是那有个前提:中国古文字是竖列书写的;也就是说,首先是从上到下书写,之后在换行的的时候才是从右到左的。

    德军犯不着在这个地方动手脚:写明文、按明文输入都用从左到右的自然方式,经过方表加密以后,突然就改从右向左填写方式了?那不是给自己增加出错几率么?何况,最后脱密的时候,还是要改成从左到右的阅读方式啊……

    在这里我个人猜测:假设长列在左边,如此推出一个结果;而假设长列在右边时,进行推导也应该能得到同样的结果――只不过,正好是左右完全颠倒;相应地,得到的初始方表也应该是倒的,具体点说就是,横纵坐标互换以后的那种关于中心对称的另一张方表……这是我个人的猜测,具体没有验证,只是作为一个思考吧,供有兴趣的兄弟参考。以及,我个人还觉得,不仅如此,脱出的明文也应该是一样的。打个比方就是:无论你是直接写个“长”字,还是在对着镜子写一个左右颠倒的“长”字,纸面上得到的结果都应该是同样的“长”字,没有区别。

    继续说Painvin吧。

    他正确地认识到:长列应该在换位表的左边,这样一来,短列自然就在换位表的右边,而有长有短的列自然应该就在换位表的中间。

    考虑完了两份电文,现在Painvin开始一份一份地分析了,办法还是刚才那个:按密文段的长短,分别归纳成两个集合:长密文段集合,和短密文段集合。跟刚才稍有区别的是,现在不可能存在那种有长有短的密文段了。

    为了大家能看清楚,按每份电文的连续顺序重新罗列两份电文:

    CHI-110 ①ADXDA ②XGFXG ③DAXXGX ④GDADFF ⑤GXDAG ⑥AGFFFD ⑦XGDDGA

    CHI-110 ⑧DFADG ⑨AAFFGX ⑩DDDXD ⑾DGXAXA ⑿DXFFD ⒀DXFAG ⒁XGGAGA

    CHI-110 ⒂GFGFF ⒃AGXXDD ⒄AGGFD ⒅AADXFX ⒆ADFGXD ⒇AAXAG

    CHI-104 ①ADXDD ②XGFFD ③DAXAGD ④GDGXD ⑤GXDFG ⑥AGAAXG ⑦GXG?D

    CHI-104 ⑧DFADG ⑨AAFFF ⑩DDDFF ⑾DGDGF ⑿DXXXA ⒀DXFDA ⒁XGGAGF

    CHI-104 ⒂GFGXX ⒃AGXXA ⒄AGGAA ⒅AADAFF ⒆ADFFG ⒇AAFFA

    很明显地,对于CHI-110来说

    长密文段:3 4 6 7 9 11 14 16 18 19

    短密文段:1 2 5 8 10 12 13 15 17 20

    而CHI-104则是

    长密文段:3 6 14 18

    短密文段:1 2 4 5 7 8 9 10 11 12 13 15 16 17 19 20

    比较起来,可以进一步得出更细的分组情况:

    同一位置上,CHI-110更长的密文段:4 7 9 11 16 19,即(4 7 9 11 16 19)

    同一位置上,CHI-104更长的密文段:很见鬼,一个都没有#@%$――即(空)。

    ……这结果有点气人,但是不妨碍我们继续分组。考虑刚才对两份电文同时分析得出的集合情况

    (3 6 14 18)

    (4 7 9 11 16 19)

    (1 2 5 8 10 12 13 15 17 20)

    也就是

    都长的密文段: (3 6 14 18)

    有长有短的密文段: (4 7 9 11 16 19)

    都短的密文段: (1 2 5 8 10 12 13 15 17 20)

    这个结果说明了什么呢?有心的兄弟也许已经有了隐约的感觉……不急,我们还是看看Painvin之后是怎么做的吧。

    本文开始的时候提到,现在说的CHI-110和CHI-104实际上只是两份完整电文的第一段,也就是包含报头的那一段。Painvin想,既然报头部分如此相似,那么报尾部分应该也有可能是类似的。

    于是,他对第三段也进行了同样的分析,结果是:

    (3 4 5 6 7 8 9 11 14 16 18 19)

    (1 2 10 13 15 17)

    (12 20)

    现在有点麻烦了,电文本来就是两份,还各被分成了三段……为了清晰地标注出究竟是哪份电文的哪一段,现在用A表示第一份电文,B表示第二份电文。

    其中,每份电文的第二段都不涉及,我们只研究它的第一段(报头)和第三段(报尾)。具体说起来,我们就这么表示:

    A1:第1份电文的第1段,也就是CHI-110;

    A3:第1份电文的第3段,没有对应电文;

    B1:第2份电文的第1段,也就是CHI-104;

    B3:第2份电文的第3段,没有对应电文。

    这之后的结果颇为绕人,1001n在这里只好先鞠躬了――没办法,一切的精华都在这里,绕是绕不过去的。。。不过,一旦完全看懂了,后面的破解就变的非常容易理解了。

    这样,以集合的形式表示A1、B1的长短密文段的分组情况,就是下面这个样子的:

    集合x:即A1和B1中都长的密文段: (3 6 14 18)

    集合y:即A1和B1中有长有短的密文段: (4 7 9 11 16 19)

    集合z:即A1和B1中都短的密文段: (1 2 5 8 10 12 13 15 17 20)

    A3、B3的集合则是

    集合X:即A3和B3中都长的密文段: (3 4 5 6 7 8 9 11 14 16 18 19)

    集合Y:即A3和B3有长有短的密文段: (1 2 10 13 15 17)

    集合Z:即A3和B3中都短的密文段: (12 20)

    这样,把每三个集合做为一组,通俗点说就是:把大写字母命名的三组集合,和小写字母的命名三组集合,分别进行两两交集操作,也即

    x∩X,y∩X,z∩X

    x∩Y,y∩Y,z∩Y

    x∩Z,y∩Z,z∩Z

    并分别记录下来。按说,应该得到9个集合的结果。但是稍微观察一下我们不难发现,这里有很多的交集的结果是空集。实际上,这样的空集有4个,也就是x∩Y,y∩Y,x∩Z与y∩Z。

    而剩余的5个交集不是空集,按从长列到短列的顺序排列下来就是:

    (3 6 14 18)

    (4 7 9 11 16 19)

    (5 8)

    (1 2 10 13 15 17)

    (12 20)

    如果试图解释这五个交集的密文含义话,应该是下面这个样子的:

    A1、A3、B1、B3中全为长的密文段: (3 6 14 18)

    A1、A3中全为长的密文段: (4 7 9 11 16 19)

    A1、B1中全为短,并且A3、B3中全为长的密文段:(5 8)

    B1、B3中全为长的密文段: (1 2 10 13 15 17)

    A1、A3、B1、B3中全为短的密文段: (12 20)

    容易发现,以上5种情况并没有涵盖所有的可能情况。出现这个现象的原因也不难解释:一共两份电文,样本量比较小,有的情况始终没有出现过。

    比如上文提到过那个见鬼的CHI-104现象:整份CHI-104,也就是B1,竟然找不出一个比A1长的对应密文段来――而这种种情况的累加,正好构成了上面出现的4个空集。

    而这4个空集,实际上也就意味着,在这两份电文中,共有4种不同的长短排列及变化情况是没出现过的,除了刚才那个见鬼现象,还有A1、A3中全为长并且A3、B3中全为短的情况,等等。。。

    顺便说一句,在写这个文章的过程中,我自己也是深受教育。就比如这个集合的问题,实际上资料上根本没给出具体的原理和过程,就连交集这个词都是我看了他的操作以后才概括出来的――而这个地方,确实是理解Painvin所作做为的关键。

    为了真正把握它的意思,在这上面我前前后后至少费了十来个小时,当然,这跟自己的数学不好有直接因果关系,呵呵。。。之中试图给出一个解释,但是太复杂,不仅极绕,而且很容易自己就给弄错了。简单的说,就是把那9个集合一个个列出来,并且分别予以解释,并竭力考虑还有没有重复的、遗漏的……最后发现,那样肯定也是可以说清楚的,但是太太太太麻烦了:别说看的,就连写的一不留神都得给带沟里去。。。

    而如果自己干脆都偷个懒,只是简单一笔带过,容易那肯定是容易了,但是也就没多大意思了――与其那样,我何必不直接照书抄呢?而就是在这个其实还是很费神的试图理解的过程中,不断地假设、判断、否定,再假设、再判断、再否定……经过这些思考,我感觉的确有了一些提高。具体的密码破译技术倒在其次,重要的是,这不就是科学版最强调的科学思考的精神么?如果说我通过写这个系列有什么收获的话,这应该就是最重要的收获了。

    只要使用科学的思维方式,笨蛋也一样能得到正确的理解和结果――当然,花的时间那就海了去了,嘿嘿,比如我。。。

    好,闲话少叙,拉回来接着说Painvin下面的工作。现在,他已经得到了这么个集合:

    (3 6 14 18)

    (4 7 9 11 16 19)

    (5 8)

    (1 2 10 13 15 17)

    (12 20)

    回想前文中关于换位表的原理我们可以知道,以上这些数字都是各个字母纵列头顶上的序列号――当然,这个序列号不是用来装Windows的,呵呵。它们从1排到20,就代表着20个字母纵列;具体来说,就是1、2、3……18、19、20,每个数字的下面,都是一个字母构成的纵列;这些纵列一列列排起来,就构成了换位加密的那张换位表。

    并且,由5个集合的排列次序(从长到短)可以知道,5、8两列必然位于换位表的中间几列,而12、20所代表的两列必然位于全表的最右侧。既然是这样,那么12和20列必然一个是第十九列,一个是第二十列。

    而只有两个数字的集合,如(5 8)和(12 20)又告诉我们:无论它们处于表的什么位置,5、8必然是相邻的两列,12和20也必然是相邻的两列。道理很简单:因为这两个集合都各只有两个数字,它们即便是翻来倒去也实在无法不相邻……只不过,现在还不知道排列是5、8,还是8、5;是12、20,还是20、12。不着急,咱们慢慢来。

    现在能分析出的就这么多了,想知道更多的,就必须借助别的工具了。

    Painvin用的是什么工具呢?就是我们以前常常提到的对付单字替换屡试不爽的方法――频率分析。而频率分析的应用有个前提,就是得有相当数量的样本以供统计。现在Painvin手里的这两份电文实在单薄了些;根据统计学原理我们知道,样本量太小的话,得出的结果可能会严重偏离实际的分布情况。

    那么,怎么增大这个样本量呢?难道要让德军的译电员给提供几份?显然是没睡醒的主意。。。

    何况,新增加的样本电文,也必须符合两个条件:

    同样方表加密;

    之后用同样换位表再次加密。。。

    听上去很愁人,真是很愁人啊。。。可实际上解决的方案却很简单:德军的方表和换位表密钥不是一天一换么?那么当天的所有电文都符合这个要求啊……

    前面提到,这一天,法军一共截获了18份密电。于是很自然地,这些经过同样加密手段炮制出来的难兄难弟们,就成了统计分析的样本们了;而现在,它们已经全部摊开在Painvin的面前了。

    如此一来,样本量不是太大的问题了;即便不是非常精确,但是也已经可以保证,得出的结果必然非常逼近真实答案了――统计学,不就是欺负小样本的学问么,呵呵。。

    分析就这么开始了。而换位密钥的长度已经确定是20,于是其它的电文也被分成了最多二十个密文段(可以少,但是再多就有问题了;除非那电文用的是更长的密钥)。

    由于5和8在上面的分析中属于相邻的两列,Painvin就从这里下手了。他的办法是:把所有这18份电文中,5和8所代表的那两列中相对应的字母统统揪出来。

    换言之,5这一列里揪出第三个字母,比如是A;8这一列也揪出第三个字母,比如是X。按先5后8的顺序,记作AX。如此操作彻底,把18份电文里的5和8对应的字母全揪出来以后,一数还真不少:共60对。

    统计分析表明,它们的确是通过单表替代完成的。至于怎么得到的这个结论,或者说,如何通过统计分析,来区分密文的加密手段是单表替代或多表替代,我将在本系列的下一章进行阐述,这里就不多提了,嘿嘿。。。

    然后是12、20这两列。经过验证,表明它们依然呈现出单表替代的特征。更重要的是,Painvin发现,揪出来的小夫妻里,出现频率最高的组合是DG,共出现了8次。

    前文讲述方表加密的时候特别强调的一点是,每个明文字母都是被两个密文字母所替代的,其中一个是方表的横坐标,另一个是方表的纵坐标。这就是说,这DG必然对应着某一个明文字母。

    而在德文中,什么字母的出现频率最高?答案很简单:跟英语一样,就是那个E。

    那么,这个DG是不是E呢?得验证一下:如果是E,那么在别的列里必然也会呈现出高频率的特征。

    Painvin回过头去研究5、8列的情况。很快他就发现,在这两列里,DG的出现次数是0。

    怪哉。。怎么可能呢?在这60对密文字母组合所代表的60个字母里,居然就没有一个E?这不符合逻辑啊。。如果是敌人精心构造的电文,的确可能出现这个情况;但是敌人不知道Painvin破解的办法,即便想伪装也无从伪装起啊――换言之,从统计学的角度看,一段明文里,任选60个字母都没有E出现,是极不正常的。

    那么看看,5、8里面出现频率最高的双字母组合又是什么呢?

    答案是GD,也是8次。

    DG是E,出现8次;GD是什么不清楚,也出现8次。

    ――很容易看出来:这GD跟DG唯一的区别就是:顺序是倒过来的。

    这也就启发了Painvin:如果12、20的排列里,出现的DG就是E的话,――那么现在在5、8的排列里出现了倒过来的GD,并且,频率同样的高,应该也是E――只能说明,如果12、20的顺序是对的话,那么,5、8的排列就该倒个个儿,变成8、5!

    当然,还有一种可能,就是维持5、8不变,而把12、20倒个个儿,变成20、12。但是这么一搞,很快就能发现,之后继续进行的统计就不符合频率分布规律了。也就是说,只要这密电里面说的还是德国话,还符合德文字母频率分布的一般规律,那么该调换位置的,就肯定不是12、20,而是5、8。

    这样,再根据上文已经知道的这几列在换位表中的次序,正确的换位密钥顺序也就被定为……8、5……12、20。

    并且,在12、20和8、5两列中,DG都被确定为E了。也就是说,按照当时通行的先纵后横原则(其实先横后纵也不影响结果,只不过表被对称了一次而已),E的坐标就是D、G。这样,Painvin开始初步还原那个神秘的方表:

    A D F G X

    A

    D E

    F

    G

    X

    然后,年轻天才Painvin的智力又开始闪出金光了:

    既然德国人用横坐标和纵坐标两组字母来加密电文,那么,如果把两种坐标分开考虑的话,应该能区分出它们所使用的字母频率的不同。

    A D F G X

    A ◇

    D ◇ E

    F ◆ ◆◆ ◆ ◆

    G ◇

    X ◇

    再看看这张表,(对的不齐,已经尽力了,但是这符号不配合我的工作,惭愧惭愧。。)我们就可以理解他的意思了:比如,填在F这行的字母◆,和填在F这列的字母◇,肯定是不同的(虽然有一个交叉);而不同的字母在文本中出现的频率是不同的。这样,通过分别对横坐标和纵坐标字母的频率分析,就有可能抓出它们背后隐藏的幽灵――真实的方表构造。

    而区别横坐标和纵坐标是再简单不过的事情了――刚才我们说到,当时通行的规则是先纵后横,也就是说,先填写纵坐标,后面再跟一个横坐标。

    这样,如果把密文以两两字母细细分组的话,每个双字母组的第一个字母必定是纵坐标,而第二个字母必定是横坐标。这样,只要数出全部奇数位置的字母,抄在一起,就是全部的纵坐标了;偶数位置的,自然就都是横坐标了。

    经过对这些电文的统计,Painvin证实了自己的想法:各数字开头的纵列里,频率曲线形成了两峰两谷:

    第一个峰为D,对应的谷值为G;

    第二个峰为G,对应的谷值为F。

    以峰谷为界,可以把这些列划分成两个新的集合。其中,第一个集合,也就是峰值为D,谷值为G的那个集合,被证实是处于换字表的奇数列;而第二个集合,也就是峰值为G,谷值为F的那个集合,被证实是处于换字表的偶数列。

    现在想想我们开始得到的那5个集合吧。从那5个集合里,我们知道了哪些是长列,哪些是短列,哪些是有长有短的列;进而知道了它们在换字表上的大概位置,比如说,长列在最左,短列在最右,有长有短的在中间。

    而现在,通过对横纵坐标分离后的分析,又得知了其中哪些是奇数列,哪些是偶数列――填满整个换位表(而不是方表)的工作,一下就变的简单太多了!

    Painvin现在要做的事情,就是把已经被分过两次类的这些列,按着奇偶的顺序,挨个试探着排进换字表里。工作确实有点麻烦,但是错了很快就能发现:如果排错了相邻的两列,那么它们组合出来的“小夫妻”们的频率分析结果,就肯定不符合单表替代的特征;于是,就继续更换排列,直到每个相邻的奇-偶排列的双字母组合频率,都符合理论值为止。

    而到了全部符合理论值的时候,一张漂漂亮亮的换位表就出现了!

    也就是说,第二次加密现在已经完全被剥离了。现在横在Painvin面前的,只有方表加密一道关了。

    借助这张换位表,再根据频率统计的结果,Painvin现在可以猜测着往方表里填字母了。而一旦把字母填满并保证都是正确的,那么,ADFGX也就被破解掉了。这样,至少这一天的所有密电,都可以用这个方表和刚才得出的换位表,来一个个地解读了。

    思路对头了,剩下的工作顿时势如破竹。破竹归破竹,那也是需要时间的。比如说,仅仅是验证每两列是否相邻,就要做相当的统计工作,而等待他去排顺序的列,可还有不少呢;而在猜测着往方表里填写字母的时候,更如大家常玩的拼图一样,需要消耗大量的精力和时间,去一个个试探、验证;一次次的错误累积起来,才能渐渐勾勒出正确答案的轮廓……

    毕竟,这以前根本没有过破译这类先方表再换位的密码的先例,自然也没有什么思路可以借鉴;这也就是说,Painvin实际上是在用自己的聪明才智,在跟不可能的任务一点点地死磕……

    Painvin很聪明,应该算个天才;看到这里,我估计大伙都会同意这个观点。但是即便是天才,要完成这么繁重的工作,不仅仅需要智力的正确指引,也是需要时间的。

    ――但是,正在疯狂攻击着法军阵地的德军,会给任何人留哪怕一点点时间么?

    肩负法军存亡重任、脑子高速运转、完全是在超负荷工作并且根本没有休息时间的Painvin,这个时候也真玩儿命了!

    如果说,前些天破不出截获的密电,是因为样本量太少,不能构成有效的统计分析的话,那么现在一切都已具备――特别是那两份报头、报尾几乎相同,特别有利于破解的电文都已出现――如果再破译不出来,他Painvin首先就不能原谅自己!

    一个小时过去了……

    两个小时过去了……

    十个小时过去了……

    二十个小时过去了……

    四十个小时过去了……

    突然,仿佛就在一瞬间,ADFGX的遮羞布唰地一下就被彻底拽掉了,德军明文顿时赤裸裸地呈现在他的面前。

    Painvin终于成功地破译了4月1日这一批的德军电文!

    而从Painvin拿到那两份帮了大忙的电文开始,到读出它的明文,用掉的时间还不到48个小时。

    而让德军深信不疑、足够安全的ADFGX密码体制,就这样遭到了29岁的法军中尉Painvin的迎头痛击!

    元宝推荐:ArKrXe,

    本帖一共被 3 帖 引用 (帖内工具实现)
    • 家园 不知道这两份电文,可直接影响到了整个战争的进程甚或是结果?

      不是说肯定会被同样破译的其他电文,那答案是显而易见的。

      不过看了飞将军下面的那个密电,可真是郁闷。

    • 家园 一口气看完这个新系列

      写的真好啊,就是。。。好累呀,真难为你能写清楚。

    • 家园 痛苦并过瘾~~~~~~~~~~~~~~~哈哈,学四月一日

      花一吨

    • 家园 看得佩服死了,也累死了。献花
    • 家园 说点题外话:)

      各位的夸奖,我一直是很惶恐的。还是那句话,大家的支持,就是我最大的动力!

      写这个系列,确实太累了。能写出来,首先自己就要弄明白;而这些在介绍材料上,往往是极度的言简意赅,只有靠自己一点点理解,再来回试探,发现错了再改回来――呵呵,还是过去随便写点散文轻松的多,真是由衷的感慨啊。。。

      特别是,前几天大家大概也看见了,几乎是天天发七八千字,这个速度,又是写科技文章,已经彻底到了我的极限了。真是觉得很疲劳,于是没打招呼,给自己放了几天假,顺便采买了些资料,以利后战:)让大家久等了,在此一并表示歉意!

      其实密码真是很有意思的东西,如果不是泛泛看看的话,认真研究一下,确实还是很有收获的。如果不是这样,估计到不了今天,我早写不动了,呵呵。。。

      斑竹前几天呼吁我也参加科学讨论,说真话,现在脑子里已经根本顾不上别的了,还真不是推托。以往,我偶尔还喜欢跟人讨论一番;现在,就连上下班路上都在琢磨后面的文章该怎么写……实在是不能一心两用了,也请不爱和阿磕多多见谅!没别的办法,咱其实是支持科学版的啊,科学版给了咱那么高的荣誉,咱自然粉身碎骨以报……办法就是,一篇篇写下去。。呵呵。。

      不少朋友热心帮我研究德文变异元音符号的输入方法,在此一并致谢!论坛看来是实在不支持了,等它以后支持了,咱再给改回来吧:)

      本因坊幻庵朋友提出的那个密码,,我想了两三个小时,没有破译出来。这里也要声明一下的是,我只是写密码历史故事的人,不是真正的破译者――这两者的区别还是很大的。以后,这样的考题还是请免了吧,搞不出来我也很没面子的,是么?呵呵。。

      顺便说一句,那个密码本身是有问题的。根据一文一密的原则,它实际上可以对应无限明文。即便是Painvin,也不可能从一份密文破译出明文,因为这从原理上就不可能。理论上讲,必须有一定数量的根据同一加密方式加密而得到的密文,才有可能破译。

      以前每次都把这些罗嗦话写在正文之前,实际上破坏了文章本来的感觉。这次,就给直接附在后面吧:)

      再次谢谢大家!

    • 家园 送花,某家来猜猜那段密文

      是不是“连夜向xx送炮弹,如不被发现,白天也运”?

      • 家园 老兄真是够气人,哈哈

        脸色一正:不过,还是不对。

        老兄说的那个,我下一篇才会写到,是用ADFGVX加密的电报,而不是用这次写的ADFGX加密的电报。。

        不过――你这不是害我么。。我得想想怎么改动改动,,呵呵。。。

        • 家园 事情是这个样子滴

          偶很小的时候,偶然看过一点关于密码的科普读物,这些年下来,就记住了这一句,觉的有可能对的上,就拿出来碰运气,呵呵。

          其实老兄关于ADFGX加密原理的介绍,偶还没看懂呢。

    • 家园 沙发,花之
分页树展主题 · 全看首页 上页
/ 1
下页 末页


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

Copyright © cchere 西西河