加密與安全:非對稱加密算法 RSA 1024 公鑰、秘鑰、明文和密文長度


RSA 1024 是指公鑰及私鑰分別是 1024bit,也就是 1024/8 = 128Bytes。

RSA 原理

RSA 算法密鑰長度的選擇是安全性和程序性能平衡的結果,密鑰長度越長,安全性越好,加密解密所需時間越長。

1、非對稱加密算法中 1024bit 密鑰的強度相當於對稱加密算法 80bit 密鑰的強度;


 
2、密鑰長度增長一倍,公鑰操作所需時間增加約 4 倍,私鑰操作所需時間增加約 8 倍,公私鑰生成時間約增長 16 倍;
 
3、明文長度

一次能加密的明文長度與密鑰長度成正比:

len_in_byte(raw_data) = len_in_bit(key)/8 -11,如 1024bit 的密鑰,一次能加密的內容長度為 1024/8 -11 = 117 byte。

所以非對稱加密一般都用於加密對稱加密算法的密鑰,而不是直接加密內容。

注:

明文長度小於等於密鑰長度 128Bytes - 11 這個說法本身不太准確,會讓人產生 RSA 1024 只能加密 117 字節長度明文的誤解。

實際上,RSA 算法本身要求加密內容也就是明文長度 m 必須滿足 0<m<n,也就是說內容這個大整數不能超過 n,否則就出錯。

那么如果 m=0 是什么結果?

普遍 RSA 加密器會直接返回全 0 結果,如果 m>n,運算就會出錯。

因此,RSA 實際可加密的明文長度最大也是 1024bits,但問題就來了:

如果小於這個長度怎么辦?

就需要進行 padding,因為如果沒有 padding 用戶無法確分解密后內容的真實長度,字符串之類的內容問題還不大,以 0 作為結束符,便於區分。

但對二進制數據就很難理解,因為不確定后面的 0 是內容還是內容結束符。

只要用到 padding,那么就會占用實際的明文長度,我們一般使用的 padding 標准有 NoPPadding、OAEPPadding、PKCS1Padding 等。

其中 PKCS#1 建議的 padding 就占用了 11 個字節,於是才有 117 字節的說法。

如果大於這個長度怎么辦?

很多算法的 padding 往往是在后邊的,但 PKCS 的 padding 則是在前面的,此為有意設計,有意的把第一個字節置 0 以確保 m 的值小於 n。

這樣,128字節(1024bits)- 11 字節正好是117字節,但對於 RSA 加密來講,padding 也是參與加密的。

所以,依然按照 RSA 1024 實際的明文只有 117 字節。

關於 PKCS#1 padding 規范可參考:RFC2313 chapter 8.1。

我們在把明文送給 RSA 加密器前,要確認這個值是不是大於 n,也就是如果接近 n 位長,那么需要先 padding 再分段加密。

除非我們是“定長定量自己可控可理解”的加密則不需要 padding。

4、秘文長度

加密后密文的長度為密鑰的長度,如密鑰長度為 1024b(128Byte),最后生成的密文固定為 1024b(128Byte)

密文長度就是給定符合條件的明文加密出來的結果位長,這個可以確定,加密后的密文位長跟密鑰的位長度是相同的,因為加密公式:

C=(P^e)%n

所以,C 最大值就是 n-1,所以不可能超過 n 的位數。

盡管可能小於 n 的位數,但從傳輸和存儲角度,仍然是按照標准位長來進行的。

因此,即使我們加密一字節的明文,運算出來的結果也要按照標准位長來使用。

 

refer:

https://blog.csdn.net/lvxiangan/article/details/45487943
http://blog.sina.com.cn/s/blog_4fcd1ea301012o4q.html
————————————————
版權聲明:本文為CSDN博主「簡一商業」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/liwei16611/article/details/83751851


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM