Elliptic-Curves

EC ElGamal 中的零密鑰:標準與理論

  • July 29, 2022

我對橢圓曲線 ElGamal 中的零(無窮大點)的標準和一些回复感到有些困惑。

**TL;DR:**為什麼有些人建議排除零?由於順序不足,它與密鑰洩漏無關,因為這些攻擊可以通過組成員資格檢查來預防(即,與零無關)。


這裡有人認為 $ 0 $ 是來自的有效密鑰 $ \mathbb{Z}_q $ . 主要是如果我們排除它,我們可以用同樣的推理來排除 $ 1 $ , $ 2 $ , $ 42 $ ,以及幾乎任何鍵。這個論點是有道理的(參見Pascal Junod 的解釋)。加上學術出版物支持它。

但是,當涉及到 ECC 時,它變得模糊不清。有些人建議排除零(因此是無窮大):

然而也有例外:

據我所知,主要問題是在公鑰的情況下潛在的密鑰洩漏 $ Y $ 沒有預期的順序。但是,通過檢查組成員身份很容易預防 $ q \cdot Y = \mathcal{O} $ , 在哪裡 $ q $ 是曲線階和 $ \mathcal{O} $ 是一個無窮遠點。

此外,當共享密鑰為零時,ECDH 似乎存在問題。但這是一個混合加密問題,不適用於 ElGamal。

另一種解釋可能是因為無窮遠點沒有所有曲線的座標表示,所以實現試圖避免它。


無論如何,我沒有看到任何避免零的正當理由:

  • 是的,如果您的密鑰恰好為零,那麼運氣不好(檢查 RBG);但完全相同的邏輯適用於 $ 1 $ , $ 2 $ , 等等。
  • 密鑰洩漏是由於使用非組成員點而不是零本身執行數學運算。
  • 至於實現,無論如何它都必須處理無窮遠點,因為它是使曲線點成為一組的一部分。

我錯過了什麼?為什麼無限點是這樣一個問題?它進入了 NIST 標準,所以我認為一定有充分的理由。


PS我想我會接受“理論與實踐相結合”的答案。猜猜我看到從整個 Z_q(或 GF(p))派生的密鑰的所有加密文章都更多地從理論方面研究 ElGamal。在實踐中,審計員可能不會太高興看到零。因此,零被排除在標準之外(我這邊純屬猜測)。

在 EC-ElGamal 中不使用零私鑰的正當理由是,如果我們這樣做了:

  1. 公鑰就是無窮遠點,在橢圓曲線密碼學的許多實現中,它需要一個特殊的表示,因為它沒有 $ (x,y) $ 座標。這創建了一個特殊情況來實現和測試公鑰的輸出和輸入,沒有任何用處。通過使零私鑰無效,可以節省大部分工作。
  2. 共享秘密總是相同的(無窮遠點,或 KDF 的輸出,取決於在 EC-ElGamal 中如何定義共享秘密),而不是根據臨時密鑰在組上均勻隨機;這是不可取的。

一旦決定不使用零私鑰,標準就希望強制執行它,即使密鑰生成的正確實現不太可能偶然遇到這種情況,而不是因為其他災難性的故障。


注意:我可能是錯的(然後希望能及時得到糾正),但我認為

  • Bernstein 的 ECC 確實通過在密鑰生成中將位串映射到私鑰(特別是“設置了最後一個八位字節的第二高位”)來防止公鑰成為無窮大點。
  • Bernstein 的論點是我們不需要關心要達到的無窮大點,這是針對公鑰以外的中間結果,例如在 EdDSA 中。當無窮遠處的點不需要特殊情況時,這是非常有意義的,例如在伯恩斯坦所倡導的座標系/曲線類型中。

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