穆罕默德40岁左右开始定期前往麦加城外的希拉山(Mount Hira)上一座偏僻的洞窟。他在这里祷告、沉思、冥想。公元610年左右,他正在深思之间,天使长加伯列(archangel Gabriel)来到他面前,宣称穆罕默德是上帝的使者。之后,又继续出现一连串的天启,直到二十来年后穆罕默德过世为止。先知穆罕默德在世时,有几位书记记录下这些天启,但都只是片段。直到第一任伊斯兰教领袖阿布巴克(Abū Bakr),才开始将这些片段记录集结在一起。第二任领袖乌玛(Umar)和他的女儿哈芙撒(Hafsa)接续了这份工作,最后到第三任领袖奥斯曼(Uthman)的手上才完成这项工作。每个启示一章,结集成总共114章的《古兰经》。
领袖的责任是接续先知穆罕默德的工作,宣弘他的教义,传播他的信息。从阿布巴克成为教主到661年第四任领袖阿里(Alī)崩殂这段时间,伊斯兰教迅速传播,当时已知的世界,半数被纳入伊斯兰教教徒的手中。到了750年,经过一世纪的生养,阿巴斯(Abbasid)王朝开启了伊斯兰文明的黄金时期。艺术与科学同步蓬勃发展。伊斯兰工匠遗留给我们璀璨的图画、华丽的雕刻以及历史上最精巧的纺织品。而散布在现代科学辞典里的阿拉伯词汇,如代数(algebra)、碱(alkaline)、天顶(zenith),则见证了伊斯兰科学家的辉煌成就。
伊斯兰文化之所以这么多彩多姿,归功于安和、富裕的社会。阿巴斯王朝的国王不像前几任君主那么好征战,转而致力于建立一个有组织的繁荣社会。低税赋使得交易频繁,并促进商业与工业的大幅增长;严厉的法令则能抑制贪污、保护百姓。这一切全凭借效率良好的行政系统,而行政官员则是仰赖以加密法完成的安全通讯系统。根据记载,除了机密的国政事务之外,税务数据也予以加密保护,足证密码技术的使用非常广泛与频繁。许多行政手册提供了进一步的实证,例如成书于10世纪的《事务官手册》(Adab al-Kuttab)就有好几篇章节专门讨论密码法。
这些行政官员所使用的密码字母通常是如前一节所述,将明文字母重组而得。不过他们也在密码字母中掺杂了一些别的符号,例如明文字母的a可能会以#来替代,b则用+等。这类用符号或字母、或两者混用,以一个密码字母代替一个明文字母的方法,通称为单套字母替代式密码法(monoalphabetic substitution cipher)。我们到目前为止所介绍的替代式密码法都属于这一类。
倘若这些阿拉伯人只是习于使用单套字母替代式密码法,他们就不会在密码学史上占有一席之地。然而除了使用密码外,这些阿拉伯学者还会破解密码。事实上,他们发明了密码分析学(cryptanalysis)——在无从得知钥匙的情况下解译信息的科学。编码专家在研发秘密书写的新方法时,密码分析家则在苦思这些方法的弱点,以破解信息的秘密。单套字母替代式密码法在维持了数世纪无法破解之后,终于被阿拉伯的密码分析家找到破解的方法。
密码分析学的催生需要一个高度文明——举凡数学、统计学和语言学等学科,都必须具备高度水平。伊斯兰教文明提供了一个孕育密码分析学的理想摇篮,因为伊斯兰教要求所有人类活动都以公正为旨,而这需要知识(称为ilm)的协助才能达成。每位伊斯兰教教徒都应该追求各种形式的知识,阿巴斯王朝丰硕的经济成果即给予学者足够的时间、金钱与材料来履行他们的任务。他们搜集埃及文、巴比伦文、印度文、中文、法希文 、叙利亚文、亚美尼亚文、希伯来文以及罗马文经典并翻译成阿拉伯文,以吸收旧有文明的知识。公元815年,曼姆国王(Caliph al-Ma‘mun)在巴格达建立了“智慧殿堂”(Bait al-Hikmah)—— 一座图书馆及翻译中心。
在学习知识的同时,伊斯兰文明也具备传播这些知识的能力,因为他们从中国学到了造纸术。造纸术衍生出一门新行业——warraqīn,意为“处理纸张的人”,其实就是专门抄写文稿的人力复印机;他们是新兴出版业的基石。在全盛时期,每年的出版量达数万本,光是一个巴格达郊区就有百余家书店。除了《一千零一夜》这类古典文学之外,这些书店也贩卖各种想象得到的领域的教科书,满足这个当时全世界识字率最高、最好学的社会需求。
除了深广的世俗知识外,宗教学的发展也促进了密码分析学的发明。巴士拉(Basra)、库法(Kufa)和巴格达等城都建立了重要的神学学校,这里的神学家仔细审究《古兰经》所载穆罕默德的天启,想为这些天启编定年代顺序。他们所采用的方法是:计算各个单词在每一篇启示的出现频率。这个方法的理论是:有些单词是稍晚才出现的,如果某篇启示有很多这类的新单词,这篇启示的年代就应该较晚。这些神学家也研究《纪事》( Hadith ),此书记载了先知穆罕默德的日常谈话。他们尝试证明每一句话都真的出自穆罕默德之口。因此,他们研究书中单词的语源以及句型结构,以检测某些段落文字是否跟穆罕默德的语言习惯一致。
对日后造成深远影响的是,这些宗教学者的审究并未停留在单词的阶段,他们还分析个别的字母,因而发现有些字母的出现次数比其他字母频繁。字母a和1在阿拉伯文的出现频率最高,一部分是因为定冠词al-(相当于英文的the)的缘故。相对地,j的出现频率则只有它们的1/10。这项看似无关紧要的观察结果,日后却造成了密码分析学的第一次大突破。
我们无法确知是谁先意识到字母出现频率的差异可以用来破解密码,就目前所知,这项技术的说明最早见于公元9世纪的科学家肯迪(al-Kindi,全名Abu Yusuf Ya‘qub ibn Is-haq ibn as-Sabbah ibn ‘omran ibn Ismail al-Kindi)的著作。被称为“阿拉伯哲人”的肯迪有290部著作,题材广及医学、天文学、数学、语言学与音乐。他最伟大的作品是《解译加密信息手稿》( A Manuscript on Deciphering Cryptographic Messages ),收藏在伊斯坦布尔的苏来玛尼亚鄂图曼档案库(Sulaimaniyyah Ottoman Archive),直到1987年才被再度发现(第一页参见图6)。这部作品对统计学、阿拉伯语音学以及阿拉伯文句法构造的讨论非常详细。不过,肯迪革命性的密码分析系统则被浓缩在下列两段短文:
图6:肯迪《解译加密信息手稿》的首页。这篇文稿包含目前所知最早的密码分析学频率分析法的说明。
倘若我们知道加密信息所使用的语言,有一种破解它的方法是:找出一篇至少一页长的相同语言的明文文章,数算每个字母的出现次数。把最常出现的字母称为“一号”,次常出现的字母称为“二号”,再次常出现的则称为“三号”,以此类推,直到这篇明文样本的所有字母都如此整理完毕。接下来,就轮到我们要解译的密码文了,我们也将它的符号如此分类。找到最常出现的符号后,将它替换成明文样本的“一号”字母,次常出现的符号换成“二号”字母,再次常出现的符号依例换成“三号”字母,以此类推,直到密码文的所有符号都替换完毕为止。
肯迪的说明,以英文字母为例比较容易解释。首先,为了确立每个英文字母的出现频率,我们必须分析一长篇或甚至数篇普通的英文文章。英文字母出现频率最高的是e,接下来是t,然后是a……如表1所示。再来,检视我们要处理的密码文,也把每个字母的出现频率整理出来。假设密码文内出现频率最高的字母是j,那么它很可能就是e的替身;如果密码文内出现频率次高的字母是P,那它可能就是t的替身了,以此类推。肯迪的方法显示:只要分析一下密码文的符号出现频率,根本不需要逐一检查数十亿把钥匙,就有可能揭开加密信息的内容了。这个方法称为频率分析法(frequency analysis)。
不过,肯迪的秘方并不能无条件地应用于任何状况,因为如表1所示的频率标准表是平均值,不会跟所有文件的字母频率完全符合。譬如,像这样一则讨论大气对非洲四肢斑纹动物的影响的简短信息:“From Zanzibar to Zambia and Zaire, ozone zones make zebras run zany zigzags.”(臭氧层使得自桑给巴尔到赞比亚及扎伊尔的斑马都像傻瓜似的蛇行跑动),直接套用频率分析法可就无效了。一般而言,短文的分析结果很可能跟标准频率相去甚远,如果信息长度少于100个字母时,就会很难解译。相反地,较长的文句就较可能符合标准频率,尽管有时仍有例外。1969年,法国作家乔治·佩雷克(Georges Perec)写了一本200页的小说《消失》( La Disparition ),竟没用到任何含字母e的词汇。更令人拍案叫绝的是,英国小说家及评论家吉尔伯特·亚戴尔(Gilbert Adair)成功地依循佩雷克避用字母e的原则把《消失》译成英文。而且这本名为《虚空》( A Void )的英译本,还是出人意料地通顺易读(请参阅附录A)。倘若这整本书以单套字母替代式密码法加密,解译者如果没料到全书根本不使用英文中出现频率最高的字母,而仍单纯地采用频率分析法,结果恐怕是徒劳无功。
表1:这个相对频率表的统计依据是取自报纸和小说的章节,共计100,362个字母;由贝克(H.Beker)和派柏(F. Piper)编纂,最早见于《密码系统:保护通讯》 (Cipher Systems: The Protection Of Communication) 。
介绍过密码分析的第一件工具后,接着举例说明如何使用频率分析法来解译密码文。我无意让整本书遍布密码分析的范例,可是对频率分析法我想破例。一方面是因为频率分析法并没有想象中那么难,另一方面它也是密码分析的首要工具。而且以下的例子可以让读者一窥密码分析家的工作方法。你会发现除了逻辑思考外,频率分析法也需要一些策略、直觉、弹性与猜测。
假设我们拦截到这则加密信息,必须解译其内容。我们知道原始语言是英文,也知道它是用单套字母替代式密码法加密的,可是不知道钥匙为何。搜查所有可用钥匙是不可行的,因此必须应用频率分析法。以下是分析这段密码文的逐步说明。你有把握的话,也可略过这几段,尝试自己独立破解这段文字。
任何密码分析家看到这类密码文的头一个反应都是分析所有字母的出现频率,由此得出如表2的结果。正如我们所预期的,每个字母的出现频率各不相同。问题是,我们可以根据它们的频率来判别它们的真实身份吗?这段密码文相当短,我们不能将频率分析法拿来直接照套。倘若相信密码文里出现最多次的O即是最常用的英文字母e的替身,或是出现次数排第八的Y即是第八常用的英文字母h,那就未免太天真了。倘若不加思索地直接套用频率分析法,我们只会译出一堆叽哩咕噜的词,像第一个词PCQ就会被解译成aov。
表2:加密信息的频率分析
我们先来分析那3个出现超过30次的字母,亦即O、X和P。我们大可假设这3个在此篇密码文最常用到的字母,可能就代表英文最常用的3个字母,只是顺序还有待商榷。换句话说,我们不能一口咬定O=e,X=t,P=a,但可做如下的假设:O=e,t或a、X=e,t或a、P=e,t或a。
我们需要一种更精细的频率分析法,才能有把握地继续下去,判别出这3个最常用的字母O、X、P的真实身份。我们可以把观察焦点转向它们跟其他字母相邻的频率。例如,字母O是否出现在许多字母之前或之后?还是它只出现在某些特定的字母旁边?这些问题的答案可以进一步告诉我们O所替代的字母是元音还是辅音。如果O所替代的字母是元音,跟它相邻(在它前面或后面)的字母应该会很多;如果它所替代的是辅音,有很多字母可能没有机会跟它相邻。例如,字母e几乎可以出现在任何其他字母的前面或后面,但字母t就不太可能出现在b、d、g、j、k、m、q或v的前面或后面。
下表列出这三个密码文里最常用到的字母,与每个字母相邻出现的频率。例如,O在A前面出现过一次,但从未在A后面出现,就在第一格记上1。O几乎是大多数字母的邻居,只有七个字母从未出现在它前后,所以在O这一排有七个O。字母X也一样爱交朋友,它也跟大多数的字母为邻,只有八个没见过面。字母P就比较孤僻,它只和少数几个字母打交道,另外十五个则完全不搭理。这些证据暗示O和X所替代的是元音字母,而P所替代的则是辅音字母。
接下来的问题是:O和X所替代的是哪些元音?应该是e和a这两个英语最常用的元音。但是,是O=e、X=a抑或O=a、X=e?这密码文有一个特征很有意思,那就是OO这个组合出现过两次,XX却从没出现过。在正常英文里,ee出现的频率远超过aa,所以,答案很可能是O=e、X=a。
至此,我们很有把握地判读出密码文里的两个字母了。X=a的结论还有一项佐证:在密码文里,X有单独出现的纪录,而英文只有两个单词是只有一个字母的,a即是其一。另一个在密码文里单独出现过的字母是Y,所以它非常可能就是另一个只有一个字母的单词:i。留意那些只有一个字母的单词,是标准的密码分析诀窍。附录B还列有其他密码分析诀窍。幸好这篇密码文还保留单词之间的空格,这个诀窍才派得上用场。在真实案例中,编码者通常会去掉所有空格,以增添敌人破解信息的困难度。
不论密码文是否被接成一长串不含空格的文字,接下来的这个诀窍仍可以派上用场。一旦判读出字母e,我们很容易可以找出字母h。英文的h常出现在e前面(像the、then、they等),跟在e后面的情形却很罕见。下表列出密码文里的O (我们相信它的真实身份是e)出现在其他字母前面或后面的频率。这个表格暗示B即是h的替身,因为它出现在O之前9次,却不曾出现在O之后。表格里的其他字母跟O的关系都没有这么不对称。
英文的每个字母都有自己的独特个性,包括它的出现频率以及它跟其他字母的关系。透过这些独特个性,即使它们已经过单套字母替代法的伪装,我们仍得以判读出字母的真实身份。
我们已经很有把握地确立四个字母的身份:O=e,X=a,Y=i,B=h,可以开始把密码文里的一些密码字母更换成正确的明文字母了。我将依照惯例,以大写表示密码字母,以小写表示明文字母。这可以帮助我们区别哪些字母还有待判读,哪些字母则是已经确定的。
经过这个步骤,我们又可以辨认出几个字母,因为有一些密码文的单词可以轻易猜出。例如,三个字母组成的英文单词中,最常用的是the和and;这两个字在这里很容易认出来——Lhe出现六次,而aPV出现五次。所以,L大概就是t,P大概是n,而V则是d。现在,我们可以去把密码文上的这几个字母也替换回来:
一旦确立几个字母后,密码分析的工作就可以非常快速地进展下去了。例如,第二个句子的头一个词是Cn。每个词都有至少一个元音,所以C一定是元音字母。我们只剩两个元音还不知道:u和o。把u套上去,不合;所以C一定是o了。还有,Khe这个字暗示K可能是t或s。可是我们已经知道L=t,所以答案显然是K=s。我们且再把这几个字母套进密码文里去。瞧,文中出现一个词组thoMsand and one niDhts。根据常理推测,它应是thousand and one nights (—千零一夜),而且最后一行好像是要告诉我们这段文字是取材自Tales from the Thousand and One Nights。这表示:M=u,I=f,J=r,D=g,R=l,S=m。
我们可以继续推测文中的字句来辨识出其他字母,不过我们且停下来看看到目前为止所确立的明文字母和密码字母的关系。这两套字母集的关联性即是编码者运用替代法加密信息时所用的钥匙。当我们逐一辨认出密码字母的真实身份时,同时也正逐渐揭开这套密码字母集的全貌。我们到目前为止的成绩,可以列成如下的明文和密码字母对照表。
继续检视密码字母集的已知内容,就可以完成我们的密码分析工作了。在密码字母集里,VOIDBY这一排字母暗示,制作这则信息的编码者选了一个钥匙词组当作这只钥匙的基础。再稍加揣想,我们可以推论这个钥匙词组应该是“A VOID BY GEORGES PEREC”,去掉空格和重复的字母后就成了“AVOIDBYGERSPC”。剩下的字母依顺序,跳过已在钥匙词组里出现过的字母,排接上去,这套密码字母集就完成了。在这个例子中,这位编码者做了一个不太寻常的动作:钥匙词组不是从密码字母集的起点开始,而是从第三个字母开始。这很可能是因为钥匙词组是以A开头,而编码者又不想把a改写为A。现在,这套密码字母集建立好了,我们可以把密码文字完整地还原出来,这份密码分析的任务也就大功告成了。