跳轉到內容

密碼學/素數曲線/楚德諾夫斯基座標

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

<密碼學

楚德諾夫斯基座標 用於表示素數曲線 y^2 = x^3 + ax + b 上的橢圓曲線點。當域求逆的成本明顯高於域乘法時,它們比仿射座標 提供了速度優勢。在楚德諾夫斯基座標 中,五元組 (X, Y, Z, Z^2, Z^3) 代表仿射點 (X / Z^2, Y / Z^3)。

點加倍 (5M + 6S 或 5M + 4S)

[編輯 | 編輯原始碼]

設 (X, Y, Z, Z^2, Z^3) 為用楚德諾夫斯基座標 表示的一個點 (不等於無窮遠點)。那麼它的兩倍 (X', Y', Z', Z'^2, Z'^3) 可以透過以下方式計算

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

注意:如果 a = -3,那麼 M 也可以計算為 M = 3*(X + Z^2)*(X - Z^2),從而節省了 2 個域平方運算。

點加 (11M + 3S)

[編輯 | 編輯原始碼]

設 (X1, Y1, Z1, Z1^2, Z1^3) 和 (X2, Y2, Z2, Z2^2, Z2^3) 為兩個用楚德諾夫斯基座標 表示的點 (都不等於無窮遠點)。那麼它們的和 (X3, Y3, Z3, Z3^2, Z3^3) 可以透過以下方式計算

U1 = X1*Z2^2
U2 = X2*Z1^2
S1 = Y1*Z2^3
S2 = Y2*Z1^3
if (U1 == U2)
  if (S1 != S2)
    return POINT_AT_INFINITY
  else 
    return POINT_DOUBLE(X1, Y1, Z1, Z1^2, Z1^3)
H = U2 - U1
R = S2 - S1
X3 = R^2 - H^3 - 2*U1*H^2
Y3 = R*(U1*H^2 - X3) - S1*H^3
Z3 = H*Z1*Z2
Z3^2 = Z3^2
Z3^3 = Z3^2 * Z3
return (X3, Y3, Z3)

混合加法 (帶仿射點) (8M + 3S)

[編輯 | 編輯原始碼]

設 (X1, Y1, Z1, Z1^2, Z1^3) 為用楚德諾夫斯基座標 表示的一個點,(X2, Y2) 為仿射座標 中的一個點 (都不等於無窮遠點)。透過將“Z2”的所有出現都替換為“1”(從而減少三個域乘法),可以很容易地從常規的楚德諾夫斯基點加法推匯出新增這些點的公式。

混合加法 (帶雅可比點) (11M + 3S)

[編輯 | 編輯原始碼]

有關更多詳細資訊,請參閱 雅可比座標

華夏公益教科書