韓雪娟,李國東
(新疆財(cái)經(jīng)大學(xué) 應(yīng)用數(shù)學(xué)學(xué)院,新疆 烏魯木齊 830012)
由于混沌所具有的特性,對于混沌和超混沌在圖像加密技術(shù)中的應(yīng)用越來越受到學(xué)者的關(guān)注,已經(jīng)成為了研究熱點(diǎn)之一[1-6]。數(shù)字圖像加密主要是根據(jù)美國數(shù)學(xué)家香農(nóng)提出的置亂技術(shù)和擴(kuò)散技術(shù),利用置亂方法和擴(kuò)散方法對圖像信息進(jìn)行隱藏。
Arnold變換的特點(diǎn)如下:算法簡單、置亂效果好,因此被廣泛應(yīng)用到圖像加密方面[7,8]。但是Arnold變換具有周期性的特點(diǎn)限制了它在圖像加密方面的應(yīng)用,怎樣避開它的弊端設(shè)計(jì)出更好的加密算法成為研究的熱點(diǎn)之一。有些學(xué)者在圖像加密方面的文獻(xiàn)中提出了改進(jìn)Arnold變換的加密方法[9,10]。也有許多學(xué)者設(shè)計(jì)了各種不同類型的加密算法,姚麗莎等[11]利用DNA序列和分?jǐn)?shù)階Chen超混沌系統(tǒng)對彩色圖像進(jìn)行加密,DAN加密具有難破解的優(yōu)點(diǎn)。謝國波等[12]利用引入量子混沌的方法,設(shè)計(jì)了一種使用量子混沌實(shí)現(xiàn)比特置亂的圖像加密方案,使算法不會(huì)受混沌參數(shù)少的缺陷的影響。仿真結(jié)果表明,該算法在統(tǒng)計(jì)特性分析、抗攻擊性能上要比常規(guī)算法更勝一籌,但是不足之處在于比特置亂這個(gè)算法本身計(jì)算量較大,導(dǎo)致效率不高。毛頡等[13]根據(jù)引擎值來動(dòng)態(tài)選擇加密密鑰,設(shè)計(jì)了4方向連續(xù)擴(kuò)散的方法,設(shè)計(jì)了一種算法完成圖像加密。Yueping Li等[14]采用5維多翼超混沌系統(tǒng),超混沌系統(tǒng)生成的密鑰流與原始圖像相關(guān)。Rasul Enayatifara等[15]提出了一種同步置換擴(kuò)散技術(shù),該方法快速有效。
本文設(shè)計(jì)的加密算法在置亂時(shí)融合了分塊置亂和動(dòng)態(tài)Arnold變換,有效避開了Arnold置亂具有周期性易破解的弊端。同時(shí)在擴(kuò)散算法中利用3種不同的混沌映射產(chǎn)生偽隨機(jī)序列,對置亂后的加密圖像進(jìn)行分塊擴(kuò)散和整體擴(kuò)散;在分塊擴(kuò)散時(shí)根據(jù)Logistic映射選取的子塊奇偶性選擇不同的隨機(jī)序列分別進(jìn)行加密,混沌之間相互控制參數(shù),大大增加了密文的安全性。
本文設(shè)計(jì)的加密方案不但增大了解密難度,而且提高了加密信息的安全級別。該算法對明文圖像分別進(jìn)行了兩種不同方式的置亂,第一種是分塊置亂,第二種是Arnold置亂。再運(yùn)用第二種方式置亂時(shí)又對一次置亂后的圖像進(jìn)行了3次動(dòng)態(tài)置亂,避免了Arnold置亂的周期性帶來的影響,破壞了明文圖像之間的聯(lián)系,增加了圖像的置亂程度。得到最終的置亂圖像后,對圖像進(jìn)行了兩次擴(kuò)散,每次擴(kuò)散選擇不同的混沌序列,增強(qiáng)了密文圖像的安全性;同時(shí)混沌序列之間又相互控制參數(shù),增加了密文的破解難度。
圖像置亂操作:先對圖像進(jìn)行第一次置亂,再利用動(dòng)態(tài)Arnold映射對分塊置亂后的圖像進(jìn)行置亂;圖像的擴(kuò)散部分:迭代處理Tent-Sine映射、Tent映射以及Sine映射產(chǎn)生3個(gè)不同的序列X、Y、Z,迭代處理Logistic映射產(chǎn)生的序列w″選塊。先是用序列X或者Y對置亂后的圖像依次進(jìn)行第一次分塊擴(kuò)散,再用序列Z對一次擴(kuò)散后的加密圖像進(jìn)行第二次整體擴(kuò)散,得到最終加密圖像。經(jīng)過模擬仿真,該方法解決了安全級別不高和易破解的問題。
(1)分塊置亂:
設(shè)明文圖像大小為m*n的灰度圖像E, 將其劃分為大小為t*t的矩陣子塊,共有m/t*n/t個(gè)子塊(t是m,n的公約數(shù)),本文選用的是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個(gè)矩陣子塊進(jìn)行如下方式的分塊置亂
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個(gè)置亂后的矩陣子塊重新組合成為一個(gè)300*300的大矩陣E′。
(2)動(dòng)態(tài)Arnold變換:
Arnold映射的方程為
(4)
控制參數(shù)a,b, (x,y) 為明文圖像的像素位置坐標(biāo), (xx,yy) 為置亂后圖像的像素位置坐標(biāo)。Arnold映射將原圖像中的點(diǎn) (x,y) 處的像素值存儲到變換后的點(diǎn) (xx,yy) 處,經(jīng)過變換后明文圖像會(huì)變得模糊,經(jīng)過多次變換后即可得到最終的加密圖像,加密圖像呈現(xiàn)為一幅雜亂無章的圖像,完全看不出明文圖像的信息。
為了消除Arnold變換周期性對于加密圖像的影響,本文采用一種動(dòng)態(tài)Arnold置亂方式分別進(jìn)行3次Arnold變換。將矩陣E′均勻分成25塊,每塊大小為60×60,如圖1所示。
圖1 E′分塊
Arnold第一次置亂:從矩陣E′中選擇矩陣子塊1,2,3,6,7,8,11,12,13組成一個(gè)3*3的矩陣A, 對其進(jìn)行 Arnold 變換。參數(shù): a1=21, b1=1, 迭代次數(shù): n/gcd(m/t,n/t) (gcd(m/t,n/t) 表示m/t,n/t的最大公約數(shù)),通過第一次Arnold變換后得到一個(gè)新的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組成一個(gè)4*4的矩陣B, 對其進(jìn)行Arnold置亂,參數(shù): a2=1,b2=1, 迭代次數(shù): n/gcd(t,t), 通過第二次Arnold變換后得到一個(gè)新的4*4的矩陣B′, 如圖3所示。
圖3 B′分塊
Arnold第三次置亂:用第二次Arnold置亂后的矩陣塊B′替換矩陣E′中的相應(yīng)位置得到矩陣大小為60*60的新矩陣EE′, 對其進(jìn)行Arnold置亂,參數(shù): a3=1, b3=21, 迭代次數(shù): n/gcd(m/t,n/t), 通過第三次Arnold變換得到一個(gè)新的5*5的矩陣EE″, 該矩陣即為置亂后的密文矩陣。
1.3.1 混沌序列的分析
本文中用到的混沌映射分別為:Tent-Sine映射、Tent映射、Sine映射以及Logistic映射,它們的動(dòng)力學(xué)方程如下所示。
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)
其中,取模是為了保證輸出的數(shù)據(jù)在區(qū)間(0,1)之間,n為迭代次數(shù),μ1,μ2,μ3,μ4為系統(tǒng)控制參數(shù), x0,y0,z0,w0為初始值,當(dāng)μ1∈(0,4),μ2∈(0,2),μ3∈[3.48,4] 時(shí),映射呈現(xiàn)出混沌行為。
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次,產(chǎn)生如下序列
z={zj|j=1,2,…,m*n}
(10)
從k1+1項(xiàng)開始選取,通過下式對序列進(jìn)行處理
z1=mod(floor(z*10^5-floor(z*10^5)*10^2),4)
(11)
得到序列
z1={zi|i=1,2,…,q}
(12)
再按照下式對序列進(jìn)行處理
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項(xiàng)作為采樣間隔,對迭代產(chǎn)生的混沌序列x,y從第k1-1項(xiàng)開始抽樣,再截取它們的前q項(xiàng)按照下式進(jìn)行處理
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用于像素的一次擴(kuò)散,序列Z用于像素的二次擴(kuò)散。
(3)迭代式(8)3*k1次,按照下式對序列進(jìn)行處理
w=ceil(mod(w*10^13,25))
(19)
w′=w(851∶950)
(20)
在w′中從第一項(xiàng)開始無重復(fù)的選取[1,25]中的數(shù)字,直到選滿25個(gè)數(shù)字停止,得到序列
w″={w″1,w″2,…,w″25}
(21)
為了判斷序列w″的奇偶性,對序列做如下處理
w1=mod(w″,2)
(22)
得到全為0、1的25個(gè)數(shù)組成的序列w1。
1.3.3 擴(kuò)散算法的描述
一次擴(kuò)散過程:將置亂后密文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)
當(dāng)w″i中的數(shù)字是奇數(shù)時(shí)
ci=e1⊕((X+EE″w ″i)mod256⊕X)
(24)
當(dāng)w″i中的數(shù)字是偶數(shù)時(shí)
ci=e25⊕((Y+EE″w ″i)mod256⊕Y)
(25)
其中,e1,e25為明文圖像中的兩個(gè)子塊, i=1,2,3…25。 將經(jīng)過上式處理后的ci合成m*n的大矩陣得到矩陣C, 對它進(jìn)行二次擴(kuò)散
D=C⊕Z
(26)
得到最終加密圖像D。
本文加密算法的流程如圖4所示。
本文加密算法的具體步驟如下:
(1)首先選擇一幅合適的數(shù)字圖像作為明文圖像,得到明文圖像的數(shù)字矩陣E,明文圖像的大小為300*300;
(2)將E劃分為大小為60*60的矩陣子塊,得到5*5個(gè)子塊e1,e2,e3,…,e25;
(3)對e1,e2,e3,…,e25進(jìn)行分塊置亂,將25個(gè)置亂后的矩陣子塊重新組合成為一個(gè)300*300的大矩陣E′;
(4)對分塊置亂后的密文進(jìn)行動(dòng)態(tài)Arnold置亂,①將矩陣E′均勻分成25塊,選取一個(gè)大小為3*3的矩陣子塊A進(jìn)行Arnold置亂,得到變換后的A′矩陣,再用其替代矩陣E′中的A矩陣,得到一個(gè)新的大小為300*300的矩陣EE。②在矩陣EE中選擇一個(gè)大小為4×4的矩陣子塊B進(jìn)行Arnold置亂,得到變換后的B′矩陣,再用它替換矩陣EE中的B,得到一個(gè)大小為300*300的矩陣EE′。 ③對矩陣EE′進(jìn)行Arnold置亂,得到最終置亂加密矩陣EE″;
(5)迭代、處理Tent-Sine映射、Tent映射、Sine映射以及Logistic映射,得到混沌序列Z、X、Y、w″;
(6)對最終置亂后加密矩陣EE″均勻分塊,得到5*5個(gè)大小為60*60的矩陣子塊EE″1,EE″2,EE″3,…,EE″25, 對這些矩陣子塊進(jìn)行第一次擴(kuò)散加密,將一次擴(kuò)散后加密矩陣合并成300*300的矩陣C;
(7)對分塊擴(kuò)散后的加密圖像進(jìn)行第二次整體圖像的擴(kuò)散加密過程,得到的擴(kuò)散后的圖像即為最終的加密圖像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圖像實(shí)驗(yàn)仿真效果如圖5所示。利用本文設(shè)計(jì)的加密算法對圖5(a)進(jìn)行加密,分塊置亂后得到第一次置亂密文圖5(b),從圖中可以看出圖像呈現(xiàn)出縱向的明暗分塊;再對一次置亂后的圖像進(jìn)行動(dòng)態(tài)Arnold置亂,得到最終的置亂加密圖5(c)。對圖5(c)進(jìn)行兩次擴(kuò)散得到最終加密圖5(d)。從圖5可以看出:經(jīng)過加密過程后,從最終的密文圖像中已看不出明文圖像的輪廓,最終的加密圖像變成一副密密麻麻的黑白點(diǎn)相雜的圖像,可見達(dá)到了加密的目的。
圖5 加密效果
直方圖分析結(jié)果如圖6所示。根據(jù)直方圖理論可知:當(dāng)每個(gè)灰度級出現(xiàn)的次數(shù)越接近,即直方圖越平穩(wěn)時(shí),也就說明密文圖像的安全性就越高。由圖6可知,明文和密文圖像直方圖相差很大,圖6(a)能量分布不均勻,加密后的直方圖6(b)比較平滑、像素的能量分布是均勻的,說明密文圖像較穩(wěn)定。
圖6 明密文圖像直方圖分析
本文設(shè)計(jì)的加密算法中,通過利用4種不同的混沌系統(tǒng)相互控制參數(shù),在很大程度上增加了解密的難度;同時(shí)多種混沌映射的初值和參數(shù)一同作為密鑰,使得密鑰空間至少達(dá)到10240,因此算法能夠有效抵抗窮舉攻擊。
在密鑰敏感性的分析中,為了確定密鑰是否具有敏感性將Tent映射的密鑰Key減少1013,解密后無法得到正確的明文圖像,如圖7所示??梢灾辣疚脑O(shè)計(jì)的算法具有很強(qiáng)的敏感性,即使使用與正確密鑰相差很小的密鑰進(jìn)行解密,得到的仍是與原圖不一樣的錯(cuò)誤解密圖。
圖7 不正確的解密圖像
根據(jù)NPCR(像素改變率)、UACI(歸一化平均改變強(qiáng)度)的定義,如文獻(xiàn)[16]所描述的。D1表示密文,D2為明文圖像像素值發(fā)生改變時(shí)的密文,公式如下所示
(29)
(30)
任意取明文圖像中的坐標(biāo)(1,159),將它改為(11,159),得到NPCR和UACI值見表1。
表1 NPCR與UACI/%
從表1可以得出如下結(jié)論:本文設(shè)計(jì)的加密算法得到的NPCR和UACI值分別為99.63%和33.47%,其值更加接近于NPCR和UACI的理想值99.6094%和33.4635%;并且在與文獻(xiàn)[4]和文獻(xiàn)[13]進(jìn)行對比后,發(fā)現(xiàn)本文具有更強(qiáng)的抗差分攻擊能力。
因?yàn)樾畔㈧厥菆D像信息不確定性的體現(xiàn),所以如果信息熵較大,那么可視信息就會(huì)比較少;反之如果信息熵較小,那么可視信息就會(huì)較多;信息熵的理想值為8。計(jì)算公式如下所示
(31)
本文的加密算法計(jì)算的信息熵是7.9980,而文獻(xiàn)[4]和文獻(xiàn)[13]得到的信息熵分別為7.9967和7.9417,本文的信息熵明顯高于文獻(xiàn)中的信息熵,而且更加接近于理想值8,因此該算法能夠很好抗統(tǒng)計(jì)攻擊性。
根據(jù)相關(guān)系數(shù)r的定義,在明密文圖像中任意選擇N對像素值,分別計(jì)算明密文圖像水平、垂直和對角方向上的相關(guān)系數(shù)r,驗(yàn)證明文圖像和密文圖像相鄰像素之間的相關(guān)性,相關(guān)系數(shù)計(jì)算公式如下
(32)
(33)
(34)
(35)
如果 (xi,yi) 是ui的坐標(biāo),那么當(dāng) (xi+1,yi)、 (xi,yi+1)、 (xi+1,yi+1)、 (xi-1,yi+1) 均是vi的坐標(biāo)時(shí),最終得到的相關(guān)系數(shù)值就分別是水平方向上的相關(guān)系數(shù)、垂直方向上的相關(guān)系數(shù)、正對角上的相關(guān)系數(shù)以及反對角上的相關(guān)系數(shù)。明文圖像與密文圖像的相關(guān)性散點(diǎn)如圖8所示,相關(guān)系數(shù)見表2。
圖8 明文圖像與密文圖像的相關(guān)性
表2 相關(guān)系數(shù)值
由圖8可以得出如下結(jié)論:明文圖像的散點(diǎn)圖無論在水平方向、垂直方向,還是對角方向上都基本呈一條直線,具有明顯的線性關(guān)系;而密文圖像的散點(diǎn)圖雜亂無章,呈現(xiàn)出散亂的點(diǎn),在各個(gè)方向上沒有變現(xiàn)出存在任何關(guān)系。從表2看出:明文圖像的相關(guān)系數(shù)都超過0.95和1很相近,說明具有很強(qiáng)的相關(guān)性;而密文圖像的相關(guān)系數(shù)都小于0.005接近于零,可以說不存在相關(guān)性。從與文獻(xiàn)比較的結(jié)果可以發(fā)現(xiàn)本文計(jì)算的相關(guān)系數(shù)均小于文獻(xiàn)中的相關(guān)系數(shù),說明本文設(shè)計(jì)的加密算法打亂了原始圖像中相鄰像素點(diǎn)之間的相關(guān)性,加密的效果比較好。
本文設(shè)計(jì)的加密算法是通過軟件Matlab 2017進(jìn)行實(shí)驗(yàn)的,在Windows 8操作系統(tǒng)中進(jìn)行。本文設(shè)計(jì)的算法對圖像進(jìn)行了兩次置亂操作以及兩次擴(kuò)散操作,置亂算法:第一次是分塊置亂,對5*5個(gè)子塊進(jìn)行置亂;第二次是在第一次分塊置亂的基礎(chǔ)上進(jìn)行動(dòng)態(tài)Aronld變換(對第一次置亂后的圖像進(jìn)行三次Arnold置亂),最終得到置亂后的加密圖像。擴(kuò)散算法:迭代處理Tent-Sine映射、Tent映射、Sine映射以及Logistic映射分別產(chǎn)生混沌序列Z、X、Y、w″,對最終置亂后的密文圖像進(jìn)行擴(kuò)散操作。序列Z用于第二次整體擴(kuò)散,序列X、Y用于第一次分塊擴(kuò)散,經(jīng)過兩次擴(kuò)散后得到最終加密圖像。
實(shí)驗(yàn)結(jié)果表明:本文設(shè)計(jì)的加密算法通過混沌系統(tǒng)之間相互控制參數(shù)增大了算法的密鑰空間,解決了密文圖像容易被破解,導(dǎo)致密文信息安全性不夠高的問題;同時(shí)經(jīng)過實(shí)驗(yàn)仿真發(fā)現(xiàn)密鑰具有很強(qiáng)的敏感性;因此該算法具有較好的加密效果,可以應(yīng)用于圖像加密中。