密码学的历史回溯:从文字到信息战争
第1章:密码学的历史回溯:从文字到信息战争
人类文明的演进史,在某种意义上也是一部信息传递与保密的历史。当凯撒大帝在战场上需要向元老院传递机密情报时,他不会想到,他所使用的那套简单的字母平移系统,将成为密码学这门古老而又年轻学科的起点。从古罗马的军事帐篷到二战的战壕,从外交官的外交密码本到今天的量子密钥分发,密码学始终在人类历史的舞台上扮演着举足轻重的角色。这门学科不仅关乎国家安危,更深刻地影响着信息时代的每一个角落——从网上银行的交易安全,到智能手机的指纹解锁,再到区块链技术的不可篡改性,密码学的影子无处不在。
理解密码学的历史演进,对于掌握现代密码学的设计原则和安全理念至关重要。正如一句古老的格言所言:“那些不了解历史的人注定要重复它。”在密码学领域,这句话有着特殊的分量。每一次重大的密码系统破获,都揭示出前人设计中的致命缺陷;每一个看似无懈可击的加密方案,最终都可能在数学进步的浪潮中轰然倒塌。因此,深入研究密码学的历史,不仅是对过往的回顾,更是对未来安全设计的深刻启示。
1.1 古典密码的两大范式:替换与换位
古典密码学的发展历程中,涌现出了无数精妙的加密方法,但追根溯源,它们几乎都可以归类为两大基本范式:替换密码(Substitution Cipher)和换位密码(Transposition Cipher)。这两种范式的根本区别在于它们改变明文信息的方式:替换密码通过改变字符本身来隐藏信息,而换位密码则通过改变字符的位置来达到同样的目的。
1.1.1 替换密码:字符的变身术
替换密码的核心思想是用一个字符替换另一个字符,从而使得原始信息变得不可读。这种加密方式的历史可以追溯到公元前几个世纪,最早的记录出现在古罗马时期的军事通信中。替换密码的原理看似简单,但要设计出一个真正安全的替换系统,却需要深刻理解语言统计学和数学组合学。
在所有的替换密码中,凯撒密码(Caesar Cipher)无疑是最著名的一种。据古罗马历史学家苏维托尼乌斯记载,儒略·凯撒曾使用一种将字母平移三位的方法来传递机密信息。例如,明文字母 A 被替换为 D,B 被替换为 E,以此类推。数学上,凯撒密码可以表示为:
$$E(x) = (x + k) \mod 26$$
其中 $x$ 是明文字母在字母表中的位置(通常 A=0, B=1, ..., Z=25),$k$ 是密钥,在这个例子中 $k=3$。解密过程则是:
$$D(x) = (x - k) \mod 26$$
```mermaid graph LR subgraph 凯撒密码加密过程 A[明文: HELLO] --> B[位置: 7 4 11 11 14] B --> C[加上密钥3] C --> D[加密: 10 7 14 14 17] D --> E[密文: KHOOR] end ```
凯撒密码的密钥空间(Key Space)仅为 26 种可能(排除平移为0的情况),这意味着即使不知道密钥,攻击者也可以通过简单的暴力搜索(Brute Force Attack)在极短时间内破解。实际上,对于任何给定的小整数 $k$,即使不知道 $k$ 的具体值,攻击者也可以通过分析语言特征来推断密钥。如果密文足够长,字母频率分析(Frequency Analysis)可以轻易揭示加密所使用的平移量。
字母频率分析基于一个简单但强大的观察:在任何自然语言文本中,某些字母出现的频率显著高于其他字母。以英语为例,字母 E 的使用频率约为 12.7%,而字母 T 的使用频率约为 9.1%。相比之下,字母 Z 的使用频率仅为 0.07%。这种统计特性在不同语言中各有不同,但总体模式保持稳定。通过比较密文中字母的频率分布与标准语言频率分布,密码分析者可以推断出替换对应关系,即使不知道具体的密钥。
然而,凯撒密码只是单表替换密码(Monoalphabetic Substitution Cipher)的一个特例。单表替换密码使用单一的替换规则对整个明文进行加密,这意味着每个明文字母始终被映射到同一个密文字母。这种固定的一对一映射关系,正是单表替换密码的致命弱点。即使使用更复杂的映射(如随意打乱字母表顺序),只要替换表保持固定,频率分析的威胁就始终存在。
为了对抗频率分析,密码设计者们发展出了多表替换密码(Polyalphabetic Substitution Cipher)。这类密码使用多个不同的替换表,轮换或根据密钥选择使用哪张表,从而使得相同的明文字母在不同位置可能被替换为不同的密文字母,打乱了字母频率的统计规律。
1.1.2 换位密码:字符的重排游戏
与替换密码不同,换位密码的策略是不改变任何字符本身,而是通过重新排列字符的位置来隐藏信息。这种加密方式利用了人类阅读的心理特点:我们习惯于按照固定顺序理解文字,当这个顺序被打乱时,信息就变得难以识别,即使所有字符都保持原样。
最经典的换位密码是栅栏密码(Rail Fence Cipher)。在这种密码中,明文被书写在一个假设的多行栅栏上,然后按行读取形成密文。例如,使用两行栅栏,明文 "HELLO WORLD" 被写成:
``` H . . . L . . . O . . . R . . . E . . O . W . . L . . D . ```
按行读取后得到密文 "HLOOREWLD"。这种密码的安全性相当有限,因为栅栏行数通常很少,攻击者可以轻易尝试所有可能的行数来恢复明文。
更复杂的换位密码包括列换位密码(Columnar Transposition Cipher)。在这种密码中,明文被填充到一个预先定义宽度的矩形网格中,然后按照特定顺序(由密钥决定)按列读取生成密文。例如,使用密钥 "CIPHER"(字母在字母表中的顺序为 C=3, I=4, P=5, H=2, E=1, R=6):
明文填充(密钥字母标注在顶部):
``` C I P H E R 3 4 5 2 1 6 ----------- H E L L O W O R L D A N D C R Y P T ```
按密钥顺序 1-2-3-4-5-6(E-H-P-I-C-R)读取各列:
- E列(位置1):WOA
- H列(位置2):LDY
- P列(位置3):LRC
- I列(位置4):EOD
- C列(位置5):LLP
- R列(位置6):HNAT
密文为:"WOALDYLRC EODLLPHNAT"
换位密码的安全性取决于重排方案的复杂性。简单的换位密码可能只打乱字符的位置,而不改变相邻字符之间的某些统计关系。例如,在英语中,某些字母组合(如 TH、HE、IN、ER)出现的频率远高于随机组合。攻击者可以通过分析这些二元组(bigram)或三元组(trigram)的分布来推断可能的重排方式。此外,如果密文长度不足,换位密码可能无法完全掩盖原始的语言结构。
在实际应用中,替换密码和换位密码往往被组合使用,以期获得更高的安全性。这种组合被称为复合密码(Composite Cipher),它结合了替换密码改变字符特性的能力和换位密码打乱字符位置的能力。然而,即使是这样的组合,在现代密码分析面前仍然显得脆弱。19世纪末,随着统计学方法在密码分析中的广泛应用,古典密码系统逐渐被更为强大的数学方法所取代。
1.2 维吉尼亚密码:多表替换的巅峰
在古典密码的发展历程中,维吉尼亚密码(Vigenère Cipher)占据着一个特殊的位置。它被公认为16世纪最强大的多表替换密码,其设计初衷是对抗日益成熟的字母频率分析技术。然而,三百年后,它被一位名叫查尔斯·巴贝奇的数学天才所破解,这一事件深刻地揭示了密码设计者与密码分析者之间永恒的博弈。
1.2.1 加密原理与维吉尼亚方阵
维吉尼亚密码由法国密码学家布莱斯·德·维吉尼亚(Blaise de Vigenère)在1586年提出。然而,需要指出的是,该密码的实际发明者可能是意大利密码学家乔瓦尼·巴蒂斯塔·德拉·波塔(Giovan Battista Bellaso),他早在1553年就描述了类似的方法。维吉尼亚的名字之所以与这种密码联系在一起,是因为他在其著作中推广了这一系统。
维吉尼亚密码的核心是使用一个关键词(Keyword)来控制替换规则的选择。加密过程可以表示为:
$$C_i = (P_i + K_{i \mod m}) \mod 26$$
其中 $P_i$ 是明文第 $i$ 个字符的位置,$K_j$ 是密钥第 $j$ 个字符的位置,$m$ 是密钥长度,$C_i$ 是密文字符的位置。
为了便于手工加密和解密,密码学先驱们设计出了维吉尼亚方阵(Vigenère Square),也称为特里特米乌斯方阵(Trithemius Square)或tabula recta。这个方阵由26行组成,每行都是字母表的一个循环移位版本。
```mermaid graph TD A[维吉尼亚方阵结构] --> B[26行字母表] B --> C[每行是前一行向左偏移1位] C --> D[行标题: A-Z] C --> E[列标题: A-Z] D --> F[交叉点为加密结果] F --> G[明文字符在列] F --> H[密钥字符在行] ```
在实际操作中,加密者首先选择一个重复的关键词,然后对照维吉尼亚方阵进行加密。例如,明文 "ATTACKATDAWN",关键词 "LEMON":
``` 明文: A T T A C K A T D A W N 密钥: L E M O N L E M O N L E 密文: L X O E L S M E O W L P ```
在这个例子中,明文字母 A(列)与密钥字母 L(行)在方阵中的交叉点就是密文字母 L。类似地,T(列)与 E(行)交叉得到 X,T(列)与 M(行)交叉得到 O,依此类推。
维吉尼亚密码的多表特性有效地打乱了字母频率分布。在上面的例子中,明文中出现两次的字母 A 被加密成了 L(第一次)和 W(第二次),这正是对抗频率分析的关键所在。然而,这种表面上的安全性掩盖了一个根本性的缺陷,而这个缺陷最终导致了维吉尼亚密码的沦陷。
1.2.2 卡西斯基测试:破解多表密码的钥匙
时间来到19世纪中叶,英国数学家查尔斯·巴贝奇(Charles Babbage)开始研究维吉尼亚密码的弱点。巴贝奇是历史上最杰出的数学家之一,他设计的分析机被视为现代计算机的先驱。然而,他的密码分析工作长期以来并不为公众所知,直到20世纪初期,历史学家才从他的遗物中发现了相关的手稿和笔记。
巴贝奇发现,破解维吉尼亚密码的关键在于识别重复模式(Repeating Patterns)。在维吉尼亚密码中,如果明文中某个片段与关键词的某个部分对齐产生特定的密文,那么相同的加密过程会在明文中所有出现该片段且与关键词对齐方式相同的位置产生相同的密文。当明文足够长时,这种重复出现的密文片段就可以被识别出来。
例如,假设明文中出现了一个单词 "THE"。如果关键词在第一次出现 "THE" 时的对齐方式是使用密钥字母 K-L-M,那么密文中将产生特定的三个字符的组合。如果在明文的另一个位置,"THE" 再次出现且与关键词的对齐方式相同(同样使用 K-L-M),那么相同的密文片段将再次出现。通过统计这些重复片段之间的距离,我们可以推断出关键词的长度。
具体来说,巴贝奇观察到:如果两个相同的密文片段之间的距离是 $d$,而关键词长度为 $m$,那么 $m$ 应该是 $d$ 的因数(或者至少与 $d$ 有共同的因数)。通过对多个这样的距离进行因数分解,密码分析者可以找出最可能的关键词长度。
这种方法后来被称为卡西斯基测试(Kasiski Test),以德国军官弗里德里希·卡西斯基(Friedrich Kasiski)的名字命名。卡西斯基在1863年独立发现了相同的方法并公开发表,使得这一技术广为人知。虽然巴贝奇首先发现了这个方法,但他的工作一直没有公开,因此密码学史上的荣誉通常归属于卡西斯基。
让我们通过一个具体例子来说明卡西斯基测试的工作原理。考虑密文:
``` Cryptography is the practice and study of techniques for secure communication... ```
假设分析者在密文中发现了以下重复片段:
- 片段 "ABC" 出现在位置 15 和位置 45,距离为 30
- 片段 "DEF" 出现在位置 60 和位置 90,距离为 30
- 片段 "GHI" 出现在位置 105,距离为 45
30 的因数是:1, 2, 3, 5, 6, 10, 15, 30 45 的因数是:1, 3, 5, 9, 15, 45
共同的因数中最大的可能是 15。考虑到实际密码分析的考量,关键词长度通常不会是 1(那将是简单的凯撒密码)或 3(太短,安全性不足),15 或 30 成为最可能的候选长度。进一步分析后,15 被确定为关键词长度。
一旦确定了关键词长度,破解过程就大大简化了。维吉尼亚密码实际上被分解为 $m$ 个独立的凯撒密码,其中 $m$ 是关键词长度。具体来说,密文中所有位置 $i$ 满足 $i \mod m = k$ 的字符,都是使用同一个密钥字母加密的。这意味着我们可以对密文进行分组,将第 1、1+m、1+2m... 个字符放在一起进行频率分析,对第 2、2+m、2+2m... 个字符进行同样的分析,依此类推。
对于每一组字符,频率分析可以确定对应的密钥字母。这是因为在每一组中,字符使用的是同一个单表替换规则,其频率分布虽然不如纯单表密码那样清晰,但在足够长的密文下仍然可以进行有效的分析。一旦确定了所有密钥字母,关键词就被完整地恢复了,明文也随之被破译。
1.2.3 重合指数:量化分析的工具
在现代密码分析中,重合指数(Index of Coincidence, IC)是评估语言随机性的重要工具。这个概念由威廉·弗里德曼(William Friedman)在1920年代引入,成为密码分析学的基石之一。
重合指数的定义是:从给定文本中随机抽取两个字母,它们恰好相同的概率。数学表达式为:
$$IC = \frac{\sum_{i=A}^{Z} n_i(n_i - 1)}{N(N-1)}$$
其中 $n_i$ 是字母 $i$ 在文本中出现的次数,$N$ 是文本的总长度。
对于自然语言文本,重合指数有着相对稳定的特征值。例如,英语文本的 IC 约为 0.0667(假设字母均匀分布时的 IC 为 0.0385)。当文本被凯撒密码加密时,IC 保持不变,因为替换只是改变了字母的身份,而不改变其分布。但如果文本被维吉尼亚密码加密,IC 会降低,接近于均匀分布的值。
在实际应用中,密码分析者可以计算不同关键词长度假设下的 IC。对于正确的关键词长度,IC 应该接近 0.0667(因为每一组实际上是一个凯撒密码);对于错误的关键词长度,IC 更接近 0.0385(因为使用了多个不同的替换表)。这种方法可以作为卡西斯基测试的补充或验证。
维吉尼亚密码的破解历程深刻地说明了密码学中的一个永恒主题:没有绝对安全的密码。任何加密系统,只要其结构中存在可以利用的规律性,终究会在数学分析和计算能力的进步面前败下阵来。这一教训对于现代密码学的发展产生了深远的影响,直接推动了完全随机密钥(One-Time Pad)等理论上不可破解的加密方案的研究。
1.3 恩尼格玛机:机械加密的巅峰与陨落
如果说维吉尼亚密码代表了手工密码学时代的最高成就,那么恩尼格玛机(Enigma Machine)则标志着机械密码学时代的来临。这种由德国工程师阿瑟·谢尔比乌斯(Arthur Scherbius)在第一次世界大战后发明的加密设备,将人类的密码设计能力推向了一个前所未有的高度。然而,成也萧何,败也萧何——正是其机械结构的设计特点,最终成为了它的致命弱点。
1.3.1 机械结构:从转子到plugboard
恩尼格玛机的核心是一个由三个(后来扩展到四个)转子(Rotor)组成的机械装置。每个转子是一个内部布线(Internal Wiring)将26个触点(代表字母 A-Z)以某种特定方式连接的圆盘。当电流从一端进入时,它会通过转子的内部连线从另一端以不同的位置输出,从而实现一种复杂的字母替换。
```mermaid graph TD A[键盘输入] --> B[Plugboard 交换] B --> C[转子1] C --> D[转子2] D --> E[转子3] E --> F[反射器] F --> E E --> D D --> C C --> B B --> G[指示灯] ```
转子的关键特性在于旋转机制(Stepping Mechanism):每次按键后,最右边的转子会转动一个位置;当这个转子完成一周旋转后,它会带动中间的转子转动一个位置;类似地,中间转子完成一周后会带动最左边的转子转动。这种设计意味着,每次加密时实际上使用的是不同的替换表。以三个转子为例,总共有 $26^3 = 17,576$ 种不同的转子位置配置。
除了转子,恩尼格玛机还配备了一个反射器(Reflector)。反射器将电流从一边引入后,引导它从另一边流出,但保证任何字母永远不会加密成它自己。这一设计特性后来被波兰密码局(Polish Cipher Bureau)的数学家们巧妙利用,成为破解恩尼格玛的关键突破口之一。
插线板(Plugboard)是恩尼格玛机后期版本的另一重要组件。它允许操作员使用 cables 将字母成对交换。通过交换 6 对字母(后期型号可交换 10 对甚至更多),可以引入额外的置换层。插线板的配置极大地增加了密钥空间,同时也使得每次加密前需要进行繁琐的物理连接工作。
让我们计算一下恩尼格玛机的总密钥空间。考虑标准的三转子、10 cables 配置的恩尼格玛机(M4 军用版):
1. 转子选择:从5个可用转子中选择3个,排列方式为 $P(5,3) = 5 \times 4 \times 3 = 60$ 2. 转子初始位置:每个转子有26种可能,总计 $26^3 = 17,576$ 3. 环设置(Ring Setting):每个转子的环可以独立设置,影响转子的内部连接与输出的对应关系,总计 $26^3 = 17,576$ 4. 插线板配置:选择10对字母进行交换的方法数约为 $1.5 \times 10^{14}$(精确计算非常复杂,涉及组合数学) 5. 反射器选择:在后期型号中,可能需要从2个反射器中选