隐藏的文字:密码学的黎明时代
第 1 章:隐藏的文字:密码学的黎明时代
公元前三世纪,地中海的某个港口,一艘雅典商船正在卸货。没人注意到船长袖口里藏着一张狭长的羊皮纸——那是斯巴达五位监察官颁发的加密命令。当这张纸被缠绕在一种叫做"斯基泰"(skytale)的木棒上时,原本杂乱无章的字母瞬间显现出清晰的指令:舰队应当转向,截断波斯的补给线。这可能是人类历史上最早的军事密码应用之一,也是密码学作为一门隐秘艺术的第一次辉煌亮相。
然而,如果我们把目光投向更早的时代,会发现一个令人深思的现象:密码学并非诞生于战争,却与权力和神秘主义有着千丝万缕的联系。从埃及神庙中只有祭司才能解读的象形文字,到印度《爱经》中将秘密通信作为爱情艺术的一部分,再到中国东汉军队中严格保密的"字验"系统——密码学的演化史,实际上也是一部人类权力结构、宗教信仰与军事战略交织的历史。
本章要回答的核心问题是:为什么密码学在古代总是与权力、战争紧密相连?古典密码体系的设计原理是什么?而这些看似精妙的加密方法,为何最终被一种看似简单的统计技术——频率分析——所彻底击败?
---
1.1 神圣的秘密:密码学的宗教起源
要理解密码学的诞生,我们首先需要抛弃一个现代人常有的偏见:密码是技术问题。在古典时代,密码首先是宗教问题,是权力问题,是身份认同问题。
公元前1900年前后,古埃及的纸草书上开始出现一种特殊的文字——这不是普通的象形文字,而是一种经过刻意变形的书写形式。学者们称之为"僧侣体"(hieratic)或更晚期的"世俗体"(demotic)文字。这些文字在普通人眼中如同天书,只有受过专门训练的祭司阶层才能解读。这种"刻意制造的理解壁垒",在很大程度上可以被视为密码学思想的萌芽。
为什么古代文明会选择用这种隐秘的方式书写?答案在于权力的合法性建构。当一种知识只有少数人能够掌握时,这本身就构成了权力的来源。埃及祭司们深谙此道:他们用复杂的仪式语言和变形文字,将自己与普通民众区隔开来,创造出一种知识上的神秘主义光环。在卢克索神庙的墙壁上,那些普通人看不懂的象形文字不仅记录着历史,更是神权统治的象征。
这种宗教性的"密码"思维几乎在所有古代文明中都能找到对应物。在印度,婆罗门阶层创造了复杂的梵语语法规则和背诵体系,其中许多规则在外人看来毫无意义,却成为验证种姓身份的重要标志。在美索不达米亚平原上,巴比伦的祭司们使用一种只有他们自己才能理解的天文历法系统,用以预测神意、解释吉凶。这种对"只有我们自己人能懂"的追求,实际上是密码学最原初的形态——不是为了隐藏信息以传递给他人,而是为了构建一个排他的知识共同体。
然而,当我们将目光转向古希腊文明时,密码学的形态开始发生微妙但意义深远的转变。公元前5世纪,波斯帝国的威胁迫使希腊城邦将注意力从宗教神秘主义转向现实的政治和军事需求。斯巴达的"密码棒"(scytale)正是在这一背景下诞生的。
这种装置的原理看似简单,却蕴含着密码学最基本的思想:信息的意义取决于解读的方式。一根刻有凹槽的木质圆柱,一条约等于其周长四分之一宽度的羊皮纸条。当纸条以特定角度缠绕时,原本沿纸条长度书写的字母会落入不同的凹槽,形成有意义的文字;但当纸条被取下时,这些字母就变成了一串毫无规律的符号。
让我们用更精确的语言来描述这个过程。假设密码棒上有$N$个凹槽,纸条上依次写下明文字符$C_1, C_2, C_3, ..., C_k$。当纸条被缠绕时,第$i$个字符实际上被写在第$(i \mod N)$个凹槽的位置上。如果接收者拥有相同规格的密码棒,并且知道正确的缠绕方式(即知道$N$的值),他就能恢复原始信息。但对于不知道$N$的人来说,这个信息是完全不可理解的。
斯巴达密码棒的一个重要特点是:它的安全性完全依赖于密钥——即木棒的直径和凹槽数量。在现代密码学术语中,这被称为" Kerckhoffs 原则"的一个早期实例:加密系统的安全性应该依赖于密钥的保密性,而不是算法本身的保密性。尽管斯巴达人可能并未明确意识到这一点,但他们在实践中已经遵循了这一原则。
历史学家希罗多德在《历史》一书中记载了斯巴达密码棒的一次著名使用:公元前404年,波斯王子居鲁士的弟弟小居鲁士雇佣了一支希腊雇佣军,由一位名叫克莱阿库斯(Clearchus)的斯巴达人率领。这支军队的调动命令据说就是通过加密方式传递的。当克莱阿库斯被杀后,波斯人截获了这些加密信息,却无法理解其内容,最终导致了一次重大的军事误判。这个故事虽然细节难以考证,但它清楚地表明:在古典时代,密码学已经开始从纯粹的宗教神秘主义转向服务于权力和战争的实际工具。
---
1.2 蜡板与丝线:古典隐写术的智慧
与斯巴达的密码棒不同,另一位历史学家希罗多德还记录了一种更为隐秘的通信方式——蜡板藏信术。这种方法完全不涉及任何"密码",而是一种纯粹的隐写术(steganography):如何将信息隐藏得让敌人根本意识不到信息的存在。
想象一下这样的场景:一位雅典的使节需要将一份重要的情报送往斯巴达。他不能携带任何可能引起怀疑的文件,也不能使用任何可能被截获的加密通信。他的解决方案是:刮去一块木板上的蜡层,在露出的木头上写下情报,然后再重新涂上蜡。这样,这块木板看起来就是一块普通的、尚未使用的书写板,可以安全地通过任何检查。当接收者收到木板后,只需刮去蜡层就能看到信息。
这种方法的精妙之处在于:即使敌人知道存在隐藏信息,他们也必须拥有一块完全相同的木板才能验证猜测。在信息论的语言中,这提供了一种完美的"不可区分性"——从外部观察者的角度看,加密后的载体与普通物体毫无区别。
然而,蜡板藏信术有一个致命的弱点:一旦被怀疑,它就毫无安全性可言。如果波斯人决定刮掉所有进口木板的蜡层,这种方法就会立刻失效。这促使古代密码学家转向另一类技术——真正的密码学(cryptography),而不是隐写术。
希罗多德还记录了一种更为精巧的变体:将奴隶的头发剃光,在头皮上刺上信息,等头发重新长出后,派遣这位"普通的"奴隶前往目的地。这种方法在时间成本上极其高昂,但安全性也确实惊人——谁能想到一位平凡的奴隶会携带军事机密?
这些古典隐写术的故事告诉我们一个重要的事实:在古代,信息安全的主要威胁不是技术性的破解,而是被发现。任何隐藏的信息一旦被发现,其价值就归零。因此,古代的通信者面临的不仅是"如何让敌人看不懂"的问题,更是"如何让敌人根本意识不到存在通信"的问题。
这一张力在密码学史上有深远的影响。当隐写术无法满足需求时,密码学就成为必然的选择。但早期的密码学设计往往也带有隐写术的痕迹——它们试图让加密后的信息看起来像是一段无害的普通文本。例如,凯撒密码(据说是尤利乌斯·凯撒使用的一种简单替代密码)就将每个字母替换为字母表上向后偏移固定位置的另一个字母。当"A"变成"D"、"B"变成"E"时,整个文本就变成了无法理解的乱码——除非你知道偏移量是3。
让我们仔细分析凯撒密码的安全性。在字母表上明文空间为26个字母,如果使用暴力搜索(brute force attack),攻击者最多需要尝试25次就能找到正确的密钥。这在现代密码学标准下是完全不可接受的,但在古代世界中,25次尝试意味着需要手工写出25段可能的明文,然后在没有上下文的情况下找出哪一段是有意义的——这在信息传递缓慢、文化普及率极低的年代,确实提供了相当程度的安全性。
凯撒密码的核心思想是替代(substitution):将明文中的每个符号替换为另一个符号。这与置换(transposition)形成对比,后者的思想是保持符号本身不变,但改变它们的位置。斯巴达的密码棒就是一种置换密码——原始信息中的字母全部保留,只是排列顺序被打乱了。
这两种基本操作的区分——置换与替代——构成了整个古典密码学的基础框架。下面这张流程图展示了古典密码的基本分类体系:
```mermaid graph TD A[古典密码] --> B[置换密码] A --> C[替代密码] B --> B1["位置重排<br/>顺序打乱"] B --> B2["斯巴达密码棒"] B --> B3["栅栏密码"] C --> C1["单表替代"] C --> C2["多表替代"] C1 --> C1a["凯撒密码"] C1 --> C1b["仿射密码"] C2 --> C2a["维吉尼亚密码"] C2 --> C2b["滚动密钥密码"] ```
理解这个分类框架非常重要,因为它决定了后续两千年密码学发展的基本方向。每一种更复杂的密码设计,要么是对置换的更精妙运用,要么是对替代的更高级改进,或者两者的结合。而破解这些密码的方法,也沿着这两条主线展开。
---
1.3 爱的艺术:印度《爱经》中的密码游戏
在讨论古典密码学时,西方中心主义的视角常常让我们忽略了一个重要的事实:古代印度发展出了独特的密码学传统,而这种传统与性和爱情有着出人意料的紧密联系。
大约在公元200年至400年间成书的《爱经》(Kama Sutra)——这部通常被简化为"性爱手册"的作品,实际上是一部关于"生活的艺术"的百科全书。它的作者,伐蹉衍那(Vatsyayana),系统地阐述了人类生活中四个目标:法(Dharma,宗教与道德)、利(Artha,政治与经济)、欲(Kama,感官愉悦与爱情)、以及解(Moksha,精神解脱)。《爱经》属于"欲"的范畴,但它远不止是性技巧的指南——它涵盖了从衣着打扮到社交礼仪,从诗歌创作到商业谈判的方方面面。
在这部著作的第77章和第78章中,伐蹉衍那明确地将"秘密通信"列为女性应当掌握的六十四种艺术之一。这六十四种艺术涵盖了音乐、舞蹈、绘画、诗歌等艺术门类,也包括了下棋、赌博、魔术等娱乐活动。将密码学与这些艺术并列,反映了古代印度社会对私密通信的高度重视——在包办婚姻和严格性别隔离的社会结构中,恋人之间的秘密联络本身就是一种生存技能。
《爱经》中提到的密码方法相当原始:一种方法是用两种不同颜色的墨水交替书写字母,使得只有了解规则的人才能正确阅读;另一种方法是在特定字母上做微小标记,表示该字母是实际信息的一部分。这些方法的共同特点是:它们不是为了对抗敌人的分析,而是为了在日常环境中保持一定的私密性——毕竟,当一位女士在公共场合收到一封情书时,她肯定不希望路人能够轻易阅读其内容。
然而,《爱经》中的密码思想远不止这些技术性的方法。书中大量讨论的诗歌、隐喻和象征体系,构成了另一种更为深层的"密码"。在印度次大陆的文化传统中,用诗歌传递隐秘信息是一种被高度赞赏的能力。一位有教养的女性不仅要知道如何直接表达爱意,更要懂得如何用双关语、典故和隐喻来暗示自己的情感。这种"言外之意"的艺术,与密码学的核心思想——"让有密钥的人读懂,让没有密钥的人困惑"——有着深刻的内在联系。
印度密码学的另一个重要贡献是二进制思想的发端。公元前2世纪左右,印度学者平噶拉(Pingala)在他的《韵律学》中首次系统地阐述了二进制数列的概念。虽然这种思想最初是用于分析梵语诗歌的音韵结构,但它为后来的信息表示理论奠定了基础。当我们在后面章节讨论现代密码学时,二进制作为信息表示的基本单位这一概念将变得至关重要。
《爱经》的密码学内容给我们的启示是:加密不仅是军事和外交的专利,它渗透在人类社会的各个层面。从这个角度看,密码学的"黎明时代"并不只属于战场和宫廷,它同样属于卧室和花园。人类对隐私的渴望,对秘密的追求,以及对"只有特定的人能理解我"的向往,构成了密码学最原初、最持久的动力。
---
1.4 东方密码:东汉"字验"与军事通信体系
当我们在讨论古典密码学时,不能忽视远东地区——尤其是中国——的独特贡献。与西方主要关注加密技术不同,中国古代的密码学更多地服务于军事指挥和行政协调的实用需求。
东汉末年,天下大乱。各路诸侯割据一方,战争频繁。在这种背景下,可靠的军事通信成为生死攸关的大事。《三国志》等史料中多次提到"字验"系统的使用——这是一种中国原创的密码体系,其设计思想与现代密码学中的"编码"概念有异曲同工之妙。
"字验"的基本原理是:通信双方事先约定一个密码本,其中包含若干个常用汉字,每个汉字对应一个特定的军事指令。例如,"风"可能代表"按兵不动","林"可能代表"设伏袭击","火"可能代表"立即撤退"。当指挥官需要传递指令时,他只需在信中嵌入这些特定的汉字,而不需要写出实际的命令。这些汉字看起来可能出现在普通的问候语或无关紧要的叙述中,敌人即使截获了信件,也很难判断哪些字是真正的命令。
这种方法的精妙之处在于:它不需要对整个信息进行加密,而只需要对关键信息进行"编码"。在数学上,如果我们将整个明文空间定义为所有可能的汉字序列,将密文空间定义为同样的汉字序列(因为表面上看起来都是正常的文本),那么"字验"系统实际上定义了一个从关键信息到特定汉字的映射函数:
$$f: I \rightarrow W$$
其中$I$是关键指令的集合,$W$是约定的特殊汉字集合。通过这个映射,原始指令被编码为看似无害的汉字。
让我们用一个具体的例子来说明。假设蜀汉的诸葛亮与前线将领姜维约定了一套"字验"密码,其中部分对应关系如下:
| 汉字 | 对应指令 | |------|----------| | 风 | 按兵不动 | | 林 | 设伏袭击 | | 火 | 立即撤退 | | 山 | 坚守阵地 | | 水 | 粮草已断 |
当诸葛亮需要命令姜维设伏袭击时,他可能会写一封这样的信:"昨夜北风呼啸,林中鸟雀惊飞,特此告知。"在这封看似描写风景的信中,"北风"和"林"两个词包含了实际的指令信息。即使信件被魏军截获,敌方也很难判断这封信的真正含义——除非他们拥有完整的密码本。
"字验"系统的发展经历了几个阶段。最初,密码本可能相当简单,只包含十几个到几十个常用词。随着使用经验的积累,这些密码本变得越来越复杂,包含了几百甚至上千个条目,并且会定期更换以防止泄密。有些密码本甚至采用了"双钥匙"机制:发送方和接收方各持有一部分密钥,只有两者结合才能解读完整的信息。
值得注意的是,中国古代的密码学发展出了与西方完全不同的技术路径。西方密码学的主流是"字母级"的加密——对单个字母进行操作;而中国的"字验"系统则是"词语级"的编码——用特定词语来表示整个概念。这种差异反映了中国文字的特殊性:汉字是意音文字,每个字本身就是一个有意义的单元,不像字母那样需要组合才能表达概念。这一特点使得基于汉字的编码系统天然地更适合中文语境。
"字验"系统在后来的朝代中不断演进。唐代的藩镇割据、宋代的抗金战争、明代的抗倭斗争,都可以看到这一系统的应用。到了清朝,字验已经发展成为一个相当成熟的体系,甚至出现了专门的密码学著作。然而,与西方密码学最终走向数学化和系统化不同,中国的传统密码学始终停留在经验和技艺的层面,缺乏理论层面的突破。这一差异在中西方的近代相遇时变得尤为明显——当西方的频率分析方法传入时,中国传统的密码体系几乎不堪一击。
---
1.5 替身的艺术:古典替代密码的原理与局限
让我们暂时从历史叙述回到技术分析。本章前面讨论了置换密码(如斯巴达密码棒)和编码系统(如中国字验),现在我们需要仔细分析替代密码的原理——这是古典密码学中技术含量最高、影响最深远的分支。
替代密码的基本思想是用一个符号替换另一个符号。保持明文符号的顺序不变(这是置换做的事情),但将每个符号替换为另一个符号。根据替换规则的不同,替代密码可以分为几种类型。
凯撒密码是我们已经熟悉的例子:将每个字母替换为字母表上向后偏移固定位置(通常称为密钥$k$)的字母。如果密钥是3,那么"A"→"D"、"B"→"E",依此类推。用数学语言描述,加密函数是:
$$E(x) = (x + k) \mod 26$$
其中$x$是明文字母在字母表中的位置(从0开始),$k$是密钥。解密函数则是:
$$D(y) = (y - k) \mod 26$$
凯撒密码的密钥空间大小为25(排除密钥为0的情况,即不加密的情况)。这意味着在最坏情况下,攻击者只需要尝试25次就能破解密文。对于现代计算机来说,25次尝试不过是毫秒级的事情;但在古代,这种"暴力搜索"需要人工尝试所有可能,需要相当多的时间和精力。
单表替代密码(monoalphabetic substitution cipher)是对凯撒密码的直接扩展:不是简单的偏移,而是任意替换。例如,一个替换表可能是:
``` 明文: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 密文: Q W E R T Y U I O P A S D F G H J K L Z X C V B N M ```
这种替换表提供了更大的密钥空间。如果允许替换表的任意排列,密钥空间的大小是$26!$(即26的阶乘),约为$4 \times 10^{26}$。这个数字是如此之大,以至于即使让全世界所有的计算机同时进行暴力搜索,也需要比宇宙年龄更长的时间才能穷举所有可能。
然而,单表替代密码有一个致命的弱点:它保持了明文中每个字母的出现频率。英语中字母"E"是最常见的字母,约占文本的12.7%;其次是"T"(约9.1%)、"A"(约8.2%)等。如果密文中出现频率最高的字符是"Q",那么我们有理由相信明文中的"E"很可能被映射为"Q"。通过统计密文中所有字符的频率,并与标准语言频率表进行比较,攻击者可以逐步还原出替换表。
让我们用一个具体例子来演示这个过程。假设截获了一段密文:
``` QEBFPF EFJOPQBOQFSF OPQBOQFSF OFYOPQBOQFSF YXQYOFYOPQBOQFSF OFJOPQBOQFSF OFYOPQBOQFSF OPQBOQFSF EFJOPQBOQFSF OFJOPQBOQFSF ```
首先统计各字符的出现频率:
| 字符 | 频率 | 排名 | |------|------|------| | O | 18 | 1 | | F | 14 | 2 | | P | 9 | 3 | | Q | 8 | 4 | | E | 4 | 5 | | B | 4 | 6 | | Y | 4 | 7 | | ... | ... | ... |
"O"的出现频率最高(18次),在英文中这很可能对应"E"。观察密文模式,"OPQBOQFSF"出现了多次,这是一个长词。如果"O"="E",那么这个词的模式是:?E????E???. 英文中符合这个模式的长词包括"between"(在...之间)、"seeming"(看起来)、"deserve"(值得)等。
尝试"O"="E"、"P"="T"(因为"T"在英文中频率第三高)、"F"="N"(频率第二高),"Q"="B"(频率第四高)。逐步推断,我们可能得到:
``` WHEN IN THE COURSE OF HUMAN EVENTS IT BECOMES NECESSARY FOR ONE PEOPLE TO DIS