徐子同,高 濤,于正同,時(shí)培燕
(長(zhǎng)安大學(xué) 信息工程學(xué)院,陜西 西安 710054)
隨著網(wǎng)絡(luò)媒體的快速發(fā)展,越來越多的圖像數(shù)據(jù)通過公共網(wǎng)絡(luò)進(jìn)行傳輸,保證信息傳輸?shù)陌踩灾陵P(guān)重要。一種可以保證圖像完整性的加密方式是將明文圖像轉(zhuǎn)為類噪聲圖像再傳輸,這種信息隱藏方式提高了傳輸?shù)陌踩裕壳?,越來越多的圖像加密算法被提出。由于圖像的特殊性,例如數(shù)據(jù)容量大、像素間的相關(guān)性高以及數(shù)據(jù)冗余等,傳統(tǒng)的數(shù)據(jù)加密算法如DES、AES以及IDEA[1-2]等不適用于圖像加密。近些年,各種類型的加密算法被大量提出[3-14],例如,基于混沌的圖像加密[3-6]、基于壓縮感知的圖像加密[7-8]、基于遺傳算法的圖像加密等等。離散型Hopfield神經(jīng)網(wǎng)絡(luò)是一種穩(wěn)定的反饋型的神經(jīng)網(wǎng)絡(luò),文中使用三階神經(jīng)網(wǎng)絡(luò)系統(tǒng),使得圖像加密的安全性得到了顯著提升。
圖像加密的主要思想是改變圖像像素值的大小以及改變像素值的位置,即對(duì)圖像進(jìn)行擴(kuò)散和置亂。在傳統(tǒng)的加密方案中,置亂過程和擴(kuò)散過程是分開進(jìn)行的,攻擊者可以通過分開攻擊來破解加密方案,這種加密方法很可能會(huì)被選擇明文攻擊。其次,根據(jù)密鑰是否明文相關(guān),加密算法可以分為兩類:第一,加密過程中密鑰與明文圖像沒有關(guān)聯(lián),是非一次一密的加密方案。此方案中,由于明文圖像與密鑰相互獨(dú)立,不同的明文圖像加密用到的密鑰流是唯一確定的,因此,這種類型的加密方案容易被選擇明文攻擊。例如文獻(xiàn)[15]已經(jīng)被攻擊[16],攻擊者選取一幅像素值全為零的特殊圖像作為明文圖像,加密后得到密文圖像,通過對(duì)比明文圖像和密文圖像可以得到加密過程中的兩個(gè)密鑰流,再通過三次異或操作得到密鑰圖像,完成對(duì)加密方案的攻擊。第二,加密過程中密鑰與明文圖像相關(guān)聯(lián),是一次一密的加密方案。此方案中,由于密鑰與明文相關(guān)聯(lián),并且是一次一密的加密方案,因此,每一幅不同的明文圖像加密后都將產(chǎn)生與之對(duì)應(yīng)的一個(gè)密鑰,并且該密鑰需要與方案中其他的固定密鑰一起傳送給解密方才能完成解密。
為了克服以上加密方案的缺點(diǎn),該文提出了一種與明文相關(guān)的通道關(guān)聯(lián)的同時(shí)置亂擴(kuò)散加密方案。在該加密方案中,密鑰流的產(chǎn)生與明文圖像相關(guān),不同像素和的明文圖像將產(chǎn)生不同的密鑰流,但是加密方案中用到的初始密鑰是固定的,解密方只需要得到固定的密鑰就可以解密圖像。這種方案解決了與明文無關(guān)的加密方案容易被選擇明文攻擊的缺點(diǎn),并且采用同時(shí)置亂擴(kuò)散的方式提高算法的安全性,使得加密算法能夠更好地抵抗選擇明文攻擊。
Hopfield神經(jīng)網(wǎng)絡(luò)最早是由美國(guó)物理學(xué)家Hopfield于1982年提出的[17]。它主要用于模擬生物神經(jīng)網(wǎng)絡(luò)的記憶機(jī)制。Hopfield神經(jīng)網(wǎng)絡(luò)是一種全連通的神經(jīng)網(wǎng)絡(luò)。三階神經(jīng)網(wǎng)絡(luò)具體形式如下:
(1)
(2)
為了確認(rèn)其偽隨機(jī)性,對(duì)Hopfield神經(jīng)網(wǎng)絡(luò)進(jìn)行了NIST隨機(jī)性測(cè)試[18],當(dāng)p值大于0.01時(shí),認(rèn)為它通過了測(cè)試。結(jié)果見表1。隨機(jī)性測(cè)試結(jié)果表明,基于權(quán)值矩陣的Hopfield混沌神經(jīng)網(wǎng)絡(luò)具有偽隨機(jī)性。
表1 NIST隨機(jī)性測(cè)試
該文所提出的圖像加密算法包括彩色圖像R、G、B三通道關(guān)聯(lián)的同時(shí)置亂和擴(kuò)散算法以及二次擴(kuò)散算法,加密過程中輸入明文圖像P,輸出密文圖像C;解密過程與之相反。假設(shè)圖像大小為M×N,加密過程具體步驟如下所述,加密流程框圖如圖1所示。
圖1 算法流程
為了更好地抵抗攻擊,該文提出了彩色圖像通道關(guān)聯(lián)的同時(shí)置亂擴(kuò)散算法,并且在加密過程中用到了明文圖像的有效信息,即使明文圖像只有1 bit的差別,加密后圖像也會(huì)大不相同。具體的加密過程如下:
(1)分別計(jì)算R、G、B三通道像素值的和,分別標(biāo)記為sum(R)、sum(G)、sum(B)。通過如下公式計(jì)算神經(jīng)網(wǎng)絡(luò)系統(tǒng)的初始值,其中c1、c2以及c3是外部密鑰:
(3)
其中,mod是取模運(yùn)算。
(2)將神經(jīng)網(wǎng)絡(luò)系統(tǒng)迭代1 000+M×N次,為了避免瞬態(tài)效應(yīng),將前1 000次的數(shù)值舍棄,得到序列:
(4)
明文圖像中每個(gè)通道的每一個(gè)像素值都有可能置換到本通道或另外兩個(gè)通道中新的位置上,并改變此像素本身的值。通過公式(4)產(chǎn)生的序列首先得到三個(gè)決定通道置亂位置的矩陣X1_1,X2_1以及X3_1:
(5)
其中,abs為取絕對(duì)值的操作。
進(jìn)而分別產(chǎn)生三個(gè)通道新的像素位置,具體過程如下:當(dāng)X1_1(i,j)=1時(shí),矩陣R中像素值R(i,j)和R(m,n)交換位置,再根據(jù)如下公式執(zhí)行擴(kuò)散操作改變像素R(i,j)的值:
R(i,j)=bitxor(R(i,j),R(m,n))
(6)
當(dāng)X1_1(i,j)=2時(shí),矩陣R中像素值R(i,j)和G(m,n)交換位置,根據(jù)如下公式執(zhí)行擴(kuò)散操作改變像素R(i,j)的值:
R(i,j)=bitxor(R(i,j),G(m,n))
(7)
當(dāng)X1_1(i,j)=3時(shí),矩陣R中像素值R(i,j)和B(m,n)交換位置,根據(jù)如下公式執(zhí)行擴(kuò)散操作改變像素R(i,j)的值:
R(i,j)=bitxor(R(i,j),B(m,n))
(8)
其中,像素值行位置m和列位置n計(jì)算如下:
m=1+mod((abs(X1(i,j)))×1014,M)
(9)
n=1+mod((abs(X1(i,j)+
abs(X2(i,j)))×1014,N)
(10)
當(dāng)R通道置亂擴(kuò)散結(jié)束后得到三個(gè)新的矩陣R_1,G_1,B_1。
當(dāng)X2_1(i,j)=1時(shí),矩陣G_1中像素值G_1(i,j)和G_1(m,n)交換位置,用如下公式執(zhí)行擴(kuò)散操作改變像素G_1(m,n)的值:
G_1(i,j)=bitxor(G_1(i,j),G_1(m,n))
(11)
當(dāng)X2_1(i,j)=2時(shí),矩陣G_1中像素值G_1(i,j)和R_1(m,n)交換位置,再根據(jù)如下公式執(zhí)行擴(kuò)散操作改變像素G_1(i,j)的值:
G_1(i,j)=bitxor(G_1(i,j),R_1(m,n))
(12)
當(dāng)X2_1(i,j)=3時(shí),矩陣G_1中像素值G_1(i,j)和B_1(m,n)交換位置,再根據(jù)如下公式執(zhí)行擴(kuò)散操作改變像素B_1(i,j)的值:
G_1(i,j)=bitxor(G_1(i,j),B_1(m,n))
(13)
其中,像素值行位置m和列位置n計(jì)算如下:
m=1+mod((abs(X2(i,j)))×1014,M)
(14)
n=1+mod((abs(X2(i,j)+
abs(X3(i,j)))×1014,N)
(15)
當(dāng)G通道置亂擴(kuò)散結(jié)束后得到三個(gè)新的矩陣R_2,G_2,B_2。
當(dāng)X3_1(i,j)=1時(shí),矩陣B_2中像素值B_2(i,j)和B_2(m,n)交換位置,再根據(jù)如下公式執(zhí)行擴(kuò)散操作改變像素B_2(i,j)的值:
B_2(i,j)=bitxor(B_2(i,j),B_2(m,n))
(16)
當(dāng)X3_1(i,j)=2時(shí),矩陣B_2中像素值B_2(i,j)和R_2(m,n)交換位置,再根據(jù)如下公式執(zhí)行擴(kuò)散操作改變像素B_2(i,j)的值:
B_2(i,j)=bitxor(B_2(i,j),R_2(m,n))
(17)
當(dāng)X3_1(i,j)=3時(shí),矩陣B_2中像素值B_2(i,j)和G_2(m,n)交換位置,再根據(jù)如下公式執(zhí)行擴(kuò)散操作改變像素B_2(i,j)的值:
B_2(i,j)=bitxor(B_2(i,j),G_2(m,n))
(18)
m=1+mod((abs(X1(i,j)+
abs(X3(i,j)))×1014,N)
(19)
n=1+mod((abs(X1(i,j)+abs(X2(i,j))+
abs(X3(i,j)))×1014,N)
(20)
當(dāng)B通道置亂擴(kuò)散結(jié)束后得到三個(gè)新的矩陣R_3,G_3,B_3。
為了提高加密算法的安全級(jí)別,對(duì)矩陣R_3,G_3,B_3進(jìn)行二次擴(kuò)散,過程如下:
(1)通過序列X1,X2以及X3得到三個(gè)中間圖像矩陣X1_2,X2_2以及X3_2。
(21)
(2)執(zhí)行擴(kuò)散操作。
R_4=bitxor(R_3,X1_1)
(22)
G_4=bitxor(G_3,X2_2)
(23)
B_4=bitxor(B_3,X3_3)
(24)
R_4,G_4,B_4即加密圖像C的三個(gè)通道。
提出的加密算法是對(duì)稱的,解密過程是加密過程的逆過程。
整個(gè)加密算法是基于MATLAB實(shí)現(xiàn)的,使用的測(cè)試圖像分別為L(zhǎng)ena(256×256)。實(shí)現(xiàn)加密方案的密鑰以及仿真時(shí)的取值如表2所示。
表2 密鑰及其仿真時(shí)的取值
仿真結(jié)果如圖2所示。在圖2中,第一列的圖像為明文圖像,第二列為加密后的圖像,最后一列為解密后的圖像。由結(jié)果可以看出,這個(gè)加密方案是可行的。
圖2 仿真結(jié)果
當(dāng)一個(gè)加密方案中密鑰空間大于2100時(shí),可以認(rèn)為該加密方案是安全的,可以抵抗暴力攻擊。加密算法的密鑰包括明文圖像R,G,B三個(gè)通道的像素和以及外部密鑰c1,c2,c3,如果計(jì)算機(jī)的計(jì)算精度為10-14,則提出的算法的密鑰空間為(1014)6≈2289,所以認(rèn)為加密方案是安全的。
一個(gè)安全有效的加密方案應(yīng)該保證在加密和解密過程中都是對(duì)密鑰敏感的,即當(dāng)密鑰取值發(fā)生微小的變化時(shí),解密結(jié)果將會(huì)完全不同。為了測(cè)量加密方案的敏感性,選擇測(cè)試圖像Lena(256×256),它的加密后的圖像以及解密后的圖像分別如圖3所示。當(dāng)分別改變R通道的像素和以及外部密鑰c1的值,改變后的數(shù)值如表3所示。
表3 密鑰改變值分析
圖3 密鑰敏感性分析結(jié)果
圖像加密算法抵抗統(tǒng)計(jì)攻擊的能力可以通過加密后圖像的直方圖來直觀地體現(xiàn)出來。直方圖反映了各個(gè)不同灰度級(jí)的像素個(gè)數(shù),直方圖越均勻平坦,加密算法抵抗統(tǒng)計(jì)攻擊的能力越好。選擇的測(cè)試圖像為L(zhǎng)ena。
通常,直方圖方差用如下公式計(jì)算:
其中,V={v0,v1,…,v255},向量中的每一個(gè)值vi(i=0,1,…,255)代表圖像中灰度值為i的數(shù)量。var(V)是向量V的方差。方差的值越小,直方圖越均勻。
由以上分析可知,提出的加密算法加密后圖像的直方圖更加平坦,能夠有效地抵抗統(tǒng)計(jì)攻擊。
通常一幅明文圖像信息量很大,每一個(gè)像素與其相鄰像素之間的相關(guān)性很高。然而,為了抵抗各種統(tǒng)計(jì)攻擊,要求加密后圖像的像素之間的相關(guān)性近似為零。明文圖像Lena及其加密后圖像的相關(guān)分布顯示,提出的圖像加密算法足夠抵抗統(tǒng)計(jì)攻擊。
通常情況下,對(duì)加密系統(tǒng)分析時(shí)有四種典型的攻擊形式:唯密文攻擊、選擇密文攻擊、已知明文攻擊和選擇明文攻擊。其中,選擇明文攻擊是對(duì)密碼系統(tǒng)最有威脅的一種,一般來說,如果一個(gè)加密方案能夠抵抗選擇明文攻擊,那么它也有足夠的能力去抵抗其他類型的攻擊。在提出的方案中,有一些步驟是為了抵抗選擇明文攻擊而設(shè)計(jì)的。
加密方案主要的兩個(gè)步驟:神經(jīng)網(wǎng)絡(luò)系統(tǒng)初始值的產(chǎn)生是與明文圖像像素和以及外部密鑰有關(guān)的,即使在外部密鑰相同的條件下,不同的明文圖像也會(huì)產(chǎn)生不同的序列。
該文使用三階神經(jīng)網(wǎng)絡(luò)對(duì)彩色圖像進(jìn)行通道間的同時(shí)置亂擴(kuò)散,可以有效地避免置亂和擴(kuò)散分開攻擊對(duì)加密算法的影響,實(shí)驗(yàn)結(jié)果表明,該算法有良好的加密性能,可以抵抗各種攻擊。