何 濤 馮偉東 王紅衛 譚 俊
(國網湖北省電力有限公司信息通信公司 武漢 430077)
近年來,隨著信息技術的不斷進步,企業級的信息化系統日益普及,電子文檔已經逐漸的取代了以往傳統的紙質文檔,成為了保存和傳遞數據資源的最重要的載體。因此,采用先進的加密技術,對本企業的電子檔案和各類數據進行妥善保管,防止商業信息外泄已經成為了各類企業關注的熱點。
AES加密算法是對稱加密方法中的代表性算法,該算法繼承其前身-DES加密算法在計算性能方面的優勢,同時也采用了可變長度的密鑰,極大的提高了算法的破解難度[1]。雖然AES算法具有多種優勢,但仍存在一些不足,如種子密鑰單一和密鑰空間固定等。肖慧娟等在文獻[2]中提出針對AES密鑰的產生過程進行優化,將級聯混沌引入到算法流程,提高了密鑰的管理質量;朱靈波等在文獻[3]中通過改進AES的ECB工作模式,壓縮了算法的計算規模,但在尾端處理環節質量不高;張詩永等在文獻[4]中提出采用256位的分組來構造新的G-AES算法,增強了AES算法的計算性能,但算法過于復雜;費雄偉等在文獻[5]中引入了統一計算設備架構平臺,實現了三個版本的AES并行計算,提高了加密速度,但對硬件設備也有了更高的要求;冷飛等在文獻[6]中提出采用RSA算法與AES算法相融合,也一定程度上降低了密鑰的管理復雜度。本文提出采用混沌理論中的二維Logistic混沌映射系統對AES原有機制中的生成種子密鑰和構造擴展密鑰等環節進行改進,取得了良好的優化效果。
AES屬于分組對稱密碼技術,分組長度固定為128位,并采用統一的種子密鑰來完成對該分組的加解密工作。作為AES的顯著優點之一,該算法允許加密方使用三種不同長度的擴展密鑰,分別為128位、192位和256位[7],每種長度的密鑰對應的加密輪數也有所不同,其分組長度(Nb)以字為單位,長度固定為4,密鑰長度(Nk)和加密輪數(Nr)差異如表1所示。

表1 三種密鑰長度與對應的加密迭代輪次數量
在每輪加密過程中,處理的對象和結果均為長度為128位(16字節)的分組,將該分組抽象成為一個行列均為4的二維數組,稱為每個加密輪次的狀態。每一輪次的加密變換都需要經過四步子環節,分別為輪密鑰加(AddRoundKey)、字節代換(Sub?Bytes)、行位移(ShiftRows)與列混淆(MixColumns),并分別通過對應的異或運算、S盒非線性代換、行內循環位移和線性變換列來實現對數據的混淆與加密[8]。
以192位密鑰長度的AES算法為例,首先需要將初始的16字節的密鑰進行擴展,轉換為長度為52字節的密鑰,并將其均分為單個長度4字節的共13個密鑰分組,用w[0…3]-w[48…51]來分別表示。在加密流程開始前,初始密鑰為選定的種子密鑰本身,即w[0…3]。在字節代換環節,采用的S盒為16×16字節的二維表,且所有元素在整個加密過程中保持定值;行移位環節對4×4的狀態表執行第i行循環左移i個字節(0≤i<4)的操作,設狀態表矩陣為S,則該過程可描述為

列混淆是環節首先確定一個多項式c(x),并要求該多項式與模x4+1成可逆關系[9]。AES算法最常用的多項式c(x)可表示為

上式中,c(x)是與x4+1互素的,故與其也成互逆關系。將該環節用矩陣形式描述,可設S(x)=c(x)·S(x)mod(x4+1),則有:

輪密鑰加則選擇上輪加密后輸出的狀態表中的某個分組與擴展密鑰分組執行部分位上的異或操作,從而進一步提高本輪次加密水平[10]。在對密鑰進行擴展后,即可針對明文拆分的多個分組執行并發加密流程,顯著提高了處理效率。
AES算法雖然提供了不同長度的密鑰分組,但其種子密鑰則始終不變,這使得每個明文分組在執行加密的過程中,其初始密鑰都是相同的,雖然通過擴展密鑰的方式極大地提高了密鑰計算的復雜度,但擴展機制本身的確定性使得無論計算方法多么復雜,其計算過程始終是可逆的,這就給攻擊者的破解行為提供了便利[11]。現以128位AES算法為例,展開推導分析,其密鑰擴展機制為
1)當0≤i≤3時,任一擴展分組中的第i字節按式(4)計算得出:

