0%

[广东强网杯 2021 团队组]DLP

2024-08-14 20:55By
Oswald
非对称密码ECCPohligHellmanCrypto

Problem: [广东强网杯 2021 团队组]DLP

[[toc]]

思路

  • 解题大致思路

EXP

from attacks.ecc import smart_attack N1 = 27544759469094453505371358768052861416297003882211878831861112512567899543941 A1 = 4208715803791813173086894172778966025419787767340027559010619240548499823390 B1 = 11846440123913040489420209031751160809904311707943252241515965930654415480691 P1x = 479750084250968709343887919962436485997147832319843477221083468203689368148 P1y = 15452861783577624143044213767588871736433639621547613407582902947429567101675 P1 = (P1x, P1y) Q1 = (14736970297054248276364510675718632926198693034158620007675880103924809577805,3447209262654420855289144268810543114387612255490962015335062266658385100211) p1,q1 = 92636417177965240871815246762704348071,297342668339361548416629796745639177971 E1p = EllipticCurve(Zmod(p1), [0, 0, 0, A1, B1]) print(f"{E1p.order() = }") P1p, Q1p = E1p(P1), E1p(Q1) d1p = Q1p.log(P1p) print(f"d1p: {d1p}") E1q = EllipticCurve(Zmod(q1), [0, 0, 0, A1, B1]) print(f"{E1q.order() = }") P1q, Q1q = E1q(P1), E1q(Q1) d1q = smart_attack.attack(P1q, Q1q) print(f"d1q: {d1q}") d1 = crt([d1p,d1q],[int(P1p.order()),int(P1q.order())]) print(f"{d1 = }") N2 = 6471339743593595797696002766822660599108196938080465998531085409467 A2 = 3199218821393204771660095172457569312269694438403110131957204042314 B2 = 762889472027318213897694878260359911054972690369935049954326689904 P2x = 2557373437970770011124755960432555084678930336188254243278984381842 P2y = 4442763096366920105760404533052204677305995021662082361185473321644 P2 = (P2x,P2y) Q2 = (4834036103940457959470026215023033401071737087504569417466448644066,5511016821581393405975510064568222454318072088628361854656950557373) p2,q2 = 69857405335111415530599248077,92636417177965240871815246762704348071 E2p = EllipticCurve(Zmod(p2), [0, 0, 0, A2, B2]) print(f"{E2p.order() = }") P2p,Q2p = E2p(P2),E2p(Q2) d2p = Q2p.log(P2p) print(f"{d2p = }") E2q = EllipticCurve(Zmod(q2), [0, 0, 0, A2, B2]) print(f"{E2q.order() = }") P2q,Q2q = E2q(P2),E2q(Q2) d2q = Q2q.log(P2q) print(f"{d2q = }") d2 = crt([d2p, d2q],[P2p.order(),P2q.order()]) print(f"{d2 = }") print(bytes.fromhex(hex(d1)[2:])+bytes.fromhex(hex(d2)[2:]))

总结

  • 对该题的考点总结
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论