在上一节,我们见识了单表替换密码的威力——它的密钥空间大得惊人,理论上无法暴力破解。然而,历史告诉我们,这种密码早在公元9世纪就被阿拉伯学者攻破了。破解的方法不是靠蛮力,而是靠一种巧妙的统计技巧:频率分析。
语言的指纹
你有没有注意过,我们说话时用的每个字母,出现的频率其实不一样?
以英文为例,随便找一段文章统计一下,你会发现:
- 字母 E 出现的次数最多,约占12.7%
- 其次是 T(9.1%)、A(8.2%)、O(7.5%)、I(7.0%)、N(6.7%)
- 而 Z、Q、X 则少得可怜,加起来不到1%
这就是语言的“指纹”——每种语言都有自己的频率分布。法语中E也最多,但后面跟着的是A、I、S等;德语中E同样领先,但C、Y等出现较少;中文虽然不适用字母统计,但汉字的出现频率同样不均匀(比如“的”字远多于其他字)。
这个规律,在单表替换密码中会原封不动地保留下来。
为什么保留?
回想一下单表替换的规则:每个明文字母都被固定替换成另一个密文字母。比如:
- 明文 E → 密文 X
- 明文 T → 密文 Q
- 明文 A → 密文 M
那么,如果明文中E出现了100次,密文中X就一定会出现100次。换句话说,明文的频率分布,只是换了个“外衣”,完完整整地转移到了密文身上。
这就是单表替换的致命伤。
第一次破解
频率分析最早是谁发明的?历史学家认为,它很可能诞生在9世纪的阿拉伯世界。
当时,阿拉伯帝国是数学和科学的中心,学者们对数学、统计学有着浓厚的兴趣。一位名叫肯迪(Al-Kindi)的学者,写了一本名为《关于破译加密消息的手稿》的书。书中详细描述了如何利用字母频率破解密码。这本书被认为是世界上最早的密码分析著作。
肯迪在书中写道:
“破解加密消息的一种方法是,如果你知道消息所用的语言,那么就找到这种语言中每个字母出现的频率。然后,统计密文中每个字母出现的次数,把出现次数最多的字母替换成语言中最常见的字母,以此类推……”
这段话,就是频率分析的核心思想。
实战演练:破解一封密信
让我们亲手体验一下频率分析的威力。假设你截获了这样一封密信(为了方便阅读,我们保留了单词间的空格,但在实际破解中,空格往往是未知的):
GSV ZXG HXG LM GSV NXG |
你的任务是把它还原成英文。
第一步:观察密文结构
密文由6个“单词”组成,长度分别为3、3、3、2、3、3。英文中常见的三字母词有THE、AND、FOR等,两字母词有ON、IN、AT等。这暗示可能是一个简单的句子。
第二步:统计字母频率
将密文所有字母列出(忽略空格):
G S V Z X G H X G L M G S V N X G
统计每个字母出现次数:
- G: 4次
- X: 3次
- S: 2次
- V: 2次
- H: 1次
- Z: 1次
- L: 1次
- M: 1次
- N: 1次
按照英文频率,最常见的字母是E(约12%),其次是T、A、O等。这里G出现4次,很可能是E或T。我们暂设G = T(因为T也很常见)。
第三步:猜测常见单词
密文中有一个重复出现的三字母词 GSV,出现了两次(第一个和第五个单词)。如果G = T,那么GSV很可能是 THE(英文中最常见的三字母词)。假设GSV = THE,则:
- G → T
- S → H
- V → E
这个映射看起来合理,而且没有冲突。我们先采用这个假设。
第四步:继续推导
现在看第二个单词 ZXG。已知G = T,X未知,Z未知。如果ZXG是一个常见的三字母词,可能是 CAT、HAT、BAT 等。假设它是 CAT,那么:
- Z → C
- X → A
- G → T
这样,X = A,Z = C 就确定了。而且CAT确实是一个常见词。
第三个单词 HXG,已知X = A,G = T,所以HXG = H A T,很可能是 HAT。那么H → H(即密文H对应明文H自身)。这没有问题。
第四单词 LM,是两个字母。常见的两字母词有ON、IN、AT等。我们稍后确定。
第五单词 GSV 已经是THE。
第六单词 NXG,已知X = A,G = T,所以NXG = N A T,可能是 MAT、BAT、CAT 等。我们已经有了CAT和HAT,这里可能是 MAT,即N → M。那么N对应明文M。
现在回到第四单词 LM。如果LM是 ON,则L → O,M → N;如果LM是 IN,则L → I,M → N。注意,我们已经有N → M(密文N对应明文M),所以密文M不能同时对应明文N(除非M = N,但那是同一个字母,不行)。所以我们需要检查一致性。
如果LM是ON,则L → O,M → N。那么密文M对应明文N,而之前N → M,正好是一对互换,这很合理(A↔Z式的替换)。如果LM是IN,则L → I,M → N,那么密文M对应N,而N → M,也是一对互换,同样可能。哪个更可能?ON比IN在英语中更常见一些,尤其作为介词。我们暂时假设LM = ON,即L → O,M → N。
至此,我们得到了完整的映射表:
| 密文字母 | G | S | V | Z | X | H | N | L | M |
|---|---|---|---|---|---|---|---|---|---|
| 明文字母 | T | H | E | C | A | H | M | O | N |
注意H映射到H自身,这允许。
第五步:还原整句
现在把映射应用到整个密文:
- GSV → T H E → THE
- ZXG → C A T → CAT
- HXG → H A T → HAT
- LM → O N → ON
- GSV → THE
- NXG → M A T → MAT
得到句子:THE CAT HAT ON THE MAT
这个句子在语法上成立(“猫的帽子在地垫上”),虽然不太常见,但每个单词都是正确的英文单词。更重要的是,它展示了频率分析和单词模式如何一步步揭开密文的面纱。
为什么这个例子有效?
在这个例子中,我们利用了:
- 高频字母:G出现最多,被猜为T(实际也正确)。
- 常见单词模式:GSV是重复的三字母词,被猜为THE。
- 上下文一致性:一旦确定部分映射,其他单词的猜测就变得容易。
当然,实际破解中可能需要处理更长的文本、更多的试错,但原理完全一样。
频率分析的局限性
频率分析虽然强大,但也有弱点:
- 短文本:如果密文只有几十个字母,统计频率可能不准。比如一封只有几个词的短信,可能恰好没有E,或者某个低频字母出现很多次。
- 故意干扰:发信人可以故意删除所有空格、混用大小写、插入无意义字符,增加分析难度。
- 语言变体:如果明文是其他语言,或者刻意模仿另一种语言的频率,也会增加难度。
但在16世纪,当一封密信长达几百个词时,频率分析几乎百发百中。
历史的回响
频率分析的发现,彻底改变了密码学的格局。从此,密码设计师不得不思考:如何让密文不泄露明文的统计特征?
这个挑战,最终催生了下一节要讲的维吉尼亚密码——它试图用“多表替换”的方式,让同一个字母在不同位置有不同的替身,从而抹平频率分布。
但那是后话了。现在,你已经掌握了古人破解单表替换的秘密武器。下次看到一封神秘的密信,不妨自己动手试试——你可能会发现,自己也能当一回古代的密码分析师。
你知道吗? 爱德华·爱伦·坡的小说《金甲虫》中,主人公就是利用频率分析破解了一份藏宝图密文。这是文学作品中最早出现密码分析的情节之一。