工具|Vigenere的暴力破解

创作背景

之前参加了几次CTF比赛常常在Misc中遇到维吉尼亚密码破译的题目,大多是解出来了,但是痛点是都是手动分析进行解题,耽误了很多时间,最近想要解脱双手,潇洒解题~,于是广罗了各大比赛中维吉尼亚的解法,好多都是直接给出答案并未过多说明,解题思路和解题方法,于是诞生了本文,Thinking和大家聊聊的维吉尼亚密码破译,以及已收集到的一些解密脚本。

凯撒密码回顾

在说维吉尼亚密码前,首先复习下凯撒密码,大家都知道凯撒密码是比较简单的加密方式,仅仅将文中的每个字符位移相同的位移量(26个字母,所以位移数是-25—+25),但是这种方式容易被轻易的破译,密文较多的情况下可以通过字频统计,直接找出密文字母对应的明文,然后算出偏移量,对所有字符统一进行解密。

如下文,通过使用密码机器中的字频:

再根据常规的频统计表中可以知道,e,t,a,o,i,n这些字母在平时的语句中出现的评论较高,其中最高的是e,因此我们可以推测,密文->明文=g->e,并且位移数为2。

于是便解出了凯撒密码的明文信息。

维吉尼亚密码的介绍

维吉尼亚是凯撒密码的扩展,增加了秘钥的概念。以下是百度百科的例子:

未加密文字:THE BUTCHER THE BAKER AND THE CANDLESTICK MAKER。(屠夫、面包师和蜡烛匠)。

关键密钥:BIG BIGBIGB IGB IGBIG BIG BIG BIGBIGBIGBI GBIGB

加密文字:UPK CCZDPKS BNF JGLMX BVJ UPK DITETKTBODS SBSKS

因此在破译维吉尼亚密码时候重要的是要知道秘钥的长度,因为只要确定了秘钥长度,对维吉尼亚密码进行分解,分解后得到的便是多组凯撒密码。

以下例子来自limisky博客:

如密文为:ABCDEFGHIJKLMN

如果我们知道密钥长度为3,就可将其分解为三组:

组1:A D G J N

组2:B E H K

组3:C F I M

分解后每组就是一个凯撒密码,即组内的位移量是一致的,对每一组即可用频度分析法来解密。所以破解维吉尼亚密码的关键就是确定密钥的长度。

咱们一起PY吧

本来想说说手动分析和解密维吉尼亚密码的,后来想想,这样会让整个文章的篇幅变得冗长,失去了我的本意,所以直接略过手动分析,我们上PY,快速的将密码解出来。

首先贡献一个可以在线解维吉尼亚的网站:

https://www.guballa.de/vigenere-solver

又是对一件小事的思考,这个网站是将输入的密文按照规定的密码进行解密,解密的速度还很快,于是陷入了思考,或许维吉尼亚不应只按照常规的流程进行推算,应该也要有暴力枚举的功能,通过秘钥字典进行解密然后得到明文,再将明文中的单词与常见的英语单词进行匹配,当匹配率较高时,便确定解密的密码是正确的,输出明文信息。

当然只是一个小思考,然后在网上搜索这类暴力破解的文章,得到如下的py.以下PY用于比较解密后明文与常见单词进行匹配,words.txt中存放的是常见的英语单词。

以下PY实现读取keys.txt(存放秘钥的字典)中的秘钥,然后使用该秘钥进行解密。Ciphertext中放的是维吉尼亚的密文。

以下是运行后解密成功的结果:

创作心声

有些时候觉得解题或者做事很不方便,太繁琐了,就要多思考然后才能突破原有的思维局限,往往会有很多收获,把维吉尼亚的解码脚本以及之前手动解密的过程打包好了,大家可以关注漏洞社区,回复:I need more Thinking,就可以得到下载地址啦~!