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