RSA加密输出大小

时间:2014-09-06 10:13:56

标签: encryption rsa public-key-encryption

使用2048位密钥时使用的是什么是RSA加密输出大小(使用pkcs1padding)。是否总是256字节独立于输入大小? 如何计算其他关键尺寸?

3 个答案:

答案 0 :(得分:14)

,是。

输出大小 始终等于Modulus(键的一部分)的大小,因此:

2048 bit Modulus -> 2048 bit output
1024 bit Modulus -> 1024 bit output
...

如果不是,则存在大量针对 RSA 的攻击,请参阅here以获取有关该基本信息的基本信息。

所以为了保证输出即使在加密的输入时也是2048 bit,让我们说7,< br /> 必须始终应用填充!

答案 1 :(得分:4)

RSAEP (RSA encryption primitive)的输出(整数)始终在0和n之间:

  1. 如果消息代表m不在0和n-1之间,则输出 消息代表超出范围并停止。

  2. 设c = m ^ e mod n。

  3. 输出c。

  4. 当然,c 是一个数字。因此,您必须将其转换为字节才能使用。关于c的唯一已知事项是,对于较大的n值,它小于m。即使c很大,m也可能会减少几个字节。


    您已经提到PKCS1Padding,它是RSAES-PKCS1-V1_5-ENCRYPT加密方案的一部分。填充将确保m总是大且随机化; RSA加密的要求是安全的。

    您会发现c的编码在那里指定:

    ...

    步骤4:将密文代表c转换为密文C    长度k个八位字节:C = I2OSP (c, k)

    ...

    其中k是以八位字节为单位的模数大小(字节)。

    所以,答案总是k,模数的大小(以字节为单位)。仅仅因为标准要求那样。它是一个编码为无符号大端数的值,前缀为所需的零字节数。


    注意:

    • 模数大小定义密钥大小。因此,RSA加密的输出与密钥大小相同:ceil(keySize / 8.0)使用浮点数或(keySize + 8 - 1) / 8使用整数。

    • 带有OAEP填充的RSA使用相同的技术,因此OAEP的答案也是正确的(以及大多数其他不太知名的方案,如RSA-KEM)。

    • 执行&#34; raw&#34;的许多库例程RSA(只是带有公共指数的消息的模幂运算)仍然执行I2OSP功能 - 但最好检查以确保。

答案 2 :(得分:2)

普通RSA的输出大小(使用一些填充方案,但没有hybrid encryption)始终是密钥大小。原因是对于某些公钥n,结果是带c的整数0<=c<n。 RSA有很多介绍,例如http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-045j-automata-computability-and-complexity-spring-2011/lecture-notes/MIT6_045JS11_rsa.pdf