Problem: [领航杯江苏省赛 2021]ECC
思路
- 解题大致思路
EXP
p = 64464091191308356774703439660771627086045800299627641179047457478059588557461 a = 31926335967105564755113987930261069322507794703287741857397622356704769886356 b = 34835808070187351680507689900273321615070127680320357724483770400791707112940 Gx = 2053202552422630348010474635096983783565667661786369125783579647572276572403 Gy = 51320753844844801021362329076409450910659564359017581255542897537756778371539 GF = IntegerModRing(p) curve = EllipticCurve(GF,[a,b]) P = curve.point((Gx,Gy)) n = curve.order() Q = curve.point((31981799071949968743482831587417174146463993877255771340814476669214408840460,15144025062588325012239455117890516531350002058200271280110877844265896081387)) # 分解出来的因子 primes = [4, 3, 1246057, 2357351, 435374689] dlogs = [] for fac in primes: t = int(n)//int(fac) dlog = discrete_log(t*Q,t*P,operation="+") dlogs += [dlog] print("factor:"+str(fac)+",Discrete Log,"+str(dlog)) d = crt(dlogs, primes) q = 4 * 3 * 1246057 * 2357351 * 435374689 print("\nresult:") for k in range(2^21,0,-1): flag = d + k*n K = flag * P if K ==Q : print(b"NSSCTF{" + long_to_bytes(flag) + b"}") break
总结
- 对该题的考点总结
