2. 古典密码:凯撒密码、维吉尼亚密码、仿射密码的原理与破译方法
古典密码学是现代密码学的基石,其核心思想主要围绕替换与换位两种操作。本章聚焦于三种最具代表性的古典替换密码:凯撒密码、维吉尼亚密码和仿射密码。理解它们的原理与破译方法,有助于建立对密码分析学的基本认知。
2.1 凯撒密码(Caesar Cipher)
2.1.1 原理
凯撒密码是最古老的单表替换密码之一,通过将字母表中的每个字母按照固定位数进行移位来实现加密。其密钥空间极小,仅为 25 种可能的移位值。
- 加密公式:\( C = (P + k) \mod 26 \)
- 解密公式:\( P = (C - k) \mod 26 \)
- 密钥:\( k \in \{1, 2, ..., 25\} \)
其中,\( P \) 代表明文字母对应的数字(A=0, B=1, ..., Z=25),\( C \) 代表密文字母对应的数字。
示例:密钥 k=3,明文 "HELLO" → 密文 "KHOOR"。
2.1.2 破译方法
由于密钥空间极小,凯撒密码极易被攻破,主要方法包括:
- 暴力穷举:尝试所有 25 种可能的移位值,观察哪个结果形成有意义的英文文本。
- 频率分析:统计密文中字母出现的频率,与英文自然语言中字母频率(如 E、T、A、O 等)进行比对,快速定位移位量。
提示:在英文中,字母 "E" 的出现频率约为 12.7%,远高于其他字母。若密文中某个字母出现频率最高,则其极有可能对应明文中的 "E"。
2.2 仿射密码(Affine Cipher)
2.2.1 原理
仿射密码是凯撒密码的推广,引入了乘法与加法两种线性变换。其加密函数形式为:
- 加密公式:\( C = (a \times P + b) \mod 26 \)
- 解密公式:\( P = a^{-1} \times (C - b) \mod 26 \)
- 密钥:参数 \( a \) 和 \( b \),其中 \( a \) 必须与 26 互质(即 \( \gcd(a, 26) = 1 \)),以确保乘法逆元 \( a^{-1} \) 存在。
注意:若 \( a \) 与 26 不互质,则加密过程将不是一一映射,导致不同明文可能映射到同一密文,无法正确解密。
2.2.2 破译方法
仿射密码的密钥空间约为 \( 12 \times 26 = 312 \) 种,虽比凯撒密码大,但仍可通过以下方式破译:
- 已知明文攻击:若已知两个明文字母及其对应的密文字母,可建立方程组求解 \( a \) 和 \( b \)。
- 频率分析:结合英文中高频字母(如 E、T)与低频字母(如 Q、Z)的分布规律,推测可能的映射关系。
2.2.3 仿射密码加密流程
下图展示了仿射密码从明文到密文的完整加密流程,包含密钥生成与模运算环节。
2.3 维吉尼亚密码(Vigenère Cipher)
2.3.1 原理
维吉尼亚密码是一种多表替换密码,它使用一个关键词作为密钥,根据关键词中每个字母的移位量,对明文中对应位置的字母进行独立移位。这有效抵御了简单的频率分析攻击。
- 加密公式:\( C_i = (P_i + K_i) \mod 26 \)
- 解密公式:\( P_i = (C_i - K_i) \mod 26 \)
- 密钥:关键词 \( K \),重复使用直至覆盖所有明文。
示例:关键词 "KEY",明文 "HELLO" → 密文 "RIJVS"。
2.3.2 破译方法
维吉尼亚密码的破译关键在于确定密钥长度,一旦密钥长度已知,即可将多表替换分解为多个独立的单表替换问题。主要方法包括:
- 卡西斯基测试(Kasiski Examination):寻找密文中重复出现的字符串,计算其间距的最大公约数,该值很可能是密钥长度的倍数。
- 重合指数法(Index of Coincidence):通过计算密文的重合指数,判断其是否接近随机文本或自然语言文本,从而推测密钥长度。
2.3.3 维吉尼亚密码加解密对比
下表展示了使用关键词 "KEY" 对明文 "HELLO" 进行加解密的过程,清晰体现了多表替换的逐位操作。
| 步骤 | 明文 (P) | 密钥 (K) | 密文 (C) | 解密后明文 |
|---|---|---|---|---|
| 1 | H (7) | K (10) | R (17) | H (7) |
| 2 | E (4) | E (4) | I (8) | E (4) |
| 3 | L (11) | Y (24) | J (9) | L (11) |
| 4 | L (11) | K (10) | V (21) | L (11) |
| 5 | O (14) | E (4) | S (18) | O (14) |
2.4 三种古典密码对比
下表从密钥空间、加密方式、安全性及破译难度四个维度,对三种古典密码进行对比总结。
| 密码类型 | 密钥空间 | 加密方式 | 安全性 | 主要破译方法 |
|---|---|---|---|---|
| 凯撒密码 | 25 | 单表替换(固定移位) | 极低 | 暴力穷举、频率分析 |
| 仿射密码 | 约 312 | 单表替换(线性变换) | 低 | 已知明文攻击、频率分析 |
| 维吉尼亚密码 | 26n(n 为密钥长度) | 多表替换 | 中等(对短密钥) | 卡西斯基测试、重合指数法 |
2.5 破译方法总结
古典密码的破译方法主要分为两类:
- 暴力攻击:适用于密钥空间较小的密码(如凯撒密码)。
- 统计分析:利用自然语言的统计特性(如字母频率、单词模式)来推断密钥或明文,适用于单表替换及多表替换密码。
核心启示:古典密码的脆弱性根源在于其密钥空间有限或未能有效隐藏明文的统计特征。现代密码学通过引入足够大的密钥空间和复杂的非线性变换,从根本上解决了这些问题。