DHE參數:每次需要隨機哪些參數?
在 DH 密鑰交換中,首先,雙方需要就一個生成器達成一致 $ g $ 和素數 $ p $ . 之後,每一方計算其密鑰(甲方: $ g^a \bmod p $ ) 和 (乙方: $ g^b \bmod p $ ),然後他們交換這些值來計算共享密鑰。您能否澄清一下每個會話中哪些數字應該是隨機的(假設它與 TLS 之類的協議一起使用)?
TL;博士: $ a $ 和 $ b $ .
對於乘法組模中的 DHE $ p $ , 它在一個大素數上達成一致 $ p $ 和一個元素 $ g $ . 這通常是長期的,並且有標準的公共參數,例如RFC 3526 的 3072 位 MODP 組
在此之後,每次 A 和 B 兩方想要共享秘密
- 甲方隨機抽取 $ a $ 並發送 $ h_A = g^a\bmod p $ 和
- 乙方隨機抽取 $ b $ 並發送 $ h_B = g^b\bmod p $ .
- 甲方收到 $ h_B $ 併計算 $ s_A={h_B}^a\bmod p $ 和
- 乙方收到 $ h_A $ 併計算 $ s_B={h_A}^b\bmod p $ .
如果沒有消息被更改, $ s_A=s_B $ 這是一個共享的秘密 $ s $ . 它通常用作密鑰派生函式或散列的輸入,以生成一些共享秘密對稱密鑰。
更準確地說,如果 $ g $ 是一個大素數(包括當 $ (p-1)/2 $ 是素數並且 $ g^{(p-1)/2}\bmod p=1 $ 和 $ 1<g<p $ ), 和 $ a $ 和 $ b $ 是一致隨機的、獨立的、秘密的、足夠大的,被動的對手無法區分 $ s $ 從生成的子組的隨機元素 $ g $ . 當心發送方 $ h $ 第二個可以影響 $ s $ 在某種程度上。還有,當 $ g $ 是一個生成器 $ [1,p) $ 如問題所示,順序 $ g $ 是 $ p-1 $ , 因此偶數和勒讓德符號 $ \left(\frac sp\right) $ 洩漏。這是在沒有密鑰派生函式的情況下使用 DHE 時的一個考慮因素,在那裡討論。
該系統由 Withfield Diffie 和 Martin Hellman: New Directions in Cryptography發表在IEEE Transactions in Information Theory, 1976中,並在 1975 年發表了一些演講。有關它是如何被發現但未由 Malcolm John Williamson 發表的,為 GCHQ 工作, 1974 年。
注意:如果發生其中的一個,則不會立即發生災難性的事情 $ a $ 或者 $ b $ 保持不變(使相應的 $ h_A $ 或者 $ h_B $ 持續的)。然而,對於密鑰交換而言,靜態臨時設置通常不是一個好主意,因為在負責選擇剩餘隨機數的一方仍然沒有針對壞 RNG 的保護。另外,由於使用時間長,常量秘密更容易洩露,洩露所有共享的秘密。這就是 TLS 1.3 需要臨時臨時DHE 的原因(請參閱此處)。當線上密鑰交換不是一種選擇時,仍然必須修復一個秘密:DHE 成為 ElGamal 加密的第一步,靜態 $ h_A $ A 的公鑰,以及 $ a $ 匹配的私鑰。
如果我們同時做 $ a $ 和 $ b $ 靜態的,共享的秘密變成一個常數。這仍然很有用(例如,在具有隨機值的密鑰派生步驟之後),但這種靜態靜態設置幾乎不是密鑰交換協議。
注意:在實踐中,在 TLS 等協議中,交換具有額外的步驟,以便使用公鑰/私鑰對對各方進行身份驗證,並防範包括中間人在內的主動攻擊。這是經過身份驗證的 Diffie-Hellman 密鑰交換。
注意:問題說“每一方計算其密鑰”,但是 $ h_A $ , $ h_B $ 在 DHE 中通常不被視為“密鑰”。僅用於靜態 $ a $ 或者 $ b $ 是 $ h_A $ 或者 $ h_B $ 被稱為“公鑰”。 $ s_A $ , $ s_B $ ,通常相同,通常被稱為“共享密鑰”,儘管我更喜歡“共享密鑰”,以區別於後續密鑰派生步驟的輸出。