跳转到内容

密码学/素数曲线/标准射影坐标

来自维基教科书,开放的书籍,为一个开放的世界

<密码学

标准射影坐标 用于表示素数曲线 y^2 = x^3 + ax + b 上的椭圆曲线点。当域反转的成本明显高于域乘法时,使用它们可能会比仿射坐标 速度更快。在标准射影坐标 中,三元组 (X, Y, Z) 表示仿射点 (X / Z, Y / Z)。

点倍增 (7M + 5S 或 7M + 3S)

[编辑 | 编辑源代码]

令 (X, Y, Z) 是一个点 (不等于无穷远点) 以标准射影坐标 表示。那么它的倍点 (X', Y', Z') 可以通过以下方式计算

if (Y == 0) 
 return POINT_AT_INFINITY
W = a*Z^2 + 3*X^2
S = Y*Z
B = X*Y*S
H = W^2 - 8*B
X' = 2*H*S
Y' = W*(4*B - H) - 8*Y^2*S^2
Z' = 8*S^3
return (X', Y', Z')

注意:如果 a = -3,那么 W 也可以计算为 W = 3*(X + Z)*(X - Z),节省了 2 个域平方运算。

点加 (12M + 2S)

[编辑 | 编辑源代码]

令 (X1, Y1, Z1) 和 (X2, Y2, Z2) 是两个点 (都不等于无穷远点) 以标准射影坐标 表示。那么它们的和 (X3, Y3, Z3) 可以通过以下方式计算

U1 = Y2*Z1
U2 = Y1*Z2
V1 = X2*Z1
V2 = X1*Z2
if (V1 == V2)
  if (U1 != U2)
    return POINT_AT_INFINITY
  else
    return POINT_DOUBLE(X1, Y1, Z1)
U = U1 - U2
V = V1 - V2
W = Z1*Z2
A = U^2*W - V^3 - 2*V^2*V2
X3 = V*A
Y3 = U*(V^2*V2 - A) - V^3*U2
Z3 = V^3*W
return (X3, Y3, Z3)

混合加法 (带仿射点) (9M + 2S)

[编辑 | 编辑源代码]

令 (X1, Y1, Z1) 是一个点以标准射影坐标 表示,(X2, Y2) 是一个点以仿射坐标 表示 (都不等于无穷远点)。通过将“Z2”的每次出现替换为“1”(从而减少三个域乘法),可以很容易地从常规标准射影点加法推导出添加这些点的公式。

华夏公益教科书