维吉尼亚密码法之前的传统替代式密码法,均属于单套字母密码法,因为整则信息只使用一套密码字母来加密。相对地,维吉尼亚密码法则被归类为多套字母密码法(polyalphabetic cipher),因为它在一则信息中就动用了数套密码字母。它的牢固难破,便是来自于多套字母的特点,但也正因为如此,使得它的使用程序复杂很多。应用维吉尼亚密码法所需的额外功夫让很多人打退堂鼓。
在17世纪,对一般的用途而言,单套字母密码法便已足够。如果你要防备仆人阅读你的私密通讯,或是预防配偶偷窥你的日记,这种老式的密码法是最理想的。单套字母密码法使用起来又快又简单,而且用来防范没受过密码分析训练的一般人绰绰有余。事实上,简易的单套字母密码法以多种形式通行了好几世纪(请参阅附录D)。至于较严密的用途,像是安全至上的军方与政府通讯,单纯的单套字母密码法就不太适当了。专业的编码者需要更好的武器,才足以对抗解码高手。可是多套字母密码法实在太复杂,所以他们仍旧不怎么愿意采用。军事通讯最讲究的是迅速和简易,而外交部门每天可能要发送、接收数百份函件,时间是至关重要的。因此编码者努力寻找一个中庸的方法,一种比单纯的单套字母密码法难破解,但又比多套字母密码法容易使用的密码法。
众多候选方案中,有一种相当有效的方法称为同音替代式密码法(homophonic substitution cipher)。这种密码法的特色是,每个字母可有数个替代符号,替代符号的数目多寡与字母本身的出现频率成正比。例如,字母a在英文的出现频率大约占8%,所以编订包含100个符号的密码集时,我们就指定八个符号来替换a。编写密码时,每碰到a,就随机从这八个符号中任选一个来替代。编完密码后,每个符号在密码文里的出现频率都应该在1%左右。同样地,b的出现频率大约占2%,我们就只指定两个符号给它。编写密码时,每碰到b,就任选两个符号之一来替代。最后这两个符号在密码文里的出现频率仍然应该各占1%左右。依此方法为每个字母一一指派不同数目的替代符号,一直到Z为止。Z的出现频率很低,就只分配到一个符号。表5的范例是用两位数的数字来组成密码集,每个明文字母,依其出现频率分别有一至十二不等的替代符号。
我们可以说,分配给字母a的所有二位数数字在密码文里都代表同一个音,也就是字母a的发音。同音替代式密码法的英文名称就是这么来的;希腊文的homos意为“相同”,phone意为“音”。提供数个替代符号给常用字母,是为了让每个密码符号的出现频率大致相等。若用表5的密码符号集来编码,整篇密码文的每个数字出现频率大约都会是1%。既然没有任何符号比其他符号更常出现,任何借助频率分析法的破解攻势必定会无功而返。百分之百安全?不尽然。
这样的密码文仍留下许多细微的线索给精明的密码分析家。在第一章我们看到,每个英文字母都有它的独特性格。这些性格显现在它与其他字母的结构关系上,即使以同音替代法加密,仍旧掩藏不了这些性格。说到英文字母的独特性格,最极端的例子是q。能跟在q之后的字母只有一个:u。尝试解译这类密码文时,我们可以从q着手。q并不常见,因此大概只有一个替代符号,而u的出现频率约占3%,因此可能有三个替代符号。所以,若找到一个固定只有三种符号会跟在它后面的符号,我们大可假设这个符号即是q,而跟在它后面的三种符号都是代替u。其他字母虽然比较难找,但它们跟其他字母的结构关系仍旧会泄漏出它们的真实身份。尽管同音密码法并非无懈可击,它终究比单纯的单套字母密码法安全多了。
表5:同音替代式密码法的例子。最上面一行是明文字母,下面的数字即是替代的密码符号。越常出现的字母拥有越多的替代符号。
使用同音密码法时,每个明文字母可以有多种加密方式,看来似乎跟多套字母密码法很相似。不过它在一个关键处仍异于后者,所以仍旧属于单套字母密码法。在表5所示的同音符号表里,字母a有8个数字可以轮流替代,可是反过来看,这8个数字只能代表a。换句话说,一个明文字母可以交替使用数个替代符号,但是每个替代符号只能固定回溯到一个字母。在多套字母密码法里,一个明文字母同样也有数个替代符号,然而更能令人混淆的是,这些符号可能会代表不同的字母。
同音密码法被归类为单套字母密码法的最基本原因大概是,尽管每个明文字母可以有数个替代符号,不过整个加密过程其实只用到一套密码字母集。相对地,使用多套字母密码法时,必须在加密过程中不断轮换不同的密码字母集。
用各种方法修改变化一下基本的单套字母密码法,例如加入同音法,就又可以加强密码的安全性,而不用求助于复杂的多套字母密码法。实际运用过的增强型单套字母密码法,最难破解的大概要属法国国王路易十四的“大密码”(Great Cipher)。“大密码”被用来加密法国最机密的文件,防止计划、策略和政治阴谋的细节外泄。其中一份文件提到了法国历史上最神秘的人物之一,铁面人。但是牢固的“大密码”却将这分文件以及它引人关注的内容隐蔽了两个世纪之久。
“大密码”是由安东尼·何希纽与波拿翁图·何希纽(Antoine & Bonaventure Rossignol)这对父子档发明出来的。安东尼的成名,是缘于他对一项军事行动的贡献。1626年,法军包围瑞亚梦(Réalmont)城,有个从城里溜出来的信差被逮到,法军把他所携带的密函交给安东尼。他在日落之前就解译出密函,得知防守此城的雨格诺 (Huguenot)军已经快撑不下去了。法军原本对雨格诺教徒的困境浑然不知情,如今则将原信和译文一并送还。雨格诺教徒明白他们的敌人不可能撤退,于是马上投降了。这个解译结果使得法军轻易制敌。
体会到密码解译的力量之后,何希纽父子被授予了宫廷里的资深职位。他们先是为路易十三效力,路易十四继任后仍担任他的密码分析师。路易十四非常赏识两人,甚而把他们的办公室移到他的隔壁,让何希纽父子在法国外交政策的形成过程扮演中心角色。法国人对他们的才能所给予的最大赞誉之一是,他们的姓氏rossignol这个字,成了法文俚语中的开锁工具,他们破解密码的能力可见一斑。
破解密码的实战经验赋予了何希纽父子设计更牢固的加密法的能力,最后他们发明出所谓的“大密码”。“大密码”的安全度极高,所有尝试破解它以偷窥法国机密的敌方解码专家都徒劳无功。可惜他们父子去世后,“大密码”竟遭废弃不用,详细的使用法很快就被遗忘,这也意味着再也没有人能阅读法国档案室的加密文件。“大密码”实在太牢固,以致接下来的几代译码专家也束手无策。
历史学家知道,这些用“大密码”加密的文件是探究法国17世纪时代各种宫廷秘辛的特别管道。可是,直至19世纪末,都没有人能解译它们。到了1890年,军事史学者维克多·金德伦(Victor Gendron)在研究路易十四时期的军事行动时,发掘出一些用“大密码”加密的信函。因为看不懂,于是委请一位法国军事密码学部门的卓越专家,指挥官埃田·巴泽里(Etienne Bazeries)解译。巴泽里把这些信函视为最高挑战,其后的三年光阴都用在解译它们上。
这批加密文件共有数千个数字,但是由587种不同的数字所构成。“大密码”显然比单纯的单套字母密码法复杂多了;后者只需要26个不同的数字,每个字母一个。因为数字的数量很大,刚开始巴泽里猜测“大密码”可能是同音法,亦即由许多数字代表同一个字母。他花了数个月探索这个可能性,却是白费工夫。“大密码”不是同音密码法。
后来他想到,也许每个数字所代表的是一对字母(digraph,一起发一个音的两个字母)。法文只有26个字母,但有676种可能的字母对,而这个数目跟密码文所用的数字数目接近。巴泽里找出密码文里最常出现的数字(22、42、124、125、341),假设它们代表法文最常用到的字母对(es、en、ou、de、nt)。事实上,他等于把频率分析法应用到字母对的层面上。可惜工作了数个月后,这个理论也没能导出有意义的结果。
当他又想到另一套解译策略时,想必已经处在放弃这份执迷的边缘了。也许字母对的想法,其实与事实的差距并不远。他开始试探每个数字代表一个音节(而非一对字母)的可能性。他开始尝试给数字与音节配对,最常出现的数字应该就代表法文最常见的音节。巴泽里试验了各种排列组合,却都只译出一些叽哩咕噜、无意义的字——直到他找出一个特定的字。124-22-125-46-345这一串数字在每一页都出现很多次,巴泽里假定它们代表les-en-ne-mi-s,亦即les ennemis(敌人)。结果证实,这是一个关键性的突破。
现在,巴泽里可以进一步检视密码文,审究那些有这5个数字掺在里面的单词。他把源自les ennemis的音节值插进密码文里,揭露其他单词的一部分。爱玩纵横字谜的人都知道,拼出一个单词的部分字母后,剩余的字母通常可以猜得出来。所以,巴泽里完成新的字时,就也辨识出新的音节,而这些音节又会再引出其他的单词,如此循环下去。他不时被绊住,一部分是因为音节值本来就不明确,一部分是因为有一些数字代表的是单一字母、而非音节,更有一部分是何希纽父子故意设的陷阱。例如,有一个数字所代表的非音节、亦非字母,而是要删掉前一个数字。
解译过程终于结束时,巴泽里成为两百年来第一位目睹路易十四的秘密的人。历史学家都为这些新解译出来的资料着迷不已,尤其是一封吊人胃口的信函。这封信似乎解开了17世纪最令人费解的一个谜团:铁面人(Man in the Iron Mask)的真正身份。
铁面人,自从关在法国萨伏伊(Savoy)的皮涅侯(Pignerole)城堡以来,一直是大家臆测纷纷的话题。他在1698年被递解到巴士底狱时,农民争相一睹他的形貌,然而事后却众说纷纭。有的说他矮个子、有的却说高个子,有的说他金发白肤、有的却说是黑发棕肤,有的说他是年轻人、有的却说是老头子。甚至还有人宣称他是女子呢。在没有明确事实可依据的情况下,从伏尔泰(Voltaire)到富兰克林(Benjamin Franklin),每个人都编造出自己的理论来解释铁面人这桩悬案。最流行的阴谋论宣称,“面具”(有时候他们就这样称他)是路易十四的孪生兄弟,无辜横遭禁锢,以杜绝谁是王位继承人的争议。这个理论的某一版本还说铁面人其实有后裔,这一系王族支脉被隐瞒了。1801年发行的一本小册子宣称拿破仑是铁面人的后裔。既然这谣言有助于巩固他的地位,这位皇帝并未否认。
铁面人之谜甚至激发了许多诗词、散文和戏剧创作。1848年,雨果(Victor Hugo)开始撰写一出名为《双胞胎》的戏剧,可是他发现大仲马(Alexandre Dumas)已经全力投入同样的计划,便放弃已经写好的两幕剧本。从那时候起,大仲马的名字就跟铁面人的故事连在一起了。小说《铁面人》的成功更强化了铁面人跟国王有关联的臆测,而且尽管巴泽里的破译提出证据,这个理论仍持续流传着。
巴泽里解译出一封路易十四的战争部长法兰斯瓦·德·卢瓦(Francois de Louvois)所写的信函。卢瓦一开始先叙述费文·德·布隆德(Vivien de Bulonde)的罪行。这位指挥官负责率军进攻位于法意边境的城镇库内欧(Cuneo),占领后受令固守阵地。他却担心奥地利敌军会来,抛下军备及许多伤兵逃走了。战争部长表示,此一行为危及了皮耶蒙(Piedmont)的整个军事行动。信中也明确提到,法王认为布隆德的行为是极其懦弱的举动:
陛下比谁都清楚此种行为的后果,他也意识到,未能占有此地,对我们这次的行动是一大重挫,这项挫败必须等到冬季方能弥补。陛下望你立即逮捕布隆德将军,带到皮涅侯城堡,晚上关进囚房里看管,白天则允他戴着面具在城垛上走动。
这封信明白地提到一个在皮涅侯戴着面具的囚犯,一项足堪此种处分的严重罪行,日期也跟铁面人的神秘事件吻合。这个谜团终于解开了?毫不令人意外,那些偏好阴谋论的人,仍能在布隆德这个答案上找出漏洞。例如,有人辩解说,如果路易十四真想秘密囚禁他不承认的孪生兄弟,一定会故意留下一些假造的蛛丝马迹。也许,这封密函是刻意留给人解译的。也许19世纪的解码专家巴泽尔正是掉进17世纪的圈套了。