使用2048位密钥时使用的是什么是RSA加密输出大小(使用pkcs1padding)。是否总是256字节独立于输入大小? 如何计算其他关键尺寸?
答案 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之间:
如果消息代表m不在0和n-1之间,则输出 消息代表超出范围并停止。
设c = m ^ e mod n。
输出c。
当然,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