码书:编码与解码的战争
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

密码术的圣杯

第一次世界大战见识到密码分析家一连串的胜利,并在齐玛曼电报的破译达到最高峰。自从维吉尼亚密码法在19世纪被破解后,解码专家便一路占上风。然而,就在大战末期,编码专家正感到极度绝望时,美国的科学家发展出惊人的突破。他们发现,维吉尼亚密码法可作为一种更强的新密码法的基础。事实上,这种新密码法可以提供完美的保密安全。

维吉尼亚密码法的弱点在于它的循环本质。假使钥匙单词是5个字母长,则每逢5个字母就会用到同一套密码字母集。解码专家一旦辨识出钥匙单词的长度,就能把密码文视为5个单套字母密码法的系列组合,再以频率分析法逐一破解。然而,若使用更长的钥匙单词会怎么样?

假设有一篇1000个字母的明文用维吉尼亚密码法加密,然后我们要分析它加密后的密码文。如果加密这篇明文的钥匙单词只有5个字母长,译码的最后一项步骤只需把频率分析法应用到5套200个字母长的密码文,这很简单。可是假使钥匙单词是20个字母长,最后一项步骤就得对20套50个字母的密码文做频率分析,这可就难多了。再假设钥匙单词长达1000个字母,你就得对1000套1个字母的密码文做频率分析,这是完全不可能的。换句话说,如果钥匙单词(或钥匙语)的长度跟信息相同,巴贝奇和卡西斯基所研发的密码分析技术就派不上用场了。

没人会反对使用一个跟信息等长的钥匙单词,只是编码者就得编制一个冗长的钥匙。这则信息若有数百个字母,加密钥匙就也要有数百个字母。与其凭空编造一个冗长的钥匙,不如用一首歌的歌词之类的会轻松多了。或者,编码者也可以挑出一本赏鸟书,再挑选一些鸟的名字,随意串连起来当钥匙。可是,这种偷懒取巧的钥匙有根本性的缺点。

在下面的例子里,我用维吉尼亚密码法和一个与信息等长的钥匙语来产生一段密码文。援用所有之前介绍过的密码分析法来破解都会失败。尽管如此,这则信息仍旧破解得了。

这套新的密码分析系统先假设密码文里含有一些常用的词,例如the。再来,我们把the这个词随意置放在明文的几个位置上,如下所示,然后再推测什么样的钥匙字母才能把the转化成对应的密码文。例如,我们假设the是明文的第一个单词,那么这个钥匙的前三个字母应该是什么?这个钥匙的第一个字母会把t加密成V。我们去维吉尼亚方格查看以t开头的直栏,往下找到V,再往左看得知这一行字母的第一个字母是C。重复这个程序,找出把h、e加密成H、R的钥匙单词字母,即可得出钥匙的头三个字母的候选者:CAN。这些都是根据the为明文第一个单词的假设所得出来的。我们把the放到其他几个位置去,再推测对应的钥匙字母。(请参阅表9的维吉尼亚方格,查看每个明文字母和密码文字母的关系。)

我们已经把the随意摆在明文的三个位置,而得出三个加密钥匙片段元素的假设。现在,我们怎么知道有没有哪一个the的位置是正确的?我们猜测,这把加密钥匙是由有意义的单词组成的,若是如此,这一点对我们很有利。位置错误的the很可能会衍生出一串随机组合的钥匙字母。然而如果放在正确的位置,可能就会衍生出一串有意义的钥匙字字母。例如,第一个the衍生出钥匙字母CAN,显得很有希望,因为它是一个完全合理的英文音节。所以,这个the很可能是在正确的位置。第二个the则衍生出BSJ,一个非常怪异的辅音组合,表示第二个the很可能是错误的。第三个the衍生出YPT,一个不太寻常的音节,但值得进一步推敲。如果YPT真的是钥匙的一部分,那一定是在较长的单词里。可能的候选单词只有APOCALYPTIC、CRYPT、EGYPT,以及这几个单词的衍生单词。怎么样才能确定这类单词是否是钥匙的一部分呢?我们可以把这三个候选单词轮流套进钥匙里的适当位置,导出对应的明文:

如果这些候选单词并非加密钥匙的一部分,大概只会导出一段无意义的明文。可是,如果其中一个的确是钥匙的一部分,它所导出的明文应该会有意义。APOCALYPTIC套进加密钥匙里,只得出完全无意义的明文。套用CRYPT,则得出cithe,也不是能读得出意义的明文片段。可是,套用EGYPT所得出的字母组合atthe就很有希望了,它可能代表at the(在……)两个单词。

