陳 珂,殷 凡
(蘇州市職業(yè)大學 計算機工程系,江蘇 蘇州 215104)
美國國家標準技術研究所(NIST)選擇Rijndael算法作為美國政府加密標準AES(the Advanced Encryption Standard)的加密算法,Rijndael算法由比利時計算機科學家Vincent Rijmen和Joan Daemen開發(fā),它以其優(yōu)秀的性能和抗攻擊能力,成為新一代的加密標準AES.該算法易于實現(xiàn),性能穩(wěn)定,密鑰靈活性強,安全性高,可以有效抵抗強力攻擊、差分和線性密碼分析,具有良好的安全性和高運行效率.但是,該算法目前主要用于一維數(shù)據(jù)流的加密,對圖像的加密還存在局限性[1-3].
本文針對數(shù)字圖像數(shù)據(jù)量大、冗余度高、像素間相關性強的特點,基于Rijndael算法原理并結合混沌序列偽隨機數(shù)的特性應用到圖像置亂中,主要利用Logistic映射生成的密鑰流作為Rijndael的密鑰,以增強抗破譯性,同時有Rijndael的安全性作保證,使得加密后的圖像抗攻擊性得到進一步地提高.
混沌序列是一種性能優(yōu)良的偽隨機序列[4],具有對初始條件和微小擾動的高度敏感性、非周期性和類似噪聲等特性.Logistic 映射是非常簡單但得到廣泛應用的動力系統(tǒng),它的一種定義形式如下:
式中:0≤λ≤4稱為系統(tǒng)參數(shù),當3.57<λ≤4時,Logistic映射工作處于混沌狀態(tài).對映射方程(1)進行若干次迭代,產(chǎn)生基本實值混沌隨機序列{Xn,n=0,1,2,…,0<Xn<1}.
定義一個域值函數(shù)f(),將Logistic映射經(jīng)過若干次迭代后生成的實值混沌隨機序列{Xn}轉化為二進制混沌隨機序列{Sn},Sn= f(Xn),按如下方法進行分析:
(1) 對實值混沌隨機序列{Xn}中的每個實值Xn都截取前L位二進制數(shù),舍棄后面的所有位,滿足1< L≤p.則Xn表示為由L位二進制數(shù)組成的整數(shù).
(2) 取{Xn}第κ位bκ(bκ的取值為0或1)二進制數(shù)組成一個新的序列{Sn}.
Logistic映射的結構簡單,只需對映射方程(1)進行若干次迭代,就可以產(chǎn)生基本實值混沌序列,用函數(shù)f()對其進行轉換后,得到的二進制混沌隨機數(shù)序列{Sn}可用作密鑰.
本文將Rijndael算法中的密鑰異或操作、S-盒變換[5]、行置換和列置換應用到數(shù)字圖像上,所用的種子密鑰由偽隨機數(shù)發(fā)生器來生成,輪密鑰由密鑰擴展方案得到.并對行列置換操作進行改進,結合混沌隨機數(shù)序列的圖像加密技術,采用基于混沌序列的行列置換,以便增強其安全性.
本文算法思想是利用Rijndael算法中的密鑰異或變換來實現(xiàn)圖像像素的灰度值或RGB值的變換;利用S-盒變換來完成圖像像素的替代;采用基于混沌隨機數(shù)序列的行移位變換和列混合變換來完成圖像像素的置換.
設一幅數(shù)字圖像的大小為M×N,可用矩陣A=(aij)M×N表示,其中aij(i=0,1,…,M-1,j=0,1,…,N-1)表示圖像在第i行第j列像素處的灰度值,aij∈{0,1,…,255}.將圖像分成(M/4)×(N/4)塊,如果圖像矩陣的行值M或列值N不是4的倍數(shù),不足的位用0值來填充,以確保分塊.
設置偽隨機數(shù)發(fā)生器的迭代初值X0、系統(tǒng)參數(shù)λ、參數(shù)L和參數(shù)K,得到二進制數(shù)Kt(t=0,1,…,(M×N ×8)-1)作為種子密鑰進行密鑰擴展,密鑰用w[][N*8]存放.
第一步:按順序取出w[][N*8]中的M行密鑰,按字節(jié)與待加密圖像中的像素aij(i=0,1,…,M-1,j=0,1,…,N-1)中的RGB三個分量異或得到新的像素bij((i=0,1,…,M-1,j=0,1,…,N-1).可以用下面的C++代碼來描述:
第二步:利用查表進行S-盒變換.將bij中的RGB三個分量分別作替換操作,即前4位作為S-盒列坐標,后4位作為S-盒行坐標,用S-盒行列坐標處的值替換bij中的RGB三個分量得到新的像素值cij((i=0,1,…,M-1,j=0,1,…,N-1).可以用下面的C++代碼來描述:
第三步:設置迭代初值X0'、系統(tǒng)參數(shù)λ'、參數(shù)L'和參數(shù)κ'(從第二次執(zhí)行,只修改參數(shù)κ'的值為κ'=(κ'+1)%L',X0'、λ'和L'的值不變),用偽隨機數(shù)發(fā)生器生成一個整數(shù)值混沌序列PPt(t=0,1,…,M-1,M,…,M+N-1),作為圖像像素進行橫向和縱向移動的位數(shù).將圖像的每行像素cij依次循環(huán)左移PPt(t=0,1,…,M-1)個位置變換到該行的另一位置.可以用下面的C++代碼來描述:
第四步:將圖像的每列像素cij依次向下循環(huán)移動PPt(t= M,…,M+N-1)個位置變換到該列的另一位置.列混合變換的方法與行移位變換的類似,這里不再贅述.
本系統(tǒng)使用Visual C++作為開發(fā)語言.下面以BMP格式圖像加密為例來部分介紹該系統(tǒng)的運行過程:用戶點擊圖像加密界面中的“瀏覽”,選擇待加密的文件,輸入隨機數(shù)發(fā)生器的初始條件,如圖1所示,將用于隨機數(shù)發(fā)生器初始條件輸入的對話框定義為一個Initializtion類,只要系統(tǒng)中需要輸入隨機數(shù)發(fā)生器的初始條件,就創(chuàng)建一個該類的對象來獲取輸入的初始條件值.將用于顯示圖像文件的對話框定義為一個Displaydlg類,當系統(tǒng)完成了圖像文件的加解密操作后,需要查看圖像文件的加密或解密效果時,可以創(chuàng)建一個該類的對象,用于顯示加密圖、解密圖和原始圖像,圖2為加密后原始圖像的效果顯示.
圖1 加密過程初始條件的輸入
圖2 加密圖像的效果顯示
在圖像解密時,系統(tǒng)通過創(chuàng)建一個Initializtion類對象來獲取用戶輸入的隨機數(shù)發(fā)生器初始條件值,傳遞給RandomNumber類對象,生成密鑰隨機數(shù)序列和整數(shù)值隨機數(shù)序列,采用本算法中的解密算法對加密后的圖像進行解密操作.
將logistic系統(tǒng)生成的實數(shù)值混沌序列轉換為二進制混沌序列的量化過程是不可逆的,這個特點對安全性非常有利,因為密碼分析者無法根據(jù)截取的密文重構產(chǎn)生密鑰序列的logistic系統(tǒng)的動力學模型.另外,把參數(shù)L和κ一起作為初始條件,即把(X0,λ,L,κ)作為初始條件,則攻擊密鑰序列成功的概率比只把X0和λ作為密鑰時攻擊成功的概率更小.這就增加了窮舉密鑰攻擊搜索分析來進行解密的計算復雜度,從而保證了圖像信息的保密性.
提出了一種基于Rijndael和混沌序列的圖像置亂加密算法,它充分利用logistic序列具有的形式簡單,對初始條件和參數(shù)的敏感依賴性等特性,結合Rijndael算法中的密鑰異或操作和S-盒變換對圖像進行加密.通過增加作為初始條件的參數(shù)量,從而增加了窮舉密鑰攻擊搜索分析來進行解密的難度,保證了圖像信息的保密性.有Rijndael的安全性作保證,使得加密后的圖像抗攻擊性得到進一步地提高,同時本文的置亂算法使得加密后的圖像達到了較為理想的置亂程度[6].
[1] ZHANG HAN,WANG XIUFENG,LI ZHAOHUI,et al.A new image encryption algorithm based on chaos system:Robotics,Intelligent Systerms and Signal Processing,Changsha,October 8-13,2003[C].New York:IEEE Press,c2003.
[2] JOAN D,VINCENT R.The design of rijndael: AES-the advanced encryption standard[M].New York:Springer,2002.
[3] 盧正鼎,廖振松.Rijndael算法的研究[J].計算機工程與科學,2005,27(6):72-74.
[4] 彭 飛,丘水生,龍敏生.一種基于混合混沌動力系統(tǒng)的圖像加密算法[J].計算機應用,2005,25(3):543-556.
[5] 張玉安,馮登國.RIJNDAEL算法S盒的等價生成[J].計算機學報,2004,27(12):1593-1600.
[6] 陳 珂.基于Rijndael的彩色圖像加密算法的研究[J].計算機工程與設計,2007,28(20):4908-4910.