图7-1 罗伯特·H. 索利斯(1894—1984)
到了20世纪40年代,关于死者通过密码与世人交流的故事仍在继续。这一次,故事的主角是剑桥大学特别研究员罗伯特·H. 索利斯(Robert H. Thouless)。索利斯创造了一条加密的信息,他认为,在没有密钥的情况下,任何人都无法破解这条信息。然后,索利斯计划在自己死后尝试将这套密钥传送给还活着的人。索利斯认为,如果自己死后有人能够获得这套密钥,就足以证明死者确实能与这个世界交流。
我将索利斯发表在《心灵学研究学会会刊》( Proceedings of the Society for Psychical Research )上的第一段加密信息称为“密码A”。下面我将密码A的全文复制如下 :
CBFTM HGRIO TSTAU FSBDN WGNIS BRVEF BQTAB QRPEF BKSDG MNRPS RFBSU TTDMF EMA BIM
关于这段密码,索利斯只透露了以下信息:
这段密码使用了一种著名的加密方式。这种加密方式包含一个关键词,我希望,在我死后,我还能记得这个关键词。我从未把这个关键词告诉任何人,也不准备在我的余生中告诉任何人。并且,在完成这段密码以后,我很快将所有相关文件都销毁了。
索利斯并非不知道世界上有“密码分析”这种技术,在表达了对有人在他生前通过读心术来获得关键词的担忧以后,他写道:
进一步的怀疑是:是否无法通过理性的推断来找到这个关键词,因为人们普遍相信,技术高超的密码专家能够在不知道关键词的情况下破译任何加密信息,只要花上足够长的时间。然而,除非满足一些特定的条件,否则上述想法是没有用的。如果密码专家能够破译一段关键词未知的密码,那么要么这种密码是一种简单密码(比如单套字母替代密码),要么密文长度要足够长。事实上,非密码专家也能够破译用简单替代法加密的短信息,人们常常把这种信息作为一种谜题来逗孩子玩。而如果待破解的是一段用更复杂的加密方法加密的长段信息(或者若干段短信息),在不知道关键词的情况下破译这段信息就要复杂得多了。但是,据说只要给密码专家足够长的时间,他们就能够在不知道关键词的情况下破译出用大部分加密方法(注意并不是全部加密方法)加密的信息。我给出的这段密码既不是用简单的替代或者换位重排方法加密的,长度也不够长,所以没有办法通过上述针对简单密码的破译方式来破译。我认为,在不知道关键词的情况下,即使是密码专家也没有办法解开我的密码。而只要知道这个加密系统的关键词,任何有基础密码知识的人都能够很轻松地解开这段密码。
虽然索利斯不相信简单的密码分析技术能够破解自己的密码,但他也考虑到了另一种可能性:也许某人可以通过某种与他的原意不同的方式将他的密码翻译为一段有意义的信息。[读者可以回忆一下,在《未解之谜(上)》中,伏尼契手稿、多拉贝拉密码,以及黄道十二宫杀手的340密码都出现过一些错误的解法。]为了防止这种情况的发生,索利斯透露,他的这段密码“引自莎士比亚的一出戏剧”。 索利斯相信,即使有人能找到某种有意义的错误解法,这种解法也不太可能正好出自莎士比亚的戏剧。
在处理完上述所有不确定因素以后,索利斯还对另外一种可能性做好了准备,也就是:尽管索利斯尽一切努力要记住这个关键词,但他仍然有可能在死后记不起来。为了防止这种情况的发生,索利斯将密码的关键词放在一个密封的信封中,并让心灵学研究学会负责保存。按照索利斯的要求,只有在他死后没有人能通过通灵术解开这段密码的情况下,才可以打开信封查看里面的内容。
索利斯没有想到的是,这个信封根本就没有打开的必要。因为在索利斯还活着的时候,这段密码就已经被解开了。一位身份不明的“密码专家”将索利斯给出的密码A当作一项挑战,并利用业余时间解开了这段密码,只花了两个星期的时间。
事实上,这已经不是索利斯第一次在密码的问题上栽跟头了。在密码A之前,索利斯还创造过另外一段密码,这段密码被德尼斯·帕森斯(Denys Parsons)先生解开了。但是由于这段密码并没有公开发表,所以索利斯也就没有因为密码被破译而在公众面前出丑。 在索利斯的一篇论文中,他致谢了“D. 帕森斯”和另外一位不具名的人士,感谢他们告诉他滚动密钥密码是可以破译的。从上述内容我们可以看出,索利斯的第一段失败的密码是一种滚动密钥密码。在本书的第8章中,我们将详细讨论滚动密钥密码的解法。总之,密码专家只用了48小时就破译了他创造的滚动密钥密码。
虽然索利斯并没有明确提示密码A的加密方法,但是我们知道密码A属于“普莱费尔密码”(Playfair Cipher)。加密一段普莱费尔密码会用到一个5×5的网格,加密者要在这个网格中放入被打乱的英文字母表。为了将英文字母表打乱,加密者需要挑选一个关键词或者关键短语。比如,如果关键词是“ MACHETE ”(大砍刀)的话,字母表就是以下的样子:
为了把26个英文字母塞进5×5的网格中,通常会将字母 I 和字母 J 合并在一起,或者干脆省略字母 J 。还有一种处理这个问题的方法是省略出现概率最低的字母 Z 。
为了更好地向读者解释如何用上述网格来加密信息,让我们来考虑以下的这条信息:
IT’S TOO HOT FOR CLOTHES. (天太热了,穿不住衣服。)
加密的第一步是,如果任何两个相同的字母连在一起,就必须在这两个字母之间加上一个 X 。在上面这段信息中,“ TOO ”中出现了“ OO ”两个相同字母连在一起的情况,因此我们将“ TOO ”变为“ TOXO ”。至于为什么要进行这种操作,继续读下去你就会明白了。
接下来,我们要把这段信息中的字母两两组合成对:
IT ST OX OH OT FO RC LO TH ES
接下来,我们用一种简单的规则来加密每一对字母。这种规则取决于字母在5×5的网格中的相对位置。在5×5的网格中,两个字母的位置关系一共有以下3种可能性:
1. 两个字母在同一行。
2. 两个字母在同一列。
3. 两个字母既不在同一行,也不在同一列。
我们的第一对字母 IT 属于第2种情况。在这种情况下,我们用每个字母下方的字母来替代原字母,也就是 IT 被加密为 PI 。
我们的第2对字母 ST 属于第3种情况。在这种情况下,我们首先在上述5×5的网格中找到包含字母 S 和字母 T 的最小矩形,然后再用矩形另外两个顶点上的字母来替代原始字母。我在下面的这个网格中用黑体字标出了这个矩形的4个顶点,并且在替代原始字母的两个字母下加了下划线,这样读者就能清楚地看到这个小小的矩形了。
那么,替代原始字母 ST 的密文字母究竟应该是 FP 还是 PF 呢?普莱费尔密码的加密规则规定,与明文中的第1个字母在同一行的密文字母应该先出现。也就是说, ST 应该被加密为 PF 。如果我们需要加密的这对明文字母是 TS ,那么对应的密文字母就应该是 FP 。
接下来,我们可以继续根据上述规则加密接下来的几对字母,得到密文 LZ 、 NE 、 IG 、 GN ,以及 XD 。
直到加密到 LO 这对字母时,才出现了以上的第1种情况。字母 L 和字母 O 出现在网格中的同一行,在这种情况下,我们用原始字母右侧的字母来代替原始字母,于是字母 L 就变成了字母 N 。但是在字母 O 的右侧已经没有字母了,因此我们只能再回到这一行的第一个字母(就像在“吃豆人”游戏里一样),也就是用字母 I 来代替字母 O 。这样,原始字母 LO 就被加密成了 NI 。
经过上述这些加密步骤以后,完整的密文信息如下:
PI PF LZ NE IG GN XD NI FM HU
我们之所以要在两个相同的字母之间插入字母 X ,是为了防止第4种情况的产生。两个相同的字母连在一起时,既符合第1种情况,又符合第2种情况,因此根据规则无法明确知道究竟是应该用哪种规则加密。此外,在加密的时候,消除两个相同字母连在一起的情况一般来说都是一种比较好的处理方式!
由于这种普莱费尔密码在加密的时候会以两个字母为单位进行替换,所以这种密码又叫作“双字母替代密码”(digraphic substitution cipher)。虽然双字母替代密码已经比单套字母替代密码前进了一大步,但这仍然是一种比较简单的加密方式。这种加密方式的弱势在于:虽然两个相同的字母对有时会被加密成不同的密文字母——是否会出现这种情况主要取决于相同字母对出现在信息的何种位置(参见以下的例子),但是,在大部分情况下,相同的字母对都会被加密成同样的密文字母。因此,就像我们可以通过单字母概率分析法来破译MASC密码一样,我们也可以通过双字母概率分析法来破译这种双字母替代密码。
例子:丹尼·特乔(Danny Trejo)有句名言——“ EVERYTHING GOOD THAT HAS HAPPENED TO ME HAS HAPPENED AS A DIRECT RESULT OF HELPING SOMEONE ELSE. ”(发生在我身上的所有好事都是我帮助别人所产生的直接结果。)
下面让我们来用双字母替代密码的方式给这句话加密。首先,我们在连续出现的两个相同字母之间插入字母 X ,这样我们就得到:
EVERYTHING GOXOD THAT HAS HAPXPENED TO ME HAS HAPXPENED AS A DIRECT RESULT OF HELPING SOMEONE ELSE
接着我们把字母分成两两一对,得到:
EV ER YT HI NG GO XO DT HA TH AS HA PX PE NE DT OM EH AS HA PX PE NE DA SA DI RE CT RE SU LT OF HE LP IN GS OM EO NE EL SE
由于把字母两两组成一对的方式不同,在这段话中出现过两次的单词“ HAS ”被加密成了两种不同的形式。但是,单词“ HAPPENED ”也出现了两次,而且两次都被加密成了同样的密文。不需要完成对整段话的加密,我们就可以看出这是双字替代密码系统的一个弱点。如果破译密码的人能够准确地猜出某个多次出现的单词,他就非常有可能把这个词和重复出现的密文字符匹配起来。以上述发现作为基础,密文余下的部分也将被破解。
不管索利斯究竟对破译密码的技巧有多少了解,他都非常清楚地表示:因为他给出的密文信息太短,所以所有这些密码破译的技巧都不适用于他的密码。然而,索利斯的这种想法是错误的。虽然索利斯既没有透露破译密码的专家是谁,也没有透露该专家究竟是用何种技巧破译这段密码的,但是,通过观察,我们可以发现索利斯的这段密码中有一些弱点,这些弱点可能会帮助密码破译专家破解这段密码。
我们观察到的第一个问题是,虽然加密者可以用任意关键词打乱字母表,但是许多关键词中并不包含 V 、 W 、 X 、 Y 、 Z 这几个字母。如果加密者选择的关键词中不包含上述几个字母,那么网格的最后一行就会保留这几个字母的原始顺序。也就是说,当加密者使用不包含 V 、 W 、 X 、 Y 、 Z 这几个字母的单词作为关键词时,网格的形式如下:
打“ ? ”的位置上的字母目前尚不明确,然而,我们已经知道了网格中20%的字母的正确位置。密码分析师有时会假设双字替代密码的网格以上述形式出现,这实际上是在赌加密者选择的关键词中不包含 V 、 W 、 X 、 Y 、 Z 这几个字母。在索利斯的密码中,这个赌注下得很对,因为索利斯选择的关键词中确实没有这几个字母。
事实上,仔细观察密码A以后,我们还能看出其他一些可能性。密码A的密文如下:
CBFTM HGRIO TSTAU FSBDN WGNIS BRVEF BQTAB QRPEF BKSDG MNRPS RFBSU TTDMF EMA BIM
我们把以上密文中的字母两两组成一对,就得到:
CB FT MH GR IO TS TA UF SB DN WG NI SB RV EF BQ TA BQ RP EF BK SD GM NR PS RF BS UT TD MF EM AB IM
我们可以看出,有些双字母组合( BQ 、 EF 、 SB 以及 TA )出现了两次。这些双字母组合很可能与正常英语中高频出现的双字母组合相对应。虽然只有经过多次尝试才能把这些双字母组合与正常英语中高频出现的双字母组合匹配起来,但密码分析师们是非常有耐心的。此外,在这段密码中至少还有另外一处弱点能够帮助密码分析师攻破这段密码。
在这段密码的密文中,出现了一些字母顺序相反的双字母组合。比如,既有 BS ,又有 SB 。在正常英语中,某些字母组合常常以一种顺序出现,却极少(或者从来不)以相反的顺序出现,比如 QU/UQ 这两种字母组合。而 ER/RE 这两种组合则都会在正常英语中高频出现,因此这是两种在英语中十分特别的字母组合。根据这一点,密码的破译者可以合理地假设这段密码中的 BS 代表 ER ,而 SB 代表 RE 。当然情况也可能正好相反(也就是 BS 代表 RE ,而 SB 代表 ER )。事实证明,在这段密码中,第一种假设是正确的。研究字母顺序相反的字母组合是破解许多加密系统的一种很有用的方法。在《未解之谜(上)》的第5章中,我曾指出这种密码分析技巧可能会帮助我们破译亨利·德博斯尼斯留下的未解之谜。
虽然我们已经发现了索利斯密码中的3处弱点,但距离我们完全破译这段密码还有很远的距离。从这3处弱点到最终的答案之间有多条不同的路径,破译这段密码的专家很可能会因为一些错误的猜测而不得不走回头路(毕竟破译这段密码用了两个星期的时间)。以上这些分析只是为了向读者展示在破译这段密码时可能采取的初始步骤。从上面这些分析中,读者也可以看出,这段密码并没有索利斯想象的那么安全。
最终,这名密码专家发现,索利斯选择的关键词是“ SURPRISE ”(惊喜)——这就是索利斯打算在自己死后通过通灵的方式告诉世人的关键词。索利斯认为,有了这个关键词以后,世人就能够很容易地破译出自己创造的这段密码了。有了这个关键词,我们就可以构建出以下这个用于加密或解密的网格:
有了这个网格,我们就可以轻松地破译密码A。密码A的破译结果如下:
密文: CB FT MH GR IO TS TA UF SB DN WG NI SB RV EF BQ TA
明文: BA LM OF HU RT MI ND SG RE AT NA TU RE SX SE CO ND
密文: BQ RP EF BK SD GM NR PS RF BS UT TD MF EM AB IM
明文: CO UR SE CH IE FN OU RI SH ER IN LI FE SF EA ST
加入正确的空格和标点符号以后,我们就得到以下结果:
BALM OF HURT MINDS GREAT NATURE’S X SECOND COURSE CHIEF NOURISHER IN LIFE’S FEAST.
(抚慰伤痛思绪的香膏,大自然的第二道菜,生命筵席的主要营养。)
上面这段信息中的字母 X 只是为了分隔两个连续出现的字母 S 而加入的。果然,这段信息引自莎士比亚的戏剧——《麦克白》,我帮读者找到了这句话的上下文,并且摘录如下:
将劳心纠结的衣袖编结整齐的睡眠,
那每天生命的死亡,酸楚劳碌后的沐浴,
抚慰伤痛思绪的香膏,大自然的第二道菜,
生命筵席的主要营养。
索利斯知道,如果密文足够长,这种普莱费尔密码是比较容易破解的。但是他认为,自己给出的这段密码只有65个字母,这么短的信息应该是安全的。不管是谁破译了索利斯的密码,它都不是被成功破译的最短的普莱费尔密码。如果有“被成功破译的最短的普莱费尔密码”这项纪录的话,保持纪录的人应该是阿尔夫·蒙日(Alf Mongé)。
蒙日出生在挪威,他在挪威度过了生命的前19年岁月。然后,他来到美国并参了军。在第二次世界大战期间,蒙日在伦敦为英国政府工作了很长时间。为了表彰他的贡献,英国政府为他颁发了大英帝国勋章。在战争爆发前的1936年,蒙日曾经破译过一段只有30个字母的普莱费尔密码,这段密码是在1933年被当作一项密码挑战而公布出来的。此外,蒙日还能在30分钟内破译很短的普莱费尔密码,这段密码仅比索利斯的密码短一点儿(长度是50~60个字母)。
在第5章中,我们曾经解释过,对于一种给定的加密系统,密文必须足够长,才能保证解密的过程不会给出多种有意义的明文信息。读者可以回忆一下,在《未解之谜(上)》第5章中我们给出了“唯一点”的概念,唯一点的公式写作: U = log 2 ( K )/ D ,其中 U 代表唯一点的数值, K 代表可能密钥的数量,而 D 代表这段信息中单位字母的冗余度。要把这个公式运用到普莱费尔密码系统中,我们首先需要决定究竟可以以多少种方法将字母表打乱并放入5 × 5的网格中。如果我们规定关键词必须是一个真实的英文单词,那么 K 的值取决于加密者在选择关键词时使用的词典中究竟有多少个单词。在极端情况下,我们假设加密者选择的词典是1989年出版的《牛津英语词典》第二版,这一版的《牛津英语词典》共有20卷,全书总重62.6千克。这本词典中一共收录了615 100个单词。 我们把615 100这个数字代入上述公式,就得到 U = log 2 (615 100) /0.7 ≈ 27个字母。事实上,普莱费尔密码的实际唯一点数值比27还要小,因为一些不同的关键词会构建出完全一样的加密网格。比如,Care和Career这两个关键词对应的网格就是完全一样的。假设网格中的字母可以按任意顺序排列,考虑字母顺序的所有情况,我们则会得到: U = log 2 (26!) / 0.7 ≈ 126个字母。由此我们可以看出,密钥空间的大小是非常重要的!
在设计现代军事密码时,最重要的一条设计标准就是:密码的唯一点数值必须超过用这种加密系统加密的信息的长度。