凯撒密码
凯撒密码是一种简单的加密方法,即将文本中的每一个字符都位移相同的位置。
如选定位移3位: 原文:a b c 密文:d e f
由于出现了字母频度分析,凯撒密码变得很容易破解。 “如果我们知道一条加密信息所使用的语言,那么破译这条加密信息的方法就是找出同样的语言写的一篇其他文章,大约一页纸长,然后我们计算其中每个字母的出现频率。我们将频率最高的字母标为1号,频率排第2的标为2号,第三标为3号,依次类推,直到数完样品文章中所有字母。然后我们观察需要破译的密文,同样分类出所有的字母,找出频率最高的字母,并全部用样本文章中最高频率的字母替换。第二高频的字母用样本中2号代替,第三则用3号替换,直到密文中所有字母均已被样本中的字母替换。”
维吉尼亚密码
维吉尼亚密码由凯撒密码扩展而来,引入了密钥的概念。如:
未加密文字:THE BUTCHER THE BAKER AND THE CANDLESTICK MAKER。(屠夫、面包师和蜡烛匠)。
关键密钥: BIG BIGBIGB IGB IGBIG BIG BIG BIGBIGBIGBI GBIGB
加密文字: UPK CCZDPKS BNF JGLMX BVJ UPK DITETKTBODS SBSKS
(来自百度百科)
维吉尼亚密码的破解
维吉尼亚密码分解后实则就是多个凯撒密码,只要知道密钥的长度,我们就可以将其分解。 如密文为:ABCDEFGHIJKLMN 如果我们知道密钥长度为3,就可将其分解为三组: 组1:A D G J N 组2:B E H K 组3:C F I M 分解后每组就是一个凯撒密码,即组内的位移量是一致的,对每一组即可用频度分析法来解密。 所以破解维吉尼亚密码的关键就是确定密钥的长度。
确定密钥长度
确定密钥长度主要有两种方法,Kasiski 测试法相对简单很多,但Friedman 测试法的效果明显优于Kasiski 测试法。
Kasiski 测试法
在英文中,一些常见的单词如the有几率被密钥的相同部分加密,即原文中的the可能在密文中呈现为相同的三个字母。 在这种情况下,相同片段的间距就是密文长度的倍数。 所以我们可以通过在密文中找到相同的片段,计算出这些相同片段之间的间距,而密钥长度理论上就是这些间距的公约数。
Friedman 测试法
首先我们要知道,对于一种特定的自然语言,如果文本足够长,那么各个字母出现的概率是相对稳定的。 以下是维基百科给出的英语的字母频率表:
字母 | 英语中出现的频率 | |
---|---|---|
a | 8.167% | |
b | 1.492% | |
c | 2.782% | |
d | 4.253% | |
e | 12.702% | |
f | 2.228% | |
g | 2.015% | |
h | 6.094% | |
i | 6.966% | |
j | 0.153% | |
k | 0.772% | |
l | 4.025% | |
m | 2.406% | |
n | 6.749% | |
o | 7.507% | |
p | 1.929% | |
q | 0.095% | |
r | 5.987% | |
s | 6.327% | |
t | 9.056% | |
u | 2.758% | |
v | 0.978% | |
w | 2.360% | |
x | 0.150% | |
y | 1.974% | |
z | 0.074% |
然后我们需要知道重合指数(IC, index of coincidence)的概念。 重合指数表示两个随机选出的字母是相同的的概率,即随机选出两个A的概率+随机选出两个B的概率+随机选出两个C的概率+……+随机选出两个Z的概率。 对英语而言,根据上述的频率表,我们可以计算出英语文本的重合指数为 P(A)^2 + P(B)^2+……+P(Z)^2 = 0.65 利用重合指数推测密钥长度的原理在于,对于一个由凯撒密码加密的序列,由于所有字母的位移程度相同,所以密文的重合指数应等于原文语言的重合指数。 据此,我们可以逐一计算不同密钥长度下的重合指数,当重合指数接近期望的0.65时,我们就可以推测这是我们所要找的密钥长度。 举例来说,对密文ABCDEABCDEABCDEABC 首先测试密钥长度=1,对密文ABCDEABCDEABCDEABC统计每个字符出现的次数: A: 4 B: 4 C: 4 D:3 E:3 那么对于该序列的重合指数就为:(4/18)^2 + (4/18)^2 + (4/18)^2 +(3/18)^2 +(3/18)^2 != 0.65 然后测试密钥长度=2,将密文ABCDEABCDEABCDEABC分解为两组: 组1:A C E B D A C E B 组2:B D A C E B D A C 我们知道如果密钥长度真的是2,那么组1,组2都是一个凯撒密码。对组1组2分别计算重合指数。 如果组1的重合指数接近0.65,组2的重合指数也接近0.65,那么基本可以断定密钥长度为2。
字母频度分析
在知道了密钥长度n以后,就可将密文分解为n组,每一组都是一个凯撒密码,然后对每一组用字母频度分析进行解密,和在一起就能成功解密凯撒密码。 上文已经说到,自然语言的字母频度是一定的。字母频度分析就是将密文的字母频度和自然语言的自然频度排序对比,从而找出可能的原文。 理论上文本长度越长,字母频度分析的效果更好。