2)當4≤i≤43 andi=0mod 4成立時,按式(5)計算:

3)當4≤i≤43 andi≠0mod 4成立時,按式(6)計算:

其中,SubWord()、RotWord()和RCon分別表示S盒變換函數、左循環行位移函數和異或操作。可以看出,擴展密鑰和種子密鑰之間存在著較深的依賴關系,入侵者只需要獲取任一輪次的擴展密鑰(W[i],W[i+1],W[i+2],W[i+3]),就可根據以上擴展機制依次推導出前后各個輪次的擴展密鑰,192位AES算法和256位AES算法也可按照該方法進行破解。在得到了所有的擴展密鑰后,入侵者就可輕松的將密文還原成原始數據。
混沌理論近年來得到了快速發展,混沌過程可以視為一種復雜的非線性過程,具有高度隨機性、發散性、遍歷性和寬帶性等特點[12~13]。顯然,利用混沌加密方法可以獲得質量更高的混淆與擴展效果,因此采用混沌映射方程參數或者初值作為密鑰,可以顯著的擴展密鑰空間。本文提出采用混沌加密算法中的二維Logistic映射來改善AES算法在生成種子密鑰和構造擴展密鑰環節的運行質量,因此本節首先針對基本的Logistic映射方法進行分析和研究。
Logistic映射作為一種典型的混沌系統,其動力學方程可描述如下:

上式中以x作為混沌變量;參數μ負責調節混沌形態,混沌變量x0初始值位于(0,1)以內,在μ值靠近零域附近,映射序列并未體現出混沌態,相同迭代次數得到的序列完全重合,然而隨著μ值不斷提高至3.55以上時,映射序列的散布性逐漸增強,最終呈現出明顯的不確定性和遍歷性,反復經歷此過程會產生周期分叉現象[14]。當μ增大至4.0時,系統達到了滿映射混沌狀態,此時系統輸出的混沌序列的散布性極高,系統對于初始參數也呈現出極大的敏感性。此時Logistic映射的特征如下[15]:
1)混沌變量x的概率密度分布函數如式(8)所示:

此函數對混沌變量的初值x0并不敏感,因此根據該函數構造出的混沌序列具有良好的遍歷性,但混沌變量的分布并不是均勻的,尤其在曲線兩段,出現了明顯的奇異性。
2)混沌序列中軌跡點的均值根據式(9)計算得到:

針對混沌映射系統輸出的序列來分析,Logis?tic序列直觀上與噪聲非常相似,體現出了極強的隨機性。在未能獲取混沌系統初始參數的情況下,該序列是無法被預測和解析的。
一維Logistic混沌映射構造的序列雖然具有良好的隨機性和發散性,但對于加密場合的需求而言仍然稍顯不足,因此本文提出將二維Logistic映射系統引入到AES算法的執行過程中,對其密鑰擴展機制進行優化,其動力方程如式(10)所示。

經過反復試驗和調節,確定了二維Logistic映射進入混沌態的參數,其中μ=0.4;γ=0.1;λ1=λ2=0.83。
由于AES算法的執行過程和大部分加密環節均具有較高的安全性,因此本文僅針對其種子密鑰和擴展密鑰的生成環節進行優化,引入混沌映射系統來改善其種子密鑰與擴展密鑰空間固定的問題,現將算法改進內容介紹如下。
首先需要用戶輸入兩個初始密碼PW1和PW2,設其長度為L1和L2,由于用戶密碼的可能與AES采用的三種密鑰模式在長度上并不相符,因此需分別計算L1和L2與AES密鑰長度的差值,得到DV1和DV2,再取其立方值賦予A1和A2,分別執行式(11)得到N1和N2。

將N1和N2賦值給x0和y0,作為式(10)中的初值,并通過該式的循環執行n次(n可在DV1和DV2選擇其一),計算出的xn和yn各自乘以100000,再將結果逆序組合,成為一串長度為12的數字串,按照前后次序取出n/8個數值對用戶輸入的PW1進行補充,使其滿足AES算法對密鑰長度的要求,即為第一個種子密鑰Key1;同理Key2也可通過該方法計算得到。
為了提高序列的復雜度,需對擴展密鑰進行重組,將L1和L2作為初值x0和y0代入迭代方程,其余參數設置如式(12)所示:

