韓雪娟,李國東
(新疆財經大學 應用數學學院,新疆 烏魯木齊 830012)
由于混沌所具有的特性,對于混沌和超混沌在圖像加密技術中的應用越來越受到學者的關注,已經成為了研究熱點之一[1-6]。數字圖像加密主要是根據美國數學家香農提出的置亂技術和擴散技術,利用置亂方法和擴散方法對圖像信息進行隱藏。
Arnold變換的特點如下:算法簡單、置亂效果好,因此被廣泛應用到圖像加密方面[7,8]。但是Arnold變換具有周期性的特點限制了它在圖像加密方面的應用,怎樣避開它的弊端設計出更好的加密算法成為研究的熱點之一。有些學者在圖像加密方面的文獻中提出了改進Arnold變換的加密方法[9,10]。也有許多學者設計了各種不同類型的加密算法,姚麗莎等[11]利用DNA序列和分數階Chen超混沌系統對彩色圖像進行加密,DAN加密具有難破解的優點。謝國波等[12]利用引入量子混沌的方法,設計了一種使用量子混沌實現比特置亂的圖像加密方案,使算法不會受混沌參數少的缺陷的影響。仿真結果表明,該算法在統計特性分析、抗攻擊性能上要比常規算法更勝一籌,但是不足之處在于比特置亂這個算法本身計算量較大,導致效率不高。毛頡等[13]根據引擎值來動態選擇加密密鑰,設計了4方向連續擴散的方法,設計了一種算法完成圖像加密。Yueping Li等[14]采用5維多翼超混沌系統,超混沌系統生成的密鑰流與原始圖像相關。Rasul Enayatifara等[15]提出了一種同步置換擴散技術,該方法快速有效。
本文設計的加密算法在置亂時融合了分塊置亂和動態Arnold變換,有效避開了Arnold置亂具有周期性易破解的弊端。同時在擴散算法中利用3種不同的混沌映射產生偽隨機序列,對置亂后的加密圖像進行分塊擴散和整體擴散;在分塊擴散時根據Logistic映射選取的子塊奇偶性選擇不同的隨機序列分別進行加密,混沌之間相互控制參數,大大增加了密文的安全性。
本文設計的加密方案不但增大了解密難度,而且提高了加密信息的安全級別。該算法對明文圖像分別進行了兩種不同方式的置亂,第一種是分塊置亂,第二種是Arnold置亂。再運用第二種方式置亂時又對一次置亂后的圖像進行了3次動態置亂,避免了Arnold置亂的周期性帶來的影響,破壞了明文圖像之間的聯系,增加了圖像的置亂程度。得到最終的置亂圖像后,對圖像進行了兩次擴散,每次擴散選擇不同的混沌序列,增強了密文圖像的安全性;同時混沌序列之間又相互控制參數,增加了密文的破解難度。
圖像置亂操作:先對圖像進行第一次置亂,再利用動態Arnold映射對分塊置亂后的圖像進行置亂;圖像的擴散部分:迭代處理Tent-Sine映射、Tent映射以及Sine映射產生3個不同的序列X、Y、Z,迭代處理Logistic映射產生的序列w″選塊。先是用序列X或者Y對置亂后的圖像依次進行第一次分塊擴散,再用序列Z對一次擴散后的加密圖像進行第二次整體擴散,得到最終加密圖像。經過模擬仿真,該方法解決了安全級別不高和易破解的問題。
(1)分塊置亂:
設明文圖像大小為m*n的灰度圖像E, 將其劃分為大小為t*t的矩陣子塊,共有m/t*n/t個子塊(t是m,n的公約數),本文選用的是300*300的灰度圖像。
將E平均分為25塊60*60的圖像,記為e1,e2,e3,…,e25, 表示如下
e1=(e11,e12,e13…e1t*t)
e2=(e21,e22,e23…e2t*t)
e3=(e31,e32,e33…e3t*t)
?
e25=(e251,e252,e253…e25t*t)
(1)
這25個矩陣子塊進行如下方式的分塊置亂
ei01=ei(i∶25∶t*t)
ei02=ei(i∶25∶t*t)
ei03=ei(i∶25∶t*t)
?
ei25=ei(i∶25∶t*t)
(2)
置亂后的矩陣子塊記為
Ei=(ei01,ei02,ei03…ei25)
(3)
其中, i=1,2,3…25, 將25個置亂后的矩陣子塊重新組合成為一個300*300的大矩陣E′。
(2)動態Arnold變換:
Arnold映射的方程為