现在,我们且暂时假设EGYPT真的是钥匙的一部分。也许这把钥匙是由国家名字组成的。若是如此,从第一个the所得出的钥匙片段CAN,很可能是CANADA的一部分。要检验这个假设,就以CANADA和EGYPT这两个假设当前提,求出更多明文字母:

看来,我们的假设蛮合理的。CANADA所导出的明文是themee,很可能是the meeting(会议)的一部分。既然我们又多推衍出一些明文字母——ting,我们也可以反推出它们对应的钥匙部分:BRAZ。它们当然是BRAZIL的开头部分啰。把CANADABRAZILEGYPT这串组合套进钥匙里,即可得出下列的解译结果:the meeting is at the ? ? ? ?(会议在?? ? ?举行)。

为了找出明文的最后一个单词——这场会议的地点,就得完成这只钥匙。最好的策略是一一检验所有可能的国家名称,看看会得出怎样的明文。钥匙的最后一段套进CUBA时,才能得出有意义的明文dock(码头):

所以,一把跟信息一样长的钥匙并不足以保证密码的安全。上述例子不安全的缘由是,加密钥匙是由有意义的单词所组成的。我们先在明文里随意插放几个the,求出对应的钥匙字母。然后,因为这些钥匙字母看起来很像是有意义的单词的一部分,我们就知道the放对地方了。接下来利用这些钥匙碎片来推测完整的钥匙单词,得到更多信息碎片,再把这些信息碎片扩展成完整的单词,如此循环下去。此种在信息和钥匙之间来来回回的分析过程之所以能成功,全因为钥匙本身有一定的结构,是由可辨识的单词组成的。然而,在1918年,编码专家开始实验没有结构的加密钥匙。结果就是一种无法破解的密码。

世界大战接近尾声时,美军密码研发部门的主管约瑟夫·茅博格少校(Major Joseph Mauborgne),引进随机钥匙的概念——钥匙的组成元素不再是可辨识的单词,而是随机组合的字母。他主张采用这类随机钥匙,配合维吉尼亚密码法,可提供空前的安全度。茅博格系统的第一步骤是编纂一本厚达数百页的密码钥匙簿,每一页都是一把好几行随机排列的字母所组成的独特钥匙。这种密码钥匙簿制成一式两份,一份给发信人,一份给收信人。加密信息时,发信人就拿第一页的钥匙,套用维吉尼亚密码法。图30列示三页密码钥匙(实际的钥匙簿每一页都会含有数百个字母),以及用第一页随机钥匙加密的信息。收信人使用相同的钥匙,逆向应用维吉尼亚密码法,就能轻易地解译这段密码文。这则信息成功发送、接收、解译后,发信人和收信人就把这一页钥匙销毁,再也不用它。要加密下一则信息时,就套用钥匙簿的下一页随机钥匙,随后亦将它销毁。因为每把钥匙都只使用一次,这套系统就被称为单次钥匙簿密码法(one-time pad cipher)。

表9:维吉尼亚方格

单次钥匙簿密码法克服了之前的所有弱点。假设如图30所示,加密好attack the valley at dawn(拂晓时进攻山谷)这则信息后,利用无线电传送出去时被敌人拦截到,落在敌方密码分析家手里。这位密码分析家尝试解译它时会碰到的第一个障碍是,随机钥匙绝对没有重复性,所以巴贝奇和卡西斯基的方法都无法破解这种单次钥匙簿密码法。接下来,他可能另寻其他途径,尝试在许多地方放进the这个试验单词,推测对应的钥匙片段,就跟我们在尝试解译前一则信息时所做的一样。他若试着把the放在信息的开头,这个位置不对,他所推衍的对应钥匙片段会是WXB,是一串没有章法的字母。他若把the放在这则信息的第7个字母,刚好放对位置了,他所得出的对应钥匙片段会是QKJ,仍是一串没有章法的字母。换句话说,这位密码分析家根本无法辨别,试验的单词到底有没有放对地方。

在绝望之际,这位密码分析家或许会考虑彻底搜查所有可能的钥匙。这段密码文有21个字母,因此他知道这把钥匙也有21个字母。这表示说,他有大约500,000,000,000,000,000,000,000,000,000把钥匙要测试。这根本超乎人力乃至机械能力的范围。而且即使他能测试所有的钥匙,还有一个更大的障碍在等着他。检测过每把可能的钥匙后,他当然会揭露正确的信息,然而在此同时,他也会得出所有错误的信息。例如,把下面这把钥匙套到同一段密码文后,可得出一则完全两样的信息:

图30:三张,亦即三种单次钥匙薄密码法的可能性钥匙。这则讯息是用第一张加密的。

