Diffie-Hellman
Diffie-Hellman p 應該有多大?
在 Diffie-Hellman 交換中,各方需要就質數
p
和基礎達成一致g
才能繼續。假設某個應用程序想要與其大部分使用者發起握手,每個使用者只需要在幾個小時內真正安全,
- 大概應該多大
p
?- 如果有的話,應該多久
p
更換一次?每 n 次握手,每 m 小時/天/週?- 動態生成/大小之間是否存在權衡
p
?找到一個約 120 位素數並始終重複使用它或生成大量約 28-38 位素數並在每次握手時隨機選擇一個會更好嗎?- 我什至在問一些接近正確問題的東西(如果沒有,你能給我指出一個更好的方向嗎)?
直覺地說,似乎選擇的秘密整數的大小與通道的安全性有關,而不是 p 的唯一性,但我仍然在問,因為我不是數學家。
好吧,按順序回答您的問題:
應該多大 $ p $ 是?好吧,它應該足夠大以防禦已知的針對它的攻擊。最有效的攻擊是 NFS;已用於按以下順序的數字 $ 2^{768} $ (一個 232 位數字)。選擇一個似乎是明智的 $ p $ 那比那大得多;至少大約 1024 位,更實際的是至少 1536 位。筆記:
- 實際所做的是使用 NFS 分解 232 位數字;可以調整 NFS 以將離散日誌執行到相同大小的基數,而不會過度增加複雜性。
- 現在,您說連接只需要安全幾個小時。現在,對這種規模的數字進行 NFS 是一項巨大的工作,幾乎可以肯定會花費數小時以上的時間。現在,如果您真的不在乎是否有人可以在連接結束後取回密鑰,那麼使用較小的模數似乎是安全的;我個人會建議反對它。此外,還有一點很重要 $ p $ ; $ p-1 $ 應該有一個大的素因數 $ q $ , 你應該知道什麼是因式分解 $ p-1 $ 是(所以你可以選擇一個值 $ g $ 這是順序 $ q $ ; 也就是最小值 $ x>0 $ 在哪裡 $ g^x = 1 \mod p $ 是 $ x=q $ )。如果你選擇一個隨機素數 $ p $ , 和一個隨機發生器 $ g $ ,好吧,你可能是安全的,但你不能確定(如果你的隨機順序,你可能會洩漏一些私有指數 $ g $ 碰巧有一些小因素)。
應該多久 $ p $ 被改變;好吧,如果你選擇好的值 $ p $ 和 $ g $ ,它們不需要更改。
動態生成和 p 的大小之間是否存在權衡?好吧,你最好選擇一個大的(並且選擇得當的)素數 p 和 g,並堅持下去。根據 NFS 分析,120 位素數的安全性存在問題;28-38 位素數遠遠不夠。
現在,正如您從上面的討論中可以看出的那樣,選擇好的 $ p $ 和 $ g $ values 並不簡單(至少,如果你不懂數學的話)。一個好消息是人們已經完成了這項工作,並發表了良好的價值觀。看到這個選擇一些很好的 $ p $ 和 $ g $ 價值觀;這些最初旨在用於 IKE 協議,但它們也可以用於其他目的。我個人會推薦 2048 位值。