破解维吉尼亚密码

前言

这是本次专栏的第一部分——破解维吉尼亚密码,先来介绍一下维吉尼亚密码的历史。

1553年,意大利密码学家吉奥万·巴蒂斯塔·贝拉索出版了他的密码学著作《吉奥万·巴蒂斯塔·贝拉索先生的密码》(La cifra del. Sig. Giovan Battista Bellaso),里面详细记录了这种新的加密方式。

1586年,由法国密码学家布莱斯·德·维吉尼亚对这种加密方式进行了一定程度上的优化,所以后世误认为这种新的加密方式是维吉尼亚首先发明,是不是很像阿拉伯数字(doge)。

正如标题所言维吉尼亚密码一度认为是不可破译的。因为1917年,在著名的《科学美国人》杂志上,依然表达了这个观点。
在这里插入图片描述
那么我们今天就来破破看看!!!

符号表示
P:明文空间,所有可能的明文组成的有限集
C:密文空间,所有可能的密文组成的有限集
K:密钥空间,所有可能的密钥组成的有限集

Enc:加密算法
Dec:解密算法

古典密码分类

古典密码名称描述
凯撒密码对于26个字母,密钥为3,明文字母向后移动3位
移位变换对于26个字母,假设密钥为k,则明文字母向后移动k位,即c=m+kmod26
仿射变换有两个密钥a,b,c=am+bmod16,其中为了保证a可逆,所以gcd(a,26)=1
维吉尼亚密码多个凯撒密码,假设密钥为k1,k2…第一个用k1加密,第二个用k2加密如此循环

可以看出来不管是凯撒密码,移位密码,还是放射密码都是单表代换,明密文一一对应,而维吉尼亚密码则是多表代换的典型例子。

维吉尼亚为什么这么难破

1.相比单表代换,维吉尼亚密码加密过程由一个26×26的表格组成,横坐标为明文,纵坐标为密钥。
在这里插入图片描述
2.破坏了统计规律,我们知道单表代换是不会破坏统计规律的,假如一篇密文里k出现的概率最高,那么k对应的明文可能是e、t等,因为在样本数量足够大时字母出现的概率具有规律性,e,t,a,o等出现概率最高,j,x,q,z出现概率最低。但是维吉尼亚密码作为多表代换,同一个明文可能对应不同的密文,无法利用统计规律攻击。

3.确定密钥长度困难,破解密钥长度是破解密钥乃至明文的关键,这也是多表代换密码破译比起单表代换困难的主要原因。

选择破解的密文

krkpewxvftksopztecxvbuhfvycgxouflihoffptrcwffwhkcevxhiuzfposdvccyctpmjtbfymllctiwxtacsmjmoncwdnawjrwtjgjsuystvbxgvcmgczbqecllttfkjlacpfttjgeegtbvkfpmhjzqaxhvvpgxoeychrcwumchhyigixhqdciawunmjerefkekcozqttznfdjlopuyqhjgrjawcpfrgxhwiljgrgiycrqkiajfgvrlrxgkkghdbqnliaovzrltgafslacjvjexrwjrdzsvruprttfkwxfgrlstznnmjerdvjdlhkwwdngjfsawgjfunhitjcaykgrptzicibtwrcpycwbkxfibrqemivotvwdnotvldmvgicshbqkztmfqlzaxrqekntqefscmbqkfxguyzjaaorgccmcovrwxbckgdgonrqhxadcclbznjfdpzgegtgqawygxkgcjiasofqiecxvbdyageztjikvrxymqlapghcbcrtfgfdnhitjcaytqiknlsnwgrtbpfrlkwvvycraqicqnhpfrwbbizliasyfpawqqljslhqgktmccumgxmqlsemcvycsxovy

破解过程

1.确定密钥长度——重合指数法
2.确定密钥相对位移——重合互指数法
3.穷搜密钥字——穷搜法
PS:变成语言python

确定密钥长度

