Elliptic-Curves

ECDH 的 openssl 實現是否缺少某些內容?

  • August 24, 2017

來自OpenSSL 維基

另請注意,派生的共享密鑰不適合直接用作共享密鑰。通常,共享密鑰首先通過某個散列函式傳遞,以生成密鑰。

我對 ECDH 的理解是它會生成一個非常安全的共享密鑰。為什麼它也必須被散列?

有兩個原因:

原因一是ECDH共享密鑰不均勻分佈;並非所有值都是可能的。特別是,和 $ x $ 這不是橢圓曲線方程的可能解,根本不可能發生。

使用共享密鑰(例如 AES)的事物通常被假定為具有統一的密鑰;也就是說,所有鍵都是可能的(並且是等機率的);這在直接使用 ECDH 共享密鑰時是不可能的。

在實踐中,這可能無關緊要。很難想像一種攻擊變得實用,因為有一半可能 $ x $ 座標是不可能的。

原因二是並非 ECDH 共享密鑰的所有位實際上都是獨立的。如果共享秘密位的一部分開始進入 $ y $ 協調,那麼如果攻擊者以某種方式獲得 $ x $ 座標位,他得到 $ y $ 免費座標位(嗯,兩種可能性之一)。

我們盡量避免洩露密鑰的某些位;但是有一些位意味著其他位不是我們想要的。適當的 KDF(密鑰派生函式)可以避免這種可能性。

注意:原因二不適用於所有橢圓曲線;例如,對於 Curve25519,我們沒有顯式計算 $ y $ 值,因此它不能作為共享機密的一部分。但是,它存在於其他曲線。

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