📑 本页目录(点开跳转)
02 · 古典密码为什么全倒了
⏱ 20 分钟 | ⭐ 它们倒在同一个原因上
🎯 一句话
从凯撒到二战的恩尼格玛,几千年里的所有古典密码都被破解了。 而且它们倒掉的原因几乎是同一个:明文的统计规律,透过密文漏了出来。
🏺 一、凯撒密码:把字母往后推
密钥 k = 3
明文 A B C D E F ... X Y Z
密文 D E F G H I ... A B C
HELLO ──► KHOOR
$$C = (P + k) \bmod 26$$
怎么破:密钥只有 25 种可能,全试一遍(穷举)。
KHOOR → k=1: JGNNQ k=2: IFMMP k=3: HELLO ✅
💡 第一课:密钥空间太小 = 没有安全性。 现代标准是 至少 2¹²⁸,因为 2⁸⁰ 以下已经在大型算力面前不安全了。
🔤 二、单表代换:把字母随便映射
明文 A B C D E F ...
密文 Q W E R T Y ... ← 任意一个置换
密钥空间:26! ≈ 4×10²⁶ ≈ 2⁸⁸
⭐ 2⁸⁸ 已经完全无法穷举了 —— 那它为什么还是被破了?
💥 因为频率分析
英文里字母出现的频率是【固定的】:
E ████████████ 12.7%
T █████████ 9.1%
A ████████ 8.2%
O ███████ 7.5%
...
Z ▏ 0.07%
⭐ 代换密码只是【换了名字】,没有改变频率分布
→ 密文里最多的那个字母,几乎一定是 E
密文频率: X ████████████ 12.5% → X = E
P █████████ 9.3% → P = T
...
再配合双字母组(TH, HE, IN)和常见词(THE, AND)
→ 几百个字符就够破了
🔑 第二课,也是本章最重要的一句: 密钥空间大 ≠ 安全。 2⁸⁸ 的密钥空间照样被几百个字符破掉 —— 因为攻击者根本不需要穷举, 他有一条捷径:统计规律。
🔁 三、维吉尼亚密码:用一个密钥词轮流移位
密钥词:KEY (相当于移位 10, 4, 24 循环使用)
明文 H E L L O
移位 K E Y K E → +10 +4 +24 +10 +4
密文 R I J V S
它修复了什么:同一个明文字母(两个 L)现在变成了不同的密文字母(J 和 V)—— 单字母频率被打平了 ✅
几百年里它被称为"无法破译的密码"(le chiffre indéchiffrable)。
💥 但它还是倒了:Kasiski 检验
关键观察:如果同一个词【恰好】对齐了同一段密钥,
它会产生【完全相同的密文片段】
明文 ...THE...........THE...
密钥 ...KEY...........KEY...
密文 ...DLC...........DLC... ⭐ 重复出现!
→ 两次出现之间的距离,必然是【密钥长度的倍数】
→ 找几组重复片段,取距离的最大公因数 = 密钥长度 m ⭐
拿到 m 之后:
把密文按位置分成 m 组:
第 1、m+1、2m+1... 个字符 → 这一组用的是【同一个移位】
第 2、m+2、2m+2... 个字符 → 同一个移位
...
⭐ 每一组都退化成了【凯撒密码】
→ 对每组单独做频率分析,破!
🔑 第三课:把问题拆成独立的小块,是密码分析最通用的武器。 攻击者不需要一次破解整个系统 —— 只要能把它分解成 m 个小问题, 每个小问题的难度就从 26^m 降到了 26×m。
🧩 四、Shannon 的诊断:混淆与扩散
1949 年 Shannon 指出了古典密码缺什么:
| 概念 | 一句话 | 古典密码缺在哪 |
|---|---|---|
| 混淆 Confusion | 密钥和密文的关系要足够复杂 | 凯撒:密文减明文 = 密钥,直接暴露 |
| 扩散 Diffusion | 改一位明文,应该影响一大片密文 | 代换:改一个字母只影响一个字母 ⭐ |
扩散的理想效果(雪崩效应):
明文改动 1 bit ──► 密文平均有【一半】的 bit 发生变化
↑ 这样统计规律就被彻底打散了
🔗 现代分组密码就是围绕这两个词设计的: AES 的 SubBytes 提供混淆、ShiftRows + MixColumns 提供扩散, 反复多轮迭代 —— 见第 6 章。
💥 五、真实世界翻车:恩尼格玛
二战德军的恩尼格玛机,密钥空间约 10²³,在当时看来无法穷举。
它是怎么被破的:
| 弱点 | 后果 |
|---|---|
| 一个字母永远不会被加密成它自己(反射器的结构缺陷) | 每次猜测都能排除掉大量可能 ⭐ |
| 报文格式固定(每天开头是天气预报,结尾是 "HEIL HITLER") | 提供了已知明文(crib) |
| 操作员复用密钥、用女友名字当初始位置 | 大幅缩小搜索空间 |
🔑 第四课:真实系统的崩溃点,往往不在算法,而在使用方式。 恩尼格玛的数学强度没被正面攻破 —— 是"永不映射到自身"这个结构缺陷 + 可预测的报文格式,一起把它拆了。
💡 这个教训今天仍然完全成立:现代事故绝大多数是误用,不是算法被破 (nonce 重用、密钥硬编码、随机数不随机)。
🧭 六、四条留给现代的教训
① 密钥空间必须足够大 → 现代 ≥ 2¹²⁸
② 但【空间大 ≠ 安全】 → 统计规律是一条捷径 ⭐
③ 要有混淆和扩散 → 改 1 bit 应影响一半密文
④ 算法再好,也会死在误用上 → 格式可预测、密钥复用、随机数不随机
再加一条方法论:
⭐ 判断一个方案是否安全,不能问"我能不能破它", 要问"有没有某种结构,能让攻击者绕过穷举"。 频率分析、Kasiski、恩尼格玛的反射器缺陷 —— 全都是这种结构。
🔗 和站内其他章的关系
| 相关的地方 | 和这一章的关系 |
|---|---|
| 第 1 章的 Kerckhoffs 原则 | 古典密码大多靠"算法保密",一泄露就完 |
| 第 1 章的 KPA 攻击模型 | 恩尼格玛的 crib 就是已知明文 |
| 后面的 AES | 混淆与扩散的工程实现 |
| 后面的 LFSR 破解 | 和 Kasiski 一样是"找可分解结构" |
| Kaggle · 赛题理解与数据分析 | 「匿名特征怎么反推含义」和频率分析是同一套动作:靠分布和相关性,把被隐藏的语义猜回来 ⭐ |
| Claude 资料库 · 零信任架构 | Kerckhoffs 原则今天的样子——别把「对手不知道我的结构」当成一条防线 |
| 大模型 · 对齐与 AI 安全 | ⚠️ 古典密码今天真正的用武之地在这里:Base64/拆字这类「编码混淆」越狱,用的正是本章那句「代换不改变信息,只改变外观」 |
✅ 检查点
- 凯撒密码怎么破?它给的第一课是什么?
- 单表代换的密钥空间有 2⁸⁸,为什么还是被破了?这说明了什么?
- 维吉尼亚密码修复了什么问题?
- Kasiski 检验的关键观察是什么?拿到密钥长度后怎么继续?
- 混淆和扩散分别是什么意思?雪崩效应是什么?
- 恩尼格玛的三个弱点分别是什么?它给的教训是什么?
- 判断方案是否安全,正确的提问方式是什么?
👀 答案
- 穷举——密钥只有 25 种。第一课:密钥空间太小 = 没有安全性,现代标准至少 2¹²⁸。
- 因为频率分析——代换只是换了名字,没改变字母的频率分布,密文里最多的字母几乎一定是 E。说明密钥空间大 ≠ 安全,攻击者根本不需要穷举,他有统计规律这条捷径。
- 修复了单字母频率暴露——同一个明文字母在不同位置会变成不同的密文字母,频率分布被打平了。
- 关键观察:同一个词恰好对齐同一段密钥时会产生完全相同的密文片段,两次出现的距离必然是密钥长度的倍数(取多组距离的最大公因数)。拿到长度 m 后,把密文按位置分成 m 组,每组都退化成凯撒密码,分别做频率分析。
- 混淆=密钥与密文的关系要足够复杂;扩散=改一位明文应该影响一大片密文。雪崩效应:明文改 1 bit,密文平均有一半的 bit 变化。
- ①一个字母永不加密成它自己(反射器缺陷,每次猜测能排除大量可能)②报文格式固定(提供已知明文 crib)③操作员复用密钥、用女友名字。教训:真实系统的崩溃点往往不在算法,而在使用方式。
- 不要问"我能不能破它",要问 "有没有某种结构,能让攻击者绕过穷举"。
🛑 可以停在这里
⚡ 走神救援
几千年的古典密码倒在同一个原因:明文的统计规律透过密文漏了出来。凯撒(+k mod 26)→ 密钥空间 25,穷举即破 → 第一课:空间太小=没有安全性(现代≥2¹²⁸)。单表代换空间 26!≈2⁸⁸ 却被几百个字符破掉——⭐频率分析:代换只换名字不改频率,密文最多的字母几乎一定是 E → 第二课:密钥空间大≠安全,攻击者有统计规律这条捷径。维吉尼亚用密钥词轮流移位打平了单字母频率,被称为"不可破译"几百年,倒于 ⭐Kasiski 检验:同一个词对齐同一段密钥会产生相同的密文片段,两次距离是密钥长度的倍数(取 gcd),拿到长度 m 后按位置分成 m 组,每组退化成凯撒 → 第三课:把问题拆成独立小块是密码分析最通用的武器(后面破 LFSR、分解大数同一思路)。Shannon 的诊断:缺混淆(密钥与密文关系要复杂)和扩散(改1bit明文应影响一半密文 = 雪崩效应)——AES 就是围绕这两个词设计的。💥恩尼格玛(10²³ 空间)倒于"一个字母永不加密成自己"的结构缺陷 + 固定报文格式提供已知明文 + 操作员复用密钥 → 第四课:真实系统死在使用方式上,不是算法(今天依然如此:nonce重用、密钥硬编码、随机数不随机)。⭐正确的提问不是"我能不能破它",而是"有没有某种结构能让攻击者绕过穷举"。
下一节 👉 03-一次一密与完美保密.md ⭐