劉海峰 鄒丹陽
(陜西科技大學 陜西省西安市 710021)
隨著信息技術的不斷發展,對傳統加密體制的安全性能要求也在提高。傳統的AES 算法的S 盒具有迭代周期較短的特點,嚴重地影響了S 盒的安全性[1]。同時,密鑰擴展算法存在缺陷:輪密鑰與種子密鑰之間的關聯性很強,一旦截取任意一輪子密鑰,就可以通過已知的擴展算法計算出所有加密密鑰,算法的安全性無法得到保障[2]。為了提高AES 算法的安全性能,現針對上述兩個缺陷進行如下改進:采用新的仿射變換對來改進S 盒,同時基于流密碼的特點,改進AES 算法的密鑰擴展過程。
混沌系統由于具有對初始值敏感、內隨機性及無周期性等特點,天然地與密碼加密體制聯系起來。歐成園等采用兩種超混沌系生成混沌加密序列,產生的第一組序列與明文進行異或后,再使用第二組序列與用戶密鑰進行異或作為AES 加密的初始密鑰,顯著的擴大了加密密鑰空間[3]。王勇等人通過與神經網絡結合的方式,產生的超混沌序列作于圖像加密的種子密鑰進行AES 加密[4]。已有的通過混沌系統與加密算法的結合,常采用混沌映射對圖像進行一定的擴散處理,或是使用混沌映射產生的序列作為AES 加密的種子密鑰,未能充分利用混沌序列具有的良好隨機性特點。本文使用超分數階Chen 超混沌系統產生一種通過NIST 測試的可證明隨機的序列作為密鑰流,利用該密鑰流采用類似一次一密加密的方式替代原始的密鑰擴展過程,由于密鑰流是均勻分布的離散無記憶隨機序列,使得算法更難被破譯,提高了算法的安全性。
AES 中S 盒的運算使用字節代替變換來完成對狀態字節的非線性變換,該設計能夠有效的針對明文與密文之間的聯系進行混淆,但是經過分析發現傳統的S 盒選擇的仿射變換周期為4,最大迭代輸出周期為87,存在短周期現象,容易受到差分攻擊,并且計算其嚴格雪崩距離為432,不滿足嚴格雪崩標準。因此,文獻[5]提出了一種代數性質良好的仿射變換對,本文選擇仿射變換對(D3,35)來進行新S 盒的構造,該放射變換對的嚴格雪崩距離為304,最大迭代輸出周期為256,仿射變換周期為16。
得到的S 盒為查找替換表如表1所示。

表1:S 盒查找替換表
新的S 盒按照如下的方式進行構造:
(1)按照字節升序逐行初始化S 盒;
(2)把S 盒中的每個字節映射為它在有限域GF(28)中的逆;
(3)把S 盒中的每個字節的8 個構成為記為{b7, b6, b5, b4, b3,b1, b0},對S 盒的每個字節逐位做以下變換:
bi'=bi⊕b(i+1)⊕b(i+2)⊕b(i+4)⊕b(i+7)⊕ci
這里的ci指的是值為{35}字節的第i 位,即{c7c6c5c4c3c2c1c0}=(00110101)2。
分數階Chen 超混沌系統[6]作為一種典型的混沌動力學系統,系統公式如下:

上述公式中,a,b,c,d,r 為系統參數,當a=35,b=7,此2,d=3,r 取值范圍在[0.085,0.789]時,系統處于混沌狀態,并存在4 個混沌序列X,Y,Z,W。與普通的混沌系統相比較,分數階Chen 超混沌系統具有兩個正德Lyapunov 指數,因此具有更復雜的相空間[7]。利用超混沌系統進行加密,可以具有更大的密鑰空間和較強的不可預測性,能夠生成更高性能的偽隨機密鑰流序列[8]。利用四階龍格-庫塔公式對Chen 超混沌系統進行離散化處理,迭代步長為0.0001,根據設置好的系統初值經過N 次迭代后得到混沌序列。利用該混沌序列可以生成性能良好的偽隨機序列。
基于分數階Chen 超混沌系統,采用位序列生成算法[9]構造偽隨機數序列,生成過程如下:
(1)確定系統的控制參數和初始條件,并指定所需要的序列長度。
(2)迭代1000 次以消除暫態效應。繼續迭代超混沌映射系統,得到四個小數Ax,Ay,Az,Aw。
(3)小數的部分位數作為新的小數:為了最大限度的利用混沌系統的復雜性,去掉小數的前3 位。得到Bxy,Bzw
xn+1=xn+1×1000-floor(xn+1×1000)
(4)將該小數轉化為長度為32 位二進制序列得到二進制序列Bx, By, Bz, Bw。
(5)異或得到最終的32 位二進制序列。
(6)繼續迭代超混沌映射系統,重復上述步驟直至獲得所需長度的超混沌偽隨機序列。
NISTSP 800-22 是美國NIST 發布的關于序列隨機性測試工具[10]。其中列出了15種單獨的隨機性測試,測試結果均以P-value表示。顯著性水平α 通常取值為0.01,若P-value ≥α,則測試通過,該序列被認為幾乎是隨機的,置信度為(1-α)×100%。使用上述方法,初值x0=0.3, y0=-0.6, z0=1.8, w0=1.2, r0=0.3,步長0.0001,經過10000次迭代消除暫態效應后,構成的偽隨機數序列測試的結果如表2所示。

