五千年(敝帚自珍)

主题:【原创】密码传奇(一):3、生命换来的密码学教训 -- 1001n

共:💬15 🌺34
全看分页树展 · 主题
家园 【原创】密码传奇(一):3、生命换来的密码学教训

衷心感谢大家的关注、支持和帮助!

上一篇由于扯的过远,以至被兄弟们认为更适合去英雄本色……唉,可见我到底扯了多远:这想把故事讲生动了,也是有代价的,呵呵……话说回来,英雄本色咱还是不敢去的,因为咱采取的是蝙蝠政策:争取在记录密码历史的人里,把军事故事讲的比较好;在记录军事历史的人里,把密码故事讲的比较好――嘿嘿,田忌赛马跑的快嘛。。。反正,正面冲突那是绝对不敢的:)

正好,现在也开始回到密码了。老实说,这个比写军事历史更让我头疼:对于历史事件,可以任意地按自己行文需要罗列材料,也可以不断地变换讲述的角度和方式,总之写完以后肯定不会让人发现我是从哪里找来的资料,由着自己发挥嘛;可这密码,往往就是那么一行――咋换呢?换了不成骗子了?唉。。看到后文就会更加清楚,这个版权简直没法绕过去,谁让当年的电文就是那么写的呢。。呵呵,没办法,也苦恼着。。。

谢谢吴健兄,你的办法我试了。呵呵,也如你发出来的效果,是不行的。看来,还是语言有问题。没办法,谁让这个系列躲不开德军,躲不开德文,躲不开这俩点儿呢:)也谢谢你!

――――――――――――――――――――――――――――――

讲了这么多,我真是很高兴,因为――密码的故事终于该出现了,哈哈!这次扯的实在太远了,总算是绕回来了……

德国人很重视在皮卡迪平原及两河流域的这两次进攻:能不能毕其功于一役/两役,对于风雨飘摇的德国实在太重要了。于是,德军启用了由Fritz Nebel上校开发的全新的战地密码,也就是著名的ADFGX密码。

启用ADFGX的当天,新密电就已经被法军截获。但是,面对这个怪物般的密码,法军别说破译,就是看,都能把脑袋给默默看大了――这个时候更换密码,必然预示着后面德军将有大的动作。可这动作是什么呢?ADFGX呀ADFGX――这五字幽灵的背后,德军到底在你来我往地谈论着什么呢?……

而事实证明,德军的这个举动――战前更换密码,并且同时使用多种密码,特别是同时使用几种密码――还算是英明的。因为在启用新密码的第6天,也就是3月11日,另一种德军的战地密码,德国人称之为CHI-13的密本体制密码,被美国人破译了。令人惊讶的是,这个被破掉的密码更冤,――当天启用,当天被破!

为了说明德军密码被破的过程,在这里,有必要稍微介绍一下密本的概念。

这个密本有点象记录密钥的密码本,起的作用也类似,但是,还是有区别。简单地说就是:把常用的字词设置成数字组合或者字母组合,换言之,以另一种现发明的数字字母天书,来描述要传达的信息。

比如,要说The fighters will take off tomorrow(歼击机群将明天起飞),就要对照事先规定好密语的密本,一个个词或词组去替换。在这个例子中,按照1001n密本,我们可以查到The对应的是20119,fighters对应的是11077,take off对应的是00341,等等,这句明文就可以被变换为20119 11077 69045 00341 81662。

当然,这只是个很粗糙的例子。事实上,一个密本的构造是很费时间的,它几乎要考虑到所有可能用到的词和词组;更重要的是,不能让这些被替换的词或词组因为语言学的原因而出现频率的明显特征,进而被识破。为了更清楚说明密本的概念,下面我们就以一战末期的英国海军使用的一种密本来做个介绍。

1918年8月1日,英国海军开始使用新的SA密。这个SA密的安全性还是不错的,按现在能查找到的资料,直到当年第一次世界大战结束,它也没有被破掉。SA密采用双密本制,也就是说,记录密语要用两个本:第一个叫去本,第二个叫来本,分别对应去电和来电的加密。

