3-1 Danger_RSA
e e e 为34位数,所以 s s s和 t t t为17位数,求出 a = 4 a=4 a=4,且 s s s和 t t t有两种可能
s = 3 * 7 * 7 * 691
t = 19 * 5741
s = 7 * 19 * 691
t = 3 * 7 * 5741
根据 g e t _ k e y ( ) get\_key() get_key():
p = X 1 4 + s q = X 2 4 + t N = ( X 1 ∗ X 2 ) 4 + X 1 4 ∗ t + X 2 4 ∗ s + e p=X_1^4+s\\q=X_2^4+t\\N=(X_1*X_2)^4+X_1^4*t+X_2^4*s+e p=X14+sq=X24+tN=(X1∗X2)4+X14∗t+X24∗s+e
对 N N N开四次方根得到 X 1 ∗ X 2 X_1*X_2 X1∗X2,这样我们就有了2元方程组,对两组 s s s和 t t t分别尝试解方程组,最终求得 X 1 X_1 X1和 X 2 X_2 X2的整数解,从而求出 p p p和 q q q。
g c d ( e , p − 1 ) = 3 & g c d ( e , q − 1 ) = 7 gcd(e,\ p-1)=3\ \&\ gcd(e,\ q-1)=7 gcd(e, p−1)=3 & gcd(e, q−1)=7
取那个公因子为 3 3 3的素数进行有限域开方。
from Crypto.Util.number import *
from gmpy2 import iroot
N = 20289788565671012003324307131062103060859990244423187333725116068731043744218295859587498278382150779775620675092152011336913225797849717782573829179765649320271927359983554162082141908877255319715400550981462988869084618816967398571437725114356308935833701495015311197958172878812521403732038749414005661189594761246154666465178024563227666440066723650451362032162000998737626370987794816660694178305939474922064726534186386488052827919792122844587807300048430756990391177266977583227470089929347969731703368720788359127837289988944365786283419724178187242169399457608505627145016468888402441344333481249304670223
e = 11079917583
c = 13354219204055754230025847310134936965811370208880054443449019813095522768684299807719787421318648141224402269593016895821181312342830493800652737679627324687428327297369122017160142465940412477792023917546122283870042482432790385644640286392037986185997262289003477817675380787176650410819568815448960281666117602590863047680652856789877783422272330706693947399620261349458556870056095723068536573904350085124198592111773470010262148170379730937529246069218004969402885134027857991552224816835834207152308645148250837667184968030600819179396545349582556181916861808402629154688779221034610013350165801919342549766
a = 4
xx = int(iroot(N, a)[0])
s = 7 * 19 * 691
t = 3 * 7 * 5741
x1, x2 = var('x1 x2')
solve([x1*x2==xx, (x1**4+s)*(x2**4+t)==N],x1,x2, solution_dict=True)
# {x1: 44416071018427916652440592614276227563515579156219730344722242565477265479486, x2: 47783641287938625512681830427927501009821495321018170621907812035456872958654}
p = 44416071018427916652440592614276227563515579156219730344722242565477265479486**4+s
q = N // p
assert gcd(e, q-1) == 3
d = inverse(e//3, q-1)
c = int(pow(c, d, q))
PR.<x> = Zmod(q)[]
f = x^3 - c
res = f.roots()
for i in res:
print(long_to_bytes(int(i[0])))
# b'DASCTF{C0nsTruct!n9_Techn1qUe2_f0r_RSA_Pr1me_EnC2ypt10N}'
3-2 Easy_3L
c = ( s ∗ h + m s g ) % p = > − s ∗ h + c − k ∗ p = m s g c = (s * h + msg)\ \%\ p\\=>-s*h +c-k*p=msg c

博客围绕Python密码学挑战展开,涉及Danger_RSA、Easy_3L等多个题目。介绍了通过开方、格基规约、预测随机数、维纳攻击、coppersmith方法等技术求解p、q、e、flag等关键信息,还提及社会主义核心价值观编码解码获取压缩包密码及异或操作。
最低0.47元/天 解锁文章
2952

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



