何 濤 馮偉東 王紅衛(wèi) 譚 俊
(國網(wǎng)湖北省電力有限公司信息通信公司 武漢 430077)
近年來,隨著信息技術(shù)的不斷進(jìn)步,企業(yè)級(jí)的信息化系統(tǒng)日益普及,電子文檔已經(jīng)逐漸的取代了以往傳統(tǒng)的紙質(zhì)文檔,成為了保存和傳遞數(shù)據(jù)資源的最重要的載體。因此,采用先進(jìn)的加密技術(shù),對(duì)本企業(yè)的電子檔案和各類數(shù)據(jù)進(jìn)行妥善保管,防止商業(yè)信息外泄已經(jīng)成為了各類企業(yè)關(guān)注的熱點(diǎn)。
AES加密算法是對(duì)稱加密方法中的代表性算法,該算法繼承其前身-DES加密算法在計(jì)算性能方面的優(yōu)勢(shì),同時(shí)也采用了可變長度的密鑰,極大的提高了算法的破解難度[1]。雖然AES算法具有多種優(yōu)勢(shì),但仍存在一些不足,如種子密鑰單一和密鑰空間固定等。肖慧娟等在文獻(xiàn)[2]中提出針對(duì)AES密鑰的產(chǎn)生過程進(jìn)行優(yōu)化,將級(jí)聯(lián)混沌引入到算法流程,提高了密鑰的管理質(zhì)量;朱靈波等在文獻(xiàn)[3]中通過改進(jìn)AES的ECB工作模式,壓縮了算法的計(jì)算規(guī)模,但在尾端處理環(huán)節(jié)質(zhì)量不高;張?jiān)娪赖仍谖墨I(xiàn)[4]中提出采用256位的分組來構(gòu)造新的G-AES算法,增強(qiáng)了AES算法的計(jì)算性能,但算法過于復(fù)雜;費(fèi)雄偉等在文獻(xiàn)[5]中引入了統(tǒng)一計(jì)算設(shè)備架構(gòu)平臺(tái),實(shí)現(xiàn)了三個(gè)版本的AES并行計(jì)算,提高了加密速度,但對(duì)硬件設(shè)備也有了更高的要求;冷飛等在文獻(xiàn)[6]中提出采用RSA算法與AES算法相融合,也一定程度上降低了密鑰的管理復(fù)雜度。本文提出采用混沌理論中的二維Logistic混沌映射系統(tǒng)對(duì)AES原有機(jī)制中的生成種子密鑰和構(gòu)造擴(kuò)展密鑰等環(huán)節(jié)進(jìn)行改進(jìn),取得了良好的優(yōu)化效果。
AES屬于分組對(duì)稱密碼技術(shù),分組長度固定為128位,并采用統(tǒng)一的種子密鑰來完成對(duì)該分組的加解密工作。作為AES的顯著優(yōu)點(diǎn)之一,該算法允許加密方使用三種不同長度的擴(kuò)展密鑰,分別為128位、192位和256位[7],每種長度的密鑰對(duì)應(yīng)的加密輪數(shù)也有所不同,其分組長度(Nb)以字為單位,長度固定為4,密鑰長度(Nk)和加密輪數(shù)(Nr)差異如表1所示。
表1 三種密鑰長度與對(duì)應(yīng)的加密迭代輪次數(shù)量
在每輪加密過程中,處理的對(duì)象和結(jié)果均為長度為128位(16字節(jié))的分組,將該分組抽象成為一個(gè)行列均為4的二維數(shù)組,稱為每個(gè)加密輪次的狀態(tài)。每一輪次的加密變換都需要經(jīng)過四步子環(huán)節(jié),分別為輪密鑰加(AddRoundKey)、字節(jié)代換(Sub?Bytes)、行位移(ShiftRows)與列混淆(MixColumns),并分別通過對(duì)應(yīng)的異或運(yùn)算、S盒非線性代換、行內(nèi)循環(huán)位移和線性變換列來實(shí)現(xiàn)對(duì)數(shù)據(jù)的混淆與加密[8]。
以192位密鑰長度的AES算法為例,首先需要將初始的16字節(jié)的密鑰進(jìn)行擴(kuò)展,轉(zhuǎn)換為長度為52字節(jié)的密鑰,并將其均分為單個(gè)長度4字節(jié)的共13個(gè)密鑰分組,用w[0…3]-w[48…51]來分別表示。在加密流程開始前,初始密鑰為選定的種子密鑰本身,即w[0…3]。在字節(jié)代換環(huán)節(jié),采用的S盒為16×16字節(jié)的二維表,且所有元素在整個(gè)加密過程中保持定值;行移位環(huán)節(jié)對(duì)4×4的狀態(tài)表執(zhí)行第i行循環(huán)左移i個(gè)字節(jié)(0≤i<4)的操作,設(shè)狀態(tài)表矩陣為S,則該過程可描述為
列混淆是環(huán)節(jié)首先確定一個(gè)多項(xiàng)式c(x),并要求該多項(xiàng)式與模x4+1成可逆關(guān)系[9]。AES算法最常用的多項(xiàng)式c(x)可表示為
上式中,c(x)是與x4+1互素的,故與其也成互逆關(guān)系。將該環(huán)節(jié)用矩陣形式描述,可設(shè)S(x)=c(x)·S(x)mod(x4+1),則有:
輪密鑰加則選擇上輪加密后輸出的狀態(tài)表中的某個(gè)分組與擴(kuò)展密鑰分組執(zhí)行部分位上的異或操作,從而進(jìn)一步提高本輪次加密水平[10]。在對(duì)密鑰進(jìn)行擴(kuò)展后,即可針對(duì)明文拆分的多個(gè)分組執(zhí)行并發(fā)加密流程,顯著提高了處理效率。
AES算法雖然提供了不同長度的密鑰分組,但其種子密鑰則始終不變,這使得每個(gè)明文分組在執(zhí)行加密的過程中,其初始密鑰都是相同的,雖然通過擴(kuò)展密鑰的方式極大地提高了密鑰計(jì)算的復(fù)雜度,但擴(kuò)展機(jī)制本身的確定性使得無論計(jì)算方法多么復(fù)雜,其計(jì)算過程始終是可逆的,這就給攻擊者的破解行為提供了便利[11]?,F(xiàn)以128位AES算法為例,展開推導(dǎo)分析,其密鑰擴(kuò)展機(jī)制為
1)當(dāng)0≤i≤3時(shí),任一擴(kuò)展分組中的第i字節(jié)按式(4)計(jì)算得出:
2)當(dāng)4≤i≤43 andi=0mod 4成立時(shí),按式(5)計(jì)算:
3)當(dāng)4≤i≤43 andi≠0mod 4成立時(shí),按式(6)計(jì)算:
其中,SubWord()、RotWord()和RCon分別表示S盒變換函數(shù)、左循環(huán)行位移函數(shù)和異或操作。可以看出,擴(kuò)展密鑰和種子密鑰之間存在著較深的依賴關(guān)系,入侵者只需要獲取任一輪次的擴(kuò)展密鑰(W[i],W[i+1],W[i+2],W[i+3]),就可根據(jù)以上擴(kuò)展機(jī)制依次推導(dǎo)出前后各個(gè)輪次的擴(kuò)展密鑰,192位AES算法和256位AES算法也可按照該方法進(jìn)行破解。在得到了所有的擴(kuò)展密鑰后,入侵者就可輕松的將密文還原成原始數(shù)據(jù)。
混沌理論近年來得到了快速發(fā)展,混沌過程可以視為一種復(fù)雜的非線性過程,具有高度隨機(jī)性、發(fā)散性、遍歷性和寬帶性等特點(diǎn)[12~13]。顯然,利用混沌加密方法可以獲得質(zhì)量更高的混淆與擴(kuò)展效果,因此采用混沌映射方程參數(shù)或者初值作為密鑰,可以顯著的擴(kuò)展密鑰空間。本文提出采用混沌加密算法中的二維Logistic映射來改善AES算法在生成種子密鑰和構(gòu)造擴(kuò)展密鑰環(huán)節(jié)的運(yùn)行質(zhì)量,因此本節(jié)首先針對(duì)基本的Logistic映射方法進(jìn)行分析和研究。
Logistic映射作為一種典型的混沌系統(tǒng),其動(dòng)力學(xué)方程可描述如下:
上式中以x作為混沌變量;參數(shù)μ負(fù)責(zé)調(diào)節(jié)混沌形態(tài),混沌變量x0初始值位于(0,1)以內(nèi),在μ值靠近零域附近,映射序列并未體現(xiàn)出混沌態(tài),相同迭代次數(shù)得到的序列完全重合,然而隨著μ值不斷提高至3.55以上時(shí),映射序列的散布性逐漸增強(qiáng),最終呈現(xiàn)出明顯的不確定性和遍歷性,反復(fù)經(jīng)歷此過程會(huì)產(chǎn)生周期分叉現(xiàn)象[14]。當(dāng)μ增大至4.0時(shí),系統(tǒng)達(dá)到了滿映射混沌狀態(tài),此時(shí)系統(tǒng)輸出的混沌序列的散布性極高,系統(tǒng)對(duì)于初始參數(shù)也呈現(xiàn)出極大的敏感性。此時(shí)Logistic映射的特征如下[15]:
1)混沌變量x的概率密度分布函數(shù)如式(8)所示:
此函數(shù)對(duì)混沌變量的初值x0并不敏感,因此根據(jù)該函數(shù)構(gòu)造出的混沌序列具有良好的遍歷性,但混沌變量的分布并不是均勻的,尤其在曲線兩段,出現(xiàn)了明顯的奇異性。
2)混沌序列中軌跡點(diǎn)的均值根據(jù)式(9)計(jì)算得到:
針對(duì)混沌映射系統(tǒng)輸出的序列來分析,Logis?tic序列直觀上與噪聲非常相似,體現(xiàn)出了極強(qiáng)的隨機(jī)性。在未能獲取混沌系統(tǒng)初始參數(shù)的情況下,該序列是無法被預(yù)測和解析的。
一維Logistic混沌映射構(gòu)造的序列雖然具有良好的隨機(jī)性和發(fā)散性,但對(duì)于加密場合的需求而言仍然稍顯不足,因此本文提出將二維Logistic映射系統(tǒng)引入到AES算法的執(zhí)行過程中,對(duì)其密鑰擴(kuò)展機(jī)制進(jìn)行優(yōu)化,其動(dòng)力方程如式(10)所示。
經(jīng)過反復(fù)試驗(yàn)和調(diào)節(jié),確定了二維Logistic映射進(jìn)入混沌態(tài)的參數(shù),其中μ=0.4;γ=0.1;λ1=λ2=0.83。
由于AES算法的執(zhí)行過程和大部分加密環(huán)節(jié)均具有較高的安全性,因此本文僅針對(duì)其種子密鑰和擴(kuò)展密鑰的生成環(huán)節(jié)進(jìn)行優(yōu)化,引入混沌映射系統(tǒng)來改善其種子密鑰與擴(kuò)展密鑰空間固定的問題,現(xiàn)將算法改進(jìn)內(nèi)容介紹如下。
首先需要用戶輸入兩個(gè)初始密碼PW1和PW2,設(shè)其長度為L1和L2,由于用戶密碼的可能與AES采用的三種密鑰模式在長度上并不相符,因此需分別計(jì)算L1和L2與AES密鑰長度的差值,得到DV1和DV2,再取其立方值賦予A1和A2,分別執(zhí)行式(11)得到N1和N2。
將N1和N2賦值給x0和y0,作為式(10)中的初值,并通過該式的循環(huán)執(zhí)行n次(n可在DV1和DV2選擇其一),計(jì)算出的xn和yn各自乘以100000,再將結(jié)果逆序組合,成為一串長度為12的數(shù)字串,按照前后次序取出n/8個(gè)數(shù)值對(duì)用戶輸入的PW1進(jìn)行補(bǔ)充,使其滿足AES算法對(duì)密鑰長度的要求,即為第一個(gè)種子密鑰Key1;同理Key2也可通過該方法計(jì)算得到。
為了提高序列的復(fù)雜度,需對(duì)擴(kuò)展密鑰進(jìn)行重組,將L1和L2作為初值x0和y0代入迭代方程,其余參數(shù)設(shè)置如式(12)所示:
分別從兩輪的迭代結(jié)果中取出5位和6位不重復(fù)數(shù)字,其值均在[1,11]之間,并將其作為序號(hào)在原擴(kuò)展密鑰集當(dāng)中選取出對(duì)應(yīng)的密鑰,通過插空的方式重組成新的11輪次密鑰集合。其過程如圖1所示。
圖1 序列重組算法示意圖
密鑰擴(kuò)展環(huán)節(jié)是本改進(jìn)方案的核心內(nèi)容,按照AES算法機(jī)制,該環(huán)節(jié)應(yīng)當(dāng)由11輪次的迭代計(jì)算組成,本節(jié)以第一輪次為例介紹本算法的設(shè)計(jì)思路。
Step1:將構(gòu)造種子密鑰環(huán)節(jié)中生成的Key1和重組序列環(huán)節(jié)中計(jì)算得到的11輪重組密鑰集合中的第一輪密鑰取出,并將二者都轉(zhuǎn)換成為128位二進(jìn)制表示形式,分別記為k1和k2;
Step2:在k1和k2尾部添0,構(gòu)成129位二進(jìn)制數(shù)串,以三位為一組,轉(zhuǎn)換成為10進(jìn)制數(shù),共計(jì)得到兩組各43個(gè)取值區(qū)間為[0,7]的整數(shù);
Step3:構(gòu)建兩個(gè)一維整型數(shù)組intKey1[48]和intKey2[48],元素?cái)?shù)量為48個(gè),將Step2中得到的兩組數(shù)字納入對(duì)應(yīng)的數(shù)組,不足元素補(bǔ)0填充;
Step4:每個(gè)數(shù)組中的6個(gè)元素分為一組,共得到8×2組,每組按序轉(zhuǎn)換成對(duì)應(yīng)的小數(shù),并分別存放于fKey1[8]和fKey2[8]中;
Step5:將以上兩個(gè)數(shù)組中的元素按其下標(biāo)大小對(duì)應(yīng)取出,構(gòu)成8組,記為(xi,yi),將其代入式(10)中所描述的二維Logistic映射方程中,經(jīng)過i×100輪次的迭代運(yùn)算后,得到8組對(duì)應(yīng)的輸出,記為Re_xi和Re_yi;
Step6:分別將Re_xi和Re_yi小數(shù)點(diǎn)后六位數(shù)字順序取出,并確保每一位的值均在[0,7]以內(nèi),若有某位上數(shù)值超出該范圍,則用該位與7求模替代;
Step7:將Step6中每位數(shù)字轉(zhuǎn)換成為3位二進(jìn)制數(shù),可得到兩組各18位的二進(jìn)制數(shù);
Step8:重 復(fù) 執(zhí) 行Step5-Step7,將Re_xi和Re_yi(i=1,2,…,8)中的所有的小數(shù)轉(zhuǎn)換成為二進(jìn)制數(shù)串,共計(jì)8組;
Step9:將每組兩個(gè)數(shù)串執(zhí)行異或運(yùn)算,可得到長度為144位的二進(jìn)制數(shù),取前128位,即為新的擴(kuò)展密鑰集中的第一輪密鑰;
Step10:將Step1中重組密鑰集里的第二輪密鑰取出,并采用Key2為初始密鑰,重復(fù)執(zhí)行本算法,得到擴(kuò)展密鑰集中的第二輪密鑰。
后續(xù)的迭代過程全部根據(jù)以上算法執(zhí)行,其中奇數(shù)輪次采用Key1,偶數(shù)輪次采用Key2,最終可重新構(gòu)造出全部11輪擴(kuò)展密鑰,至此,完成了AES算法中針對(duì)密鑰擴(kuò)展機(jī)制的改進(jìn)工作,可靠地提高了AES算法的破譯難度系數(shù),增強(qiáng)了保密文件的安全性。
在引入了二維Logistic混沌映射系統(tǒng)之后,采用雙種子密鑰模式,使得破解該算法的工作量倍增;其次,每一輪的擴(kuò)展密鑰都需要結(jié)合混沌映射系統(tǒng)來構(gòu)建,使得各個(gè)密鑰之間的獨(dú)立性大大增加,以往通過逆推方式解析出相鄰密鑰,并最終獲取所有密鑰的破解方法已不再有效;最后,從密鑰空間規(guī)模分析,改進(jìn)后的算法密鑰空間大大增加了,以目前計(jì)算性能僅居中等水平的32位處理器為例(該類型處理器中Double型數(shù)據(jù)精度為小數(shù)點(diǎn)后16位),其密鑰空間規(guī)模已經(jīng)達(dá)到了2.756×1078,如表2所示,顯然在采用了更高性能的計(jì)算芯片后,該空間規(guī)模會(huì)再次大幅增加,進(jìn)一步提高對(duì)窮舉攻擊的抵抗性能。
表2 密鑰空間規(guī)模統(tǒng)計(jì)
本文針對(duì)AES加密算法展開研究與分析,首先探討了該算法在加密場合的應(yīng)用優(yōu)勢(shì)與存在的問題,指出了其單一種子密鑰與固定密鑰空間在安全性方面固有的缺陷;隨后分析了Logistic混沌映射系統(tǒng)在構(gòu)建類隨機(jī)序列環(huán)節(jié)具備的顯著優(yōu)勢(shì),對(duì)該系統(tǒng)的初值敏感性和輸出序列發(fā)散性進(jìn)行了仿真驗(yàn)證,在此基礎(chǔ)上提出采用二維Logistic映射系統(tǒng)來改進(jìn)AES加密算法中的種子密鑰生成環(huán)節(jié)與密鑰擴(kuò)展環(huán)節(jié)這一優(yōu)化思路。設(shè)計(jì)了相關(guān)的改進(jìn)方案和優(yōu)化算法,借助混沌系統(tǒng)的隨機(jī)性、發(fā)散性與初值敏感性,顯著拓寬了AES算法的密鑰空間,增強(qiáng)了該算法的破譯難度,取得了良好的改進(jìn)效果。