若能测试所有不同的钥匙,每一则意思上说得通的21个字母的信息也都会随之出现,这位译码者将无法分辨其中何者才是正确的。如果这把钥匙是由一系列单词或词组所组成,他不会有这种难题,因为错误的信息势必对应着无意义的钥匙,正确的信息则会对应一把有意义的钥匙。

单次钥匙簿密码法的安全性全归功于钥匙的随机性。这种钥匙把随机性也注入密码文里,密码文既是随机的,也就没有特定模式、没有结构、没有密码分析家可以攀住的东西。事实上,数学可以证明密码分析家无法破解单次钥匙簿密码法所加密的信息。换句话说,单次钥匙簿密码法不单只是被视为无法破解——就像19世纪时人们对维吉尼亚密码法的错误信心——而且它是真的绝对安全。单次钥匙簿密码法可以保证秘密书写的绝对安全:它是密码术的圣杯。

编码专家终于找到一套无法破解的加密系统。然而,单次钥匙簿密码法的完美性并未终止保密法的追寻。事实上,它几乎不曾被派上场。理论上它是很完美,实际使用上则有缺陷,因为它有两项根本性的问题:第一,编造大量的随机性钥匙有实际困难。军队每天大概得收发数百则信息,每一则都有数千个字符,亦即无线电通讯员每天所需要的钥匙量,相当于数百万个随机排定的字母。供应这么多随机组合的字符串,是件不可低估的庞大工作。

早期有些编码专家相信,他们可以在打字机上随便乱打,以得出大量的随机钥匙。然而每当他们尝试这么做时,打字者总是习惯左手按一个键、右手再按一个键,如此两边轮番打出字母。这种方法或能快速编造加密钥匙,只是如此编造出来的字符串具有结构,而不再是随机的——假使打字员打了位在键盘左方的字母D,我们可以预期他下一个字母大概会来自键盘右方。加密钥匙若要有真正的随机性,那么紧跟在一个位于键盘左方的字母后面的字母,来自键盘左方的概率应该跟来自右方的概率一样高。

编码专家意识到,编造随机钥匙需要大量的时间、功夫与金钱。利用自然的物理方法,例如有真正随机特性的放射线,可以编造出最好的随机钥匙。编码专家可以在工作台上放一块放射性物质,用盖革计数器(Geiger counter,放射线测定器)侦测它的放射情况。放射线的发出,有时候是非常快速地一个紧接一个,有时候却停顿很久——每一次放射的间歇时间都是随机、无法预估的。在盖革计数器上连接一个显示器,字母集的字母以固定的速率在显示器上快速轮番出现,每侦测到放射线,就暂时冻结。冻结在显示器上的字母,就取作随机钥匙的字母。显示器继续运转,字母集的字母再次快速循环,直到下一次随机发出的放射线使它停止,冻结在显示器上的字母又再被加进钥匙里,如此不断重复下去。这种装置保证会编造出真正随机的钥匙,可是对日常的密码应用而言,它很不实际。

就算能编造足够的随机钥匙,还有第二个问题得解决:分送这些钥匙。想象一下,战场上有数百位无线电通讯员都是同一个通讯网络的成员。首先,所有成员都必须有相同的单次钥匙簿。再者,发送新钥匙簿时,必须同时发给每一名成员。最后,每名成员必须保持同步状态,才能确保在正确时刻使用正确的钥匙。真要广泛使用单次钥匙簿密码法,整个战场会到处都是信差和簿记员。此外,敌人只要截获到一组钥匙,就会危及整个通讯系统。

重复使用钥匙簿以减少编造和发放钥匙的困难,是诱人的建议,却是密码术的首恶。重复使用钥匙簿会让敌方的译码专家有机会解译出信息。(破解两则由同一把单次钥匙簿钥匙加密的密码文的技巧详述于附录G。)总之,使用单次钥匙簿密码法不可抄捷径。发信人和收信人一定得为每一则信息使用一把新的钥匙。

单次钥匙簿密码法只能供那些需要绝对安全的通讯,且又负担得起钥匙的编造与发送成本的人使用。例如,美、俄总统之间的热线就是利用单次钥匙簿密码法来防护的。

理论上很完美的单次钥匙簿密码法,却因为实用上的缺点使得茅博格的构想永远无法应用于战场上。第一次世界大战的余波与密码通讯的失利,促使密码专家继续寻找可以在下一次冲突派上用场的实用系统。幸好对编码者而言,他们没等太久,就研发出一项突破,一种可以在战场上重建安全通讯网的方法。为了加强密码,编码者被迫抛弃他们的纸笔作业方式,改为利用最新科技来加密信息。