众所周知,在域上定义的椭圆曲线
在曲线点的加法操作下满足群律,即所有的有理点(满足椭圆曲线等式的点)和无穷远点(单位元)构成了一个加法群。根据曲线上的点的加法运算,其他的群律很容易证明,只有结合律需要费点功夫,如果单纯手算的话当然可以证明,但是颇为麻烦。MIT的椭圆曲线讲义通过两种方法来证明结合律,第一种是通过使用sagemath来自动化计算三个点的相加的结果,最终证明结合律,第二种是通过一种几何化的方法来证明。
sagemath证明方法
sagemath是一款强大的开源数学运算软件,基于Python,因此基础语法上和Python几乎一模一样,可以在Jupyter Notebook上运行sagemath环境,也可以在CoCalc上运行实验。通过使用程序语言定义曲线点的加法可以省略大量的繁琐的运算步骤。为了证明椭圆曲线群的结合律,首先需要定义椭圆曲线:
RR.<Px,Py,Qx,Qy,Rx,Ry,A,B> = PolynomialRing(QQ,8)
P=(Px,Py,1); Q=(Qx,Qy,1); R=(Rx,Ry,1); O=(0,1,0);
I=RR.ideal(Py^2-Px^3-A*Px-B, Qy^2-Qx^3-A*Qx-B, Ry^2-Rx^3-A*Rx-B)
SS=RR.quotient(I)
这里我们使用Weierstrass形式的椭圆曲线,其他形式比如Edwards可以类似进行编写。PolynomialRing代表新建一个多元多项式环,里面的参数QQ代表有理数域,即这个多项式环中的多项式系数都是有理数,8代表接下来要用到的变元数量即左边的Px、Py、Qx、Qy、Rx、Ry、A、B,RR代表这8个变元是实数域上的变元。P、Q、R都是椭圆曲线上的点,O是椭圆曲线群中的单位元,从几何图形上看就是无穷远点,因此为了方便定义单位元,这儿四个点统一用射影坐标来表示。I是实数域上通过括号里的多项式生成的理想,可以看到里面的三个多项式正好是椭圆曲线的Weierstrass表示形式,SS就是实数域关于这个理