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:]))
总结
- 对该题的考点总结
