🏠 总目录📚 本教程 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. 不要问"我能不能破它",要问 "有没有某种结构,能让攻击者绕过穷举"

🛑 可以停在这里

走神救援

几千年的古典密码倒在同一个原因:明文的统计规律透过密文漏了出来凯撒(+k mod 26)→ 密钥空间 25,穷举即破 → 第一课:空间太小=没有安全性(现代≥2¹²⁸)。单表代换空间 26!≈2⁸⁸ 却被几百个字符破掉——⭐频率分析:代换只换名字不改频率,密文最多的字母几乎一定是 E → 第二课:密钥空间大≠安全,攻击者有统计规律这条捷径维吉尼亚用密钥词轮流移位打平了单字母频率,被称为"不可破译"几百年,倒于 ⭐Kasiski 检验:同一个词对齐同一段密钥会产生相同的密文片段,两次距离是密钥长度的倍数(取 gcd),拿到长度 m 后按位置分成 m 组,每组退化成凯撒 → 第三课:把问题拆成独立小块是密码分析最通用的武器(后面破 LFSR、分解大数同一思路)。Shannon 的诊断:缺混淆(密钥与密文关系要复杂)和扩散(改1bit明文应影响一半密文 = 雪崩效应)——AES 就是围绕这两个词设计的。💥恩尼格玛(10²³ 空间)倒于"一个字母永不加密成自己"的结构缺陷 + 固定报文格式提供已知明文 + 操作员复用密钥 → 第四课:真实系统死在使用方式上,不是算法(今天依然如此:nonce重用、密钥硬编码、随机数不随机)。⭐正确的提问不是"我能不能破它",而是"有没有某种结构能让攻击者绕过穷举"

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

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