大強素數列表
我想使用 Python 製作一個 Diffie Hellman 密鑰交換程式碼,但我害怕只是隨機挑選 $ g $ .
我閱讀了 Thomas Pornin 對這個問題的回答How do you calculate a original root for Diffie-Hellman? ,如果你使用一個強素數,那麼組中的每個數字(除了 $ 1 $ 和 $ p-1 $ ) 的順序是 $ p-1 $ 或者 $ \frac{p-1}{2} $ ,但我在網上的任何地方都找不到要使用的大型強素數列表。有誰知道我在哪裡可以找到一個?
編輯:感謝 fgrieu 的慷慨幫助,我意識到我正在尋找安全的素數,而不是強素數。
在密碼學中,強素數已被用於 RSA(具有各種定義),以擊敗 Pollard 的 p-1 和 p+1 算法對公共模數的因式分解以及各種其他攻擊。出於這個原因,沒有標準的大強素數列表,因為這會破壞 RSA 的目的,其中公共模數的素數因子必須是秘密的。
Diffie-Hellman 密鑰交換經常使用安全素數,這是一個素數 $ p $ 這樣 $ \displaystyle q=\frac{p−1}2 $ 也是素數。如評論中所述,與問題相關的答案意外誤用了表示安全素數的強素數這個詞。
用於 DH 的標準安全素數在RFC 3526中。這些故意使用生成器 $ g=2 $ 對於素數的子群 $ \displaystyle q=\frac{p−1}2 $ . 除了可能是 1536 位的之外,它們被認為足夠大,可以安全使用。
與(安全素 $ p $ ),我可以使用之間的任何數字 $ 2 $ 和 $ p−2 $ 並保證有一個訂單 $ p−1 $ 或者 $ \displaystyle\frac{p−1}2 $ ?
是的。論證:子群的階總是除以群的階,即 $ p-1 $ 為素數 $ p $ . 當進一步 $ p $ 是一個安全素數,群的階是 $ 2,q $ 和 $ q $ 素數,因此任何的順序 $ g $ 是其中之一 $ 1 $ , $ 2 $ , $ q $ 或者 $ 2q $ . 僅有的 $ 1 $ 有訂單 $ 1 $ 並且只有 $ p-1 $ 有訂單 $ 2 $ .
但正如評論中所指出的,沒有充分的理由不使用 Prime 附帶的生成器。