分別從兩輪的迭代結果中取出5位和6位不重復數字,其值均在[1,11]之間,并將其作為序號在原擴展密鑰集當中選取出對應的密鑰,通過插空的方式重組成新的11輪次密鑰集合。其過程如圖1所示。

圖1 序列重組算法示意圖
密鑰擴展環節是本改進方案的核心內容,按照AES算法機制,該環節應當由11輪次的迭代計算組成,本節以第一輪次為例介紹本算法的設計思路。
Step1:將構造種子密鑰環節中生成的Key1和重組序列環節中計算得到的11輪重組密鑰集合中的第一輪密鑰取出,并將二者都轉換成為128位二進制表示形式,分別記為k1和k2;
Step2:在k1和k2尾部添0,構成129位二進制數串,以三位為一組,轉換成為10進制數,共計得到兩組各43個取值區間為[0,7]的整數;
Step3:構建兩個一維整型數組intKey1[48]和intKey2[48],元素數量為48個,將Step2中得到的兩組數字納入對應的數組,不足元素補0填充;
Step4:每個數組中的6個元素分為一組,共得到8×2組,每組按序轉換成對應的小數,并分別存放于fKey1[8]和fKey2[8]中;
Step5:將以上兩個數組中的元素按其下標大小對應取出,構成8組,記為(xi,yi),將其代入式(10)中所描述的二維Logistic映射方程中,經過i×100輪次的迭代運算后,得到8組對應的輸出,記為Re_xi和Re_yi;
Step6:分別將Re_xi和Re_yi小數點后六位數字順序取出,并確保每一位的值均在[0,7]以內,若有某位上數值超出該范圍,則用該位與7求模替代;
Step7:將Step6中每位數字轉換成為3位二進制數,可得到兩組各18位的二進制數;
Step8:重 復 執 行Step5-Step7,將Re_xi和Re_yi(i=1,2,…,8)中的所有的小數轉換成為二進制數串,共計8組;
Step9:將每組兩個數串執行異或運算,可得到長度為144位的二進制數,取前128位,即為新的擴展密鑰集中的第一輪密鑰;
Step10:將Step1中重組密鑰集里的第二輪密鑰取出,并采用Key2為初始密鑰,重復執行本算法,得到擴展密鑰集中的第二輪密鑰。
后續的迭代過程全部根據以上算法執行,其中奇數輪次采用Key1,偶數輪次采用Key2,最終可重新構造出全部11輪擴展密鑰,至此,完成了AES算法中針對密鑰擴展機制的改進工作,可靠地提高了AES算法的破譯難度系數,增強了保密文件的安全性。
在引入了二維Logistic混沌映射系統之后,采用雙種子密鑰模式,使得破解該算法的工作量倍增;其次,每一輪的擴展密鑰都需要結合混沌映射系統來構建,使得各個密鑰之間的獨立性大大增加,以往通過逆推方式解析出相鄰密鑰,并最終獲取所有密鑰的破解方法已不再有效;最后,從密鑰空間規模分析,改進后的算法密鑰空間大大增加了,以目前計算性能僅居中等水平的32位處理器為例(該類型處理器中Double型數據精度為小數點后16位),其密鑰空間規模已經達到了2.756×1078,如表2所示,顯然在采用了更高性能的計算芯片后,該空間規模會再次大幅增加,進一步提高對窮舉攻擊的抵抗性能。

表2 密鑰空間規模統計
本文針對AES加密算法展開研究與分析,首先探討了該算法在加密場合的應用優勢與存在的問題,指出了其單一種子密鑰與固定密鑰空間在安全性方面固有的缺陷;隨后分析了Logistic混沌映射系統在構建類隨機序列環節具備的顯著優勢,對該系統的初值敏感性和輸出序列發散性進行了仿真驗證,在此基礎上提出采用二維Logistic映射系統來改進AES加密算法中的種子密鑰生成環節與密鑰擴展環節這一優化思路。設計了相關的改進方案和優化算法,借助混沌系統的隨機性、發散性與初值敏感性,顯著拓寬了AES算法的密鑰空間,增強了該算法的破譯難度,取得了良好的改進效果。