之所以这样区分,是因为拍发电报时必然是用明文单词查找密本,变换成一组数字;而接到电文以后,就必须把数字们还原成明文;这样一来,为了方便查找起见,来本和去本的索引方式必然是不一样的:去本按字母顺序排列,而来本按数组顺序排列。打个不太恰当的比方就是,来本就好像是汉英字典,而去本就好像是英汉字典。

去本共341页,从数字、日期、电报编号、高级军官姓名、舰船名到轮船公司的密本索引,几乎是包括了所有海军可能用到的字词。来本更厚,达到536页,看起来就是一个五位数的电话姓名地址簿。

SA密特别规定,对一些明显出现频率比较高的词汇进行多名码替代。比如海军常要用到的ship,就有15种不同的数字组进行对应;甚至连ships,-ship等等,都另行规定了替代数字组。这样,74375和82414、09886看上去不同,实际上指的都是同一个词,那就是船(以上3组数字为1001n密本内容,可不是SA密本规定的哟,呵呵)。

――这就是说,不同的数字组可以对应同一个意思。

SA密还规定,同一数字组最多可以对应3个常用词或词组。比如,SA密规定:07640既可以表示eight(八),也可以表示fifth April(四月五日),还可以表示then Northward(然后向北),总共对应三个截然不同的词/词组。而为了区别这三个意思,密本上在07640后分别标注上A、B和C。这样一来,如果密文是07640 B,那么译电的水兵就知道,这里对方要告诉他的是07640的第二个意思,也就是fifth April。

――也就是说,同一数字组可以对应不同的意思。

一个意思可以对应不同的数字组,一个数字组也可以对应不同的意思――这就是所谓的多义码和多名码。在SA密中,同时采用多义码和多名码,目的自然是为了更好的保密。但是,这对构造密本提出了很高的要求,那就是不能出现歧义――换言之,不能让一份密文解出七八份明文来,而这些明文同时都符合密本的加密/解密规则。

为了加深大家对SA密的印象,这里罗列一下那个去本的第268列,跟船有关的多名码替代情况:

|A 10569 B \

|B 53472 C | Ship is

|C 03917 A /

|

|- 35613 A...Ship is not

|- 50968 C...Ship is not to

|- 06679 A...Ship is not to be

|- 18641 C...Ship is now-at

|- 42583 C...Ship is to

|- 10247 A...Ship is to be

|- 53180 C...Ship must

|- 07006 A...Ship must be

|

|A 51738 B \

|B 41759 C | Ship of

|C 10944 C /

一个船字翻来覆去变换如此,也真是亏了那些设计密本的秀才们了……而来本跟这类似,不同的是,排列是按照数字大小,比如-07750 A,-07751 A,-07754 B,-07755 A这样的顺序进行的,之后给出它们的释义。顺便说一句,这里提到的4个例子,按077列的规定,分别代表Dummy group,Rccurrences-of,Rcporting when she,Rush-es-ing的意思。(这里的第二、第三个例子R后面跟着的似乎应该是e吧?不知道为什么,呵呵)

这里大家可能会注意到:在使用的数字组中,有的开头是字母A、B或者C,而有的却是个短波折号“-”。这究竟又代表着什么意思呢?别急,我们后面会解释的:)

最后,SA密规定,发出的电报内容中,必须搀有占内容总量四分之一无意义的虚码。这个很容易做到:那几百页的密本里的数字组合并不是老老实实从00000一个个递增到99999的,比如刚才所提到的例子里,接着07751的,可不是07752,而是直接就跳到了07754。这样,中间被跳开的07752、07753就成了虚码。使用虚码,使敌人难以辨认到底那些才是真的信息,也增强了SA密系统的安全性。

现在我们来模拟一下水兵甲的发电文过程。

按照规定,在发正式的密文以前,他必须任意找一个虚码作为开头。比如,他找了实际上不对应任何意义的-07753 A;

之后他要发“ship is”,在去本中那么多可以对应的数字组中,他必须选择一个以A开头的数字组,比如A 10569 B,这时后缀变成了B;

再以这个B为线索,寻找对应明文第二个词/词组的数字组,也必须以B开头,比如B 53472 C,这时候后缀变成了C;

再以C为线索,确定第三个明文词/词组的对应数字组,比如C 03917 A;

…………

