美文网首页
密码学笔记2——维吉尼亚密码的破解

密码学笔记2——维吉尼亚密码的破解

作者: 自学java的菜鸟小赵 | 来源:发表于2020-08-28 18:19 被阅读0次

    1.凯撒密码

    官方例子

    恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时的密钥就是3):
    明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ ;
    密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC。
    使用时,加密者查找明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。例如:
    明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG ;
    密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ。

    恺撒密码的加密、解密方法还能够通过同余的数学方法进行计算。首先将字母用数字代替,A=0,B=1,...,Z=25。此时偏移量为n的加密方法即为:
    C=E(p)=(p+k)mod26

    解密就是:

    P=D(c)=(c-k)mod26

    2仿射密码

    官方解释

    仿射密码是一种替换密码。它是一个字母对一个字母的,其中K=(a,b),gcd(a,26)=1。它的加密函数是
    c=E(p)=(a*p+b)mod26

    ,其中a和m互质,m是字母的数目。解码函数是

    p=D(c)=(c-b)*a^-1mod26
    ,其中a^-1代表的是a的乘法逆元。

    乘法逆元,自己去了解,举一个简单例子。

    7关于摸26的乘法逆元
    找出一个数x,使得7xmod26=1,则x是7关于模26的乘法逆元。因为7*15-26&4=1,则15是7的乘法逆元。

    Hill密码

    官方解释

    希尔密码是运用基本矩阵论原理的替换密码,由Lester S. Hill在1929年发明。

    每个字母当作26进制数字:A=0, B=1, C=2... 一串字母当成n维向量,跟一个n×n的矩阵相乘,再将得出的结果模26。

    注意用作加密的矩阵(即密匙)在Z26n必须是可逆的,否则就不可能解码。只有矩阵的行列式和26互质,才是可逆的。

    加密算法:c=p.k mod 26
    解密算法:p=c.k^-1 mod 26 这里k^-1代表k的逆矩阵

    官方例子

    image.png

    惟密文攻击

    密码学密码分析中,唯密文攻击是一种攻击模式,指的是在仅知已加密文字(即密文)的情况下进行攻击。此方案可同时用于攻击对称密码体制和非对称密码体制。

    ********重点部分

    维吉尼亚密码加解密原理及其破解

    是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
    在一个凯撒密码中,字母表中的每一字母都会作一定的偏移,例如偏移量为3时,A就转换为了D、B转换为了E……而维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。
    为了生成密码,需要使用表格法。这一表格(如图1所示)包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。

    image.png

    加密例子

    1.确定密钥
    首先,和消息接收方需要在密钥上达成一致,加密解密都是同一个密钥,比如选用密钥是BIG。
    2.排列
    明文:THE BUTCHER THE BAKER AND THE CANDLESTICK MAKER
    密钥:BIG BIGBIGB IGB IGBIG BIG BIG BIGBIGBIGBI GBIGB
    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
    加密过程:观察密码方正表,第一行代表明文的字母,而第一列代表密钥的字母,可以观察,T+B->U,H+I->P,后面一模一样。

    重点:破解维吉尼亚密码

    因为是初学密码学,所以对很多知识还不了解,这个文章主要是从一个博主文章里面学习的,地址:https://blog.csdn.net/White_Idiot/article/details/61201864?utm_medium=distribute.pc_feed_404.none-task-blog-searchFromBaidu-6.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-searchFromBaidu-6.nonecas不过他里面的图片都失效了,看得的确费劲,最后学他的文章整理自己一篇笔记。

    1.确定密钥的长度

    1.1 Kasiski测试法

    定义:若用给定的m个密钥表周期地对明文字母加密,则当明文中有两个相同字母组在明文序列中间隔的字母数为m的倍数时,则这两个明文字母组对应的密文字母组必相同。
    若密文中出现两个相同的字母组,他们所对应的明文字母组未必相同,但相应的可能性很大。
    这里我还是引用博主的例子

    密钥:FORESTFORESTFORESTFORESTFOR
    明文:better to do well than to say well
    密文:GSKXWKYCUSOXQZKLSGYCJEQPJZC
    

    第一个YC出现后到第二个YC的结尾一共有12个字母,那么密钥的长度应是12的约数1,2,3,4,6,12之中的一个。当密文很长的时候,可以找出几组重复的密文段,找出它们间距的相同约数,就是密钥长度。

    1.2 重合指数法

    在这里卡了半天才知道怎么运算,博主的例子有些不请楚,我看了几篇文章才知道怎么算这个鬼东西。
    定义:假如一门语言由z个字母构成,每个字母发生的概率为pi,则重合指数是值其中两个随机元素相同概率的和,实际中CI的估计值

    image.png

    这里要解释一下,Ni代表密文符号的数目,n代表密文的长度,而且在多表代换中,由于字符出现的频率接近,则CI接近于0.0385,在单表代换中,CI接近于0.065,这是区分单表代码密码和多表代换密码的重要方法。
    自己可以算一下,在多表代换密码中,CI=(1/26)^2*26=0.03846154

    例子解释

    密文
    KCCPKBGUFDPHQTYAVINRRTMVGRKDNBVFDETDGILT
    XRGUDDKOTFMBPVGEGLTGCKQRACQCWDNAWCRXI
    ZAKFTLEWRPTYCQKYVXCHKFTPONCQQRHJVAJUWE
    TMCMSPKQDYHJVDAHCTRLSVSKCGCZQQDZXGSFRL
    SWCWSJTBHAFSIASPRJAHKJRJUMVGKMITZHFPDISP
    ZLVLGWTFPLKKEBDPGCEBSHCTJRWXBAFSPEZQNR
    WXCVYCGAONWDDKACKAWBBIKFTIOVKCGGHJVLNHI
    FFSQESVYCLACNVRWBBIREPBBVFEXOSCDYGZWPFD
    TKFQIYCWHJVLNHIQIBTKHJVNPIST
    

    先通过测试确定密钥长度m=6,将其分组
    实在找不到图片了

    image.png
    这里我们可以分成6个组
    KGQNGVGGTGCQWAWQHNJEPJTKQFWAPJGHPWKCTAQVNCIVJFVNIVCPQJQJT   重合指数: 0.061557402277623886
    CUTRRFIUFEKCCKRKKCVTKVRCDRSFRRKFZTEEJFNYWKKKVFYVRFDFIVIV   重合指数: 0.08227040816326531
    CFYRKDLDMGQWRFPYFQAMQDLGZLJSJJMPLFBBRSRCDAFCLSCREEYDYLBN   重合指数: 0.04846938775510204
    PDATDETDBLRDXTTVTQJCDASCXSTIAUIDVPDSWPWGDWTGNQLWPXGTCNTP   重合指数: 0.06377551020408163
    KPVMNTXKPTANILYXPRUMYHVZGWBAHMTILLPHXEXAKBIGHEABBOZKWHKI   重合指数: 0.042091836734693876
    BHIVBDROVGCAZECCOHWSHCSQSCHSKVZSGKGCBZCOABOHISCBBSWFHIHS   重合指数: 0.07206632653061225
    平均重合指数为: 0.061705145277563156
    

    拿第一个字密文做例子进行计算,计算他的重合指数,这里我真的去把这个例子算了一遍,太难了,没有办法。

    • 计算字母出现的频率
      A 3 C 4 E 1 F 2 G 6 H 2 I 2 J 6 K 3 N 4 P 4 Q 7 T 4 V 5 W 4
      通过上面的公式计算,长度n=57,最后得到结果与原文近似相等。

    1.3 确定密钥

    在知道了密钥长度n以后,就可将密文分解为n组,每一组都是一个凯撒密码,然后对每一组用字母频度分析进行解密,和在一起就能成功解密凯撒密码。
    使用公式:

    image.png
    计算出M0,然后对子密文段移位25次,同样按照上述方法求出M1 — M25的值。
    根据重合指数的定义知:一个有意义的英文文本,M ≈0.065,所以找出M值接近0.065的移位数,就是秘钥中的对应字母。
    这个地方也有点不好理解
    我们把每一组分开之后,每一组使用的是一个密钥进行加密,即每一组就是一个凯撒密码,具体怎么计算呢:
    首先Pi是指当前字母在字母频率分布表得到概率(这里是我自己的猜测,找不到相关文章,很多文章都是丢个算法给你,然后就不管了),然后qi是字母在当前文章中的概率(我是这样理解的,还没有看算法,先把原理搞懂叭,如果哪里有错误,希望有大佬指出来,自学太难了)最后算出当前X的值,然后再将密文移位1次,一共要移位25次,再进行计算,直到X的值接近于0.065,然后当前密文的移位量设为k,使用(c-k)mod26=m
    image.png

    相关文章

      网友评论

          本文标题:密码学笔记2——维吉尼亚密码的破解

          本文链接:https://www.haomeiwen.com/subject/qtuhsktx.html