Elliptic-Curves

如何在程式碼中表示無窮遠點(橢圓曲線)?

  • October 13, 2019

我正在為橢圓曲線密碼學編寫程式碼。我有一堂課class EllipticCurvePoint

class EllipticCurvePoint{
   FieldElement x, y;
};

我需要支持無限遠點(它應該表現得好像它是一個類型的對象EllipticCurvePoint)。我唯一能想到的就是為此保留 (-1, -1) 但 x 和 y 只能假設來自 {0, 1, …, p-1} 的值(p 是Field它們所屬的)。如果我想以這種方式表示它,我還需要在類中添加對 -1 的FieldElement支持Field

我還重載了 + 和 * 運算符,它們在其他點上工作得很好。但是我想不出一種方法來表示可以與其餘程式碼同質工作的無限遠點,而且我不必更改父類(FieldFieldElement)。

有什麼優雅的方法可以實現這一目標嗎?非常感謝您的時間!

我想這是一條較短的魏爾斯特拉斯曲線。有幾種可能性:

  • 投影座標:一個點 $ P = (x,y) $ 儲存三個座標, $ X $ , $ Y $ 和 $ Z $ 滿足 $ x=X/Z $ 和 $ y=Y/Z $ . 我們注意到 $ P=(X:Y:Z) $ . 這意味著一個點可以有多個表示(它與分數相同, $ \frac 3 4 $ 是相同的 $ \frac{15}{20} $ )。曲線方程 $ y^2 = x^3 + Ax + B $ 變成 $ Y^2Z = X^3 + AXZ^2 + BZ^3 $ 無窮遠點是具有 $ Z=0 $ , 然後你可以檢查 $ \infty = (0:1:0) $ (或更一般地說, $ (0:\lambda:0) $ 對於任何非零 $ \lambda $ ).
  • 雅可比投影座標,與上述相同,但具有 $ x=X/Z^2 $ 和 $ y=Y/Z^3 $ 無限點是 $ (1:1:0) $ 或更一般地說 $ (\lambda^2 : \lambda^3 : 0) $ 對於任何非零 $ \lambda $ .
  • 如果你只保留仿射座標,你可以在你的類中添加一個布爾值is_infinity

無論如何,取決於你將如何在曲線上實現加法公式,你必須知道它們中的大多數不會完美地處理所有點,除非你使用完整的統一公式(參見這裡的 Weierstrass 曲線)。

在旁注中,您可以查看無限點具有仿射表示的 Edwards 曲線(Curve25519 或 Curve448 的 Edwards 形式用於加密原始簽名 EdDSA)。

引用自:https://crypto.stackexchange.com/questions/75002