Diffie-Hellman:選擇錯誤的生成器“g”參數及其對實際攻擊的影響
在傳統的 DH 中,人們選擇兩個共享參數:一個大素數 $ p $ 和基地 $ g $ ,即原根 $ \bmod p $ . 假設生成算法被破壞並且 $ g $ 只生成一個子群(元素少於互質數的群 $ p $ ),可能的攻擊是什麼?有什麼複雜性?是否有任何攻擊錯誤 DH 參數(實現)的真實範例?
據我們所知,只要g生成的子群不受離散對數的影響,Diffie-Hellman 就是安全的。當以素數p為模工作時,當滿足以下條件時可以實現:
- p足夠大(至少 1024 位,為了獲得更大的安全餘量,請轉到 2048 位)並且不是“特殊形式”的素數(隨機生成的素數會以壓倒性的機率出現)。
- 由g生成的子組具有一個階t,即當k是“安全級別”時(例如,至少具有80 位安全性,q至少應為 160 位)。
請注意,g沒有必要以**p為模生成所有非零整數。如果它生成一個嚴格的子組就可以了,只要該子組不能分成幾個子組,每個子組都非常小。這就是在子群階t的因式分解中至少需要一個中等大小的素數q的本質。
g的階,在上面稱為t,是p-1的除數。以壓倒性的機率,隨機生成的g將暗示一個不會比p小很多的訂單。實際上,十億分之一的機會達到g,這意味著t比p小30 多位(因為2 30大約是十億)。想像一個隨機g以 1024 位素數p為模,將暗示一個小於 900 位的子群階數,這是荒謬的。
n位隨機整數的最大素數平均長度約為0.3n*。最大的素因數比這短得多是極不可能的。
底線是純隨機素數p(至少 1024 位)和純隨機g模p 就可以了。要獲得不良的 DH 參數,您必須故意這樣做。
然而,有些人正在爭論確保p和g可以使用比上面解釋的機率屬性“更強”的論據(在數學上,這些機率非常強,但令人信服的不僅僅是數學,還有心理學)。首先,p將通過一個完全開放且完全描述的偽隨機生成器生成為“我袖手旁觀”的數字。有關說明,請參見FIPS 186-4的附錄 A (這適用於 DSA,但也可能適用於 DH)。那麼g有兩種方法:
- 可以先生成較小的素數q ;然後p隨機產生為p = qr + 1對於正確大小的隨機r,直到達到素數p。然後產生一個隨機的h模p,並將g設置為g = h (p-1)/q mod p。這會產生g = 1(機率極小)或g的階數正好等於q,這很好。
- p可以作為所謂的“安全素數”生成。即生成隨機奇數u,直到u和p = 2u + 1都是素數。然後設置g = 2:g的順序必然等於u或2u,兩者都可以。生成安全素數的計算成本很高,但在執行實際的 Diffie-Hellman 時, g = 2會產生輕微的性能提升。
當整個過程被完整描述時,如 FIPS 186-4 的附錄 A 中,它可以被驗證,這保證了 DH 參數被故意弱化。