这样不断地把明文加密,一句话就变成了07460 A,A 10569 B,B 53472 C,C 03917 A。(当然,这只是随手举个例子,因为真这么连起来的话,句子根本就是不通的,呵呵)……总之,每个数字组的最后一个字母必须是下一个数字组的开头字母。而密本在设计时,就被要求肯定能够完成这样的使命;所以,不要担心找不到合适的数字组,它肯定就在密本中的某一页的某一行里。

SA密为什么要绕这么个圈子呢?我们有个预感,英国海军设置这个规则肯定不是自己跟自己逗着玩儿的――事实上,这些ABC的作用就是让水兵在它们的指引下,顺利地找到他们所需要的那行密文数字组。

而正式要发出电文的时候,这些ABC们是一个也不留的――这才是SA密比较有味道的一个特点。

换言之,水兵甲发给水兵乙的电文,只有一串串数字,什么A啊B啊C啊,电文中都是看不见的,类似这个样子:

07753 07460 10569 53472 03917 ……

接到电文的水兵乙知道,第一个07753必定是虚码,查了查来本之后,确定了它的后缀应该是A。07753本身没有任何含义,但是它后缀的A成了后面译电过程的线索。之后水兵乙看到第二个数字组,也就是10569。他把A加在前面,于是根据来本,可以找到唯一的满足条件的数字组:A 10569 B。再之后,根据这个B,找到唯一满足条件的第三个数字组:B 53472 C……以此类推,电文就被还原了。而SA密,也正是这么使用的。。。

这样,我们对密本的介绍就简单告一段落。在密码的应用中,密本一般都要跟各种加密手段相结合的,这样,即便对方击破了加密机制,还有密本这最后一道防线。当然比起加密机制来说,密本还是太简单了,只是个辅助手段而已。在商业上,倒是常常单独使用密本:本来嘛,又不是砍脑袋的事情,搞太复杂了哪里是为了迷惑对手,简直就是给自己找麻烦嘛。。。

这就又回到了加密的代价问题上,呵呵。关于这个就不多提了,本来嘛,愿意给自己的秘密加密到什么程度,那是加密方面自己的事情。只是,泄密以后,捶胸顿足地再后悔为什么以前要怕麻烦,那也是自己要担当的了。。。

接上面的话题,德军3月11日启用的新战地密码当天即被破译。

而面对这样的不可思议的事情,估计大家跟我的第一个反应都一样――其中肯定有蹊跷。虽然说战地密码出于便于使用的原因,一般而言安全强度都不是太大,但是起码也是用来传送军事情报的加密手段啊,哪里会脆弱到不堪一击的程度……如此看来,这个密码这么快就被破掉,绝对不仅仅是美国人神仙无比,同时必定也有德国人自己的原因。

事实也正是这样。

启用新密码后不到一个小时,德军X2电台向AN电台发出了按新密码加密的电文,时间是1918年3月11日0时40分:

00:25 CHI-13 845 422 373 792 240 245 068 652 781 245 659 659 504

从这里能看出来,X2电台是在00:25开始编码的,并且这是使用了新的战地密码编码的。

谁也没想到,收报的AN电台土鳖的要命:大概是没接到新密本,结果就在0时52分这么回复了X2电台:

CHI-13 OS RGV KZD。

这句OS,意思是Ohne Sinn――电文读不通;RGV的意思是“老的”;KZD的意思不明,但是按照破译人员的猜测,应该是“用密本加密发送”――这样一来,整句的意思应该就是:

CHI-13读不通,用老的密本加密发送。

这就好像我和小张正在议论老板实在有点混蛋,老板突然出现在小张背后――我住了嘴,小张还在唠叨。我赶紧给他使个眼色,而小张一脸不明白地说:你挤什么眼儿啊,怎么了?

很容易想到,这个挤眼儿本身就相当于加了密,但是被他这么一问,还必须得用他听的懂的话再说一遍,如果我真的愿意的话……这会有什么结果呢?我只好转脸对老板说,老板好!而到了这个时候,再傻的老板也能破译出来,我那个挤眼儿的意思就是:小张你缺心眼儿吧,老板就在你后头!

