Elliptic-Curves

Curve448 - Ed448 密鑰材料可以重複用於 X448 嗎?

  • May 6, 2022

目前我面臨的情況是 Ed448 密鑰對(私鑰 + 公鑰)可用,系統應通過 Diffie-Hellman (ECDH) 操作進行擴展。首先讓我總結一下我到目前為止所了解的內容。

Ed448:是edwards448上的數字簽名算法。

X448:是為 Curve448 建構的 Diffie-Hellman 函式。

Curve448 :是RFC7748中指定的 Montgomery 格式的橢圓曲線。

edwards448:是一條橢圓曲線,通過 RFC7748 中指定的映射與Curve448相關。

對於 Curve25519,我通過 Ed25519 讀取 Curve25519 以進行密鑰交換?為什麼?對我來說,聽起來可以通過應用定義的映射將現有的 Ed25519 公鑰轉換為 X25519 密鑰。不知何故,我對這裡使用的所有數學都不太熟悉。然後經過更多閱讀,我發現“雙理等價”在密碼學上下文中是什麼意思?這為我提供了更多的見解。然後我再次閱讀RFC7748並看到 Curve448 的雙理性等價也是正確的。此外還有“edwards448”定義,它也提供了蒙哥馬利和愛德華茲曲線點之間的映射。要使用的地圖定義為:

$$ (u, v) = (\frac{y^2}{x^2}, \frac{(2 - x^2 - y^2)*y}{x^3}) $$

如果我正確理解了上述參考資料,應該能夠將公鑰轉換為要在 X448 函式中使用的座標。例外情況是,萬一 $ x $ 上述方程為 0,則無法應用地圖,也無法進行轉換。此外, Elliptic Curve Cryptographx Ecc中與 Curve448 相關的章節將我引向相同的方向,即可以轉換現有的密鑰材料,然後將其重用於 X448。如果我理解正確,ECC 中的私鑰是整數而不是“曲線點”。

現在我很好奇是否真的可以轉換現有的密鑰對,使其可用於 ECDH 以及如何重用。或者,如果有必要僅為 ECDH “引入”第二個密鑰對。因此,由於我是該主題的新手,因此請尋求幫助。

  1. 您無需將 Edwards448 公鑰轉換為雙有理等效 Curve448 公鑰即可執行 ECDH。您可以堅持使用 Edwards448。如果您使用 Curve448,將會獲得性能提升,但根據您的實施,這種性能提升可能會被驗證器從 Edwards448 公鑰派生 Curve448 公鑰所必須進行的轉換很大程度上抵消。您將使用 Edwards448 EC 庫的“標量乘法”功能來執行 ECDH 操作。
  2. EC 私鑰是“標量”,這意味著正整數小於該曲線上生成點的組大小。公鑰是曲線上的點,是成對的“欄位元素”座標。欄位元素是小於素數的正整數 $ p = 2^{448} - 2^{224} - 1 $ .
  3. 如果您決定從 Edwards448 轉換為 Curve448,那麼這些點將共享完全相同的標量私鑰。請注意,由於 X448 在變數-基數-標量-乘法密鑰協議期間僅使用 Curve448 x 座標的方式,映射將使得 Edwards448 點 $ P $ 和 $ I-P $ 將映射到相同的 X448 密鑰協議 Curve448 點(其中 $ I $ 是無窮遠處的 Edwards448 點)。幸運的是,您正在從 Edwards448 映射到 Curve448,這意味著您不會發現自己有歧義。
  4. 從 Edwards448 到 Curve448 的轉換很簡單: $$ \texttt{curve448}{x-coord} = \left(\frac{\texttt{ed448}{y-coord}}{\texttt{ed448}_{x-coord}}\right)^2 $$ 請注意,“除法”是通過與模乘逆的乘法來實現的。您的 EC 庫應該為您提供此功能。操作完成 $ mod\ p $ .
  5. 請注意,Ed448 將從“原始”57 字節私鑰開始,使用 SHAKE256 對其進行雜湊處理,清除最高有效字節,強制次高字節的最高有效位為 1,並清除最低有效字節的兩個最低有效位。因此,您需要使用與 Curve448 相同的原始 Ed448 私鑰的散列和更改版本。Curve448 密鑰是 56 個字節,切掉 57 字節散列和更改的 Edwards448 密鑰的最高有效字節是安全的,因為該 Edwards448 密鑰將始終在最高有效字節中包含零。請注意,由於所有欄位元素都是 little-endian,因此“最高有效字節”是字節數組中的最後一個字節。
  6. 有趣的是,BouncyCastle X448 實現通過要求 BouncyCastle Ed448 實現對 Ed448 基點執行完全相同的標量的標量乘法來執行與 Curve448 基點的標量乘法。BouncyCastle 然後使用上面第 4 點中指定的相同公式將結果轉換回等效的 Curve448 點。請參閱此處的程式碼。

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