謝國波,王朝陽
廣東工業(yè)大學 計算機學院,廣州 510003
隨著數(shù)字通訊行業(yè)和數(shù)字多媒體技術(shù)的迅猛發(fā)展,圖像信息的存儲與在開放信道中傳輸?shù)陌踩杂l(fā)引起人們的關(guān)注。數(shù)字圖像的未授權(quán)轉(zhuǎn)載和侵權(quán)使用使得圖像加密變得更加重要。人們可以通過諸如IDEA或AES等算法對數(shù)據(jù)信息進行加密。然而由于圖像數(shù)據(jù)維度高,以及像素點之間的相關(guān)性高,致使上述加密算法不能有效的應(yīng)用到圖像加密上。近年來,基于混沌的圖像加密技術(shù)開始展現(xiàn)它的優(yōu)越性?;煦缦到y(tǒng)具有偽隨機性和敏感依賴性,初始值和控制參數(shù)的細微變化會引起最終狀態(tài)發(fā)生顯著的改變。也正是這些特點使得更多的密碼學研究人員把混沌系統(tǒng)應(yīng)用到圖像加密中[1-3]?;谶@些特點,Liu等人提出了多種基于混沌系統(tǒng)的圖像加密方法,一次性密鑰加密具有密鑰空間大的優(yōu)點,基于比特位值替代的加密算法能夠有效的降低相鄰像素相關(guān)性,DNA序列加密能夠?qū)崿F(xiàn)高存儲密度和高并行性[4-6]。但上述方法也存在一定的缺陷,如密鑰分發(fā)困難,加密效率低,容易受到攻擊等。
圖1 圖像加密流程
陳關(guān)榮提出基于“置亂—替代”結(jié)構(gòu)的混沌加密算法[7]。該方案具有運行速度快,形式簡單等優(yōu)點,但無法有效地抵抗選擇明文攻擊。為了避免上述安全漏洞,鄧曉衡等人提出一種改進方案,利用明文自身特性來影響密鑰序列的機制[8]。其核心思路是通過計算數(shù)字圖像的所有像素點之和sum,將其應(yīng)用到混沌系統(tǒng)參數(shù)的生成公式中。這樣,當明文圖像中的任意一個像素點的值加1,將導(dǎo)致sum變化,最終使混沌系統(tǒng)控制參數(shù)發(fā)生改變,從而產(chǎn)生完全不同的混沌密鑰序列。然而該方案仍存在安全缺陷,假設(shè)把明文圖像的其中一個像素點的值加1,另一個像素點的值減1。sum不會改變,最終生成的混沌序列也不會改變。這樣修改后圖像產(chǎn)生的密文圖像與原明文圖像對應(yīng)的密文圖像只會有兩個點的像素值不同。此時對多組只有2個像素值不同的圖像進行加密,對比其加密結(jié)果,仍可推導(dǎo)出整個圖像加密算法的全局置亂操作的等價變換公式,使得該方案無法有效地抵御選擇明文攻擊。
針對上述缺點,本文提出一種基于滑塊與矩陣旋轉(zhuǎn)的混沌圖像加密算法。首先,使用MD5算法為明文圖像生成一個唯一的哈希值,根據(jù)該哈希值計算出混沌系統(tǒng)控制參數(shù),使混沌系統(tǒng)最終產(chǎn)生的混沌序列與明文圖像自身緊密相關(guān)。其次,讀取混沌序列與其排序后對應(yīng)的下標序列。根據(jù)下標序列計算明文圖像每個子矩陣塊的位置和大小,根據(jù)混沌序列計算子矩陣塊的旋轉(zhuǎn)角度。依次旋轉(zhuǎn)所有子矩陣塊以實現(xiàn)明文圖像像素位置的全局置亂。最后,在像素值替代過程中,利用滑塊加密方法,使每一個像素點的加密結(jié)果都會影響滑塊內(nèi)的其他若干像素點,從而使所有像素點的加密結(jié)果相互關(guān)聯(lián)。解決了密文與明文依賴性不強的問題,提高了加密圖像的安全性。仿真實驗結(jié)果表明,本文加密算法密鑰敏感性高,密鑰空間大,同時具有較強的明文敏感性,可以有效地抵御差分攻擊和統(tǒng)計特征攻擊。
本文提出的加密算法首先結(jié)合MD5算法生成混沌系統(tǒng)控制參數(shù),使密鑰序列與明文圖像本身密切相關(guān)。然后通過旋轉(zhuǎn)圖像矩陣的子矩陣來進行像素位置全局置亂。最后,在像素值替代過程中使用滑塊讓每一個像素點的加密結(jié)果都會影響到其他若干個像素點的加密結(jié)果。從而實現(xiàn)對不同的明文圖像加密會產(chǎn)生完全不同的密文圖像。
基于矩陣旋轉(zhuǎn)的像素位置全局置亂和基于滑塊加密的像素值替代加密流程,如圖1所示。
本文選取的混沌系統(tǒng)為Kent映射,該系統(tǒng)性能優(yōu)良[9-10],其映射關(guān)系為式(1):
其中,x0為初始條件,S為混沌系統(tǒng)控制參數(shù)。當時,該映射的Lyapunov指數(shù)大于0,此時該映射處于混沌狀態(tài),區(qū)間(0 ,1)為該映射的混沌不變集。Kent映射對初始值是非常敏感的,因其具有良好的偽隨機性,初始值發(fā)生極其細微的變化都會導(dǎo)致該映射產(chǎn)生的偽隨機序列完全不同。圖2是Kent映射對于兩個不同初始條件的時間響應(yīng)軌跡。當初始值僅發(fā)生10-16的改變,在迭代50次后,兩條軌跡產(chǎn)生了顯著的偏離。說明Kent映射對初始條件敏感性很強,因此可以很好地應(yīng)用于圖像加密算法中。
圖2 Kent映射的初始條件相差10-16的軌跡
MD5算法具有抗修改性的特點。如果對原數(shù)據(jù)進行任何改動,哪怕只是修改1個字節(jié),所得到的MD5的哈希值都將會完全不同[11-12]。把MD5算法應(yīng)用到混沌系統(tǒng)控制參數(shù)的生成中,對于一個明文圖像,只要有一個像素點被修改則對應(yīng)的混沌系統(tǒng)控制參數(shù)將完全不同,致使最終的密文圖像也完全發(fā)生改變。
本文首先使用MD5算法為所要加密的明文圖像產(chǎn)生一個唯一的Hash值,一個32位的16進制數(shù)。然后將這個數(shù)轉(zhuǎn)化為一個10進制的數(shù)D。利用公式(2)和(3)分別計算出Kent混沌系統(tǒng)的控制參數(shù)a和迭代次數(shù)n。
此階段是通過旋轉(zhuǎn)子矩陣的方式打亂原圖像。本文使用Kent映射產(chǎn)生混沌序列,一方面根據(jù)該混沌序列每個元素的值,可以計算出對應(yīng)各子矩陣塊將來要旋轉(zhuǎn)的角度,分別對應(yīng)0°、90°、180°、270°。另一方面,將該混沌序列進行排序,可以得到記錄排序后序列各元素在原始混沌序列中位置的下標序列,使用該下標序列可以確定各子矩陣的位置和大小。
設(shè)Am×n表示大小為m×n的灰度圖像,加密算法步驟如下所示:
步驟1根據(jù)公式(2)、(3)計算出控制參數(shù)S和預(yù)迭代次數(shù)K,設(shè)定初始密鑰x0,代入式(1)預(yù)迭代Kent混沌系統(tǒng)K次消除暫態(tài)效應(yīng)帶來的不良影響。然后繼續(xù)迭代式(1)m×n次,產(chǎn)生長度為m×n的混沌序列P={P1,P2,…,Pm×n}。
步驟2對混沌序列P進行從小到大的排序得到P′,產(chǎn)生一個用于記錄P'中各元素在原始序列P中位置的下標序列T。
步驟3計算每個子矩陣的位置和大小。對于步驟2計算出的Ti,首先,根據(jù)公式(4)可計算出對應(yīng)點Ti的子矩陣左上角元素的行標 rowi,結(jié)合公式(5)、(6)可計算出該子矩陣左上角元素的列標coli。
然后,根據(jù)公式(7)、(8)求出子矩陣的大小 sizei:
步驟4計算每個子矩陣的旋轉(zhuǎn)角度。對于步驟1計算出的混沌序列P,利用根據(jù)公式(9)、(10),可以計算出每個元素Pi對應(yīng)Ti子矩陣的旋轉(zhuǎn)角度Ri:
步驟5根據(jù)上述步驟求出的結(jié)果,可以確定Ti對應(yīng)的原圖像A的子矩陣大小為sizei,左上角位于第rowi行,第coli列。接著,將其對應(yīng)的子矩陣旋轉(zhuǎn)Ri度。再次替換其原來位置的元素。
步驟6重復(fù)步驟4、步驟5。直到i值達到m×n,得到經(jīng)過全局位置置亂的圖像A′。
本階段操作將實現(xiàn)對像素值位置全局置亂后的圖像A′進行像素值替代加密,以混淆密文與明文之間的關(guān)系。首先把上一次加密的結(jié)果A′轉(zhuǎn)換為一維序列W,在每個像素點Wi與混沌序列Ki進行異或之前,先計算滑塊長度本算法設(shè)定參數(shù)α為滑塊的最大長度。經(jīng)多次實驗對比,當參數(shù)α=30時,加解密效率最高,同時加密效果也比較好。得到滑塊長度β后,接著使起點為Wi,長度為β的滑塊內(nèi)的所有元素都與Qi進行異或操作替換原像素點的值,間接的實現(xiàn)了每個像素點的加密都會影響到其他若干個像素點未來加密的結(jié)果。從而使所有像素點緊密相關(guān),致使任何像素點值的細微變化都會導(dǎo)致最終的替代結(jié)果完全不同。像素值替代加密算法的具體步驟描述如下。
步驟1設(shè)定混沌系統(tǒng)的初始值為x′0,控制參數(shù)S為另一個S′。Kent混沌系統(tǒng)迭代K2次以消除暫態(tài)效應(yīng),并繼續(xù)迭代m×n次,以產(chǎn)生長度為m×n的混沌序列 Q′={q′1,q′2,…,q′m×n}。
步驟2將混沌序列K'的各序列值依次帶入公式(11)進行轉(zhuǎn)化,使其取值范圍為[0,255],得到混沌圖像序列Q={Q1,Q2,…,Qm×n}。同時把置亂圖像A'按照行優(yōu)先的順序轉(zhuǎn)換為長度為m×n的一維序列W={W1,W2,…,Wm×n}。
步驟3對給定的Wi,根據(jù)公式(12)計算當前滑塊長度β,然后將以Wi為起點長度為β的滑塊內(nèi)的所有元素與Ki異或,其計算公式為公式(13)。最后把每個元素的異或結(jié)果都替換原始元素。
例如,假設(shè)W={3,4,10,7,5,8,9,3,9,2},Q={5,7,7,2,8,7,2,1,8,4},α=5,則W1=3,β=mod(3,5)+1,β=4,此時滑塊長度為4,起始元素為W1。依次計算滑塊內(nèi)元素W1、W2、W3、W4與Q1異或的結(jié)果,如:。經(jīng)過這一輪循環(huán)W1、W2、W3、W4的值都發(fā)生了改變,此時W={6,1,15,2,5,8,9,3,9,2}。
步驟4步驟3的一輪操作結(jié)束后,Qi變?yōu)橄乱粋€元素?;瑝K向后移動。再次進行步驟3的操作。
步驟5重復(fù)步驟3、步驟4,Wi的值將一直發(fā)生變化,滑塊持續(xù)后移,直到i值達到m×n,此時將得到最終的一維密文序列W,然后將其按照行優(yōu)先的順序轉(zhuǎn)化為大小為m×n的密文圖像C。加密過程結(jié)束。需要注意的是,當滑塊的尾部超出序列時,僅對序列內(nèi)的滑塊元素進行計算。
下面將結(jié)合加密示意圖3、圖4,對每個加密步驟進行更為詳細直觀的描述。
2.4.1基于矩陣旋轉(zhuǎn)的像素位置全局置亂
假設(shè)明文圖像如圖3(a)所示,T={6,8,25,…,3},R={90°,180°,0°,…,270°}。
對于T1:
最終可求出:row1=2,col1=1,size1=4,R1=90°。此時T1對應(yīng)的子矩陣如圖3(a)灰色部分所示,該部分旋轉(zhuǎn)90°后,原圖像轉(zhuǎn)變?yōu)閳D3(b)。
圖3 T1=8旋轉(zhuǎn)加密
對于T2:
最終可求出:row2=2,col2=3,size2=3,R2=180°。此時,T2對應(yīng)的子矩陣如圖3(c)灰色部分所示,該部分旋轉(zhuǎn)180°后,原圖像轉(zhuǎn)變?yōu)閳D3(d)。
2.4.2 基于滑塊加密的像素值替代
假設(shè)圖像序列W={3,4,10,7,5,8,9,3,9,2},混沌序列Q={5,7,7,2,8,7,2,1,8,4},α=5對于W1,,其加密過程如圖4(a)所示。對于,其加密過程如圖4(b)所示。
圖4 基于滑塊加密的像素值替代
解密的過程也就是加密的逆過程。
第一階段的處理:像素值反替代操作。先取出密文圖像的第1個點的像素值C1,然后計算該點與混沌序列Q的第一個元素Q1異或的結(jié)果為該點解密后的值W1,然后計算 β=mod(W1,α),使第1個元素之后的β個元素均與Q1進行異或。對于第2個元素,先使其與Q2進行異或,的到原始的W2,然后,將已解密的元素組合成新序列W′={W′1,W′2}。接下來繼續(xù)求后面元素的值。首先,使用加密的原理,計算W′2的加密結(jié)果,接著求出,然后使第2個元素之后的β′個元素均與Q2異或,替換原來的像素值。不斷重復(fù)上述步驟,直到i值達到m×n。此時的序列W是經(jīng)過全局置亂后的圖像對應(yīng)的一維圖像序列。
第二階段的處理:反全局像素位置置亂。首先,把第一階段處理得到的一維序列W按行優(yōu)先的順序轉(zhuǎn)化為大小為m×n的置亂矩陣A′,然后,計算下標序列T最后一個元素Tm×n的位置以及旋轉(zhuǎn)角度,使其對應(yīng)的子矩陣朝相反的方向旋轉(zhuǎn)同樣的角度,從后向前依次對序列Tm×n的所有元素對應(yīng)A′內(nèi)的子矩陣進行旋轉(zhuǎn),直到操作完T序列所有元素對應(yīng)的子矩陣。此時的矩陣則是明文圖像對應(yīng)的二維矩陣,從而就得到了經(jīng)過恢復(fù)的明文圖像A。
本文選取了大量的大小為256×256的灰度圖像進行測試,限于篇幅,僅給出經(jīng)典圖像Lena的加密結(jié)果作為代表性實驗數(shù)據(jù)。加密的初始密鑰x0=0.141 421 356 2,x′0=0.173 205 080 7,以 及 像 素 值 替 代 階 段 的 S′=0.223 606 797 7,K2=500。圖5(a)為原始圖像,圖5(b)為加密效果圖。
圖5 Lena加密前后圖像及直方圖
本文選擇像素點位置置亂階段混沌系統(tǒng)的初始值x0,像素點值替代階段的混沌迭代初始值x′0,以及控制參數(shù)S′為該加密算法的密鑰,這3個數(shù)值的取值范圍都是0至1的任意浮點數(shù)。若不去考慮實際的限制條件,這兩個值均可以取小數(shù)點后面的任意位數(shù)??紤]到實際存儲的話,每個雙精度數(shù)據(jù)最多都可以保留16位小數(shù)。那么本文的加密算法可以使密鑰空間達到1048,如此大的密鑰空間,通過暴力破解的方法是無法還原圖像的。
3.3.1 直方圖分析
直方圖可以有效地衡量加密算法對原始明文圖像加密的效果。對Lena進行加密,直接觀察圖6(a)原始圖像的直方圖,灰度值分布不均勻,可以很明顯看出明文圖像的像素分布特征。而圖6(b)則表明加密后密文圖像的灰度值分布比較平坦,很好地隱藏了原始圖像的信息。
本文通過計算密文圖像直方圖的方差來衡量直方圖的均勻性。式(14)為直方圖方差計算公式[13]:
其中,Z是直方圖像素值向量,且Z={z1,z2,z3,…,z256},zi和zj分別是灰度值為i、j的像素點的個數(shù)。
直方圖方差越小,表明加密圖像的像素點灰度值均勻性越高。本文對圖7的4張圖片進行加密,并計算出明文和密文圖像的直方圖方差,實驗結(jié)果由表1所示,其中后3列分別為原始圖像、加密圖像,以及Yannick等人在文獻[14]提出算法的密文圖像的直方圖方差??梢钥闯?,該算法密文圖像的直方圖方差遠低于明文圖像的直方圖方差,且優(yōu)于文獻[14]算法對應(yīng)密文圖像直方圖的方差。
圖6 灰度直方圖
圖7 用于測試的原始圖像
表1 明文和密文圖像直方圖方差
本文對比相同的明文圖像由兩個不同密鑰加密所產(chǎn)生密文圖像直方圖的方差,兩個方差值的接近程度將表示密鑰變化時密文圖像的均衡度。實驗數(shù)據(jù)如表2所示,對于同一密鑰集,僅改變其中的一個密鑰,所得到密文圖像直方圖的方差變化很小,由此可知該加密算法是有效的。
表2 不同密鑰密文圖像直方圖方差
3.3.2相鄰像素相關(guān)性分析
相鄰像素的相關(guān)性也是用來衡量一個加密算法性能的重要指標。以Lena圖像為例,對加密后圖像的水平,垂直和對角3個方向隨機選取5000對相鄰像素點,使用公式(18)計算其相關(guān)性系數(shù)。
本文也給出了文獻[15-17]實驗仿真結(jié)果進行比照,對比結(jié)果如表3所示。根據(jù)表3的結(jié)果可以看出,原始的明文圖像相鄰像素點之間的相關(guān)性很強,而密文圖像相鄰像素點之間幾乎沒有任何相關(guān)性。同時,本文密文相鄰像素點相關(guān)性遠低于其他方案的密文相鄰像素點相關(guān)性,這也說明該算法明文圖像的統(tǒng)計特征已經(jīng)擴散到隨機密文圖像中,而且加密效果更優(yōu)。
表3 相鄰像素相關(guān)性系數(shù)對比分析
同時,本文分別從明文圖像和密文圖像隨機抽取水平方向上1 000組相鄰像素點,根據(jù)其像素值繪制出其像素值關(guān)系圖,如圖8所示。從圖8(a)中可以看出,明文圖像水平相鄰像素點的像素值是非常接近的,其相關(guān)性系數(shù)接近于1;從圖8(b)則可以看出該算法最終生成的密文圖像,其水平相鄰像素點的像素值差別顯著,相關(guān)性幾乎為0??梢?,本文算法能夠較好地破壞相鄰像素點之間的相關(guān)性,使得密文圖像具有了更好的隨機分布特性。
3.4.1 密鑰敏感性分析
圖8 相鄰像素相關(guān)性
密鑰敏感性是指對于同一個密文圖像,解密時,只要密鑰發(fā)生極其細微的改變,也將會產(chǎn)生兩個完全不同的明文圖像。本實驗再次設(shè)置原始初始密鑰x′0值為0.254 398 745 945 520。使用該密鑰可以得到圖像9(a)。此時如果把該初始密鑰改變?yōu)?.254 398 745 945 521,其他參數(shù)保持不變。再次進行解密。則可以得到最終的結(jié)果為圖9(b)。從實驗中可以看出,即使把密鑰進行10-15的細微改變,也無法得到正確的原始圖像。同理,把其中的任意參數(shù)作細微改變都會達到上面的效果。由此可知,該加密算法對密鑰有較高的敏感性。
圖9 密鑰敏感性分析
3.4.2明文敏感性
密文圖像對明文的敏感性越高,算法愈能抵抗包括差分攻擊在內(nèi)的選擇明文攻擊。當攻擊者偶然獲得了加密工具的使用機會,此時他可以選擇一些較為特殊的明文圖像,并以此得到與之對應(yīng)的密文圖像。通過對比這些明密文圖像序列,可以推算出等價的“明文—密文”變換方式,從而實現(xiàn)了算法的破解?,F(xiàn)有方案中,基于“置亂—替代”結(jié)構(gòu)的混沌圖像加密,常用的攻擊方法就是選擇明文攻擊。一個比較通用的方法是,選擇一個像素值均為100的大小與待解密圖像一致的圖像作為明文圖像,依次改變該圖像的每個像素點的值,然后對其進行加密。通過追蹤密文圖像像素值的變化規(guī)律,攻擊者可以輕易地推算出“明文—密文”像素點的對應(yīng)關(guān)系,從而也就成功破解出了待解密圖像所對應(yīng)的原始圖像。文獻[7]“像素位置與比特雙重置亂的圖像混沌加密算法”使混沌系統(tǒng)的控制參數(shù)與原圖像像素點之和聯(lián)系起來。此時無法追蹤一個像素點的值,因為當一個像素點的值發(fā)生改變時,像素點之和必然發(fā)生改變,從而整個混沌加密序列也發(fā)生了變化,最終導(dǎo)致密文圖像所有像素點都發(fā)生改變。但是其忽略了如果同時追蹤兩個像素點的值,一個像素點的值加1,另一個點的值減1,那么最終的和不會發(fā)生改變,此時通過每組追蹤兩個點的方式,仍可以推算出“明文—密文”像素點的對應(yīng)關(guān)系。
上述的攻擊方法在本文的加密算法中是行不通的,因為本文采用了MD5消息摘要算法為圖像產(chǎn)生唯一的32位的字符串序列,再把字符串序列轉(zhuǎn)換為對應(yīng)的十進制數(shù),最后轉(zhuǎn)換為[0,1]之間的數(shù)作為混沌序列的控制參數(shù)S。只要改變圖像序列的任意一個或多個像素點,得到的序列值一定是不同的。同時由于像素值替代階段,每個像素值都會影響后面若干個元素的下一次加密結(jié)果,這樣即使想通過定位中間密文來追蹤像素點位置,理論上講也是完全不可行的。同理,對于選擇密文攻擊,本文算法也有良好的抵御效果。
本文通過計算像素改變率(Number of Pixels Change Rate,NPCR)和歸一化像素值平均改變強度(Unified Average Changing Intensity,UACI)來衡量加密算法對明文圖像的敏感性強度[18]。假設(shè)兩個圖像的明文圖像只有一個像素點(i,j)的值不同,對應(yīng)的像素值分別為A1(i,j)和A2(i,j)。NPCR和UACI的計算公式為:
其中,M、N分別為圖像像素的行數(shù)和列數(shù);通常NPCR與UACI比較理想的數(shù)值[19]是NPCRE=99.609 4%和UACIE=33.463 5%。本文實驗中任取一點對其像素值作微小的改變,如位置為(102,15)的像素點,將該點的像素值由95改變?yōu)?6,根據(jù)公式(20)、(21)可以計算出NPCR=99.609 3%,UACI=33.433 4%??梢钥闯觯瑢嶒灲Y(jié)果與理想數(shù)值比較接近,明文圖像的任意像素點值發(fā)生微小的變化,都會使密文圖像發(fā)生顯著改變。因此,該加密算法具有較強的明文敏感性,同時也能有效地抵抗差分攻擊。
針對一些圖像加密算法無法有效的抵御差分攻擊的特點,本文提出了一種改進的圖像加密算法。該算法主要有三個特點:第一,利用MD5哈希函數(shù)計算混沌系統(tǒng)的控制參數(shù),保證加密的密鑰序列與明文圖像本身緊密關(guān)聯(lián),使選擇明文攻擊失效。第二,根據(jù)密鑰序列的數(shù)值,不斷旋轉(zhuǎn)明文圖像不同位置的子矩陣塊以打亂明文圖像所有像素點的位置,最大程度地降低了明文像素點的相關(guān)性。第三,該算法定義了滑塊,使每個點的加密結(jié)果,都會影響滑塊內(nèi)的所有元素的加密結(jié)果,從而使圖像像素點之間的關(guān)系更加緊密。使攻擊者無法通過標注像素點來破解密鑰序列,進一步提高了算法抵抗選擇明文攻擊的能力。通過實驗仿真證明,本文提出的加密算法有較大的密鑰空間。直方圖分析和像素點相關(guān)性分析表明,該算法能夠較好地實現(xiàn)破壞相鄰像素點之間的相關(guān)性,使得密文圖像具有了更好的隨機分布特性,可以有效地抵抗統(tǒng)計分析攻擊。同時,該算法也具有較高的明文敏感性和密鑰敏感性,能夠有效地抵抗差分攻擊、選擇明文攻擊和選擇密文攻擊。最終實驗表明,本文算法不僅加密效果好,同時也有較高的安全性。