Frederick Kasiski通过对Vigenere加密法长时间的观察,得到一个简单的结论:密钥的重复部分与明文的重复部分连接,在密文中也产生一个重复部分。在通信中,我们肯定会使用很多重复的单词,例如the、what、dear等,如果与他们对应的关键字也是相同的,则会产生相同的密文。举一个简单的例子:
密钥:r u n r u n r u n r u n r u n r u n r u n r u n r u n r u n
明文:t o b e o r n o t t o b e t h a t i s t h e q u e s t i o n
密文:k i o v i e e i g k i o v n u r n v j n u v k h v m g z i a
|--------9--------| |-----6-----|
我们注意到,密文中重复字符串之间的距离反映了密钥重复的次数,既反映了密钥的长度。上例中,两次“kiov”之间的距离为9,“nu”之间的距离为6,我们可以猜测这些距离因该是密钥长度的倍数,密钥长度可能为3。于是Kasiski建议的破解过程如下:
(1)找到密文中重复的字符部分
(2)计算重复字符之间的字符数
(3)找出从步骤(2)中得到的数的因子(就是最大公约数)
(4)最大公约数很可能就是关键字的长度
美国密码学家William Friedman(一开始我将Friedman读成冯·诺依曼,顿时又添一份崇拜感,汗。当然,这两位都是密码学上的大师)通过他对数学的造诣,提出了一致性索引的概念(Index of Coincidence,IC)来分析多码加密法。我们知道,英语中每个字符出现的概率都是不一样的,绘成频率分析图,图中就有高峰与低谷,单码加密法是没有办法改变字母出现的概率的,但是对于多玛加密法,我们得到的字母频率图就变得很光滑了。完全平滑的分布就是每个字母出现的概率就是1/26的情况。IC是基于凹凸度量的,凹凸度量是指从文本中选取的字母的实际概率与从完全平滑的分布中选取该字母的概率之差。