Encryption
RSA公鑰指數生成混淆
引用自維基:
$ e $ 具有較短的比特長度和較小的漢明權重會導致更有效的加密——最常見的是 $ 2^{16} + 1 = 65537 $ . 然而,小得多的值 $ e $ (如 $ 3 $ ) 已被證明在某些設置中不太安全。
這是否意味著選擇可能大於某個門檻值的最小可能公鑰指數是安全的,例如 $ 65537 $ ? 如果不是這樣,如何在更安全的 RSA 實現中生成公鑰指數的值?
通常首先選擇公共指數。通常它是費馬的第五個素數(例如
-f4
foropenssl
),65537。它是第五個數字,因為索引從 0 開始。這個二進制數是:
0000 0000 0000 0000 0001 0000 0000 0000 0001
費馬素數是僅設置了 2 位的素數。3、5、17、257 和 65537 是唯一已知的費馬素數。因為只設置了兩位,所以與其他指數相比,指數運算相對較快。
在選擇公共指數後,質數 $ p $ 和 $ q $ 以符合所選公鑰的方式選擇。準確地說,這意味著 $ p - 1 $ 和 $ q - 1 $ 必須是相對質數 $ e $ . 這與生成 RSA 密鑰對的大多數教科書方法略有不同,其中 $ p $ 和 $ q $ 首先被選中。
更小和更大的指數可能容易受到某種攻擊。通常使用密鑰的其他屬性 - 主要是填充 - 導致這些攻擊是不可能的。然而,密碼學家和標準化機構喜歡謹慎行事,因此目前的實現幾乎一致選擇費馬的第四個素數作為公共指數。
選擇高值的公共指數會損害性能,因為較高的值將在用於加密和驗證的模冪運算中花費更多時間。在最壞的情況下,求冪與私鑰運算一樣慢甚至更慢。如果 $ e $ 是隨機的,那麼它通常最多是 16、32 或 64 位值(例如 PGP 的原始實現)。一些實現 (.NET) 只接受小的公共指數。