跳轉到內容

密碼學/素數曲線/標準射影座標

來自華夏公益教科書,開放的書籍,為一個開放的世界

<密碼學

標準射影座標 用於表示素數曲線 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”(從而減少三個域乘法),可以很容易地從常規標準射影點加法推匯出新增這些點的公式。

華夏公益教科書