维吉尼亚密码的原理及破解

维吉尼亚密码是一种简单的多表代换密码(由26个类似的Caesar密码的代换表组成),

即由一些偏移量不同的恺撒密码组成,这些代换在一起组成了密钥。

英文中a~z,由0~25表示。

假设串长为m,明文为P,密文为C,密钥为K则

C=(P_{1}+K_{1},P_{2}+K_{2},...,P_{m}+K_{m})mod 26

P=(C_{1}-K_{1},C_{2}-K_{2},...,C_{m}-K_{m})mod 26

也可以根据图1进行计算,如图。

图1 表格(来源 Wikipedia)

例如,假设明文为: ILOVEMIMAXUE ,密钥为: AWSL

则密文为: IHGGEIAXATMP

(密钥若长度不够可以继续重复,例如 AWSLAWSLAWSL

解密方式与加密正好相反,通过图1可以进行解密。

再例如,假设密文为: FYXTNFXDM ,密钥为: TQL

则解密得到的明文为: MIMAXUENB


破解维吉尼亚密码

我们知道,移位密码、仿射密码和单表代换密码都没有破坏统计规律,所以我们可以直接根据字母的频率分析进行破解。图2、图3展示了英文字母的频率。

例如,对于一个字母来说,在一篇密文中,H出现的频率最高,那么H对应的明文可能是e、t、a等在前几位的字母。但对于维吉尼亚密码,可以被加密成不同的密文,因而简单的频率分析在这里并没有用。

频率排序:

两个字母: th, he, in, er, re, on, an, en

三个字母: the, and, tio, ati, for, tha, ter, res


图2 英文字母频率(来源 Wikipedia)



图3 英文字母频率(来源 Wikipedia)

步骤:1、确定密钥的长度 2、确定密钥的内容 3、根据密钥恢复明文。

一、确定密钥的长度

方法一:Kasiski测试

破解维吉尼亚密码的关键在于它的密钥是循环重复的。如果我们知道了密钥的长度m,破解难度就会降低。我们使用Kasiski测试,将相同字母组找出来,然后求距离差的最大公约数gcd(),由此猜测m。

因为若用给定的m个密钥表周期地对明文字母进行加密,则当明文中有两个相同的字母组(长度大于3)在明文序列中间隔得字母数为m的倍数时,这两个明文字母组对应的密文字母组必相同。但反过来,若密文中出现两个相同的字母组,它们所对应的明文字母组未必相同,但相同的可能性极大。所以我们可以在密文中寻找重复次数>=3的字母组。然后计算重复字母组的两两相邻的距离差。

方法二:重合指数法(Coincidence Index)

设一门语言由n个字母构成,每个字母发生的概率为 P_i (1<=i<=n),则重合指数是指其中两个随机元素相同的概率的和,记为 CI=\sum_{i=1}^{n}{P_{i}^{2}}

完全随机的英文文本 CI=26\left( \frac{1}{26} \right)^{2}=0.0385 ,一个有意义的英文文本 CI=0.065

实际使用CI的估计值为 CI'L 为密文的长度, f_{i} 为26个字母中第 i 个字母发生的次数

CI'=\sum_{i=1}^{n}{\frac{f_i}{L}·\frac{f_i-1}{L-1}}

那么求出 CI' 有什么作用呢,是能够区分单表代换密码和多表代换密码。如果密文的重合指数较低,就可能是一个多表代换密码。因为单表代换改变的只是字母,并没有改变频率,故统计规律和自然语言相似。若结果接近 0.065 ,则猜测正确。

用重合指数法进行测试,分别测试m=1,2,3,4,5...

若m=1,则整篇密文在同一组内,直接进行测试。

若m=2,则需把密文分成两组,从前往后每两个中,第一个进入1组,第二个进入2组,对这两组分别进行测试。

......


二、确定密钥的内容


在这一步中,我们要使用拟重合指数法。

Chi测试

其中n代表某种语言由n个字母组成, p_i 表示字母i在维吉尼亚密文分布中发生的概率, q_i 表示字母i在正常英语文本分布中发生的概率,则拟重合指数可以定义为。

\chi=\sum_{i=1}^{n}{p_iq_i}

当两个频率分布类似时, \chi 的值相对要高。

对于一个移位密码:

1、统计每个字母的频数 A: f_0 ... Z: f_{26}

2、令密文长度为 n'=\frac{n}{m} ,则26字母的概率分布 A: p_0=\frac{f_0}{n'} ... Z: p_{25}=\frac{f_{25}}{n'}

3、获得通常文本的字母概率分布 A: q_0 ... Z: q_{25}

4、对概率分布进行移位i(0<=i<=25),得到序列 P_i= p_{26-i},...,p_{25},p_{0},p_{1},...,p_{25-i}

5、对分布 P_i 与Q计算相关卷积 Correlation(P_i,Q)=\sum_{j=0}^{26}{P_{(i+j)mod26}}\cdot{q_j}

6、得到最大相关值 Correlation(P_i,Q) 对应的i为位移量的估计值。


三、根据密钥恢复明文

每组按照凯撒密码解密即可。


2020.3.8

祝各位女神节日快乐!

编辑于 2020-05-13 00:50