開放接口的安全驗證方案(AES+RSA)

隨著密碼分析技術的提高,新的數據加密標準AES取代了過時的DES。文章在闡述AES/RSA加密算法的基礎上,分別給出了利用AES /RSA實現客戶端/服務器端網絡數據傳輸的加密流程。最后在比較AES算法和RSA算法基礎上,將AES與RSA相結合提出一種新的數據加密方案。
基本需求及概念
隨著Internet網的廣泛應用,信息安全問題日益突出,以數據加密技術為核心的信 息安全技術也得到了極大的發展。目前的數據加密技術根據加密密鑰類型可分私鑰加密(對稱加密)系統和公鑰加密(非對稱加密)系統[1]。對稱加密算法是較 傳統的加密體制,通信雙方在加/解密過程中使用他們共享的單一密鑰,鑒于其算法簡單和加密速度快的優點,目前仍然是主流的密碼體制之一。最常用的對稱密碼 算法是數據加密標準(DES)算法,但是由于DES密鑰長度較短,已經不適合當今分布式開放網絡對數據加密安全性的要求。最后,一種新的基于 Rijndael算法對稱高級數據加密標準AES取代了數據加密標準DES。非對稱加密由于加/解密鑰不同(公鑰加密,私鑰解密),密鑰管理簡單,也得到 廣泛應用。RSA是非對稱加密系統最著名的公鑰密碼算法。
AES算法
基本原理及算法流程
美國國家標準和技術研究 所(NIST)經過三輪候選算法篩選,從眾多的分組密碼中選中Rijndael算法作為高級加密標準(AES)。Rijndael密碼是一個迭代型分組密 碼,分組長度和密碼長度都是可變的,分組長度和密碼長度可以獨立的指定為128比特,192比特或者256比特。AES的加密算法的數據處理單位是字 節,128位的比特信息被分成16個字節,按順序復制到一個4*4的矩陣中,稱為狀態(state),AES的所有變換都是基于狀態矩陣的變換。用 Nr表示對一個數據分組加密的輪數(加密輪數與密鑰長度的關系如表1所示)。在輪函數的每一輪迭代中,包括四步變換,分別是字節代換運算 (ByteSub())、行變換(ShiftRows())、列混合(MixColumns())以及輪密鑰的添加變換AddRoundKey() [3],其作用就是通過重復簡單的非線形變換、混合函數變換,將字節代換運算產生的非線性擴散,達到充分的混合,在每輪迭代中引入不同的密鑰,從而實現加 密的有效性。
表1 是三種不同類型的AES加密密鑰分組大小與相應的加密輪數的對照表。加密開始時,輸入分組的各字節按表2 的方式裝入矩陣state中。如輸入ABCDEFGHIJKLMNOP,則輸入塊影射到如表2的狀態矩陣中。
表1:
|AES類型| 密鑰長度 | 分組長度 | 加密輪數| |AES-128| 4字 | 4字 | 10 | |AES-192| 6字 | 4字 | 12 | |AES-256| 8字 | 4字 | 14 |
表2:
| 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。
</ol>
- 保證傳輸數據的安全性
- 保證數據的完整性
- 能夠驗證客戶端的身份 </ol>
- 服務器端(server)和客戶端(client)分別生成自己的密鑰對
- server和client分別交換自己的公鑰
- client生成AES密鑰(aesKey)
- client使用自己的RSA私鑰(privateKey)對請求明文數據(params)進行數字簽名
- 將簽名加入到請求參數中,然后轉換為json格式
- client使用aesKey對json數據進行加密得到密文(data)
- client使用sever的RSA公鑰對aesKey進行加密(encryptkey)
- 分別將data和encryptkey作為參數傳輸給服務器端
AES算法流程
對于發送方,它首先創建一個AES私鑰,并用口令對這個私鑰進行加密。然后把用口令加 密后的AES密鑰通過Internet發送到接收方。發送方解密這個私鑰,并用此私鑰加密明文得到密文,密文和加密后的AES密鑰一起通過 Internet發送到接收方。接收方收到后再用口令對加密密鑰進行解密得到AES密鑰,最后用解密后的密鑰把收到的密文解密成明文。圖1中是這個過程的 實現流程。
圖1:
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為密文。
RSA算法實現流程
首先,接收方創建RSA密匙對,即一個公鑰和一個私鑰,公鑰被發送到發送方,私鑰則被保存在接收方。發送方在接收到這個公鑰后,用該公鑰對明文進行加密得 到密文,然后把密文通過網絡傳輸給接收方。接收方在收到它們后,用RSA私鑰對收到的密文進行解密,最后得到明文。圖2是整個過程的實現流程。
圖2:
AES與RSA相結合數據加密方案
RSA算法是公開密鑰系統的代表,其安全性建立 在具有大素數因子的合數,其因子分解困難這一法則之上的。Rijndael算法作為新一代的高級加密標準,運行時不需要計算機有非常高的處理能力和大的內 存,操作可以很容易的抵御時間和空間的攻擊,在不同的運行環境下始終能保持良好的性能。這使AES將安全,高效,性能,方便,靈活性集于一體,理應成為網 絡數據加密的首選。相比較,因為AES密鑰的長度最長只有256比特,可以利用軟件和硬件實現高速處理,而RSA算法需要進行大整數的乘冪和求模等多倍字 長處理,處理速度明顯慢于AES[5];所以AES算法加解密處理效率明顯高于RSA算法。在密鑰管理方面,因為AES算法要求在通信前對密鑰進行秘密分 配,解密的私鑰必須通過網絡傳送至加密數據接收方,而RSA采用公鑰加密,私鑰解密(或私鑰加密,公鑰解密),加解密過程中不必網絡傳輸保密的密鑰;所以 RSA算法密鑰管理要明顯優于AES算法。
從上面比較得知,由于RSA加解密速度慢,不適合大量數據文件加密,因此在網絡中完全用公開密碼體制傳 輸機密信息是沒有必要,也是不太現實的。AES加密速度很快,但是在網絡傳輸過程中如何安全管理AES密鑰是保證AES加密安全的重要環節。這樣在傳送機 密信息的雙方,如果使用AES對稱密碼體制對傳輸數據加密,同時使用RSA不對稱密碼體制來傳送AES的密鑰,就可以綜合發揮AES和RSA的優點同時避 免它們缺點來實現一種新的數據加密方案。加解密實現流程如圖(3)。
圖3:
具體過程是先由接收方創建RSA密鑰對,接收方通過Internet發送RSA公鑰到發送方,同時保存RSA私鑰。而發送方創建AES密鑰,并用該 AES密鑰加密待傳送的明文數據,同時用接受的RSA公鑰加密AES密鑰,最后把用RSA公鑰加密后的AES密鑰同密文一起通過Internet傳輸發送 到接收方。當接收方收到這個被加密的AES密鑰和密文后,首先調用接收方保存的RSA私鑰,并用該私鑰解密加密的AES密鑰,得到AES密鑰。最后用該 AES密鑰解密密文得到明文。
AES+RSA結合最佳實踐
基本要求
基本流程
請求:
服務器端進行請求響應時將上面流程反過來即可</pre>
java版示例
參考: