2654400439 / UCAS_Cryptanalysis_2021

Cryptanalysis's homework for cracking an extent cipher. In USAC 2021

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cryptanalysis_task1_UCAS_2021

Cryptanalysis's homework for cracking an extent cipher. In UCAS 2021

这是一个能够利用词频统计信息进行加密破解的demo项目,是一个完全由《密码分析学》课程大作业驱动的工作成果,由于先前没有严密的逻辑框架基础,因此编程采用任务导向型即按需编程,因此代码比较混乱,目前比较忙也不会进行重构整理了。

0x01 问题简述
这是《密码分析学》的第一次大作业,要求对给定密码算法进行唯密文攻击,具体加密流程和待破解的密文参见“谜题一说明.docx”和“谜题一密文.txt”。

0x02 解题思路
可获得的数据为3000位的密文,根据课上讲解的以往的经验,进行密码破解首先可以探测密钥位数,如果能正确探测出密钥位数的话,就可以选择进行暴力搜索(如果密钥空间较小)或者采取词频分析等其他方法。在使用“移位”技术探测出密钥位数为15位后 ,再根据已知信息加密过程为两轮分别依次加密,因此我们有理由推测两轮密钥位数的公倍数为15(这样才能保证移位探测结果为15)。由此可知,两轮加密的密钥位数组合可能出现的情况为: (15,15),(1,15),(15,1),(3,5),(5,3)。考虑最后两种情况比较合理,因此针对3位或者5位的纯小写英文字母的密钥我们便可以进行暴力搜索(keyspace=26^3或26^5)。另外一种方法是直接端到端地进行词频分析,然后根据词频暴露的信息直接确定明文。

0x03 “移位”探测密钥位数
编程实现比较简单,我好像把代码给删了。实际操作只需要将密文本身和移位的密文进行逐位比较,统计重复次数即可。根据可证明的理论结果,当当前移位操作使得重复次数明显高于其他次数时(大约两倍),该移位次数就是密钥的长度。

0x04 方法1:暴力搜索密钥空间
使用"search.py"或者它的多进程版本即可进行暴力搜索,最后的判断成功标准比较有意思--如果尝试暴力搜索3位keyspace则找到碰撞后的中间密文应该可以用移位 探测得到5位密钥的结果;如果尝试暴力搜索5位则后面应得到3位密钥的结果。初步尝试,使用该py脚本开12进程搜索3位密钥空间大概需要四小时。

0x05 方法2:词频分析
当我们分析得知密钥为15位(明文可看做15位一组进行加密)之后,我们可以对密文进行分组,15位一组,则每一组的同一位数将是使用同样的一组密钥(a,k,a',k')进行加密。这样我们通过更普适的穷搜去搜索该密钥,当正确搜索到密钥后,解密的得到的每组200位明文应该具有英文的词频统计性质 --如字母e,t出现概率较高,字母q,x出现概率较低。由此一来我们可以较为准确的进行“端到端”的密码分析破译。具体操作可见"different_way_1-15.py"。

0x06 结语
经过编程使用方法2进行破解,由于正常情况下加密的内容都是有实际含义的句子,因此对于作业导向型的我来说,当破解出了一小部分连贯的英文句子之后就可以使用社会工程学的方法,直接百度搜索了这段话,结果发现是《乱世佳人》中的句子。之后根据3000位密文,再对收尾进行确定就可以得到密文对应的明文了。

About

Cryptanalysis's homework for cracking an extent cipher. In USAC 2021


Languages

Language:Python 100.0%