2014-09-06 164 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