一个有 4×10²⁶ 种密钥的密码,如何在一杯咖啡的时间里被字母频率击溃。
上一章结尾我们留了个悬念:如果让 26 个字母各自随机映射,密钥空间会暴涨到 26! ≈ 4×10²⁶,暴力破解彻底无望。这一章我们就来兑现那句话——密钥空间大,不等于安全。而击溃它的武器,九世纪的阿拉伯学者就已经握在手里了。
单表替换密码用一张固定的替换表:每个明文字母对应唯一一个密文字母。凯撒密码是它的特例(替换表恰好是"整体移位");但一般的替换表可以是 26 个字母的任意置换。
密钥就是这整张表,共有 26! 种可能。这个数字大到什么程度?假设一台超算每秒能试一万亿(10¹²)张表,试完所有可能也要约 一千三百万年。凯撒的暴力破解在这里彻底失效了。
那 Alice 和 Bob 是不是终于安全了?九世纪的巴格达学者金迪(Al-Kindi)会告诉你:并没有。
金迪的洞察极其简单:替换密码换掉了字母的"名字",却没换掉它们出现的"频率"。在英语里,字母 E 出现得最频繁(约 12.7%),其次是 T、A、O;而 Z、Q、X 极其罕见。如果 E 被替换成了 K,那么密文里 K 就会成为出现最多的字母——频率这条"指纹"原封不动地留了下来。
通过统计密文中各符号的出现频率,并与目标语言的已知频率分布做匹配,来推断替换关系的破解方法。它是密码分析学的第一个系统性方法,也标志着密码学从"手艺"走向"科学"。
标准英文字母频率长这样(记住前几名 E T A O I N S H R 就够用了):
下面是一段用某个未知替换表加密的英文密文。工作台会画出它的字母频率(红条),叠在标准英文频率(浅色轮廓)之上。
你可以:①点 "按频率自动猜",让机器把"密文里最常见的字母"依次对应到"英文里最常见的字母"(E T A O…),看半通不通的明文浮现;②然后手动微调那张映射表,一两个字母一改,句子就会豁然开朗。这正是真实破译者的工作方式——统计学开个头,人脑补完剩下的。
因为一段有限文本的频率只是近似标准分布,尤其当文本较短时。真实的 E 也许在这段里排第二而非第一。所以频率分析给的是"高概率起点",不是答案。破译者还会用别的线索收尾:双字母组合(TH、HE、IN)、单字母词(只可能是 a 或 I)、词末的 S/E 等。语言的冗余无处不在,而冗余就是密码分析的养料。
频率分析击溃替换密码,留下一条比"密钥要大"更深刻的教训:
好的密码必须抹平明文的统计结构,让密文看起来像均匀随机。
换句话说,密文里不该残留任何关于明文的可利用规律。这个要求上升到极致,就是第 1 章提过的"密文与随机噪声不可区分"。现代对称密码为此引入两个 Shannon 提出的核心性质:
替换密码有一点点混淆(字母被换了),却毫无扩散(每个明文字母只影响对应的一个密文字母,频率因此原样保留)。现代密码把这两者拉满,频率分析就再也无从下手。
频率分析今天依然在"咬人"。2013 年前后,不少人以为把数据库字段用某种"确定性加密"(相同明文永远得到相同密文)存起来就安全了——直到研究者用类似频率分析的手法,仅凭密文的重复模式就还原出大量医疗记录里的性别、种族、诊断字段。确定性加密泄露的正是"哪些明文相同"这一统计结构。你会在第 8 章的 ECB 模式里,看到同一个幽灵以图像的形式现身。