Diffie-Hellman 中的生成器大小是否重要?
對於Diffie-Hellman協議,我聽說生成器3 與任何其他生成器一樣安全。然而,32 位或 256 位指數有時用作生成器。如果這些超大型發電機與發電機 3 一樣安全,那麼使用這些發電機有什麼好處?
如果 3 不是最安全的生成器,如何計算被認為是安全的最短長度生成器?
Diffie-Hellman 的安全性取決於使用 DH 的組,而不取決於該組使用的生成器。請參見應用密碼學手冊的註釋 3.53(第 3 章,第 103 頁)。
更詳細地說:對於 DH,我們使用大小的子組 $ q $ 整數模 $ p $ (一個大素數)乘法作為群運算。 $ q $ 至少應該是長度的素數 $ 2n $ 位 $ 2^n $ 安全級別(或者,至少, $ q $ 應該有一個至少為 $ 2n $ 位)。典型參數大小為 160 位 $ q $ 和 1024 位 $ p $ , 或 256 位 $ q $ 和 2048 位 $ p $ . 發電機 $ g $ 是秩序的一個要素 $ q $ .
什麼時候 $ p $ 是一個“安全素數”,這意味著 $ \frac{(p-1)}{2} $ 也是素數。然後我們定義 $ q = \frac{(p-1)}{2} $ . 在那種情況下,任何非零的階 $ g \bmod p $ (除了 1 和 $ p-1 $ ) 或者是 $ q $ 或者 $ 2q $ ,因此每個 $ g $ 之間 $ 2 $ 和 $ p-2 $ (包括)是一個很好的 DH 生成器,並確保最佳的安全性。因此習慣上選擇一個 $ g $ 這使得計算更容易,通常 $ g = 2 $ 或者 $ g = 3 $ .
定義 DH 組的另一種方法繼承自DSS(也適用於該組的簽名算法):我們首先選擇一個素數 $ q $ 適當大小(例如 160 位),然後我們尋找 $ p $ 通過設置 $ p = qr+1 $ 對於隨機值 $ r $ 大小合適(這樣 $ p $ 有我們需要的大小),直到我們遇到一個素數 $ p $ . 這允許使用更小的 $ q $ ,因此更小的 DH 指數和更快的計算;另一方面,在這種情況下我們不能隨意選擇生成器,因為只有 $ q-1 $ 子群的生成子 $ q $ 模組 $ p $ . 所以我們取一個隨機值 $ s $ 併計算 $ g = s^{(p-1)/q} \bmod p $ . 這會產生一個合適的生成器,但不是一個小的生成器,例如 $ 2 $ 或者 $ 3 $ .
為什麼不是每個人都使用明顯的 $ 2 $ 或者 $ 3 $ 而不是 256 位數字?
模冪運算使用“平方和乘法”算法。使用 $ 2 $ 因為生成器簡化了乘法,但沒有簡化平方,後者代表了大部分計算(尤其是在使用基於視窗的優化時)。使用 $ g=2 $ 很整潔,但並不意味著有那麼多的性能增強。
基於視窗的優化對乘法進行分組。基本上,你預先計算 $ g^2, g^3 \dots g^{15} $ ; 然後,您進行平方,並且每四個平方只乘以預先計算的值之一。這是一個4位的視窗,你可以有更大的視窗;窗戶建設也有可能節省。這就是為什麼平方使用超過 $ \frac{2}{3} $ 佔總 CPU 成本的比例接近 80% 或 85%。這留下了相對較少的優化與 $ g=2 $ .
最有可能的是,有人在某些時候有一種模糊的感覺,即 256 位數字以某種未指定的方式“更安全”。我沒有親眼見過。一些協議(例如IKE,用於IPsec )使用來自RFC 2412(附錄 E)的“Oakley 組”,它們具有 $ g=2 $ .