(4)
控制參數a,b, (x,y) 為明文圖像的像素位置坐標, (xx,yy) 為置亂后圖像的像素位置坐標。Arnold映射將原圖像中的點 (x,y) 處的像素值存儲到變換后的點 (xx,yy) 處,經過變換后明文圖像會變得模糊,經過多次變換后即可得到最終的加密圖像,加密圖像呈現為一幅雜亂無章的圖像,完全看不出明文圖像的信息。
為了消除Arnold變換周期性對于加密圖像的影響,本文采用一種動態Arnold置亂方式分別進行3次Arnold變換。將矩陣E′均勻分成25塊,每塊大小為60×60,如圖1所示。

圖1 E′分塊
Arnold第一次置亂:從矩陣E′中選擇矩陣子塊1,2,3,6,7,8,11,12,13組成一個3*3的矩陣A, 對其進行 Arnold 變換。參數: a1=21, b1=1, 迭代次數: n/gcd(m/t,n/t) (gcd(m/t,n/t) 表示m/t,n/t的最大公約數),通過第一次Arnold變換后得到一個新的3*3的矩陣A′,如圖2所示。

圖2 A′分塊
Arnold第二次置亂:在矩陣A′中選擇矩陣子塊7,8,12,13分別替換E′矩陣中的矩陣子塊7,8,12,13得到新的矩陣EE。 在矩陣EE中選擇矩陣子塊7,8,9,10,12,13,14,15,17,18,19,20,22,23,24,25組成一個4*4的矩陣B, 對其進行Arnold置亂,參數: a2=1,b2=1, 迭代次數: n/gcd(t,t), 通過第二次Arnold變換后得到一個新的4*4的矩陣B′, 如圖3所示。

圖3 B′分塊
Arnold第三次置亂:用第二次Arnold置亂后的矩陣塊B′替換矩陣E′中的相應位置得到矩陣大小為60*60的新矩陣EE′, 對其進行Arnold置亂,參數: a3=1, b3=21, 迭代次數: n/gcd(m/t,n/t), 通過第三次Arnold變換得到一個新的5*5的矩陣EE″, 該矩陣即為置亂后的密文矩陣。
1.3.1 混沌序列的分析
本文中用到的混沌映射分別為:Tent-Sine映射、Tent映射、Sine映射以及Logistic映射,它們的動力學方程如下所示。
Tent-Sine映射[10]

(5)
Tent映射

