Montgomery Curves and Weierstrass Curves

Weierstrass Curves
Weierstrass Curves形如

y2=x3+Ax+B

其中4A3+27B20,这种形式称为Weierstrass Form。

Weierstrass Curves上的运算
在椭圆曲线(此处即为Weierstrass Curves)上,可以定义点之间的加法运算,其满足:

  1. 单位元O为无穷远点
  2. 对于曲线上的两点PQ,取经过PQ的直线,这条直线与椭圆曲线相较于最多三个点,其中两个点是PQ,如果第三个点存在且不与PQ重合,记第三个点为R,那么满足P+QR=O,即P+Q=R
  3. 对一点R=(x3,y3),其加法逆元R=(x3,y3),也即点R沿x轴的对称点。
图片名称

那么,对于Weierstrass Curves在有限域上的运算便有:

  1. 有限域的加法逆元
    P(x,y)的加法逆元是(x,y(modp))=(x,py)
  2. 斜率的计算分为两种情况,分别为P=Q(也即PQ为曲线上的切点)和PQ,计算过程如下:
    k={3x12+a2y1P=Qy2y1x2x1PQ
  3. 有限域的加法
    P(x1,y1)Q(x2,y2)R(x3,y3)三点(其中R是直线PQ与曲线交点关于x轴的对称点,即有R=P+Q)有如下关系:
    {x3k2x1x2 (mod p)y3k(x1x3)y1 (mod p)



Weierstrass Curves上的基点运算
下面以曲线

y2x3+2x+1(mod13)
在模13运算下为例,也即A=2B=1p=13Fp=F13。选取基点(base point)G=(8,3),不妨可以验证基点G是否在曲线之上。通过计算有
y2=329(mod13)=529=83+28+1=x3+2x+1
可见选取的基点G位于曲线之上。

1.2G的计算
下面首先进行2G的计算,对于这种形如2kG的运算可以认为是P=Q=2k2G的情况进行计算。对于此处,即有P=Q=(8,3)对应上节所述的切点情况,计算过程如下:

k382+323(mod13)1261(mod13)1211(mod13)2(mod13)
x2288(mod13)12(mod13)1(mod13)
y2(81)3(mod13)11(mod13)
如此计算获得了2G对应的点坐标为2G=(1,11)

2.3G的计算
对于3G的计算,可以认为P=2G=(1,11)Q=G=(8,3)3G=P+G,也即上节所述的非切点的情况,计算过程如下:

k31181(mod13)871(mod13)52(mod13)10(mod13)
x10281(mod13)91(mod13)0(mod13)
y10(10)11(mod13)1(mod13)12(mod13)
如此计算获得了3G对应的点坐标为3G=(0,12)

通过类似与上述过程的运算,可以依次获得4G=(2,0)5G=(0,1)6G=(1,2)7G=(8,10)。在计算8G时,若是通过P=Q=4G的方式进行计算会发现4Gy0,从而导致k指向无穷大,亦或是通过P=7GQ=G的方式进行计算会发现G7G具有相同的x,同样导致k指向无穷大。
事实上,此处有8G=O,也即8G对应了椭圆曲线的无穷远点(类似于整数中的0)。对于无穷远点,同样可以进行加法运算,如对P=OQ=G进行加法有

P+Q=O+G=G
此外,对于椭圆曲线而言其存在阶(Order)的概念。如上述的曲线,因9G=8G+G=O+G=G8G=0,故对于基点G=(8,3)ord(G)=8。阶的概念描述了椭圆曲线在有限域Fp中对于基点G生成元素的个数。需要注意,对于相同椭圆曲线的不同基点选择,可能对应了不同的阶,如对于基点G=(1,2)ord(G)=4,读者可自行计算验证。

Montgomery curve
对于椭圆曲线而言,Montgomery curve形式同样是较为常用表达形式,具体如下:

Ky2=x3+Jx2+x
其中,K(J24)0。 事实上,现阶段应用最为广泛的椭圆曲线之一——Curve25519,便是采用了这种形式的曲线,其具有如计算迅速等优点。对于Curve25519具有如下形式:
y2x3+486662x2+x(mod225519)

对于Montgomery curve,可以在一定条件下转换为Weierstrass Curves,转换过程可以通过如下过程:
1.消除等式左侧系数K
定义

{u=xKv=yK

带入Montgomery curve表达式Ky2=x3+Jx2+x

K(Kv)2=(Ku)3+J(Ku)2+Ku
v2=u3+JKu2+1K2u

2.消除等式右侧二次项
定义

{u=aJ3Kv=b

带入上述表达式有

b2=(aJ3K)3+JK(aJ3K)2+1K2(aJ3K)=(a3JKa2+J23K2aJ327K3)+JK(a22J3Ka+J29K2)+1K2(aJ3K)=a3+(JK+JK)a2+(J23K22J23K2+1K2)a+(J327K3+J39K3J3K3)=a3+3J23K2a+2J39J27K2

此时,(a,b)即为Weierstrass Curves上的点。转换式为:

{x=KaJ3y=Kb,{A=3J23K2B=2J39J27K2

例如,就上节所述的Weierstrass Curves

b2a3+2a+1 (mod 13)

转换为Montgomery curve有

y2x3+6x2+x (mod 13)
{xa+11 (mod 13)yb (mod 13)

此外Montgomery curve同样可以转换为Twisted Edwards curve(形式如ax2+y2=1+dx2y2),此处不再赘述。





参考
椭圆曲线 - 杰哥的知识库 (jia.je)
密码学[3]:椭圆曲线-腾讯云开发者社区-腾讯云 (tencent.com)

posted @   Miro'  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· ShadowSql之.net sql拼写神器
· 使用MCP C# SDK开发MCP Server + Client
· 感觉程序员要被 AI 淘汰了?学什么才有机会?
· MQTT协议发布和订阅的实现,一步步带你实现发布订阅服务。
点击右上角即可分享
微信分享提示