密语 · CIPHER | 目录 CH.02 / 26
绝密
Phase 1 · 古典时代

凯撒密码与暴力破解

两千年前罗马军团的加密术,以及它教给我们的第一条铁律:密钥空间太小,一切免谈。

阅读 ~12 分钟 前置 第 1 章 Demo 凯撒轮盘 + 暴力破解

公元前一世纪,尤利乌斯·凯撒给他的将军们写信时,把每个字母向后挪三位:A 变 D,B 变 E,以此类推。这就是凯撒密码——人类有记载最早的加密方法之一。它简单到可以用一个纸轮盘完成,也简单到我们能用它讲清楚整个密码学最核心的一个量:密钥空间。

一、移位密码怎么工作

把 26 个字母编号 A=0, B=1, …, Z=25。凯撒密码的加密就是一个模 26 的加法:

C = (P + K) mod 26      P = (CK) mod 26

这里 K 就是密钥——移位量。凯撒本人固定用 K=3,但我们可以取 1 到 25 之间任意值(K=0 等于没加密)。mod 26 保证字母表"绕回来":Z 往后挪 3 位会回到 C。这个"绕回来"的模运算,后面会一路跟着我们直到 RSA 和椭圆曲线。

密钥空间(keyspace)

一个密码所有可能密钥的集合,其大小决定了"挨个试"要试多少次。凯撒密码的密钥空间只有 25 个有效值(排除 K=0)。记住这个数字——它马上就会要了凯撒密码的命。

二、亲手转动凯撒轮盘

下面这个 Demo 就是一个数字化的凯撒轮盘。拖动移位滑块,看外圈(明文)如何对齐到内圈(密文);上方的文本会实时加密。试试把移位调到 3,输入 ATTACK AT DAWN

DEMO 凯撒轮盘
外圈是明文字母,内圈是它被映射成的密文字母;高亮的一对就是当前光标附近字母的对应关系。

三、暴力破解:为什么凯撒必死

现在切换阵营,当一回 Eve。假设你截获了一段凯撒密文,但不知道 K。你会怎么做?

答案简单得令人失望:把 25 个密钥全试一遍。这叫暴力破解(brute force)——穷举整个密钥空间。25 次解密里,只有一个会产出通顺的英文,那就是答案。人眼扫一遍就能挑出来;而计算机可以用"哪段最像英语"自动挑。

怎么让机器判断"像不像英语"?一个经典办法是卡方统计量:把这段文本的字母频率和标准英文频率(E 最多、Z 最少……第 3 章详谈)做比较,偏差越小越像英语。下面的 Demo 会把 25 种解密全列出来,并用卡方分数自动把最可能的答案顶到最前面、标绿。

DEMO 凯撒暴力破解台
绿色的是卡方分数最低(最像英语)的候选。注意:文本越短,统计越不可靠——极短的密文可能有多个"看起来都行"的解。
这就是安全的第一课

凯撒密码的算法本身没问题,毁在密钥空间只有 25。任何密钥空间小到可以穷举的密码,都是不安全的,无论算法多巧妙。现代 AES 的密钥空间是 2128 ≈ 3.4×1038——就算把全世界的计算机都拉来,每秒试万亿次,也要远超宇宙年龄。这就是"暴力破解不可行"的真正含义。

四、加大密钥空间就够了吗?

一个自然的念头:既然移位不够,那我不按固定规律移,而是让 26 个字母各自随机映射到另一个字母呢?这就是单表替换密码,密钥空间暴涨到 26! ≈ 4×1026——比 AES 差不了几个数量级,暴力破解彻底没戏。

听起来固若金汤?第 3 章会用一个残酷的事实把它撕开:密钥空间大,不等于安全。替换密码保留了语言的统计结构,而统计结构会像指纹一样出卖它。我们会亲手用频率分析,在几秒内破解一个 4×1026 密钥空间的密码。

ROT13:一个"故意不安全"的凯撒

你可能在老论坛见过 ROT13——就是 K=13 的凯撒密码。因为 13 是 26 的一半,加密和解密是同一个操作(转两次回到原文)。它从不用于保密,而是用来"遮挡"剧透、答案、冒犯性文字,让人需要主动解码才看得到。这是个有趣的提醒:编码 ≠ 加密。Base64 同理——它只是换种表示,毫无保密性。

本章要点

  • 凯撒密码是模 26 加法:C = (P + K) mod 26,密钥就是移位量。
  • 密钥空间 = 所有可能密钥的数量,它决定暴力破解的成本。凯撒只有 25,秒破。
  • 暴力破解 = 穷举密钥空间;用卡方统计量可让机器自动认出"最像英语"的解。
  • 密钥空间大是必要条件,但远非充分——下一章的替换密码会证明这一点。