Rsa

生成比特大小不是 512/1024/2048 的 RSA 密鑰可以嗎?

  • June 15, 2021

我一直在512/1024/2048/4096...為比特大小生成 RSA 密鑰。每次密鑰長度都在增加。

是否可以生成/使用上述位大小以外的密鑰。讓我們說800/1000/2000/...

我錯過了任何背後的理論嗎?

RSA 允許任何密鑰大小,因為計算是使用大的無符號整數執行的。以位為單位的模數大小指定密鑰大小。

然而,許多實現確實有局限性。許多庫至少需要一個 8 位倍數的模數,但只允許 32 位增量甚至只允許特定密鑰大小的庫並不少見。如果使用特定的密鑰大小,那麼這些通常是 2 的冪(如您所提到的),或者是兩個後續的 2 的冪(例如 2048 + 1024 = 3072 位)。

硬體實現具有最大密鑰大小是有道理的。實現通常也可能需要最小密鑰大小 - 但是,是否應該在算法實現級別執行這種檢查是有爭議的;我個人並不贊成。

通常標準會使用這些密鑰大小,但有時也會使用其他選項,例如 1792 位 (1024 + 512 + 256 = 1792) 或 1920 位 (1024 + 512 + 256 + 128) 用於智能卡操作,其中 2048 位密文或簽名將不適合一個(受保護的)應用協議數據單元(APDU)。正如你所看到的,他們會盡量保持接近 2 的冪的倍數。


請注意,PKCS#1 已被定義為將模數和指數以及密文/簽名編碼為字節(或八位字節)。儘管如此,即使模數不是 8 的倍數,其中定義的填充模式也應該有效。

要記住的一件事是,私有指數基本上是介於 0 和模數之間的隨機值。它很可能在大小上接近模數,但當編碼為最小字節數時,它可能會小一個或多個字節。

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