信息安全概论作业四:小红小明学概论

题目内容

密文:icstdoubnbymgwddrdeuwkobzz
提示:
小红小明网聊忙,学过概论用得上,协商素数得双幺,最小原根心所向。
小红随机选自己,小明传来等同上,维吉尼亚很安全,各位破解细思量。

明文内容

happyinternationallaborday

(如果按照下文说的方式直接硬干,出来的是happyinternationallabordaz(最后一位是z),总感觉最后一位应该是y,这样更像一个合格的句子,于是就手动修了一下)

解题思路

首先阅读一下这首诗,发掘一下要素——

协商素数得双幺,最小原根心所向。 —— 说的应该是Diffie-Hellman密钥交换算法的过程,此处略,详见书P34。至于这里的双幺是啥,本人语文功底不太好,不太清楚是啥意思。

小红随机选自己,小明传来等同上 —— 说的应该是Diffie-Hellman密钥交换算法的过程中,两个人选的随机数应该是一样的。

维吉尼亚很安全,各位破解细思量。 —— 说的是密文是使用维吉尼亚密码加密来的。

到这里,唯有第三点维吉尼亚很安全,各位破解细思量。感觉有点用处,奈何本人愚笨,前面几句确实带不来什么思路上的启发。

因为到目前为止,只有维吉尼亚这个提示对我有点用,因而下面开始了各种暴力破解方式。

1.找现成网站、脚本(然而都失败了)

一个可以自动解维吉尼亚密码的网站:https://www.guballa.de/vigenere-solver (原理大概是用各种各样的数学方法,来确定哪个是密钥的概率最大。)

到这里我还天真地觉得,密钥应该不会太长吧?因为使用Diffie-Hellman密钥交换,也交换不了啥东西嘞?于是就让他自动去跑,但是跑出来的...啥也不是(指看起来不像个句子)。

一个可以自动解维吉尼亚密码的JS项目:https://github.com/atomcated/Vigenere (原理好像也是用各种各样的数学方法,来确定哪个是密钥的概率最大。)

但出来的结果还是啥也不是,悲

2.突然而然的想法

考虑到维吉尼亚密码的解密过程是:给定一个密钥,如果密钥长度比密码短,那就多重复几次密钥。

这就促使我去查一下上面这个字符串的长度,一查是26,这个时候突然有点感觉,有没有可能正好是26个字母的某种循环排列呢?(比如abc...xyzbcd...xyzacdef...xyzab等)而协商素数得双幺,最小原根心所向。小红随机选自己,小明传来等同上;介绍的正好是这26个字母从谁开始排的呢?

于是直接开搞:

function Vigenere (strIn, key, encode) {
    //借鉴自https://github.com/atomcated/Vigenere/blob/master/js/demo.js
	//唯独在return之前加了一句
	console.log(key + ' - ' + strOut);
	//便于观察
}

function charOffset (char, offset) {
    //原封不动的借鉴自https://github.com/atomcated/Vigenere/blob/master/js/demo.js
}

function rollroll(x){
    var r = '';
    var s = 'abcdefghijklmnopqrstuvwxyz';
    for(i=0;i<26;i++){
        r = r + s[(x+i)%26];
    }
    return r;
}

function startAttack(){
    var encoded = 'icstdoubnbymgwddrdeuwkobzz';
    for(var i=0;i<26;i++){
        Vigenere(encoded, rollroll(i), false);
    }
}

出来了一些结果,挑了个长得人能看懂的结果——

image

此时的密钥是:bcdefghijklmnopqrstuvwxyza,出来的结果是happyinternationallabordaz(劳动节快乐!),就今天日期来说(4月28日),这个结果离正确结果应该不远了。

考虑到最后一位为y才对,那就把密钥最后的a删掉叭,这样出来的就是happyinternationallaborday了。

因为本人确实不知道协商素数得双幺,最小原根心所向。小红随机选自己,小明传来等同上;的含义,故本文权作抛砖引玉。如果能给大家带来启发,那就再好不过啦!

posted @ 2022-04-28 19:48  陌上花已开  阅读(119)  评论(0编辑  收藏  举报