馬云 鄭艷國
摘 要:隨著信息社會的到來,人們在享受信息資源所帶來的巨大的利益的同時,也面臨著信息安全的嚴峻考驗。信息安全已經成為世界性的現實問題,已威脅到國家的政治、經濟、軍事、文化、意識形態等領域,同時,信息安全問題也是人們能否保護自己的個人隱私的關鍵。信息安全是社會穩定安全的必要前提條件。解決信息安全的方法是加密,所以加密解密就顯得日益重要。本課題重點研究常用文件加密解密算法的基本思想及實現過程中所用到的方法、技術。同時對公鑰密碼體制和私鑰密碼體制進行了分析和研究,并對公鑰密碼體制和私鑰密碼體制的代表AES算法和DES算法進行了研究和比較,最后結合常用算法設計實現了簡易加密解密應用軟件。
關鍵詞:解密文件加密密碼體制DESAES
中圖分類號:TP314 文獻標識碼:A 文章編號:1672-3791(2012)06(b)-0019-01
1引言
1.1 文件加密與解密算法應用的意義
隨著因特網、全球貿易和其它活動的增長,密碼技術越來越多地用于個人的標識和認證等,它是取得信息安全性最有效的一種方法,是信息安全的核心技術。通過數據加密,人們可以有效地保證通信線路上的內容不被泄露,而且還可以檢驗傳送信息的完整性。
對稱密碼算法主要用于保證數據的機密性,通信雙方在加密解密過程中使用它們共享的單一密鑰。最常用的是數據加密標準(DES)算法,但由于DES的密鑰長度較短,不適合于數據加密安全性的要求。通過分組密碼返回的加密數據的位數與輸入數據相同。迭代加密使用一個循環結構,在該循環中重復置換和替換輸入數據。
本文在研究分析了AES加密原理的基礎上著重說明了AES算法實現的具體步驟:擴展密鑰的異或運算、列變換、行變換、S盒變換等,以及各步驟的輪換順序、密鑰擴展程序KeyExpansion、優化等。
2加密/解密算法的原理分析[1]
2.1 原理
對于AES算法,輸入分組、輸出分組、狀態長度均為128比特。Nb=4,該值反應了狀態中32位字的列數。對于AES算法,密鑰K的長度是128、192或256 bits。密鑰長度表示為Nk=4、6或8,反應了密鑰中32位字的個數。對于AES算法,算法的輪數依賴于密鑰長度。將輪數表示為Nr,當Nk=4時Nr=10;當Nk=6時Nr=12;當Nk=8時Nr=14。對于加密和解密變換,AES算法使用的輪函數由4個不同的以字節為基本單位的變換復合而成。
(1)字節替代,利用一個替代表。(2)將狀態矩陣的每一行循環移位不同的位移量。(3)將狀態矩陣中每一列的數據進行混合。(4)將輪密鑰加到狀態上。
2.1.1S盒變換:對輸入矩陣的任一個元素A做如下變換S[A]
(1)一個元素A從存儲角度看都是一個8位的二進制數。算出前4位所代表的十六進制數x和后4位所代表的十六進制數y。(2)從AES算法給定的S-Box中找出S[A]=S[x,y]的值。
2.1.2 行變換:ShiftRows()是一個置換操作,它將State矩陣中的字節向左旋轉
2.1.3 列變換:列變換是對中間狀態矩陣State逐列進行變換
3算法的具體應用與實現
3.1 加密算法
加密算法是一個循環的過程,過程如下:128位數據分組→與擴展密鑰的異或運算→S盒變換→行變換→列變換→與擴展密鑰的異或→S盒變換→行變換→與擴展密鑰的異或→輸出128位數據。
(1)使用SubByte()函數依據S置換表對狀態矩陣State[4][4]中的數字進行置換。(2)使用ShiftRow()數對狀態矩陣State[4][4]中的各行數據進行循環移位運算。加密時,要結合密鑰擴展所得的數據對文件進行加密。加密過程簡要如以下幾點。
①第0輪加密。本輪加密是將狀態矩陣State[4][4]中的16字節數字與密鑰擴展數組中的w[O]~w[3]這16字節數字進行異或運算。得到16字節新的數字,這些數字存放于狀態矩陣State[4][4]中取代原來的數據。②第l~9輪加密。設輪數為k。程序執行當中首先對狀態矩陣State[4][4]使用SubByte()函數將矩陣中的數字進行置換。再次對置換后的狀態矩陣使用ShiftRow()函數將矩陣中相應行中的數字進行移位。再次對移位后的狀態矩陣使用MixColunms()函數,利用上述的列混合運算公式對狀態矩陣中的數字進行運算,得到一個新的狀態矩陣。最后將經過列混合運算之后的狀態矩陣與密鑰擴展數組中w[4k]~w[4k+4]的數字進行異或運算,將所得結果存入狀態矩陣中,至此一輪加密完成。③第10輪加密。第10輪加密不進行列混合運算,其他部分與第l~9輪加密相同。經過第0~10輪加密后所得到的狀態矩陣State[4][4]便是實驗所需要的密文。
3.2 解密算法
解密算法是加密算法的逆過程,具體解密過程如下:128位數據分組→與擴展密鑰的異或運算→反行變換→反S盒變換→與擴展密鑰的異或→反列變換→反行變換→反列變換→與擴展密鑰的異或→輸出128位數據。得到的解密算法中,各個變換的操作順序與加密算法不同,但密鑰編排形式相同。
3.5 實現方面的問題
(1)密鑰長度要求。AES算法的實現至少需要支持第3節中描述的3種密鑰長度:128,192或256 bits。實現可以選擇支持兩種或三種密鑰長度,這將促進算法執行的互用性。(2)密鑰限制。對于AES算法沒有發現弱密鑰或半弱密鑰,所以對密鑰選取沒有限制。(3)密鑰長度,分組大小和輪數的參數化。該標準明確地定義了密鑰長度(Nk),分組大小(Nb)和輪數(Nr)允許的取值。然而,該標準的未來版本可能包括對這些參數允許取值的改變或增加。因此,當實現者設計AES的實現時可以選擇將未來的變化考慮在內。(4)針對不同平臺的實現建議。很多情況下,實現的可變性可能會提供更好的性能或其它優勢。當給定相同的輸入密鑰和數據時,任意與該標準說明的算法得到相同輸出的實現都是可以接受的AES實現。
4結語
新的AES將無疑成為加密所有形式電子信息的事實上的標準,其在某種意義上是牢不可破的,因為沒有已知的密碼分析攻擊可以解密AES密文,除非強行遍歷搜索所有可能的256位密鑰。隨著科學技術的高速發展,文件加密與解密技術的重要性日益突出,本文中主要將AES加密算法進行了研究和應用。Rijndael作為新一代的數據加密標準匯聚了強安全性、高性能、等優點。AES將會更加廣泛地應用于其它行業,不久的將來它也會被新的加密算法代替。
參考文獻
[1] 陳運.信息加密原理[M].成都:電子科技大學出版社,1990.
[2] 加密解密技能百練叢書[M].中國鐵道出版社,書號(71130585).
[3] 張龍祥,等.向對象程序設計[M].北京:人民郵電出版社,2001.