初赛样题示例.pdfVIP

  • 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)

1亿VIP精品文档

相关文档