Rsa

為什麼 RSA-2048 最大輸入 245 字節?

  • August 18, 2016

我可以看到消息(填充後)不應該是 256 字節,因為它可能大於 RSA 的模數。所以我認為消息應該是 255 字節,但我看到文章說最大輸入是 245 字節。這是為什麼?

這是由於具有 PKCS#1 v1.5 填充的 RSA,如RFC 3447 (PKCS#1 v2.1)的第 7.2 節中所定義:

2. EME-PKCS1-v1_5 encoding:

      a. Generate an octet string PS of length k - mLen - 3 consisting
         of pseudo-randomly generated nonzero octets.  The length of PS
         will be at least eight octets.

      b. Concatenate PS, the message M, and other padding to form an
         encoded message EM of length k octets as

            EM = 0x00 || 0x02 || PS || 0x00 || M.

如您所見,有 3 個成本字節和至少 8 個字節的隨機填充。

如果沒有填充 RSA 加密將是確定性的並且*不安全*。


最初,RSA 加密方案主要與 PKCS#1 v1.5 定義的填充一起使用。當時沒有其他計劃如此受歡迎。因此,當沒有指示填充方案時,很可能隱式使用 PKCS#1 v1.5。

正式名稱當然應該是 RSAES-PKCS1-V1_5-ENCRYPT,但沒有人直接使用函式名稱。


請注意,還有其他填充模式,例如 OAEP(在同一 RFC 中定義),它更安全。對於新協議 PKCS#1 填充不應再使用。如果您堅持使用需要 PKCS#1 取消填充的舊協議,則應確保不適用填充/解密預言機。

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