手動演示RSA和AES混合加密過程

       RSA屬於非對稱加密算法,它雖然解決了“在不安全的信道上安全地傳遞密鑰”這一問題,但缺點在於運算量太大,造成加/解速度太慢,所以在具體的工程應用上是混合使用了對稱和和非對稱加密算法,比如SSL/TLS協議是混合使用了RSA和AES算法。具體的過程是,用RSA算法加密對稱密碼傳遞給對方,然後雙方使用對稱加密算法通信;另外,RSA還起到CA認證的作用(其實就是驗證由CA的私鑰簽名的,對方的公鑰)。

       由此可見,RSA的作用已經由“加密數據”減弱爲“驗證CA證書”和“共享對稱密鑰”,如果第二個作用由DH算法代替,那麼,RSA就僅用於驗證CA證書了。

       爲了理解用RSA共享對稱密鑰的過程,本文用手動的方法來逐步實現。

        

       A用戶要把數據加密傳輸給B用戶,步驟如下:

     1、B生成公鑰/私鑰對,並把其中的公鑰導出,通過公開信道傳遞給A;

     2、A生成對稱密碼;

     3、A用對稱加密算法對文件進行AES加密;

     4、A用B的公鑰加密對稱密碼;

     5、A將加密後的對稱密碼和密文通過網絡等渠道傳送B;

     6、B用自己的鑰解密對稱密碼;

     7、B用解密後的對稱密碼解密密文;


     具體的操作步驟:

    1、B生成RSA密鑰對文件key.pri,然後從中提取公鑰key.pub並通過公開信道傳遞給A:

           圖片2.png

   openssl genrsa -out key.pri 4096
   openssl rsa -in key.pri -pubout -out key.pub

     2、A生成32字節的隨機密碼文件passwd.bin:

                圖片1.png

   openssl rand -out passwd.bin 32

      3、準備待加密文件test.txt,用上面的隨機密碼,以AES算法加密明文test.txt,輸出的密文是test.enc,key派生函數是pbkdf2:

           圖片2.png

   openssl enc -pbkdf2 -aes-256-cbc -in test.txt -out test.enc -pass file:passwd.bin
   del test.txt

     4、A用B發過來的公鑰key.pub加密隨機密碼文件passwd.bin,輸出的密文是passwd.enc:

            圖片2.png

   openssl rsautl -encrypt -in passwd.bin -inkey key.pub -pubin -out passwd.enc
   del passwd.bin

      5、A通過公開信道,將密文test.enc和passwd.enc發送給B:

               圖片2.png

     6、B首先用自己的私鑰解密對稱密碼,得到密碼文件passwd.bin:

           圖片2.png

   openssl rsautl -decrypt -in passwd.enc -out passwd.bin -inkey key.pri

      7、B再用對稱密碼解密消息,得到明文test.txt,算法和祕鑰派生函數與加密時用到的參數一樣:

           圖片1.png

            openssl enc -d -aes-256-cbc -pbkdf2 -in test.enc -out test.txt -pass file:passwd.bin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章