这个通俗的例子说明,有的话是不能再说第二次的,特别是,当你换了个第三者也能听懂的说法的时候――而为了让AN电台看懂,X2电台严重违反保密规定,又用旧的KRU密本来加密电报,并于0时57分再次发给了AN电台:

00:25 CHI-14 UYC REM KUL RHI KWZ RLF RNQ KRD RVJ UOB KUU UQX UFQ RQK

而这一切,都被美国的、陆军的、参谋总部的、情报部的、军事情报处的、无线电情报科――这名字太长了,还是用简写G.2.A.6吧――给截收到了。关于这个G.2.A.6,后文还有不少精彩故事,这里就暂时先不提了。

要命之处,就是那个旧的KRU密本。KRU密本是德军1917年6月开始启用的,由于密本里包含大量的多名码和空字符,并且所有密文都以字母K、R或U开头,协约国军队就把这个密本称为KRU密本。后来也出现了以S和A开头的密文,于是这个密本也就成了KRUSA密本。再后来,又加了三个变异的元音字母,就是A、O、U(还是没办法,这里的A、O、U上面得各加两个点儿),于是,KRUSA密本就成了KRUSA(A上有两点儿)密本了。

这种KRU密本,跟前面提到的SA密本有个共同点,也是采用双密本制。它的基本原理是利用三字母进行替换,这里就不细讲了。而这个KRU密本,早被G.2.A.6给部分破译了――悲剧,也就这么发生了。。。

兵家大忌啊!美国人迅速比对了这两份极端难得的、使用新旧密本加密同样明文的电报。由于美国人已经部分破译了旧的KRU密本,这时候他们要做的事情只有以下三件:

用已经掌握的KRU密本,对X2电台第二份电文,即CHI-14进行解密;

将解密得来的明文与CHI-13的密文进行对照;

按照逻辑推导出CHI-13的加密规则。

反正电文中的电台呼号、格式、电文都是一模一样的,X2电台为了让AN电台明白,甚至连第一份电文的发文时间都没更改,还是00:25――在这一对儿密码土鳖的大力协助下,美国人很快就揭穿了新密本的本来面目――不到一个小时的时间,这种使用新密本的密电已经惨遭破译。

就在当天,用了不到一个小时!现在罗列出这份被破解的电文:

845 422 373 792 240 245 068 652 781 245 659 659 504

AN [?] Bn. 2 h i r sch w i t t e

之后,美国人在继续进行密码分析的同时,也将破译结果分别通知法国人和英国人。大家齐心协力,通过大量截收德军电文并分析,在两天之内就把这个密码的根基,也就是它的原始密本给彻底破译掉了。而德军所有使用这个新密码加密的电文,协约国军队现在都可以读通了!

顺便说一句,这次美国人使用的密码分析方法,正好是1001n在密码ABC一文中所提到的第二种,已知明文攻击。不过比起一般意义上的的已知明文攻击,更让美国人舒服的是,这次他们有了基本完整的密文和明文。按某种流行的说法,技术含量稍微低了那么一点点――当然,再低我也破不出来――至少比起后文即将提到的Painvin破译,美国人的确是捡了个大便宜……

这就是愚蠢的代价:再好的密码设计,也敌不过操作人员的失误,和对保密体制有意无意的违反――不管你是偷懒,是意外,还是漫不经心――只要你错过一次,你就再也没有挽回的机会了!

第一次世界大战对于密码学的发展贡献良多,其中特别重要的一个教训,毫不夸张的说,可以算是用鲜血染成、用生命换来的:

必须让密码使用人员遵守铁的纪律。

正如一战中,法国陆军部密码局总司令部密码处负责人,Marcel Givierge少校所说的那样:

要么很好加密,要么完全不加密。以明文发报,你只是给敌军一份情报,而你知道这是哪份情报;但加密的不好,你就会使敌军读通你的全部电报以及你友军的电报。

――还是把话题拉回ADFGX密码吧,呵呵,不知不觉间,又给扯远了……

【原创】密码传奇(一):1、西线屠刀背后的五字幽灵

http://www.cchere.net/article/404818

【原创】密码传奇(一):2、血河洗刷的人间地狱

http://www.cchere.net/article/405853

元宝推荐:ArKrXe,

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


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

Copyright © cchere 西西河