謝國(guó)波,朱 柳
XIE Guobo,ZHU Liu
廣東工業(yè)大學(xué) 計(jì)算機(jī)學(xué)院,廣州 510003
School of Computer,Guangdong University of Technology,Guangzhou 510003,China
隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,人們的日常工作以及生活學(xué)習(xí)開(kāi)始越來(lái)越依賴(lài)于網(wǎng)絡(luò)。大量信息開(kāi)始以數(shù)字形式進(jìn)行傳播和存儲(chǔ)。其中,圖片信息因其直觀、生動(dòng)形象的表現(xiàn)形式,受到了人們的喜愛(ài)與推廣。與此同時(shí),由于互聯(lián)網(wǎng)的開(kāi)放環(huán)境,網(wǎng)絡(luò)上傳輸?shù)囊恍┥婕皞€(gè)人隱私、他人利益、甚至國(guó)防軍事等的數(shù)字圖像信息必須采取相關(guān)密碼學(xué)算法可靠加密處理后再進(jìn)行傳播。數(shù)字信息傳播的安全問(wèn)題一直受到信息安全或者相關(guān)領(lǐng)域?qū)W者們的廣泛關(guān)注,是一個(gè)值得深入并長(zhǎng)期研究的課題。
圖像信息由于自身數(shù)據(jù)相關(guān)性高、數(shù)據(jù)冗余度強(qiáng)、數(shù)據(jù)量大等特點(diǎn),傳統(tǒng)的針對(duì)文本信息的密碼學(xué)算法,比如非對(duì)稱(chēng)加密算法(RSA)、數(shù)據(jù)加密標(biāo)準(zhǔn)(DES)、國(guó)際數(shù)據(jù)加密算法等,并不完全適合圖像加密。而研究結(jié)果表明,混沌[1-2]因其初值敏感性、無(wú)周期性、偽隨機(jī)性、混沌序列的遍歷性等密碼學(xué)特性,使其大量被應(yīng)用于圖像加密中[3-6]。目前基于混沌圖像加密算法普遍都采用像素位置的置亂或像素值替換或者兩者綜合。一些具有代表性的方法,如基于一次一密、位排列、DNA規(guī)則、數(shù)學(xué)模型等的混沌圖像加密算法也同時(shí)被學(xué)者研究公開(kāi)。
文獻(xiàn)[7]提出的混沌圖像加密算法基于感知模型,但是由于其密文的不均勻分布,導(dǎo)致該算法不足以抵抗統(tǒng)計(jì)攻擊。文獻(xiàn)[8]提出的圖像加密算法基于比特和高維混沌系統(tǒng),雖然該方法滿(mǎn)足抵抗統(tǒng)計(jì)特征攻擊的要求,但是該算法加密所需代價(jià)大,效率也相應(yīng)降低。文獻(xiàn)[9]提出的混沌圖像算法采用一次一密鑰,該算法雖然形式簡(jiǎn)單并且具有較高效率,但是不足以抵抗選擇明文(密文)攻擊。文獻(xiàn)[10]提出的混沌圖像加密算法基于DNA序列,然而該算法的加密后像素點(diǎn)相關(guān)性較強(qiáng),存在較大的方差。文獻(xiàn)[11-12]中鄒建成、宋莉莉等人對(duì)廣義Gray碼及其在數(shù)字圖像加密中的應(yīng)用進(jìn)行了分析闡述,證明了廣義Gray碼在圖像加密算法中的應(yīng)用前景。
本文提出了雙混沌和廣義Gray碼相融合的圖像加密算法,通過(guò)該算法進(jìn)行加密的密文圖像不僅與明文緊密關(guān)聯(lián),也起到了良好的置亂擴(kuò)散效果。實(shí)驗(yàn)結(jié)果表明,本算法具有良好的統(tǒng)計(jì)性能、足夠大的密鑰空間、明文(密文)敏感等優(yōu)良性能。
本文加密算法的整體原理如圖1(a)所示。
圖1 加密/解密流程
2.1.1 Kent混沌映射
Kent映射是一個(gè)性能很好的混沌系統(tǒng),其映射關(guān)系為:
式(1)中,S為混沌系統(tǒng)的控制參數(shù)。當(dāng)x∈(0,1),S∈(0,1)時(shí),式(1)具有一個(gè)正的Lyapunov指數(shù),此時(shí)Kent映射將處于混沌狀態(tài),由此初始條件x0在Kent映射中產(chǎn)生的序列具有很好的自相關(guān)性、互相關(guān)性和平衡性等偽隨機(jī)性能。同時(shí),Kent映射對(duì)初始條件極為敏感,即使初始條件發(fā)生極其微小的變化,其產(chǎn)生的隨機(jī)序列也將會(huì)完全不同。利用這一特性,Kent映射被良好地運(yùn)用在混沌圖像加密中。
2.1.2 Logistic混沌映射
Logistic映射是一個(gè)經(jīng)典的一維離散混沌動(dòng)力系統(tǒng),它的誕生來(lái)源于人口統(tǒng)計(jì),其具體規(guī)律可用如下數(shù)學(xué)公式(2)定義:
其中,μ為系統(tǒng)非線(xiàn)性強(qiáng)度的參數(shù),取值范圍為0≤μ≤4;k為混沌系統(tǒng)的迭代次數(shù);xk為L(zhǎng)ogistic混沌系統(tǒng)的初始值,取值范圍為0<xk<1。當(dāng)3.569≤μ≤4,該系統(tǒng)映射處于混沌狀態(tài),此時(shí)對(duì)初值的微小改變都會(huì)導(dǎo)致系統(tǒng)產(chǎn)生完全不同的非收斂、非周期性的序列。
2.1.3 廣義Gray碼
(1)對(duì)于任意的非負(fù)整數(shù)u,其二進(jìn)制碼記為u=(upup-1…u0)q,令
其中i=1,2,…,p,則可得到一個(gè)二進(jìn)制表示的整數(shù)g(u)=(gpgp-1…g0)q。
上述變換稱(chēng)為Gray變換g(u)稱(chēng)為u的Gray碼,其中運(yùn)算“⊕”為模2加法。
(2)對(duì)于非負(fù)整數(shù)u,其q進(jìn)制碼記為u=(upup-1…u0)q,定義如下變換:
其中,q≥2為正整數(shù);aij為整數(shù),i,j=1,2,…,p-1。當(dāng)系數(shù)矩陣的行列式|(aij)|與q互為素?cái)?shù)時(shí)候,則該變換符合u的廣義Gray變換,g(u)=(gpgp-1…g0)q稱(chēng)為廣義Gray碼。
本文所提出的數(shù)字圖像加密基于典型的“置亂-替換”結(jié)構(gòu),首先對(duì)原始圖像進(jìn)行分塊,接著通過(guò)Kent映射進(jìn)行重排列,然后再次利用Kent映射產(chǎn)生一維混沌序列對(duì)重排列后的圖像進(jìn)行全局位置置亂,接下來(lái)再采用Logistic映射和廣義Gray碼對(duì)位置置亂后的圖像像素值進(jìn)行替換完成整個(gè)加密過(guò)程。
2.2.1 圖像的位置置亂
像素位置置亂的目的是通過(guò)打亂圖像像素點(diǎn)原始位置來(lái)破壞相鄰像素點(diǎn)之間的相關(guān)性。其具體的實(shí)施步驟如下:
首先對(duì)圖像進(jìn)行分塊,假設(shè)待加密圖像I的大小為a×b,分塊的具體步驟為:
步驟1將圖像I的像素矩陣按照行和列進(jìn)行等長(zhǎng)劃分,設(shè)置劃分的大小分別為j和k,其中:
具體的劃分規(guī)則如下:
規(guī)則1當(dāng)mod(a,j)=0,mod(b,k)=0時(shí),圖像I則被劃分為j×k塊,每塊的大小為
規(guī)則2當(dāng)mod(a,j)≠0,mod(b,k)=0時(shí),圖像I則被劃分為兩類(lèi)不同的塊,一類(lèi)塊大小為,另一類(lèi)塊的大小為
規(guī)則3當(dāng)mod(a,j)=0,mod(b,k)≠0時(shí),圖像I則被劃分為兩類(lèi)不同的塊,一類(lèi)塊大小為,另一類(lèi)
規(guī)則4 當(dāng)mod(a,j)≠0,mod(b,k)≠0時(shí),圖像I則被劃分為四類(lèi)不同的塊,一類(lèi)塊大小為一類(lèi)塊的大小為,一類(lèi)塊的大小為最后一塊的大小為mod(a,j)×mod(b,k)。
步驟2對(duì)分塊進(jìn)行重新的組合排列。
首先將Kent映射迭代1000次以消除暫態(tài)效應(yīng),從第1001次開(kāi)始記錄產(chǎn)生長(zhǎng)度為j×k(用規(guī)則1的分塊個(gè)數(shù)進(jìn)行示例說(shuō)明)的混沌序列H={h1,h2,…,hj×k}。對(duì)混沌序列進(jìn)行升序排列,記錄排序后的各元素在原始序列H中的位置,生成新的序列利用序列H′對(duì)分塊進(jìn)行置亂。
假設(shè)分塊為B={b1,b2,…,bj×k}。其置亂規(guī)則按照如下公式:
置亂前后如圖2所示。然后對(duì)分塊后圖像的像素點(diǎn)進(jìn)行全局置亂。
圖2 分塊前后的排列對(duì)比
步驟1對(duì)待加密的圖像明文按照行(列)優(yōu)先的順序掃描,轉(zhuǎn)化成為長(zhǎng)度為a×b的一維序列I={i1,i2,…,im×n}。
步驟2對(duì)明文圖像的像素值sum進(jìn)行求和運(yùn)算,分別運(yùn)用式(7)和式(8)求出混沌系統(tǒng)的混沌參數(shù)S和混沌系統(tǒng)的迭代次數(shù)c:
步驟3結(jié)合步驟2得出的混沌參數(shù)S,對(duì)混沌系統(tǒng)設(shè)置一個(gè)初始值x1,將參數(shù)S和初始值x1代入到式(1)中。Kent映射迭代c次以消弱暫態(tài)效應(yīng)的不良影響。接下來(lái)再迭代a×b次產(chǎn)生一個(gè)長(zhǎng)度為a×b的混沌序列L={l1,l2,…,la×b}。運(yùn)用排序算法對(duì)混沌序列進(jìn)行升序(降序)排列L′={l′1,l′2,…,l′a×b},計(jì)算序列L中的各值在序列L′中的位置,從而生成一個(gè)記錄順序序列中各元素在原序列L中新的位置的序列w={w1,w2,…,wa×b}。
步驟4利用序列w來(lái)置亂明文圖像I,置亂的依存規(guī)則為l′i=lwi,置亂后的序列記錄為:
2.2.2 像素值的替換
此階段使用Logistic映射和二進(jìn)制的廣義Gray碼對(duì)位置置亂后的圖像I′進(jìn)行像素值替換。
步驟1設(shè)定混沌系統(tǒng)的初始值x3、x4,以及系統(tǒng)參數(shù)λ。將上述系統(tǒng)參數(shù)和初始值代入Logistic映射中,迭代1000次以消除暫態(tài)效應(yīng),從第1001次開(kāi)始進(jìn)行記錄,生成兩個(gè)長(zhǎng)度大小為a×b的混沌序列:
M={m1,m2,…,ma×b},N={n1,n2,…,na×b}
步驟2將序列M中的各序列值代入式(9)進(jìn)行轉(zhuǎn)化,讓其值域控制在[0,255]之間,新產(chǎn)生的序列更改為T(mén)={t1,t2,…,ta×b}。
步驟3對(duì)序列N中的序列值進(jìn)行升序(降序)排列,生成序列N′={n′1,n′2,…,n′a×b},記錄下序列N′中的值在原始序列N中的下標(biāo)值,生成新的序列Y={y1,y2,…,ya×b}。
步驟4將位置置亂后的圖像各像素值I={i1,i2,…,ia×b}與序列T進(jìn)行異或操作,其異或公式如下:
步驟5將步驟4異或后所得的像素點(diǎn)的像素值按照廣義Gray碼的替換公式(11)和(12)進(jìn)行替換。當(dāng)u=(un-1un-2…u0)2時(shí),其對(duì)應(yīng)廣義Gray碼。
通過(guò)變換產(chǎn)生一個(gè)新的二進(jìn)制編碼:
g=(gn-1gn-2…g0)2
以上步驟即為加密的全部過(guò)程。
解密過(guò)程即為加密過(guò)程的逆過(guò)程,依次對(duì)替換和置亂階段進(jìn)行逆向操作處理。
首先,將密文圖像V按照行(列)優(yōu)先進(jìn)行展開(kāi)生成一維序列,將序列中的各個(gè)點(diǎn)的像素值按照廣義Gray的生成規(guī)則進(jìn)行運(yùn)算得到序列V′,再對(duì)序列V′按照公式進(jìn)行異或,得到位置置亂后的序列。最后對(duì)置亂后的序列進(jìn)行反置亂即可得到明文序列P,將得到的一維序列轉(zhuǎn)化為二維矩陣即為加密前的明文圖像I。
本文仿真過(guò)程采用的圖像為經(jīng)典的lena灰度圖像,其大小為256×256。其中加密系統(tǒng)的初始密鑰有Kent映射的初始值x1=0.3467832426,x2=0.5467832426和Logistic混沌映射的初始值x3=0.2467832426,x4=0.4467832426。其中Kent映射的控制參數(shù)由明文圖像自身決定,Logistic映射的控制參數(shù)自行進(jìn)行設(shè)定,本次仿真實(shí)驗(yàn)將其設(shè)置為λ=3.9467832426。其加密前后的效果圖對(duì)比如圖3。
圖3 明文與密文圖像
3.2.1 直方圖分析
直方圖即為圖像的灰度值分布圖,它所展示的是圖像像素值的分布情況。
圖4的灰度直方圖中展示的分別為原始圖像和加密后圖像的直方圖。從圖4(a)中可以明顯發(fā)現(xiàn),加密前的直方圖分布起伏較大且不均勻分布,而運(yùn)用本文算法進(jìn)行加密后的直方圖圖4(b)則呈現(xiàn)均勻分布。
為了進(jìn)一步確定算法密文直方圖均勻性,采用式(13)計(jì)算并分析。其中z是密文圖像各灰度級(jí)別下的像素統(tǒng)計(jì)值,(zi,zj)分別是灰度值為i和j的像素統(tǒng)計(jì)值。采用不同密鑰對(duì)圖像進(jìn)行加密處理,然后對(duì)產(chǎn)生的密文計(jì)算方差。計(jì)算所得的方差值越小,則表示生成的密文直方圖越均勻,所產(chǎn)生的直方圖在直觀上越平滑。
表1 密文直方圖的方差
圖4 灰度直方圖
本文選取原始密鑰(x1,S,x2,k,μ)作為初始密鑰key1,通過(guò)改變?cè)济荑€中的某一個(gè)參數(shù)值來(lái)分別產(chǎn)生多張密文。實(shí)驗(yàn)過(guò)程中另外引入256×256的Cameraman圖像與Lena圖像進(jìn)行對(duì)照。與文獻(xiàn)[5]相比,結(jié)果如表1所示。通過(guò)對(duì)以上不同的密文圖像的實(shí)驗(yàn)分析,發(fā)現(xiàn)加密后的密文平均各灰度級(jí)的像素?cái)?shù)目在70,方差在5000上下,而其明文圖像的方差值則為密文的10倍以上。
3.2.2 相鄰像素相關(guān)性分析
對(duì)加密前后的圖像分別選取2200組的相鄰像素點(diǎn)來(lái)進(jìn)行分析,公式如下:
其中,rx,y為相鄰像素點(diǎn)的相關(guān)系數(shù);x和y分別代表相鄰像素點(diǎn)像素值。將選取的2200組明文和密文的像素點(diǎn)運(yùn)用關(guān)系圖表示出來(lái)。原始圖像圖5(a)顯示出來(lái)的像素點(diǎn)表明水平相鄰點(diǎn)的像素值比較接近。密文圖像圖5(b)顯示出來(lái)的像素點(diǎn)表明水平相鄰點(diǎn)的像素值差異明顯。運(yùn)用公式分別對(duì)明文圖像和密文圖像的水平、垂直、對(duì)角所有點(diǎn)的像素值相關(guān)性進(jìn)行計(jì)算,并且與文獻(xiàn)[13-15]進(jìn)行比較,其具體結(jié)果如表2所示。
圖5 明文/密文的相關(guān)性
表2 密文圖像相關(guān)性系數(shù)
對(duì)比加密前后相關(guān)性系數(shù),加密后的圖像的像素點(diǎn)相關(guān)性接近于0,相鄰元素之間基本沒(méi)有相關(guān)性。而明文圖像的相關(guān)性接近于1,說(shuō)明該算法很好地抵抗了統(tǒng)計(jì)分析,具有良好的加密效果。
經(jīng)典的攻擊方法有已知明文攻擊、唯密文攻擊、選擇明文(密文)攻擊[16-17]。
明文攻擊是指在獲得明文的情況下破解算法的概率。唯密文攻擊是指僅知道密文的情況下破解算法。而選擇明文(密文)攻擊所指的是攻擊者通過(guò)選擇一組標(biāo)定的明文(密文),通過(guò)對(duì)該加密系統(tǒng)的使用來(lái)同步獲取對(duì)照的密文(明文),對(duì)密文進(jìn)行分析獲取中間密鑰,通過(guò)獲得的中間密鑰從而完成對(duì)明文的解密。
目前混沌加密算法普遍采用的是基于位置置亂和像素替換的加密過(guò)程。由于Logistic映射參數(shù)空間有限,而且在計(jì)算機(jī)有限精度下容易出現(xiàn)動(dòng)力學(xué)退化,因而會(huì)被破解,而針對(duì)該過(guò)程所常用的攻擊方法就是選擇明文和選擇密文攻擊。這里最常見(jiàn)的攻擊思路為選擇一個(gè)與密文圖像相同大小的像素值全部為0的圖像進(jìn)行破解得到中間密鑰。然后選取該圖像的某個(gè)像素點(diǎn)進(jìn)行標(biāo)記,通過(guò)對(duì)標(biāo)記像素點(diǎn)的追蹤記錄,獲取該像素點(diǎn)的初始位置,破解明文圖像。
但是以上破解方法針對(duì)本文所描述算法是不可行的,在像素的位置置亂階段,無(wú)論是分塊階段還是全局置亂階段,其Kent混沌映射的參數(shù)都是由明文圖像的像素總和Sum和像素大小a、b共同決定的,而上述方法中所運(yùn)用的圖像像素值為全0,從而使得其產(chǎn)生的混沌序列也不盡相同,無(wú)法取得映射參數(shù),因此直接導(dǎo)致的結(jié)果就是無(wú)法獲得中間密文。另外,在像素值替換階段才采用Logistic映射,利用預(yù)設(shè)的初始密鑰x3,通過(guò)x3產(chǎn)生的混沌序列進(jìn)行排序生成新的下標(biāo)序列,利用該下標(biāo)序列進(jìn)行像素值之間的異或操作。在未獲得準(zhǔn)確x3的前提下,攻擊者是無(wú)法確定中間密文的,因此對(duì)于選擇密文攻擊無(wú)效。綜上所述,本文設(shè)計(jì)的圖像加密算法能夠很好地抵抗以上攻擊方式。
3.4.1 密鑰敏感性分析
密鑰的敏感性指的是當(dāng)密鑰發(fā)生極其微小變化時(shí),對(duì)圖像的加密(解密)也會(huì)產(chǎn)生顯著影響。在對(duì)明文圖像進(jìn)行加密時(shí),將Kent映射或者Logistic映射的初始值進(jìn)行微小改變,固定其他的參數(shù)和系統(tǒng)初始值,最終解密也無(wú)法獲得正確的明文圖像。實(shí)驗(yàn)仿真中,將初始值x1=0.3467832426變?yōu)閤1=0.3467832427。圖6(a)為解密后的圖像。同等情況下,改變x3,圖6(b)為解密圖像。由上可知,該加密算法具有良好的密鑰敏感性。
圖6 改變密鑰后的解密圖像
3.4.2 明文敏感性分析
明文的敏感性指的是明文的變化對(duì)密文的影響比重,它是衡量一個(gè)算法抵抗差分攻擊性能的重要指標(biāo)。在常用的攻擊方法中,廣泛采用的是在微小改變明文的情況下來(lái)分析密文變化特征,從而找出規(guī)律破解密文。本算法由于在密鑰的生成過(guò)程中引入了像素和以及圖像二維矩陣的行數(shù)和列數(shù),使得密鑰與明文密不可分。
常用像素改變率(NPCR)和歸一化平均改變幅度(UACI)來(lái)衡量密文對(duì)明文的敏感性。令I(lǐng)1和I2分別為兩個(gè)明文圖像加密后的密文圖像,其中I1是圖像I的加密圖像,I2是圖像I在某個(gè)像素點(diǎn)發(fā)生變化后的密文。設(shè)兩幅密文圖像在相同位置(i,j)的像素值分別為p1(i,j)和p2(i,j)。當(dāng)p1(i,j)=p2(i,j)時(shí),定義H(i,j)=0;若p1(i,j)≠p2(i,j),定義H(i,j)=1。
NPCR與UACI的計(jì)算公式分別為:
根據(jù)上述原則,在lena圖像中任取一點(diǎn)對(duì)其像素值進(jìn)行改變,例如在位置(11,29)處,將其值由47變?yōu)?8,根據(jù)式(18)和(19)可以計(jì)算出NPCR=99.61%,UACI=33.46%。因此,該算法滿(mǎn)足密文圖像對(duì)明文圖像微小變化的敏感性,足以抵抗攻擊者的差分攻擊。
足夠大的密鑰空間是用來(lái)評(píng)價(jià)一個(gè)算法能否抵抗窮舉攻擊的基本標(biāo)準(zhǔn)。在本文所描述的算法中,雙混沌系統(tǒng)的迭代初始值以及Logistic映射的參數(shù)都可以用來(lái)作為密鑰。在64 bit計(jì)算機(jī)中,每個(gè)double類(lèi)型的有效位能達(dá)到16位。這樣,即使攻擊者采取每秒億個(gè)密鑰進(jìn)行窮舉攻擊,所需要的時(shí)間也遠(yuǎn)遠(yuǎn)導(dǎo)致其不可實(shí)現(xiàn)性。如果再把迭代次數(shù)、分塊等加入密鑰中,密鑰的空間將會(huì)更加巨大,所需要的時(shí)間也更長(zhǎng)。因此,本文算法的密鑰足以抵抗窮舉攻擊。
本文提出的是雙混沌和廣義Gray碼相融合的圖像加密算法,該算法采取經(jīng)典的置亂-替換結(jié)構(gòu)進(jìn)行加密。本文算法不僅保留了“置亂-替換”算法原本的優(yōu)點(diǎn),同時(shí)也采取相應(yīng)技巧避免受非法攻擊。本文算法所具有的特點(diǎn)如下:
(1)在進(jìn)行像素置亂過(guò)程中,不同于傳統(tǒng)大多數(shù)算法,本文算法首先對(duì)圖像進(jìn)行分塊處理,然后再對(duì)重排列后的圖像進(jìn)行全局置亂,使得算法置亂效果更好。
(2)Kent映射的系統(tǒng)參數(shù)由明文圖像的自身特性來(lái)決定。因此不同的明文圖像所采取的控制參數(shù)也不盡相同,從而生成的混沌序列也完全不同,使得算法具有抵抗選擇明文(密文)能力。
(3)利用Logistic生成的混沌序列,同時(shí)采取對(duì)應(yīng)的數(shù)學(xué)公式來(lái)對(duì)像素值進(jìn)行擴(kuò)散操作,不僅使得像素值的替換具有較好隨機(jī)性,同時(shí)也一定基礎(chǔ)上增加了系統(tǒng)抗攻擊的能力。
(4)利用廣義Gray進(jìn)行二次擴(kuò)散,進(jìn)一步提高加密圖像的安全性。
實(shí)驗(yàn)仿真結(jié)果表明,本文算法不僅具有良好的加密效果,而且具備較好的安全性。