奚新寶, 謝淑翠, 張建中
(1.西安郵電大學 通信與信息工程學院,陜西 西安 710121; 2.西安郵電大學 理學院,陜西 西安 710121;3.陜西師范大學 數(shù)學與信息科學學院,陜西 西安 710061)
隨著網(wǎng)絡技術、數(shù)字信息化技術的發(fā)展,數(shù)字圖像越來越成為多媒體信息交流的重要載體之一。由于網(wǎng)絡的信息共享性和開放性,圖像信息數(shù)據(jù)傳輸?shù)陌踩珕栴}日益嚴峻,使得研究高安全性和高效的圖像加密算法成為當前研究的熱點問題。密碼學和混沌學[1]這兩門學科在結構上存在著許多聯(lián)系和相似性,因此,啟發(fā)人們將混沌理論的研究應用到密碼學領域。且混沌系統(tǒng)具有偽隨機性、不可預測性和初值敏感性[2]等特點,適用于圖像加密系統(tǒng)的設計。
1998年,F(xiàn)ridrich J首次將混沌系統(tǒng)和數(shù)字圖像加密相結合[3],在此之后各種基于混沌系統(tǒng)的圖像加密方案被陸續(xù)提了出來。文獻[4]設計了一種改進型Henon映射,更加適用于設計安全的密碼系統(tǒng)。Chai X L等人[5]設計了一種基于脫氧核糖核酸(DNA)操作的混沌圖像加密方法,加密效果良好。盡管多種加密方案層出不窮,但部分方案的加密算法存在安全性缺陷。文獻[6]設計了一種基于元胞自動機(cellular automata,CA)和Tent映射的圖像加密方案,但采用一維混沌系統(tǒng),使得密鑰空間小,安全性不高。在文獻[7]設計了一種圖像加密算法,在像素擴散階段采用典型耦合映射格(CML)和信息熵來產(chǎn)生另一密鑰流,但密文圖像的部分信息容易暴露,從而算法安全性較低。
本文在置亂階段使用三維細胞神經(jīng)網(wǎng)絡(cellular neural network,CNN)混沌系統(tǒng)生成的偽隨機序列與二維廣義Arnold映射對圖像完成2次置亂,同時將該映射產(chǎn)生的混沌序列用于像素值擴散階段,采用加取模和循環(huán)移位來進行像素值擴散得到最終密文圖像。該算法克服了混沌系統(tǒng)結構單一等問題,仿真結果和安全性分析表明該算法是安全可行的。
收稿日期:2020—09—29
本文利用推廣后的二維廣義Arnold映射[8],方程如下
(1)
式中 (x,y)和(x′y′)分別為經(jīng)過Arnold變換前后的圖像像素位置,參數(shù)a,b均為正整數(shù),n為變換次數(shù),N為圖像矩陣的階數(shù)。
引入分段線性混沌映射(piece wise linear chaotic map,PWLCM)生成二維廣義Arnold映射的控制參數(shù),每循環(huán)一次Arnold映射的控制參數(shù)都不同,從而達到動態(tài)產(chǎn)生密鑰的效果。分段線性混沌映射表示為
(2)
式中x,c分別為該混沌映射的系統(tǒng)狀態(tài)變量和控制參數(shù),當控制參數(shù)c∈(0,0.5),x∈(0,1)時,系統(tǒng)處于混沌狀態(tài)。
Chua L O在1988年第一次提出了CNN的概念,CNN是一種通過于局部細胞互連構造而成的神經(jīng)網(wǎng)絡系統(tǒng)[9]。三維CNN系統(tǒng)的動力學方程為
j=1,2,3
(3)
式中j為細胞,xj為細胞狀態(tài),Ajk為反饋模板,Sjk為控制模板,Ij為閾值,f(xj)為輸出,其表達式如下
(4)
實驗證明,當三維CNN系統(tǒng)中的參數(shù)取值如式(5)時,三維CNN系統(tǒng)可產(chǎn)生混沌現(xiàn)象
aj=0
(5)
將以上參數(shù)代入式(3)后即可以得到三維CNN混沌系統(tǒng)的動力學方程如下
(6)
本文的加密算法主要由置亂和擴散兩個階段構成,明文圖像記為PM×N,M,N分別為圖像的高和寬。
步驟1 利用SHA—256函數(shù)計算明文圖像的256 bit哈希值作為密鑰,記作K,K=[k1,k2,…,k32]。其中,ki={ki1,ki2,…,ki8},i=1,2,…,32。
利用明文圖像計算輔助參數(shù)d,公式如下
d=mod(floor(sum/(MN)×256)×1012,32)+1
(7)
步驟2 將明文圖像PM×N按行或列展開成一維向量,記為A。利用步驟1產(chǎn)生三維CNN混沌系統(tǒng)的初始值,然后對三維CNN混沌系統(tǒng)迭代產(chǎn)生長度分別為MN/3的混沌序列x1(i),x2(i),x3(i),其中,ceil為向上取整函數(shù),由于混沌序列的值域范圍較大,不利于數(shù)據(jù)批處理,因此,需對其進行優(yōu)化預處理,預處理過程如下
x1(i)=1014x1(i)-floor(1014x1(i))
(8)
式中 floor為取整函數(shù),另外2個序列的預處理運算過程同式(8)。所得混沌序列記s={x1(i),x2(i),x3(i)},由s生成偽隨機序列X,序列X中第j個數(shù)表示如下
Xj=mod(floor((sj+100)×1010),M×N)+1,
j=1,2,…,M×N
(9)
步驟3 將序列X中重復出現(xiàn)的偽隨機數(shù)只保留一個,將集合{1,2,…,MN}中沒有出現(xiàn)在序列X中的數(shù)值按由小到大順序添加到序列X的末尾。最后將A(Xj)與A(XMN-j+1)交換位置,即完成無重復置亂,得到的中間密文圖像記為B,B=reshape(A,M,N)。
步驟4 輸入PWLCM的系統(tǒng)狀態(tài)初始值x0與控制參數(shù)c,將該映射迭代2 000次生成混沌序列F,并通過式(10)、式(11)產(chǎn)生廣義Arnold映射加密所需的控制參數(shù)
h=fix(F(k)×10p)-fix(F(k)×10q)×10p-q
(10)
u=(h×105)mod 256,v=(h×106)mod 256
(11)
式中p,q為正整數(shù);fix為朝0方向取整,k為小于2 000的正整數(shù)。對圖像B借助二維廣義Arnold映射進行置亂,將步驟重復R輪得到2次置亂后的中間密文圖像,記為H。
步驟1 利用置亂階段步驟2得到的混沌序列s生成偽隨機序列S,公式如下
S=mod(floor(s×pow2(16)),256)
(12)
步驟2 用H和G分別為基于加取模擴散前后的圖像,在加取模運算過程中,需要將明文任意像素點信息擴散到密文的整個圖像之中,正向的算法如下
Gi=(Gi-1+Si+Hi)mod 256
(13)
其中,G0=0,逆向的算法如下
Gi=(Gi+1+Si+Hi)mod 256
(14)
在基于加取模擴散算法的基礎上添加循環(huán)移位操作,具體公式如下
Gimod 256<< (15) 式中 LSB3為取數(shù)據(jù)的最低3位,即如果是l位的灰度圖像,則應取數(shù)據(jù)的最低log2l位或者任意的log2l位。最后,將一維向量還原成二維圖像即得到最終密文圖像,記為C。 先對密文圖像的數(shù)據(jù)點進行循環(huán)右移操作。分別對加取模擴散運算的逆向算法進行正向操作和對正向算法進行逆向操作,最后對Arnold變換做逆變換,再進行無重復置亂的逆運算,得到明文圖像。 仿真實驗使用的測試圖像是大小為512×512的Lena圖像,PWLCM的控制參數(shù)c=0.2,狀態(tài)變量初值x0=0.5,二維廣義Arnold映射的控制參數(shù)n=160,循環(huán)輪數(shù)R=3。使用MATLAB 2014b版本平臺下進行加解密實驗。仿真結果如圖1所示,可見本文算法具有很好的加解密效果。 圖1 仿真結果 文獻[10]指出一個安全有效的加密算法的密鑰空間大小應該至少為2100,本文算法的密鑰由明文圖像256 bit哈希值K,PWLCM的初始狀態(tài)值x0和控制參數(shù)c,Arnold變換次數(shù)n和循環(huán)輪數(shù)R以及明文像素值之和sum組成。采用精確到小數(shù)點后16位的雙精度表示,密鑰空間大小為2256×(1016)4×sum≈2469?2100,說明加密算法的密鑰空間可以抵抗窮舉攻擊。 圖2給出了Lena圖像與其密文圖像的直方圖,可見明文圖像的直方圖分布是呈高低不均狀態(tài),而密文圖像的直方圖分布相對更加均勻。即本文算法加密后所得的密文圖像的像素值是滿足均勻分布的。 圖2 明密文圖像的直方圖 相鄰像素相關系數(shù)的計算公式如下 (16) (17) (18) 式中x,y為相鄰兩個像素的灰度值,E(x),E(y)分別為x,y的期望,rxy為相關系數(shù),N為相鄰像素對的數(shù)目。圖3給出了Lena明文圖像與其密文圖像的相鄰像素在水平方向相關分布情況,表1給出了本文算法相關系數(shù)的計算結果。 圖3 明密文的相鄰像素在水平方向的分布情況 表1 相鄰像素的相關系數(shù) 由表1可見,本文算法得到的密文圖像的相關系數(shù)幾乎接近于0,明文圖像的相關系數(shù)接近于1。相比于文獻[11~13],本文算法得到的密文圖像相關系數(shù)較小,說明密文圖像在各個方向上幾乎不具有相關性。 一般使用像素數(shù)變化率(number of pixels change rate,NPCR)以及統(tǒng)一平均變化強度(unified average changing intensity,UACI)兩項指標來衡量加密系統(tǒng)的抗差分攻擊能力[14]。NPCR和UACI定義如下 (19) (20) 式中C1(i,j)≠C2(i,j)時,D(i,j)為1;C1(i,j)=C2(i,j)時,D(i,j)為0。,M,N分別為圖像像素的行數(shù)和列數(shù),C1(i,j),C2(i,j)分別為兩幅灰度圖像。表2給出了本文算法對100組Lena原始密文圖像和隨機微小改變明文后加密得到的密文圖像之間的最大、最小和平均NPCR和UACI值。 表2 明文敏感性測試結果 由表2可見,本文算法計算得到的NPCR和UACI的平均值非常接近于理想值,相比于文獻[13,15],本文提出的算法對明文的微小改變的敏感性較強,所以,本文算法更能有效地抵抗差分攻擊。 密鑰敏感性[16]是指在加解密過程中,當密鑰發(fā)生微小變化時,加解密圖像會發(fā)生很大變化。選取一組密鑰{c,x0,K},3個微小改變后的密鑰:KEY1={c+10-14,x0,K},KEY2={c,x0+10-14,K},KEY3={c,x0,Km}。其中,密鑰c,x0微小改變的量為10-14,K的微小改變量為1 bit的哈希值,記為Km,利用微小改變后的密鑰分別加密Lena圖像并解密其密文圖像,計算得到的NPCR,UACI值如表3所示,可見計算得到的NPCR和UACI值接近于理想值。因此,本文算法的密鑰敏感性較強。 表3 密鑰敏感性測試結果 % 信息熵計算公式如下 (21) 式中L圖像的灰度等級,p(i)為灰度值i出現(xiàn)的概率,對于L=256的灰度圖像,其信息熵的理想值為8。表4給出了信息熵的測試結果,和文獻[13,17]相比,本文算法的密文圖像的信息熵更接近理論值8。所以,本文算法加密得到的密文圖像可以有效地抵抗統(tǒng)計分析攻擊。 表4 信息熵測試結果 本文提出了一種基于多混沌系統(tǒng)的圖像加密算法,首先利用三維CNN混沌系統(tǒng)產(chǎn)生的混沌序列用于對明文圖像進行無重復置亂,并對置亂后的圖像進行Arnold變換完成2次置亂,之后在像素擴散階段,使用三維CNN混沌系統(tǒng)產(chǎn)生的混沌序列作為會話密鑰與置亂后的圖像,采用加取模和循環(huán)移位來進行像素值的擴散。仿真結果和安全性分析表明:本文提出的加密算法密鑰空間大,密文圖像直方圖分布均勻,相鄰像素相關性小,密鑰敏感性高,抗差分攻擊能力強。因此,本文提出的算法具有較高的安全性,并在保密通信應用中具有較大的實用價值。3 解密算法
4 仿真結果
5 安全性分析
5.1 密鑰空間
5.2 灰度直方圖
5.3 相鄰像素相關性
5.4 抗差分攻擊分析
5.5 密鑰敏感性
5.6 信息熵分析
6 結束語