AES+RSA混合加密

序言:咱們都知道http協議採用的是明文傳輸,這種傳輸協議可能會致使數據泄露、數據篡改、流量劫持、釣魚攻擊等安全問題。http協議沒法加密數據,全部通訊數據都在網絡傳輸中「裸奔」。反觀https協議,是在http上創建SSL加密層,並對傳輸數據進行加密,是http協議的安全版,比http協議多瞭如下幾個優點:一、數據隱私性:內容經過對稱加密,每一個鏈接生成一個惟一的加密密鑰;二、數據完整性:內容傳輸通過完整性校驗;三、身份認證:第三方沒法僞造客戶端身份。說了這麼多https協議的優點,是否是以爲AES、RSA以及AES+RSA加密技術排不上用場呢?不要急,接下來讓我細細道來...

一、網絡傳輸中爲何須要用到AES、RSA以及AES+RSA加密技術呢?

首先明確一點,咱們常說的SSL/TLS加密是發生在傳輸層的,若是SSL/TLS加密服務與服務器位於一臺物理服務器上,那麼SSL/TLS是能夠提供端到端(end-to-end)的安全傳輸服務。可是事與願違,現實每每不是以上部署方式,如今高併發的場景不少,不少都採用代理服務器做爲中間介轉發請求,也就是咱們說的負載均衡(Load Balance)。這種狀況下代理服務器會先終結客戶端SSL/TLS會話,而後再與服務器採用明文傳輸,即便這一段傳輸處於內部安全域,可是依然是一個重大的安全隱患。算法

幸運的是如今已經存在有不少效果比較好的加密算法能夠幫助咱們解決上述問題。這些加密算法又是如何解決上述安全隱患的呢?下文將着重介紹AES、RSA以及AES+RSA加密技術方案。安全

二、AES算法基本原理和流程

2.一、基本原理

美國國家標準和技術研究所(NIST)通過三輪候選算法篩選,從衆多的分組密碼中選中Rijndael算法做爲高級加密標準(AES)。Rijndael密碼是一個迭代型分組密碼,分組長度和密碼長度都是可變的,分組長度和密碼長度能夠獨立的指定爲128比特,192比特或者256比特。AES的加密算法的數據處理單位是字節,128位的比特信息被分紅16個字節,按順序複製到一個4*4的矩陣中,稱爲狀態(state),AES的全部變換都是基於狀態矩陣的變換。服務器

用Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關係如表一所示)。在輪函數的每一輪迭代中,包括四步變換,分別是字節代換運算(ByteSub())、行變換(ShiftRows())、列混合(MixColumns())以及輪密鑰的添加變換AddRoundKey(),其做用就是經過重複簡單的非線形變換、混合函數變換,將字節代換運算產生的非線性擴散,達到充分的混合,在每輪迭代中引入不一樣的密鑰,從而實現加密的有效性。網絡

表一是三種不一樣類型的AES加密密鑰分組大小與相應的加密輪數的對照表。加密開始時,輸入分組的各字節按
表二的方式裝入矩陣state中。如輸入ABCDEFGHIJKLMNOP,則輸入塊影射到如表2的狀態矩陣中。併發

表一:負載均衡

|AES類型| 密鑰長度 | 分組長度 | 加密輪數|
|AES-128|  4字     |   4字    |   10    |
|AES-192|  6字     |   4字    |   12    |
|AES-256|  8字     |   4字    |   14    |

表二:函數

| A | E | I | M |
| B | F | J | N |
| C | G | K | O |
| D | H | L | P |

字節代換運算(ByteSub())
字節代換運算是一個可逆的非線形字節代換操做,對分組中的每一個字節進行,對字節的操做遵循一個代換表,即S盒。S盒由有限域 GF(28)上的乘法取逆和GF(2)上的仿射變換兩步組成。
行變換ShiftRows()
行變換是一種線性變換,其目的就是使密碼信息達到充分的混亂,提升非線形度。行變換對狀態的每行以字節爲單位進行循環右移,移動字節數根據行數來肯定,第0行不發生偏移,第一行循環右移一個字節,第二行移兩個,依次類推。
列混合變換MixColumns()
列變換就是從狀態中取出一列,表示成多項式的形式後,用它乘以一個固定的多項式a(x),而後將所得結果進行取模運算,模值爲 x4+1。其中a(x)={03}x3+{02}x2+{01}x+{02},
這個多項式與x4+1互質,所以是可逆的。列混合變換的算術表達式爲:s’(x)= a(x) s(x),其中, s(x)表示狀態的列多項式。
輪密鑰的添加變換AddRoundKey()
在這個操做中,輪密鑰被簡單地異或到狀態中,輪密鑰根據密鑰表得到,其長度等於數據塊的長度Nb。高併發

