由python代码得到点:
for x in range(7):
for y in range(7):
if (y*y)%7==(x*x*x+2*x+1)%7:
print(x,y)
E 7 ( 2 , 1 ) 上 的 点 为 ( 0 , 1 ) ( 0 , 6 ) ( 1 , 2 ) ( 1 , 5 ) 以 及 无 穷 远 处 的 点 E_7(2,1)上的点为(0,1)(0,6)(1,2)(1,5)以及无穷远处的点 E7(2,1)上的点为(0,1)(0,6)(1,2)(1,5)以及无穷远处的点
椭圆曲线上负点的定义为其逆元 P = ( x , y ) P=(x,y) P=(x,y) P − 1 = ( x , − y ) P^{-1}=(x,-y) P−1=(x,−y)得到
P − 1 = ( 3 , − 5 ) = ( 3 , 2 ) P^{-1}=(3,-5)=(3,2) P−1=(3,−5)=(3,2)
Q − 1 = ( 2 , − 5 ) = ( 2 , 5 ) Q^{-1}=(2,-5)=(2,5) Q−1=(2,−5)=(2,5)
R − 1 = ( 5 , 0 ) R^{-1}=(5,0) R−1=(5,0)
根据椭圆曲线上的加法定义
用python写出程序计算 G 2 − G 13 G_2-G_{13} G2−G13
import gmpy2
def add(x1,y1,x2,y2,mod,a):
k=0
if x1==x2 and y1==(-y2)%mod:
return float('inf')
elif x1==x2 and y1==y2:
k=(3*x1*x1+a)*gmpy2.invert(2*y1%mod,mod)%mod
x3=(k*k-2*x1)%mod
y3=(k*(x1-x3)-y1)%mod
return x3,y3
else:
k=(y2-y1)*gmpy2.invert((x2-x1),mod)%mod
x3=(k*k-x1-x2)%mod
y3=(k*(x1-x3)-y1)%mod
return x3,y3
x1=3
y1=2
mod=11
a=1
for i in range(12):
x1,y1=add(3,2,x1,y1,mod,a)
print("G",i+1,"的值为(",x1,y1,")")
G 2 的 值 为 ( 1 , 8 ) G 2 的值为( 1 , 8 ) G2的值为(1,8)
G 3 的 值 为 ( 5 , 4 ) G 3 的值为( 5 , 4 ) G3的值为(5,4)
G 4 的 值 为 ( 4 , 8 ) G 4 的值为( 4 , 8 ) G4的值为(4,8)
G 5 的 值 为 ( 7 , 7 ) G 5 的值为( 7 , 7 ) G5的值为(7,7)
G 6 的 值 为 ( 6 , 8 ) G 6 的值为( 6 , 8 ) G6的值为(6,8)
G 7 的 值 为 ( 6 , 3 ) G 7 的值为( 6 , 3 ) G7的值为(6,3)
G 8 的 值 为 ( 7 , 4 ) G 8 的值为( 7 , 4 ) G8的值为(7,4)
G 9 的 值 为 ( 4 , 3 ) G 9 的值为( 4 , 3 ) G9的值为(4,3)
G 10 的 值 为 ( 5 , 7 ) G 10 的值为( 5 , 7 ) G10的值为(5,7)
G 11 的 值 为 ( 1 , 3 ) G 11 的值为( 1 , 3 ) G11的值为(1,3)
G 12 的 值 为 ( 10 , 7 ) G 12 的值为( 10 , 7 ) G12的值为(10,7)