NSSCTF_crypto_[CISCN 2021初赛]rsa
提示:低加密指数攻击 共模攻击 p高位
题目:
from flag import text,flag
import md5
from Crypto.Util.number import long_to_bytes,bytes_to_long,getPrime
assert md5.new(text).hexdigest() == flag[6:-1]
msg1 = text[:xx]
msg2 = text[xx:yy]
msg3 = text[yy:]
msg1 = bytes_to_long(msg1)
msg2 = bytes_to_long(msg2)
msg3 = bytes_to_long(msg3)
p1 = getPrime(512)
q1 = getPrime(512)
N1 = p1*q1
e1 = 3
print(pow(msg1,e1,N1))
print (e1,N1)
p2 = getPrime(512)
q2 = getPrime(512)
N2 = p2*q2
e2 = 17
e3 = 65537
print (pow(msg2,e2,N2))
print (pow(msg2,e3,N2))
print (e2,N2)
print (e3,N2)
p3 = getPrime(512)
q3 = getPrime(512)
N3 = p3*q3
print (pow(msg3,e3,N3))
print (e3,N3)
print (p3>>200)
题目分析
本题分为三个部分,分别考察了三种不同的RSA攻击方法:
-
低加密指数攻击(e=3)
-
共模攻击(相同的N,不同的e)
-
部分私钥泄露攻击(已知p的高位)
第一部分:低加密指数攻击 (e=3)
攻击原理
当加密指数e很小(如e=3)且明文m较小时,可能存在m^e < N的情况。此时可以直接对密文c开e次方恢复明文。
如果m^e > N,但m不是太大,可以尝试m^e = c + k*N,其中k是一个小的整数。
解题步骤
-
给定参数:
-
e1 = 3
-
N1 = 123814470394550598363280518848914546938137731026777975885846733672494493975703069760053867471836249473290828799962586855892685902902050630018312939010564945676699712246249820341712155938398068732866646422826619477180434858148938235662092482058999079105450136181685141895955574548671667320167741641072330259009
-
c1 = 19105765285510667553313898813498220212421177527647187802549913914263968945493144633390670605116251064550364704789358830072133349108808799075021540479815182657667763617178044110939458834654922540704196330451979349353031578518479199454480458137984734402248011464467312753683234543319955893
-
-
尝试k从0开始递增,寻找满足条件的m:
k = 0 while True: ret = gmpy2.iroot(c1 + k*N1, e1) if ret[1]: m1 = ret[0] break k += 1 -
找到的明文m1转换为字节:
b' \nO wild West Wind, thou breath of Autum'

760

被折叠的 条评论
为什么被折叠?



