三、古典密码与密码分析入门:凯撒密码、维吉尼亚密码、置换密码、频率分析攻击方法及对现代密码设计的启示
古典密码是密码学发展的起点,虽然其安全性在现代计算能力面前已不堪一击,但其中蕴含的置换、替换、密钥空间设计等核心思想,至今仍深刻影响着对称密码、分组密码乃至公钥密码的设计。理解古典密码及其攻击方法,是建立密码学直觉、理解“安全边界”概念的必经之路。本章将系统梳理凯撒密码、维吉尼亚密码、置换密码的数学结构,深入剖析频率分析攻击的原理与操作流程,并从中提炼出对现代密码工程设计的五条关键启示。
上图展示了本章的知识框架:三大古典密码算法、两类攻击方法以及最终对现代密码设计的启示。下面我们将逐一展开。
3.1 凯撒密码:单表替换的鼻祖
3.1.1 核心原理
凯撒密码是最古老的对称加密算法之一,其本质是单表替换密码。加密时,将明文中的每个字母按照字母表顺序向后(或向前)移动固定的位数 k(0 ≤ k ≤ 25),解密时反向移动相同的位数。数学表达为:
加密:C = (P + k) mod 26
解密:P = (C - k) mod 26
其中 P 为明文字母编号(A=0, B=1, ..., Z=25),C 为密文字母编号。
密钥空间仅为 26 种可能,这意味着即使使用暴力穷举,最多尝试 26 次即可破译。凯撒密码的加密过程可以用一个简单的字母映射表来描述,例如 k=3 时,明文字母 A 映射为 D,B 映射为 E,以此类推。
3.1.2 判断方法与操作流程
判断一段密文是否由凯撒密码加密,最直接的方法是暴力穷举:依次尝试 k=0 到 25,观察哪个偏移量下能产生有意义的英文文本。更高效的方法是频率分析:统计密文中每个字母的出现次数,找出出现频率最高的字母,将其与英文中最常见的字母 'E'(频率约 12.7%)或 'T'(约 9.1%)进行比对,从而推断出偏移量。
- 统计密文中各字母出现频次,按降序排列。
- 取频次最高的字母,假设其对应明文字母 'E',计算偏移量 k = (密文字母编号 - 4) mod 26。
- 用该偏移量解密,检查结果是否为可读英文。
- 若结果不理想,尝试用 'T'、'A'、'O' 等高频字母重新假设,重复步骤 2-3。
3.1.3 案例拆解:一封被截获的密文
假设安全团队截获了一段密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ。通过频率统计,发现字母 'W' 出现 3 次,'K' 出现 2 次,'H' 出现 2 次。假设 'W' 对应明文 'E',则偏移量 k = (22 - 4) mod 26 = 18,即密文比明文后移 18 位。用 k=18 解密得到:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG。结果完全可读,攻击成功。此案例说明,凯撒密码在已知密文长度超过 20 个字符时,几乎可以瞬间被破解。
3.1.4 常见误区与总结
误区二:忽略频率分析。即使不知道偏移量,频率分析也能快速锁定密钥。
凯撒密码的教训是:密钥空间必须足够大,否则无法抵御穷举攻击。现代 AES-256 的密钥空间为 2^256,远超任何暴力攻击能力。
3.2 维吉尼亚密码:多表替换的突破与局限
3.2.1 核心原理
维吉尼亚密码是第一个真正意义上的多表替换密码,它使用一个密钥词(如 "KEY")来生成多个凯撒偏移量。加密时,将密钥词重复书写与明文等长,每个明文字母使用对应的密钥字母作为偏移量。数学表达为:
加密:C_i = (P_i + K_{i mod m}) mod 26
解密:P_i = (C_i - K_{i mod m}) mod 26
其中 m 为密钥词长度,K_j 为密钥词第 j 个字母的编号。
密钥空间为 26^m,当 m=10 时,密钥空间约为 1.4×10^14,暴力穷举已不现实。然而,维吉尼亚密码的致命弱点是:它仍然保留了明文的统计特征,只是将频率分布分散到了 m 个不同的替换表中。
3.2.2 判断方法与操作流程:卡西斯基测试与重合指数
破解维吉尼亚密码的关键在于确定密钥长度 m,然后将其分解为 m 个独立的凯撒密码。常用方法有两种:
| 方法 | 原理 | 操作步骤 | 适用场景 |
|---|---|---|---|
| 卡西斯基测试 | 明文中重复出现的片段(如 "THE")在密文中会以相同间隔重复出现,该间隔通常是密钥长度的整数倍 | 找出密文中重复出现的长度为 3 以上的片段,计算其间隔,取间隔的最大公约数作为密钥长度 | 密文长度 ≥ 200 字符时效果较好 |
| 重合指数(IC) | 随机英文文本的 IC 约为 0.038,单表替换后的密文 IC 仍接近 0.065;若密钥长度估计正确,按列分组后每列 IC 应接近 0.065 | 尝试不同 m 值,将密文分成 m 列,计算每列 IC,取平均 IC 最接近 0.065 的 m | 密文长度 ≥ 100 字符时有效 |
确定密钥长度后,将密文按列分组,每列使用频率分析破解对应的凯撒偏移量,最终恢复密钥词。
3.2.3 案例拆解:维吉尼亚密码的完整破解
假设截获密文长度为 300 字符,使用卡西斯基测试发现重复片段 "VFG" 出现在位置 15 和 75,间隔 60;片段 "RTH" 出现在位置 40 和 100,间隔 60。60 的因子有 1,2,3,4,5,6,10,12,15,20,30,60。进一步用重合指数法测试 m=5 时,平均 IC=0.062;m=6 时,平均 IC=0.058;m=5 更接近 0.065,故判断密钥长度为 5。将密文分成 5 列,每列分别做频率分析,得到偏移量分别为 10, 4, 24, 14, 6,对应密钥字母 "KEYGEN"。解密后得到完整明文。此案例展示了两步走的攻击策略:先破密钥长度,再破各列偏移量。
3.2.4 常见误区与总结
维吉尼亚密码的教训是:仅仅扩大密钥空间是不够的,还必须消除明文的统计特征。这直接催生了现代密码学中的“扩散”和“混淆”原则。
3.3 置换密码:打乱位置而非替换字母
3.3.1 核心原理
置换密码(又称换位密码)不改变字母本身,而是重新排列字母的位置。最典型的是列置换密码:将明文按行写入一个 m 列的表格,然后按密钥指定的列顺序读出密文。例如,密钥为 "4312" 表示先读第 4 列,再读第 3 列,依此类推。解密时按相同列数重新排列即可。
明文:WE ARE DISCOVERED FLEE AT ONCE
密钥:4 3 1 2(列读取顺序)
写入表格(每行 4 列):
W E A R
E D I S
C O V E
R E D F
L E E A
T O N C
E
按列顺序 4→3→1→2 读出:R S E F A C A I V D E N W E C L E E D O R E T O
置换密码的密钥空间为 m!(m 为列数),当 m=10 时,密钥空间约为 3.6×10^6,仍可被暴力破解。
3.3.2 判断方法与操作流程
置换密码不改变字母频率,因此频率分析直接失效。攻击方法主要依赖模式分析和已知明文攻击:
- 观察密文中字母频率分布是否与英文正常分布一致(若一致,则可能是置换密码)。
- 尝试不同的列数 m(从 2 到密文长度的一半),按 m 列重新排列密文,观察是否出现可读片段。
- 利用常见双字母组合(如 "TH", "HE", "IN")在密文中的位置关系,推断列顺序。
3.3.3 案例拆解:列置换的破解
密文长度为 20 字符:R S E F A C A I V D E N W E C L E E D O。频率分析显示字母分布与英文相似,排除替换密码。尝试 m=4,按 4 列重新排列(每列 5 个字符):第 1 列 "R A V W E",第 2 列 "S C D E E",第 3 列 "E I E C D",第 4 列 "F A N L O"。观察第 4 列 "FANLO" 可重排为 "FLEON" 的片段,第 1 列 "RAVWE" 可重排为 "WEARV"。进一步调整列顺序为 4→1→3→2,得到明文 "WE ARE DISCOVERED FLEE AT ONCE"。此案例说明,置换密码的破解依赖于对语言模式的敏感度。
3.3.4 常见误区与总结
3.4 频率分析攻击:从统计破译到现代密码设计启示
3.4.1 核心原理
频率分析攻击的核心假设是:明文语言中字母的统计分布规律会在密文中保留。英文中 'E' 出现频率最高(12.7%),'T' 次之(9.1%),'A'、'O'、'I'、'N'、'S'、'H'、'R' 紧随其后。单表替换密码只是将字母映射到另一个字母,但频率分布的形状不变。攻击者只需统计密文字母频率,与标准频率表比对,即可建立映射关系。
3.4.2 操作流程与工具
| 步骤 | 操作 | 工具/方法 |
|---|---|---|
| 1 | 统计密文字母频次 | Python 脚本、Excel 计数 |
| 2 | 排序并对比标准频率表 | 英文频率表(E=12.7%, T=9.1%, A=8.2%, O=7.5%) |
| 3 | 猜测高频字母映射 | 先猜 E, T, A, O, I, N |
| 4 | 验证部分明文 | 寻找常见双字母组合(TH, HE, IN, ER) |
| 5 | 迭代修正 | 根据上下文语义调整映射 |
3.4.3 案例拆解:频率分析实战
密文片段:GFS WMY OG LGDVS MF S KYIP HS HDMI。统计频率:'G' 出现 3 次,'S' 出现 3 次,'M' 出现 2 次,'F' 出现 2 次。假设 'G' 对应 'E','S' 对应 'T'。则密文 "GFS" 对应 "ET?",推测可能是 "THE"(即 F→H)。继续推导:密文 "WMY" 对应 "?A?",结合上下文可能是 "ARE"(W→A, M→R, Y→E)。逐步填充,最终得到明文 "THE SUN IS SHINING AND WE ARE HAPPY"。此案例展示了频率分析如何从少量统计信息出发,结合语言模式逐步还原明文。
3.4.4 对现代密码设计的启示
启示二:混淆(Confusion)—— 密钥与密文之间的关系必须足够复杂。AES 的 SubBytes 使用非线性 S 盒,使得密钥的微小变化导致密文的剧烈变化。
启示三:密钥空间必须足够大 —— 凯撒密码 26 种密钥、维吉尼亚密码 26^m 种密钥,均无法抵御现代穷举攻击。AES-256 的 2^256 密钥空间是安全的底线。
启示四:统计均匀性 —— 现代分组密码的输出必须呈现均匀分布,无法通过频率分析获取任何信息。这要求密码算法具备良好的“雪崩效应”。
启示五:已知明文攻击安全性 —— 现代密码必须保证即使攻击者拥有大量明文-密文对,也无法推导出密钥。维吉尼亚密码在已知明文攻击下会迅速崩溃。
3.5 总结与复盘
古典密码的兴衰史告诉我们:安全不是靠算法的保密性,而是靠密钥的保密性和算法的数学强度。凯撒密码和维吉尼亚密码的失败,根源在于它们未能消除明文的统计特征;置换密码的失败,在于其密钥空间有限且不改变频率分布。现代密码学通过“扩散+混淆”的迭代结构、足够大的密钥空间以及严格的统计检验,彻底解决了这些问题。然而,频率分析的思想并未过时——在侧信道攻击、流量分析、密码协议分析中,统计方法依然是重要的攻击工具。理解古典密码,不是为了使用它们,而是为了理解攻击者的思维模式,从而在设计阶段就规避风险。