郭 媛,敬世偉,周艷艷
(齊齊哈爾大學(xué) 計算機(jī)與控制工程學(xué)院,黑龍江 齊齊哈爾 161006)
圖像信息具有直觀生動形象的特性被廣泛運用,其安全性受到大量學(xué)者關(guān)注[1-5]。其中陳關(guān)榮等[5]提出了像素置亂和異或擴(kuò)散的加密算法,很好滿足了香農(nóng)提出的加密算法應(yīng)具有的混淆和擴(kuò)散原則。但由于混沌序列與明文無關(guān)聯(lián),導(dǎo)致加密方法被選擇明密文攻擊破譯[6,7]。由此鄧曉衡等[8-12]在文獻(xiàn)[5]的基礎(chǔ)上提出比特置亂加密算法,既保留了原算法的優(yōu)點,又通過比特置亂進(jìn)一步改變像素值,更好掩蓋明文統(tǒng)計特性,同時將混沌序列與明文產(chǎn)生關(guān)聯(lián),使得中間密鑰隨明文自適應(yīng)變化,能較為有效抵御選擇明(密)文攻擊。但上述加密方法仍存在以下兩個問題:比特置亂環(huán)節(jié)所用混沌序列不敏感;對選擇明文攻擊防御力弱。文獻(xiàn)[8-10]加密算法雖有不同,但都是對單一像素點八位二進(jìn)制數(shù)置亂,使得一個像素點0 bit和1 bit的比重不變[14]。這引起所用混沌序列不敏感,即只進(jìn)行擴(kuò)散和全局置亂的解密,就能看到原圖的大體輪廓。并且在第三步加密過程中采用單向擴(kuò)散,使其很容易被列方程組的方式破解,同時使用明文像素值總和與平均值作為明文與混沌序列的聯(lián)系,關(guān)聯(lián)性不強(qiáng)被文獻(xiàn)[15]破解。文獻(xiàn)[11-13]提出一種比特置亂方式,雖然解決了比特置亂模板不敏感問題,但比特置亂方式較為復(fù)雜,且仍未改變明文關(guān)聯(lián)方式易受到選擇明文攻擊[16]。
對此本文提出一種相鄰像素間比特置亂方式,相鄰兩像素點間16位二進(jìn)制數(shù)的置亂,充分利用了全局置亂后相鄰像素點間的相關(guān)性被完全打破的特性,解決單一像素點二進(jìn)制下置亂所用混沌序列不敏感問題。正反雙向不同密鑰擴(kuò)散克服了文獻(xiàn)[15,16]用列方程組的方式破解擴(kuò)散中間密鑰序列的問題,同時兩個混沌序列和擴(kuò)散的初值都由明文的SHA-256哈希值算出,明文哈希值比明文像素值總和、平均值對明文變化更為敏感,使得本文抗選擇明文(密文)攻擊更強(qiáng),明文敏感性更好。
本文提出的算法是將明文經(jīng)過像素位置的全局置亂、比特置亂和正反雙向不同混沌序列擴(kuò)散處理得到密文,其中選擇用明文的SHA-256值作為明文與隨機(jī)序列關(guān)聯(lián)的值,使得中間密鑰隨明文自適應(yīng)變化。解密過程是加密過程的逆過程,其中全局置亂操作加解密完全相同。本文加解密過程如圖1所示。
圖1 加解密過程
由于Kent和Logistic映射是簡單快速易于實現(xiàn)的兩種映射,同時還具有很好的混沌特性,故本文采用這兩種映射。Kent的映射關(guān)系為
(1)
其中,混沌控制參數(shù)s∈(0,1), 序列值x∈(0,1)。 Logistic映射表達(dá)式為
xn+1=μxn(1-xn)
(2)
式中:序列值x∈(0,1), 參數(shù)μ∈(3.57,4] 時整個映射處于混沌狀態(tài)。
步驟1 讀取數(shù)字圖像Pm*n,并求出明文圖像P的SHA-256值H={H1,H2,……,H64}。
步驟2 由式(3)~式(5)計算出Kent和Logistic映射初值x0、y0以及異或擴(kuò)散時初值C0
(3)
(4)
(5)
步驟1 設(shè)定Kent映射控制參數(shù)s=0.55,并將用式(3)算出的初值x0帶入式(1)產(chǎn)生長度為2*m*n+1000的序列,丟掉前1000個迭代值以消除暫態(tài)效應(yīng)的影響,得到一個長度為2*m*n的序列T={T1,T2,……,T2*m*n}。 并分成TI={T1,T2,……,Tm*n} 和TII={Tm*n+1,Tm*n+2,……,T2*m*n} 分別用于全局置亂和反向擴(kuò)散。
步驟2 將TI按從小到大順序排列,并用一個序列T′={T′1,T′2,……,T′m*n} 記錄排序后對應(yīng)點在TI中的位置。
步驟3 將圖像矩陣Pm*n按行優(yōu)先的順序轉(zhuǎn)換為一維序列P′={P′1,P′2,……,P′m*n}。
步驟4 將P′按式(6)進(jìn)行全局置亂得到置亂后的序列Q
Qi=P′T′i
(6)
步驟1 設(shè)定Logistic映射控制參數(shù)μ=3.99,并將用式(4)算出的初值y0帶入式(2)產(chǎn)生長度為2*m*n+1000的序列,丟掉前1000個迭代值以消除暫態(tài)效應(yīng)的影響得到一個長度為2*m*n的序列V={V1,V2,……,V2*m*n}。 并分成VI={V1,V2,……,Vm*n-1} 和VII={Vm*n+1,Vm*n+2,……,V2*m*n} 分別用于比特置亂和正向擴(kuò)散。
步驟2 將全局置亂后的序列Q轉(zhuǎn)化為二進(jìn)制數(shù)得到矩陣mn*8的矩陣R′i,j。 通過對應(yīng)序列VIi的大小決定R矩陣對應(yīng)i和i+1行的置亂方式。交換過程如圖2所示。
圖2 比特交換原理
步驟3 將經(jīng)過比特置亂后的序列轉(zhuǎn)換為十進(jìn)制得到比特置亂后的圖像R。
步驟1 將混沌序列VII、TII經(jīng)過式(7)處理得到值在[0,255]之間的序列V′、T″
x′i=mod(xi×108,256),i=1,2,……,m*n
(7)
步驟2 對比特置亂后的R由式(8)進(jìn)行正向擴(kuò)散處理得到C′,其中C0由式(5)求得
(8)
步驟3 正向擴(kuò)散處理得到的C′由式(9)進(jìn)行反方向擴(kuò)散處理得到C″,最后將C″轉(zhuǎn)換為m*n密文矩陣C
(9)
解密過程是加密過程的逆過程,如圖1(b)所示。首先,將密文C中的值分別按式(10),式(11)進(jìn)行反向擴(kuò)散得R
(10)
(11)
將Ri轉(zhuǎn)化為二進(jìn)制,利用Vi將二進(jìn)制數(shù)比特反向置亂,再轉(zhuǎn)化為十進(jìn)制可得置亂后圖像序列Q,最后將Q進(jìn)行全局置亂即可得到明文圖像P。
選取Lena(256×256)灰度圖像在matlab2016a環(huán)境下進(jìn)行實驗仿真。設(shè)置Kent和Logistic映射控制參數(shù)s=0.55、μ=3.99,兩映射初值和C0由算法求得。由圖3可見密文中完全看不出明文信息。下面將對算法的比特置亂混沌序列敏感性、選擇明(密)文攻擊、抗差分攻擊、統(tǒng)計特性和密鑰空間進(jìn)行分析對比。
圖3 加解密效果
針對單一像素點比特置亂對比特置亂環(huán)節(jié)所用混沌序列不敏感,即在解密過程中不進(jìn)行比特置亂解密也可看見明文信息問題。本文充分利用像素位置全局置亂后兩像素相關(guān)性極低這一特性,在相鄰兩像素點間進(jìn)行比特置亂,很好解決了上述問題,本文提出加密算法和文獻(xiàn)[8,9,12]在解密過程中不解比特置亂過程的解密圖對比如圖4所示。
圖4 比特置亂所用混沌序列敏感性分析
由圖4可見,文獻(xiàn)[8,9,12]不對比特置亂解密的圖像依舊能看到明文圖像的大致輪廓,本文提出的加密方案卻完全看不出明文信息。故本文的加密方案對比特置亂的混沌序列敏感性更好,更適合用于圖像加密。
選擇明(密)文攻擊指攻擊者選定一些特殊的明(密)文,放入加密(解密)系統(tǒng)中得到一些明密文對,從而推導(dǎo)出等價的中間密鑰。
由圖5分析可知破解關(guān)鍵在于文獻(xiàn)[9]后兩步加密的混沌序列未與明文產(chǎn)生關(guān)聯(lián),而第一步加密的混沌序列以明文的均值作為聯(lián)系方式。本文加密算法針對選擇明文攻擊在以下三方面進(jìn)行了加強(qiáng):①將所用混沌均進(jìn)行了關(guān)聯(lián),使得用特殊像素值方式求出的中間密鑰與待破解的密文對應(yīng)的中間密鑰不同,而失去作用;②本文用哈希值作為明文與混沌序列的聯(lián)系,由于哈希算法的單向性[17],在第三步破解中,用密文反解后兩步得到全局?jǐn)U散后的圖像得不到明文哈希值,同時也找不到一個哈希值相同且只有一個點為0的圖像;③用雙向不同混沌序列的擴(kuò)散,解決以列方程組得到中間密文問題。
圖5 文獻(xiàn)[15]對文獻(xiàn)[9]破解步驟
在明文未與擴(kuò)散所用混沌序列關(guān)聯(lián)情況下,運用方程組思想求解本文中間密鑰,設(shè)擴(kuò)散所用的中間序列設(shè)為A、D和初值C0。B1和B2分別為像素全為0和255的圖像對應(yīng)正向擴(kuò)散密文C1′、C2′,和密文C1、C2。由于前兩步加密對B1、B2沒有影響所以
(12)
(13)
其中,C10=C0、C20=C0、C2m*n+1=C0、C2m*n+1=C0由式(12)、式(13)可知共4*m*n個方程式,由于不知中間密文C1′、C2′,故共有4*m*n+1個未知數(shù),而解不出中間序列A、D和初值C0。所以本文不能用解方程組的形式來破解擴(kuò)散時的中間序列。故本文所用的正反雙向不同密鑰的加密方式比單向在抗選擇明文攻擊時更強(qiáng)。
4.3.1 明文敏感性分析
好的加密算法明密文之間應(yīng)該具有雪崩效應(yīng),即使明文發(fā)生細(xì)微變化,密文圖像也應(yīng)該有巨大變化。為此本文引入明文圖像的SHA-256值作為混沌序列的初值。SHA-256比明文像素總和及均值更加敏感。如明文僅在第一個和第三個像素點(兩像素點相差一)發(fā)生置換的情況下SHA-256就由65f8fc53cabb54d9ea7ab076271904289531ff4bebcd8543df9752ff5018f797變?yōu)榱?b6162c66fe3a6367f51f529c76c95336946c72ef394ec1c9d579a5449d472d6,而明文的像素值總和卻不變。本文運用像素值變化率(NPCR)和歸一化平均變化強(qiáng)度(UACI)來定量分析明文敏感性。將明文圖像、明文圖像第一個像素點加一、和明文的第一三像素點交換位置進(jìn)行加密得到C1、C2、C3,計算C1和C2、C1和C3的NPCR和UACI的值見表1。NPCR和UACI公式如下
(14)
(15)
其中,當(dāng)C1(i,j)=C2(i,j) 時p(i,j)=0, 否則p(i,j)=1。
表1 NPCR和UACI值
由表1可見,本文像素變化率達(dá)到99%,說明本文在明文改變一個像素值的情況下,密文基本上每個像素值都得到了變化,同時值得注意的是當(dāng)明文圖像像素點位置發(fā)生微小變化時,文獻(xiàn)[8,9]的密文變化就大幅降低,而本加密方法得到的密文完全不同。由此可見本算法更適合圖像加密。
4.3.2 密鑰敏感性分析
密鑰敏感性指當(dāng)密鑰發(fā)生細(xì)微變化密文應(yīng)完全不同,同樣兩個具有微小差別的密鑰解密結(jié)果也應(yīng)該不同。本文算法在密鑰發(fā)生微小變化時,解密效果如圖6所示。
圖6 密鑰偏差時的解密圖像
由圖6可見當(dāng)密鑰s,x0相差10-16時解不出原圖像,當(dāng)密鑰s、x0相差10-17時成功解出原圖,故s和x0的靈敏度為10-16。同理密鑰y0和μ的靈敏度為10-15。由此可見,本文加密算法對密鑰極其敏感。
本文主要通過直方圖和信息熵以及相鄰像素的相關(guān)程度來分析算法的統(tǒng)計特性。
4.4.1 直方圖與信息熵
直方圖最能直觀反映圖像灰度值分布,信息熵能定量的分析。比特置亂后,以及最終密文的直方圖如圖7所示,其信息熵見表2
(16)
式中:pi為對應(yīng)像素值出現(xiàn)的概率,一個系統(tǒng)越是混亂信息熵就越高,在int8型數(shù)據(jù)下理想值為8。
圖7 直方圖
由圖7可見,明文圖像的灰度值分布呈現(xiàn)出明顯的分布統(tǒng)計規(guī)律,比特置亂后更平滑,密文已變得非常均勻,很好地隱藏了明文圖像信息,留給密碼分析者分析空間很小,能有效抵御統(tǒng)計分析攻擊。通過表2信息熵對比可見本算法信息熵最接近理想值8,密文像素值分布最均勻,加密效果最好。
4.4.2 相鄰像素的相關(guān)性
一個好的加密算法應(yīng)該顯著破壞相鄰像素的相關(guān)性[18]。明密文的水平、垂直、對角方向的相鄰像素的相關(guān)系數(shù)見表3。為在視覺上看出相鄰像素相關(guān)性,畫出本算法明密文在水平方向上的相關(guān)性如圖8所示。相鄰像素的相關(guān)系數(shù)公式如下
表2 信息熵對比
(17)
表3 密文圖像像素相關(guān)系數(shù)
圖8 明文和密文水平方向上的相鄰像素分布
由圖8可知明文圖像的相鄰兩點大部分都幾乎相等,密文圖像就分布就非常均勻,相鄰像素相關(guān)性就極低。表3也可見明文圖像的相鄰相關(guān)系數(shù)接近1,而密文圖像的接近于0,相比于其它對比文獻(xiàn)本文具有更小的相鄰像素相關(guān)系數(shù),說明本文在密文的相鄰像素相關(guān)性上表現(xiàn)更好。
本文的密鑰為Kent和Logistic映射的初值x0、y0和控制參數(shù)s、μ。每個初始密鑰都采用雙精度數(shù)據(jù),保留小數(shù)后15位有效數(shù)字。本文的密鑰空間至少是1060。本加密算法也可以將去掉混沌序列前n項值作為密鑰,從而使得密鑰進(jìn)一步擴(kuò)大。從安全的角度,密鑰空間≥2100≈1030就能滿足較高的安全級別,所以本算法的密鑰空間對窮舉攻擊是安全的。
比特置亂加密算法不僅保留了“置亂-替代”加密算法的優(yōu)點,同時強(qiáng)化了密碼學(xué)性能,增加了密碼系統(tǒng)的安全性和實用性,因此在圖像加密中更具優(yōu)勢。但單一像素點進(jìn)行比特置亂對所用的混沌序列不敏感;明文圖像與混沌序列關(guān)聯(lián)弱;對抵御選擇明(密)文攻擊效果不佳。由此本文提出了相鄰兩像素點間的比特置亂,充分利用了像素點置亂后的圖像相關(guān)性極低這一特性,解決了單一像素點進(jìn)行比特置亂對所用混沌序列不敏感問題,同時用正反雙向不同混沌序列的擴(kuò)散和用明文的哈希值算出加密過程中兩個混沌序列和擴(kuò)散的初值,很好抵御了選擇明(密)文攻擊,極大提升了明文敏感性。實驗結(jié)果還表明本加密算法的密文分布均勻、相鄰相關(guān)性低、密鑰空間也足以抵御窮舉攻擊,因此本加密算法具有更好的應(yīng)用前景。