Rsa

RSA 使用哪些素數長度?

  • January 18, 2022

假設我們在 RSA 中有一個 2048 位的模數,它是通過將兩個素數相乘產生的。這兩個因素的數字有什麼區別?例如,一個素數的長度為 1024 位,而第二個素數的長度也為 1024。或者一個是 900 位,第二個是 1148 位?

可以在 RSA 中使用的素數是否有任何限制,或者它是否可以與兩個素數一起使用,其中一個素數由 1 位組成,另一個是 2048 位素數?

標準(PKCS#1)而言,素數不必具有相同的長度;最小的不應該“太小”以避免進入ECM 分解方法的範圍,但這裡仍然有很大的餘量。

但是,某些實現可能會受到更多限制。例如,Windows 的 RSA 實現(在 CryptoAPI 中)假設,對於 2048 位模數,兩個素數的長度正好是 1024 位,僅此而已。在硬體輔助實現(想想智能卡)中強制執行這樣的約束也很常見,因為它們進行模p和模q的計算(使用中國剩餘定理),因此需要能夠處理最大大小的數字的電路兩個素數中的較大者——因此,他們有既得利益使較大的素數盡可能小,從而導致兩個素數具有相同的長度。

RSA 支持作為兩個以上素數乘積的模量,但是,同樣不能過度使用,並且對具有兩個以上素數的私鑰編碼的支持並不普遍。當不導出私鑰時,這無關緊要。當您使用公鑰時,您不知道,也不必知道質因數的數量和大小。

當你乘以一個 $ n $ - 位整數 $ m $ -位整數,乘積是 $ (m+n-\epsilon) $ -位整數,與 $ \epsilon \leq 1 $ .

對於 RSA,安全建議指定公共模數的秘密因子的大小必須大致相同。如果位數的差異不大(小於機器粒度),則可以批准。

Shamir 還有另一個關於為偏執狂生成 RSA 密鑰的建議,例如建議使用素數 $ p $ 說 $ 1000 $ 位和另一個素數 $ q $ 的 $ 5000 $ 位。

引用自:https://crypto.stackexchange.com/questions/22971