表2:NISTSP 800-22 測試結果
表2測試根據NISTSP 800-22 文檔要求,使用推薦的塊大小,序列長度進行測試,m 為塊個數。其中,*表示列出的是多項測試的平均值。
如表2所示,基于Chen 超混沌系統產生的偽隨機序列通過了NIST 測試,證實該序列能夠滿足隨機序列相關特征,即生成的密鑰流序列是幾乎隨機的。
AES 中輪密鑰與種子密鑰之間存在很強的關聯關系,為了解決這一缺陷,采用序列密碼思想,利用一個隨機的不可預測序列作為加密的密鑰流改進AES 的密鑰擴展算法,使得AES 具有一次一密加密的效果,更難被密碼分析[11]。增強算法加密的安全性。由于每組的加密密鑰不具有相關性,因此無法根據截獲的輪密鑰推斷出整個密鑰序列,增強了AES 算法加密的安全性。
現將明文和密鑰流分組按照一定長度進行分組加密,通過偽隨機數生成算法產生一個隨機密鑰流序列,加密的輪密鑰使用該密鑰流序列,加密算法是改進S 盒后的AES 加密算法。
步驟1:首先選取五個初始值x0, y0, z0, w0, r0作為偽隨機數生成算法的初值。
步驟2:使用四階龍格-庫塔公式對分數階Chen 超混沌系統求解,
經過N 次迭代,得到4 個混沌序列X,Y,Z,W。
步驟3:調用改進S 盒之后的AES 算法對明文Mi進行加密,其中密鑰Ki, i=0,1,2,…,t。為使用偽隨機數生成算法得到加密的密鑰流,t 為需要加密的明文分組個數。加密后得到密文序列Ci。
加密的偽代碼如下:
#生成混沌序列
X,Y,Z,W=proChenChaosSequence(x0, y0, z0, w0, r0)
i=0
while i < t:
#生成偽隨機密鑰流序列
K[i]= propKey(X,Y,Z,W)
AES(Encrypt,M[i],K[i])#加密
i++
改進后的算法解密過程與加密過程相似,只需要將AES(Encrypt,M[i],K[i])換為AES(Decrypt,M[i],K[i])。
為了驗證算法的有效性,在PC 平臺下運用該算法進行加解密實驗,開發工具為JetBrainsPyCharm。當選擇加密種子密鑰x0=0.3,y0=-0.6, z0=1.8, w0=1.2, r0=0.3,分組長度為128bit,每次生成的密鑰流序列總共為128*(Nr+1)=1408bit?,F對100KB 的文本進行加密,加密的結果如圖1和圖2所示。

圖1:加密前的文本信息

圖2:加密后的文本信息
4.2.1 密鑰空間
傳統的AES 算法的密鑰空間為2128。本文提出的算法中,可以充當密鑰的參數包括x0, y0, z0, w0, r0以及基本迭代次數N。在64 位處理器中浮點數精度為10-16,r0的取值空間為[0.085,0.789],因此總的密鑰空間為1016×5×(0.789-0.085)≈2265。由于基本迭代次數的總長度與明文長度相關,因此N 的取值不確定使得密鑰空間的大小具有不確定性,提高了破譯密碼的難度。本算法的密鑰空間遠大于傳統的AES 算法的密鑰空間,能夠有效的抵抗窮舉攻擊[12]。
4.1.2 密鑰敏感性
在上述實驗的基礎之上,針對加密后的密文進行解密時,對種子密鑰做出微小的改變。選擇
在上述實驗的結果之上,針對解密時種子密鑰x0 做微小的改變,令 x0=0.3000000001,其余種子密鑰保持不變,解密的結果如圖3所示。

圖3:改變密鑰后解密后的文本信息
如圖3可以看到解密失敗的結果,即在種子密鑰發生10-10級別的微小改變時,無法對密文成功解密,證明算法的密鑰敏感程度非常高。
4.1.3 雪崩效應
針對128Bit 的明文文本每次只修改一位,分別經過改進后的算法和原始AES 算法進行加密,測試過程中加密密鑰保持不變,記錄密文的變化位數,得到的測試結果如圖4所示。

圖4:雪崩效應測試結果
如圖4所示,原始的AES 算法在改變一位原文后密文改變的位數波動范圍為60±10,相較于原本的AES 算法,本文改進的算法在明文改變一位后密文改變為65±5 位,更加穩定,因此本文提出的改進算法符合雪崩效應的要求。
本文改進了AES 算法的S 盒,顯著增加了S 盒的迭代周期;利用Chen 超混沌系統生成偽隨機密鑰流,該隨機序列通過了NIST測試,驗證了其隨機性,將序列密碼的特點與傳統AES 算法進行結合,實現了一種一次一密加密的效果。基于超混沌系統生成的密鑰流具有龐大的密鑰空間,同時綜合了超混沌系統的初值敏感性和良好的隨機性,使得改進后的密碼體制具有更好的安全性能。每次加密過程中只需要生成一次混沌序列,因此對于算法的效率影響有限,該算法適用于對于安全性能要求較高的加密場景。