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