文章预览
TH_Curve 题目定义了曲线的加法和乘法,根据x3,y3的计算公式,可以发现这是Hessian curves,已知p,a和曲线上的两个点,可以解出d。 p = 10297529403524403127640670200603184608844065065952536889 a = 2 G = ( 8879931045098533901543131944615620692971716807984752065 , 4106024239449946134453673742202491320614591684229547464 ) gx,gy=G[ 0 ],G[ 1 ] PR. =PolynomialRing(Zmod(p)) f=a*gx^ 3 +gy^ 3 + 1 -d*gx*gy ret=f.roots() print(ret) 曲线方程可以写成三次齐次方程的形式,然后构建出椭圆曲线直接求DLP: d= 8817708809404273675545317762394593437543647288341187200 Q = ( 6784278627340957151283066249316785477882888190582875173 , 6078603759966354224428976716568980670702790051879661797 ) from Crypto.Util.number import * import gmpy2 p = 10297529403524403127640670200603184608844065065952536889 a = 2 P=( 8879931045098533901543131944615620692971716807984752065 , 4106024239449946134453673742202491320614591684229547464
………………………………