🏠 总目录📚 本教程 02 · 古典密码全倒了 ← →
📑 本页目录(点开跳转)

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。

💡 这个思路在后面反复出现:第 5 章破 LFSR、 第 14 章分解大数,本质都是"找到可分解的结构"。


🧩 四、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/拆字这类「编码混淆」越狱,用的正是本章那句「代换不改变信息,只改变外观」

✅ 检查点

  1. 凯撒密码怎么破?它给的第一课是什么?
  2. 单表代换的密钥空间有 2⁸⁸,为什么还是被破了?这说明了什么?
  3. 维吉尼亚密码修复了什么问题?
  4. Kasiski 检验的关键观察是什么?拿到密钥长度后怎么继续?
  5. 混淆和扩散分别是什么意思?雪崩效应是什么?
  6. 恩尼格玛的三个弱点分别是什么?它给的教训是什么?
  7. 判断方案是否安全,正确的提问方式是什么?
👀 答案
  1. 穷举——密钥只有 25 种。第一课:密钥空间太小 = 没有安全性,现代标准至少 2¹²⁸。
  2. 因为频率分析——代换只是换了名字,没改变字母的频率分布,密文里最多的字母几乎一定是 E。说明密钥空间大 ≠ 安全,攻击者根本不需要穷举,他有统计规律这条捷径。
  3. 修复了单字母频率暴露——同一个明文字母在不同位置会变成不同的密文字母,频率分布被打平了。
  4. 关键观察:同一个词恰好对齐同一段密钥时会产生完全相同的密文片段,两次出现的距离必然是密钥长度的倍数(取多组距离的最大公因数)。拿到长度 m 后,把密文按位置分成 m 组,每组都退化成凯撒密码,分别做频率分析。
  5. 混淆=密钥与密文的关系要足够复杂;扩散=改一位明文应该影响一大片密文。雪崩效应:明文改 1 bit,密文平均有一半的 bit 变化。
  6. ①一个字母永不加密成它自己(反射器缺陷,每次猜测能排除大量可能)②报文格式固定(提供已知明文 crib)③操作员复用密钥、用女友名字。教训:真实系统的崩溃点往往不在算法,而在使用方式。
  7. 不要问"我能不能破它",要问 "有没有某种结构,能让攻击者绕过穷举"。

🛑 可以停在这里

⚡ 走神救援

先记住这几件事

下一节 👉 03-一次一密与完美保密.md ⭐

打卡记录保存在你的浏览器里,首页能看到总进度