如何使用密钥大小&来计算RSA密文的大小明文长度?

时间:2012-07-16 13:36:48

标签: encryption cryptography rsa polarssl

我想要使用RSA_PKCS_V21(使用PolarSSL库)加密一些明文。问题是我需要在执行算法之前知道密文的大小(用于动态内存分配目的)。 我知道RSA密钥大小&明文长度。
我也想知道输入明文长度的限制 有什么想法吗?

1 个答案:

答案 0 :(得分:12)

只需查看RSA PKCS#1 v2.1 standard, chapter 7.2

即可
  

RSAES-PKCS1-V1_5-ENCRYPT((n,e),M)

     

输入:

     
      
  • (n,e)收件人的RSA公钥(k表示八位字节的长度          模数n)
  •   
  • 要加密的M消息,长度为mLen的八位字节串,          其中 mLen< = k - 11
  •   

因此输入取决于密钥大小。 k是密钥大小,但是以八位字节为单位。因此,对于1024位密钥,您有1024/8 - 11 = 117字节作为最大纯文本。


请注意,以上是带有PKCS#1 v1.5填充的RSA的最大大小。对于较新的OAEP填充,可以在chapter 7.1

中找到以下内容
  

RSAES-OAEP-ENCRYPT((n,e),M,L)

     

...

     

输入:

     
      
  • (n,e)收件人的RSA公钥(k表示八位字节的长度          RSA模数n)
  •   
  • 要加密的M消息,长度为mLen的八位字节串,          其中 mLen< = k - 2hLen - 2
  •   
  • L与邮件关联的可选标签;该          L的默认值,如果未提供L,则为空          串
  •   

其中hLen是用于掩码生成函数的散列函数的输出大小。如果使用默认的SHA-1散列函数,则消息的最大大小为k-42(因为SHA-1的输出大小为20字节,2 * 20 + 2 = 42)。


通常,加密随机生成的密钥而不是消息。然后使用该密钥加密消息。这允许几乎无限长的消息,并且对称加密 - 例如CBC模式中的AES - 比非对称加密快得多。这种组合称为hybrid encryption


使用任何填充的RSA加密或签名生成的输出大小与模数的字节数相同(当然向上舍入),因此对于1024位密钥,您会期望1024 / 8 = 128个八位字节/字节。

请注意,计算大小的输出数组可能包含设置为零的前导字节;这应该被认为是正常的。