2014-09-06 168 views
9

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

+3

你有没有注意到256 * 8 = 2048? – Perseids 2014-09-06 10:17:36

+2

@Perseids。是的,但我不确定输出总是256字节。是吗? – hyda 2014-09-06 10:25:44

+1

来自['RSA_size'](https://www.openssl.org/docs/man1.1.0/crypto/RSA_size.html):*“RSA_size()以字节为单位返回RSA模量大小,可用于确定必须为RSA加密值分配多少内存。“*(消息大小取决于模数大小)。 – jww 2017-07-03 04:00:44

回答

9

,它是。

输出尺寸应该总是等于Modulus(关键部分)的大小,因此:

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

如果不是,存在于大量攻击RSA,有关这方面的基本信息,请参阅here

所以要保证输出2048 bit即使输入加密是,让我们说7
填充,必须始终进行!

+0

情况有点复杂。有点迂腐,我可以争辩说,如果模数对于它的比特大小来说比较小(比如它从比特100开始),那么你有一个公平的机会得到一个实际上比模数短一点的密文。但更重要的是,不是大的输入值,而是一个声音填充方案,使RSA更安全。例如,如果使用小指数(例如3),[John Hastad的攻击](http://www.nada.kth.se/~johanh/rsalowexponent.ps)可与任何确定性填充方案一起使用。 – Perseids 2014-09-06 10:47:21

+0

生成的大小不是填充的结果,它是将函数I2OSP应用于模幂运算的结果的结果。您还应该解释模数的大小等于密钥大小。 – 2014-09-06 14:04:24

3

是的,它始终与密钥大小相同(以字节为单位,2048/8 = 256)。

作为英仙座0和之间正确地解释的,RSAEP (RSA encryption primitive)的输出(作为整数)总是N:

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

  2. 让c = m^e mod n。

  3. 输出c。

当然,c若干。所以你必须将它转换为字节才能使用。

您已经提到PKCS1Padding,它是RSAES-PKCS1-V1_5-ENCRYPT加密方案的一部分。你会发现的c编码在那里被指定:

...

步骤4:转换密文代表C到的 长度k个八位密文C:C = I2OSP (c, k)

...

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

所以,是的,答案总是k,模数的大小,这反过来又是密钥大小,以字节表示。

请注意,OAEP填充使用相同的技术,所以对于OAEP(以及大多数其他较少已知的方案),答案也是正确的。

+1

如果不确定,请阅读标准!它们通常比人们期望的更具可读性。 – 2014-09-06 14:06:11