2.二、算法流程

首先,客戶端建立一個AES密鑰,而後把這個密鑰經過網絡傳送給服務端,這樣客戶端和服務端都擁有了相同的密鑰。接着,客戶端用AES密鑰加密明文獲得密文,而後將密文傳輸給服務端,服務端使用相同的AES密鑰對密文進行解密,獲得明文。性能

圖片描述

三、RSA算法基本原理和流程

3.一、RSA算法基本原理

RSA是在1977年發明RSA密碼系統的三我的的名字的首字母的縮寫,他們是:Ron Rivest、Adi Shamir和Leonard Adleman。它是第一個公鑰加密算法,在不少密碼協議中都有應用,如SSL和S/MIME。RSA算法是基於大質數的因數分解的公匙體系。簡單的講,就是兩個很大的質數,一個做爲公鑰,另外一個做爲私鑰,如用其中一個加密,則用另外一個解密。密鑰長度從40到2048位可變,密鑰越長,加密效果越好,但加密解密的開銷也大。RSA算法可簡單描述以下:大數據

公開密鑰:n=pq,(p,q爲兩個不一樣的很大的質數,p和q必須保密)
將(p-1)和(q-1)相乘獲得φ(n)
選擇一個整數e (1<e<φ(n))與φ(n)互質
祕密密鑰:d=e-1modφ(n),即計算一個數字d,使得它知足公式 de=1 modφ(n)
加密:c=mc(mod n) 
解密:m=cd(mod n),m爲明文,c爲密文。

3.二、算法流程

首先,服務端建立RSA密鑰對,就是一個公鑰和一個私鑰,公鑰經過網絡傳送給客戶端,這樣客戶端有了本身的公鑰,服務端有了本身的私鑰。接着,客戶端使用公鑰加密明文獲得密文,將密文經過網絡傳輸給服務端,服務端使用私鑰解密密文獲得明文。

圖片描述

四、AES+RSA混合加密技術方案

4.一、爲何會出現混合加密方式

RSA算法是公開密鑰系統的表明,其安全性創建在具備大素數因子的合數,其因子分解困難這一法則之上的。Rijndael算法做爲新一代的高級加密標準,運行時不須要計算機有很是高的處理能力和大的內存,操做能夠很容易的抵禦時間和空間的攻擊,在不一樣的運行環境下始終能保持良好的性能。這使AES將安全,高效,性能,方便,靈活性集於一體,理應成爲網絡數據加密的首選。相比較,由於AES密鑰的長度最長只有256比特,能夠利用軟件和硬件實現高速處理,而RSA算法須要進行大整數的乘冪和求模等多倍字長處理,處理速度明顯慢於AES;因此AES算法加解密處理效率明顯高於RSA算法。在密鑰管理方面,由於AES算法要求在通訊前對密鑰進行祕密分配,解密的私鑰必須經過網絡傳送至加密數據接收方,而RSA採用公鑰加密,私鑰解密(或私鑰加密,公鑰解密),加解密過程當中沒必要網絡傳輸保密的密鑰;因此RSA算法密鑰管理要明顯優於AES算法。
從上面比較得知,因爲RSA加解密速度慢,不適合大量數據文件加密,所以在網絡中徹底用公開密碼體制傳輸機密信息是沒有必要,也是不太現實的。AES加密速度很快,可是在網絡傳輸過程當中如何安全管理AES密鑰是保證AES加密安全的重要環節。這樣在傳送機密信息的雙方,若是使用AES對稱密碼體制對傳輸數據加密,同時使用RSA不對稱密碼體制來傳送AES的密鑰,就能夠綜合發揮AES和RSA的優勢同時避免它們缺點來實現一種新的數據加密方案

基於以上表述能夠總結兩點緣由:

  • 在處理大數據時,AES算法比RSA算法速度更快;
  • AES算法使用的是統一的密鑰,一旦密鑰被篡奪就會致使信息泄露,反觀RSA算法使用一對公鑰和私鑰進行加密解密,在密鑰管理上更加安全。

4.二、算法流程

首先,服務端建立RSA密鑰對,將公鑰傳輸給客戶端,同時客戶端建立AES密鑰,使用AES密鑰加密明文獲得密文,接着使用公鑰加密AES密鑰,最後將加密後的AES密鑰和密文傳輸到服務端。服務端使用本身的私鑰解密加密後的AES密鑰獲得AES密鑰,接着使用AES密鑰解密密文獲得明文。

五、AES+RSA混合加密方案實例

這一部分有時間再補充,很抱歉~

相關文章
相關標籤/搜索