方法一:Kasiski 测试法
原理:两个相同的明文段将被加密成相同的密文段,它们的位置间距假设为 σ,则σ≡0 (mod m)。因此搜索长度至少为 3 的相同密文段,记下其离起始点的密文段的距离为σ1,σ2,σ3…………,那么可以猜测 m 。

这是一个很考验眼神的方法,从所示密文最后部分来看vy显然重复出现了,两个vy间的距离为6,后面可以验证果然是6(摊手)。

方法二:重合指数法
原理:自然语言(以英语为例)的重合指数约为 0.065,而且单标代换不会改变该值。

重合指数的计算:设 X=x1 x2 x3…………xn 是一条 n 个字母的串,x 的重合指数记为Ic(x),定义为 x 中两个随机元素相同的概率。计算公式如下: I c ( x ) = ∑ i = 0 N f i ( f i − 1 ) n ( n − 1 ) I_c(x)=\frac{\sum_{i=0}^Nf_i(f_i-1)}{n(n-1)} Ic(x)=n(n1)i=0Nfi(fi1)

在单表代换中,不会改变该值,也就是用相同密钥字加密应服从相同的重合指数。如果我们从 1 开始猜测密钥字长度,根据密钥字长度将所有用相同密钥字加密的密文分组,按组计算重合指数,最接近 0.065 时密钥长度即为我们所需的密钥长度。

在这里插入图片描述
在这里插入图片描述
结论:密钥长度为6时重合指数最接近0.065

确定相对位移

原理:密钥字的相对位移实际上就是确定密钥之间的相互关系重合互指数:设 x=x1 x2 x3 x4…………xn 和 y=y1 y2 y3 ……yn是长度为 n 和 n的串,其重合互指数为从 x 和 y 中分别随机选出一个元素且两个元素相同的概率。

方法:计算重合互指数 M I c ( x , y ) = ∑ i = 0 N f 1 i ( f 2 i ) n 1 n 2 MI_c(x,y)=\frac{\sum_{i=0}^Nf1_i(f2_i)}{n1n2} MIc(x,y)=n1n2i=0Nf1i(f2i)

考虑不同的密钥字加密后密文串的重合互指数,设密钥字为k=k1 k2 k3 ……kdC i 中的一个字母与 Cj 中的一个字母都是 a 的概率为 p0-kip0-kj其中 p0-ki 为密文 a 所对应的明文字母出现的概率,同理计算 b,c,d……z.

MIc 取决于相对位移 ki-kj,因此可以利用此特点计算密钥字 C1,C2,C3,C4,C5,C6 的相对位移猜测不同的密钥字的相对位移 s(0~25).如果 s 猜对了,则 MIc 应该接近 0.065,这意味着找到了不同密钥字加密的相同的明文字母,也就是找到了密钥字之家安的相对位移。用 m 表示明文字母,c,C分别表示 Ci ,Cj 中 m 对应的密文字母,那么有:m≡c-kj (mod26)m≡C-kj(mod 26)因此密钥之间的相对位移体现在密文的相对位移上。
在这里插入图片描述
在这里插入图片描述
可以得到位移关系:
K1-k2=11
K1-k3=4
K1-k4=13
K1-k5=9
K1-k6=14

穷举搜索密钥

原理:我们通过第二步已经知道了后五位密钥字与第一位密钥字的相对位移,因此我们从 a 开始穷搜第一位密钥字,得出明文后观察明文是否符合自然语言,符合则猜测正确。

可以得到,当密钥为crypto时明文:
I am a live here my beloved for the reason to adore you oh how anxious i have been for you and how sorry i am about all you must have suffered in having no news from us may heaven grant that this letter reaches you do not write to me this would compromise all of us and above all do not return under any circumstance sit is known that it was you who helped us to get away from here and all would be lostif you should show yourself we are guarded day and night i do not care you are no there do not be troubled on my account nothing will happen to me the national assemble will show leniency f are well the most loved of men be quiet if you can take care of yourself for myself i cannot write anymore but nothing in the world could stop me to adore

  • 3
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值