(6)
Sine映射
yn+1=μ3*sin(π*yn)/4mod1
(7)
Logistic映射
wn+1=μ4wn(1-wn) w∈[0,1],μ4∈(0,4]
(8)
其中,取模是為了保證輸出的數據在區間(0,1)之間,n為迭代次數,μ1,μ2,μ3,μ4為系統控制參數, x0,y0,z0,w0為初始值,當μ1∈(0,4),μ2∈(0,2),μ3∈[3.48,4] 時,映射呈現出混沌行為。
1.3.2 混沌序列的生成
給定密鑰
k1=345
z0=0.3789,μ1=1.1221
x0=z(1),μ2=2^(s/(m*n*255))
y0=x(1),μ3=3.496
w0=y(1),μ4=4
(9)
以上公式中s表示的是明文圖像中所有的像素值之和。
(1)將Tent-Sine映射迭代m*n次,產生如下序列
z={zj|j=1,2,…,m*n}
(10)
從k1+1項開始選取,通過下式對序列進行處理
z1=mod(floor(z*10^5-floor(z*10^5)*10^2),4)
(11)
得到序列
z1={zi|i=1,2,…,q}
(12)
再按照下式對序列進行處理
Z=mod(floor(z*10^6-floor(z*10^6)*10^3),256)
(13)
得到序列
Z={Zj|j=1,2,…,m*n}
(14)
式中: q=t2, k=k1+q。
(2)分別迭代k次式(6)、式(7),選擇序列z1中的前q-1項作為采樣間隔,對迭代產生的混沌序列x,y從第k1-1項開始抽樣,再截取它們的前q項按照下式進行處理
X=mod(floor(x*10^6-floor(x*10^6)*10^3),256)
(15)
Y=mod(floor(y*10^6-floor(y*10^6)*10^3),256)
(16)
得到序列
X={Xi|i=1,2,…,q}
(17)
Y={Yi|i=1,2,…,q}
(18)
其中,序列X,Y用于像素的一次擴散,序列Z用于像素的二次擴散。
(3)迭代式(8)3*k1次,按照下式對序列進行處理
w=ceil(mod(w*10^13,25))
(19)
w′=w(851∶950)
(20)
在w′中從第一項開始無重復的選取[1,25]中的數字,直到選滿25個數字停止,得到序列
w″={w″1,w″2,…,w″25}
(21)
為了判斷序列w″的奇偶性,對序列做如下處理
w1=mod(w″,2)
(22)
得到全為0、1的25個數組成的序列w1。
1.3.3 擴散算法的描述
一次擴散過程:將置亂后密文EE″均勻分成25塊大小為60*60的圖像,記為EE″1,EE″2,EE″3,…,EE″25, 表示如下
EE″1=(EE″11,EE″12,EE″13…EE″1t*t)
EE″2=(EE″21,EE″22,EE″23…EE″2t*t)
EE″3=(EE″31,EE″32,EE″33…EE″3t*t)
?
EE″25=(EE″251,EE″252,EE″253…EE″25t*t)
(23)
當w″i中的數字是奇數時
ci=e1⊕((X+EE″w ″i)mod256⊕X)
(24)
當w″i中的數字是偶數時
ci=e25⊕((Y+EE″w ″i)mod256⊕Y)
(25)
其中,e1,e25為明文圖像中的兩個子塊, i=1,2,3…25。 將經過上式處理后的ci合成m*n的大矩陣得到矩陣C, 對它進行二次擴散
D=C⊕Z
(26)
得到最終加密圖像D。
本文加密算法的流程如圖4所示。
本文加密算法的具體步驟如下:
(1)首先選擇一幅合適的數字圖像作為明文圖像,得到明文圖像的數字矩陣E,明文圖像的大小為300*300;
(2)將E劃分為大小為60*60的矩陣子塊,得到5*5個子塊e1,e2,e3,…,e25;
(3)對e1,e2,e3,…,e25進行分塊置亂,將25個置亂后的矩陣子塊重新組合成為一個300*300的大矩陣E′;
(4)對分塊置亂后的密文進行動態Arnold置亂,①將矩陣E′均勻分成25塊,選取一個大小為3*3的矩陣子塊A進行Arnold置亂,得到變換后的A′矩陣,再用其替代矩陣E′中的A矩陣,得到一個新的大小為300*300的矩陣EE。②在矩陣EE中選擇一個大小為4×4的矩陣子塊B進行Arnold置亂,得到變換后的B′矩陣,再用它替換矩陣EE中的B,得到一個大小為300*300的矩陣EE′。 ③對矩陣EE′進行Arnold置亂,得到最終置亂加密矩陣EE″;
(5)迭代、處理Tent-Sine映射、Tent映射、Sine映射以及Logistic映射,得到混沌序列Z、X、Y、w″;
(6)對最終置亂后加密矩陣EE″均勻分塊,得到5*5個大小為60*60的矩陣子塊EE″1,EE″2,EE″3,…,EE″25, 對這些矩陣子塊進行第一次擴散加密,將一次擴散后加密矩陣合并成300*300的矩陣C;
(7)對分塊擴散后的加密圖像進行第二次整體圖像的擴散加密過程,得到的擴散后的圖像即為最終的加密圖像D;
(8)密文圖像的解密過程也就是圖像加密過程的逆過程。用下式替代式(24)和式(25)
EE″w ″i=mod(ci⊕e1⊕X+256-X,256)
(27)
EE″w ″i=mod(ci⊕e25⊕Y+256-Y,256)
(28)

圖4 加密算法流程
Lena圖像實驗仿真效果如圖5所示。利用本文設計的加密算法對圖5(a)進行加密,分塊置亂后得到第一次置亂密文圖5(b),從圖中可以看出圖像呈現出縱向的明暗分塊;再對一次置亂后的圖像進行動態Arnold置亂,得到最終的置亂加密圖5(c)。對圖5(c)進行兩次擴散得到最終加密圖5(d)。從圖5可以看出:經過加密過程后,從最終的密文圖像中已看不出明文圖像的輪廓,最終的加密圖像變成一副密密麻麻的黑白點相雜的圖像,可見達到了加密的目的。

圖5 加密效果
直方圖分析結果如圖6所示。根據直方圖理論可知:當每個灰度級出現的次數越接近,即直方圖越平穩時,也就說明密文圖像的安全性就越高。由圖6可知,明文和密文圖像直方圖相差很大,圖6(a)能量分布不均勻,加密后的直方圖6(b)比較平滑、像素的能量分布是均勻的,說明密文圖像較穩定。

