信息安全概论作业四:小红小明学概论
题目内容
密文: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...xyz
、bcd...xyza
、cdef...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);
}
}
出来了一些结果,挑了个长得人能看懂的结果——
此时的密钥是:bcdefghijklmnopqrstuvwxyza
,出来的结果是happyinternationallabordaz
(劳动节快乐!),就今天日期来说(4月28日),这个结果离正确结果应该不远了。
考虑到最后一位为y
才对,那就把密钥最后的a
删掉叭,这样出来的就是happyinternationallaborday
了。
因为本人确实不知道协商素数得双幺,最小原根心所向。小红随机选自己,小明传来等同上;
的含义,故本文权作抛砖引玉。如果能给大家带来启发,那就再好不过啦!