- 31
- 0
- 约3.02万字
- 约 22页
- 2024-01-19 发布于云南
- 举报
综合夺旗赛样题示例
1.1Crypto
题目名称Strange
题目分类Crypto
难易级别中级
Alice和Bob在进行加密通话,但这种加密通话好
题目描述
像并不安全,你能找到他们在聊什么吗?
考察点Rsa、Coppersmith
考核目的考察选手对rsa加密的熟悉程度。
题目答案flag{llsajdjlksajldjsdjkl}
通过研究加密脚本(如下)可以发现,这题是个位运算漏洞的密码,通过“|”
和“”来确定m的二进制位为0还是为1。
加密python脚本:
fromCrypto.Util.numberimport*
importos
flag=bflag{}
m=bytes_to_long(flag)
p=getPrime(1024)
q=getPrime(1024)
n=p*q
e=3
hint=bytes_to_long(os.urandom(256))
m1=m|hint
m2=mhint
c=pow(m1,e,n)
withopen(output.txt,a)asf:
f.write(str([n,c,m2,hint]))
f.close()
首先给了mhint,hint,根据的特点,当两个比特位同时为1,结果才为1。
加密的是m|hint,根据|的特点,当两个比特位有一个为1那么结果就为1。
所以根据hint可以还原m|hint很大一部分,并且hint比特远大于m,所以
说相当于我们已知大部分的m|hint比特,满足已知部分明文攻击,一元
coppermath解出未知比特,最后相当于已知x1=mhint,x2=m|hint,当x1为1,
m为1,当x2为1并且hint为0,m为1。由此还原m所有比特。
因此解密脚本如下:
n,c,m2,hint=
[27370629712265847736600046177005821691581086495342396405013603830032
804068080902752646178713706534768393355277275788966190461414605728435
199450646068466647183172585100315139289446443960705795169960597815998
175190063349195716401357223150874800762603349462517459494645747760164
366023005377564249219716490566541374404444803532553420389551761430687
421437780343368250869426515948406473053176630355236531331652399712078
496738764049767639892679165481038891140604066186174810524142615143841
912987971244756321683636512499203687944097019471103580795695352255275
690262703115882483587558248551096959297111698969768592580242084097,
155797429383668662047980329705598125517329488733407863016777885643416
742426400781007314377875617664245540294629778418721598154483584131313
893751162851313019237702566787340129649937144660442858211585
原创力文档

文档评论(0)