圖6 明密文圖像直方圖分析
本文設計的加密算法中,通過利用4種不同的混沌系統相互控制參數,在很大程度上增加了解密的難度;同時多種混沌映射的初值和參數一同作為密鑰,使得密鑰空間至少達到10240,因此算法能夠有效抵抗窮舉攻擊。
在密鑰敏感性的分析中,為了確定密鑰是否具有敏感性將Tent映射的密鑰Key減少1013,解密后無法得到正確的明文圖像,如圖7所示。可以知道本文設計的算法具有很強的敏感性,即使使用與正確密鑰相差很小的密鑰進行解密,得到的仍是與原圖不一樣的錯誤解密圖。

圖7 不正確的解密圖像
根據NPCR(像素改變率)、UACI(歸一化平均改變強度)的定義,如文獻[16]所描述的。D1表示密文,D2為明文圖像像素值發生改變時的密文,公式如下所示
(29)
(30)
任意取明文圖像中的坐標(1,159),將它改為(11,159),得到NPCR和UACI值見表1。

表1 NPCR與UACI/%
從表1可以得出如下結論:本文設計的加密算法得到的NPCR和UACI值分別為99.63%和33.47%,其值更加接近于NPCR和UACI的理想值99.6094%和33.4635%;并且在與文獻[4]和文獻[13]進行對比后,發現本文具有更強的抗差分攻擊能力。
因為信息熵是圖像信息不確定性的體現,所以如果信息熵較大,那么可視信息就會比較少;反之如果信息熵較小,那么可視信息就會較多;信息熵的理想值為8。計算公式如下所示
(31)
本文的加密算法計算的信息熵是7.9980,而文獻[4]和文獻[13]得到的信息熵分別為7.9967和7.9417,本文的信息熵明顯高于文獻中的信息熵,而且更加接近于理想值8,因此該算法能夠很好抗統計攻擊性。
根據相關系數r的定義,在明密文圖像中任意選擇N對像素值,分別計算明密文圖像水平、垂直和對角方向上的相關系數r,驗證明文圖像和密文圖像相鄰像素之間的相關性,相關系數計算公式如下
(32)
(33)
(34)
(35)
如果 (xi,yi) 是ui的坐標,那么當 (xi+1,yi)、 (xi,yi+1)、 (xi+1,yi+1)、 (xi-1,yi+1) 均是vi的坐標時,最終得到的相關系數值就分別是水平方向上的相關系數、垂直方向上的相關系數、正對角上的相關系數以及反對角上的相關系數。明文圖像與密文圖像的相關性散點如圖8所示,相關系數見表2。

圖8 明文圖像與密文圖像的相關性

表2 相關系數值
由圖8可以得出如下結論:明文圖像的散點圖無論在水平方向、垂直方向,還是對角方向上都基本呈一條直線,具有明顯的線性關系;而密文圖像的散點圖雜亂無章,呈現出散亂的點,在各個方向上沒有變現出存在任何關系。從表2看出:明文圖像的相關系數都超過0.95和1很相近,說明具有很強的相關性;而密文圖像的相關系數都小于0.005接近于零,可以說不存在相關性。從與文獻比較的結果可以發現本文計算的相關系數均小于文獻中的相關系數,說明本文設計的加密算法打亂了原始圖像中相鄰像素點之間的相關性,加密的效果比較好。
本文設計的加密算法是通過軟件Matlab 2017進行實驗的,在Windows 8操作系統中進行。本文設計的算法對圖像進行了兩次置亂操作以及兩次擴散操作,置亂算法:第一次是分塊置亂,對5*5個子塊進行置亂;第二次是在第一次分塊置亂的基礎上進行動態Aronld變換(對第一次置亂后的圖像進行三次Arnold置亂),最終得到置亂后的加密圖像。擴散算法:迭代處理Tent-Sine映射、Tent映射、Sine映射以及Logistic映射分別產生混沌序列Z、X、Y、w″,對最終置亂后的密文圖像進行擴散操作。序列Z用于第二次整體擴散,序列X、Y用于第一次分塊擴散,經過兩次擴散后得到最終加密圖像。
實驗結果表明:本文設計的加密算法通過混沌系統之間相互控制參數增大了算法的密鑰空間,解決了密文圖像容易被破解,導致密文信息安全性不夠高的問題;同時經過實驗仿真發現密鑰具有很強的敏感性;因此該算法具有較好的加密效果,可以應用于圖像加密中。