圖像加密算法之三維可逆混沌映射
在Line map二維可逆映射算法的基礎(chǔ)上,我們提出了三維可逆混沌映射圖像加密算法,用于圖像的加密和解密。在對(duì)灰度圖像文件進(jìn)行加密時(shí),該算法同時(shí)實(shí)現(xiàn)了圖像加密的2個(gè)操作,即圖像像素的置位和混淆,高效地實(shí)現(xiàn)了圖像加密,并且能隱藏灰度圖像的直方圖信息,抵御攻擊的能力較強(qiáng),密鑰敏感性高,加密算法簡(jiǎn)單易于編程實(shí)現(xiàn),在加密的過程中沒有信息損失,密鑰空間僅與密鑰長(zhǎng)度有關(guān),而密鑰長(zhǎng)度在理論上可以無限大,因此密鑰空間可以很大,圖像文件加密的安全性比較高。
一、三維可逆混沌映射原理
Line-map二維可逆映射算法是將圖像讀成N×M的十進(jìn)制像素矩陣,該矩陣維數(shù)M為原圖的長(zhǎng),維數(shù)N為原圖的寬,矩陣元素對(duì)應(yīng)原圖的十進(jìn)制像素值,這樣二維可逆映射置亂的就是像素點(diǎn)的位置。本文所提出的三維可逆混沌映射方法則是將圖像讀成N×M×K的三維矩陣,該矩陣維數(shù)M和N仍分別為原圖的長(zhǎng)和寬,這時(shí)把原圖的十進(jìn)制像素值轉(zhuǎn)換為二進(jìn)制像素值。K為二進(jìn)制的位數(shù)a對(duì)于一個(gè)灰度為256的圖像來說,每個(gè)十進(jìn)制像素值可以用8個(gè)二進(jìn)制位表示,則K=8,即讀取灰度圖像得到的就是N×M×8的二進(jìn)制圖像。下面所提到的圖像,灰度均為256、維數(shù)為N×M,并假設(shè)N≤M。如果N>M,則對(duì)原圖像矩陣進(jìn)行一次轉(zhuǎn)置變換,變成A’,其中:
以一個(gè)維數(shù)為4×4的灰度圖像為例來說明由圖像得到的二進(jìn)制圖像矩陣的過程。假設(shè)由圖像得到的4×4圖像矩陣為:
則將每一個(gè)像素值都用0/1二進(jìn)制代碼表示,把每個(gè)像素值的8個(gè)二進(jìn)制位看作是一個(gè)列向量,那么每行像素的4個(gè)列向量就構(gòu)成了一個(gè)4×8的矩陣,且這個(gè)矩陣的元素都是0/1二進(jìn)制代碼。原圖有4行像素,則可以得到4個(gè)4×8的二進(jìn)制矩陣。這4個(gè)4×8矩陣構(gòu)成了一個(gè)4×4×8的三維矩陣C(i,j,k),如圖1所示,其中i=1,2,…,N;j=1,2,…,M;k=1,2,…,8,由此可得到圖像的三維矩陣模型。
為方便描述三維矩陣,建立笛卡兒三維坐標(biāo)系。將像素A(1,1)二進(jìn)制位的最低位作為坐標(biāo)系的原點(diǎn)0,矩陣A的寬對(duì)應(yīng)I軸,高對(duì)應(yīng)J軸,每個(gè)像素的8個(gè)二進(jìn)制位的列向量對(duì)應(yīng)K軸,如圖1所示。后面所介紹的三維可逆映射算法就是基于此IJK坐標(biāo)系的。
三維可逆混沌映射算法首先是將該三維矩陣按照本文提出的方式映射成為二維矩陣,然后對(duì)所得到的二維矩陣進(jìn)行置亂處理,最后將置亂后的二維矩陣恢復(fù)成三維矩陣,從而改變?cè)叶葓D像的像素值和像素位置,實(shí)現(xiàn)了像素的置亂和混淆。本文提出了兩種將三維矩陣轉(zhuǎn)換為二維矩陣的方法,稱為方法1和方法2。
方法1的原理
首先按照前面所述方法把原灰度圖像轉(zhuǎn)換為三維矩陣圖像,該二進(jìn)制圖像可以看成是由J軸方向上N個(gè)8×M的平行平面組成,如圖2(a)所示。按照?qǐng)D2(b)的次序?qū)⑦@N個(gè)平行平面合成一個(gè)8N×M的二維矩陣,也可以按照?qǐng)D2(c)的次序?qū)⑦@些平面合成一個(gè)8×(N×M)的二維矩陣,這樣就完成了將三維矩陣映射為二維矩陣D首先應(yīng)用Line map對(duì)合成后的二維矩陣進(jìn)行像素置亂處理,然后再將該二維矩陣還原成N×M×8的三維矩陣,實(shí)現(xiàn)了原三維矩陣各個(gè)元素在三維空間的置亂,從而改變了原灰度圖像的像素位置和像素值,高效地實(shí)現(xiàn)了圖像加密。
同樣,也可以把圖像的三維矩陣看成是由J軸方向上的M個(gè)8×N平行平面組成,再按照上述步驟實(shí)現(xiàn)圖像加密。這里僅考慮把三維矩陣看成是由I軸方向上的N個(gè)平行平面組成的情況,并按照?qǐng)D2(b)的次序?qū)⑦@N個(gè)平面映射成為一個(gè)二維平面。
2、方法2的原理
方法2是由把原圖像的三維矩陣看成是沿著J×J平面對(duì)角線方向上的M+N-1個(gè)平行平面組成,如圖3(a)所示。按照?qǐng)D3(b)的次序?qū)⒃S圖像矩陣映射成為8×(N×M)的二維矩陣。與方法1類似,應(yīng)用Line map對(duì)該二維矩陣進(jìn)行像素置亂處理,然后再將置亂后的二維矩陣還原成N×M×8的三維矩陣,最后用十進(jìn)制表示該三維矩陣的二進(jìn)制像素,實(shí)現(xiàn)圖像文件加密。
二、三維可逆混沌映射圖像加密算法
設(shè)原始灰度圖像矩陣用A表示,加密后的圖像用B表示,由原始圖像A得到的三維矩陣用C表示,在置亂C矩陣元素的位置后還原得到的三維矩陣用D表示,由三維矩陣C得到的二維矩陣用E表示,由拉伸矩陣E得到的向量用L表示,由折疊向量Z得到的二維矩陣用L表示,則加密過程可表示為:
前面已經(jīng)介紹了由二維矩陣A到三維矩陣C和由三維矩陣D到二維矩陣B的過程。本節(jié)主要介紹加密過程的兩個(gè)核心過程,即將三維矩陣C轉(zhuǎn)換為二維矩陣E,二維矩陣F轉(zhuǎn)化為三維矩陣D以及置亂二維矩陣Eo其中采用Linemap算法置亂二維矩陣元素,也就是對(duì)二維矩陣E進(jìn)行若干次的左映射和右映射。密鑰Key設(shè)計(jì)成為子映射種類和映射次數(shù),如Key=1234,表示二維矩陣E依次左映射置亂1次,右映射置亂2次,然后左映射置亂3次,最后右映射置亂4次。
1、方法1的加密算法
這里僅給出圖2(a)和圖2(b)的映射算法。將三維矩陣C映射成為二維矩陣E的算法如下:
二維矩陣E的維數(shù)為8N×Mo利用Line map將二維矩陣E拉伸為向量L的算法。
將向量L折疊為二維矩陣F的算法如下:
將二維矩陣F還原為三維矩陣D的算法如下:
將三維矩陣D的二進(jìn)制元素用十進(jìn)制表示即可得到加密后的圖像,可完成整個(gè)加密過程。
2、方法2的加密算法
對(duì)于方法2來說,將三維矩陣C映射成為二維矩陣E的算法由下式給出:
對(duì)二維矩陣E進(jìn)行Line map可逆映射,置亂其像素位置,從而得到二維矩陣F,該算法與方法1類似。
將二維矩陣F還原成為三維矩陣D的算法如下:
將三維矩陣D的二進(jìn)制元素用十進(jìn)制表示,即可得到加密后的圖像,完成整個(gè)加密過程。
三、三維可逆混沌映射圖像解密算法
三維可逆映射圖像的解密過程是加密算法的逆過程,可表示如下:
式中,A,B,C,D,E,F(xiàn),L的定義與加密算法中的定義相同。解密算法的具體步驟是:讀取密圖得到二維圖像矩陣B;將二維矩陣B中的元素用二進(jìn)制表示得到三維矩陣D;將三維矩陣D按照本文提出的方法映射成為二維矩陣F;利用Line map的逆過程將矩陣F還原成為二維矩陣E;將二維矩陣E映射成為三維圖像矩陣C;用十進(jìn)制表示三維矩陣C的元素得到解密后的灰度圖像矩陣A。
由密圖矩陣B到三維矩陣D和由三維矩陣C到二維矩陣A的算法與加密過程類似。
這里主要介紹三維矩陣D到二維矩陣F,二維矩陣E到三維矩陣C的算法。
1、方法1的解密算法
由三維矩陣D到二維矩陣F的算法如下:
這樣得到的F就是一個(gè)8N×M的二維矩陣。利用Line map映射的逆過程是將二維矩陣F拉伸成為向量L的算法:
向量L到矩陣E的算法。由二維矩陣E到三維矩陣C的算法如下:
將三維矩陣C中的二進(jìn)制元素用十進(jìn)制表示可得到灰度圖像矩陣A,可實(shí)現(xiàn)圖像的解密。
2、方法2的解密算法
在方法2中,三維矩陣D到二維矩陣F、二維矩陣E到三維矩陣C的算法與方法1不同,其余均類似。這里只給出方法2的兩個(gè)算法。
從三維矩陣D到二維矩陣F的算法如下:
從二維矩陣E到三維矩陣C的算法如下:
將三維矩陣C的二進(jìn)制元素用十進(jìn)制表示可得到解密后的圖像,可完成圖像的解密。
四、實(shí)驗(yàn)結(jié)果及分析
為了研究三維可逆混沌加密算法的加密效果,對(duì)其進(jìn)行了仿真實(shí)驗(yàn),并對(duì)仿真結(jié)果進(jìn)行了分析。
1、圖像的加密和解密
針對(duì)灰度為256、維數(shù)為256×256的Lenna圖像來說,分別利用方法1、方法2和Baker map進(jìn)行了加密和解密實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果如圖4—圖15所示。圖4為原圖,圖5為原圖的直方圖,圖6為利用Baker map進(jìn)行加密的密圖,圖7為密圖6的直方圖,圖8為利用方法1進(jìn)行加密的密圖,其中密鑰key為12345670654,圖9為密圖8的直方圖,圖10為利用方法2進(jìn)行加密的密圖,其中加密密鑰key為9874560123,圖11為密圖10的直方圖。對(duì)圖6、圖8、圖10與原圖進(jìn)行比較可以看出,從圖6、圖8和圖10中看不出原圖的信息,均有效地實(shí)現(xiàn)了圖像加密。由圖5和圖7可以看出,利用Baker map加密的密圖的直方圖與原圖的直方圖相同,說明該加密方法沒有改變圖像的像素值,安全性較低。由圖5、圖9和圖11可以看出,利用本文提出的加密算法加密的密圖的直方圖與原圖的直方圖不同,說明這種加密算法改變了圖像的像素值,隱藏了直方圖信息,提高了加密算法的安全性。利用方法1和方法2解密后的圖像與原圖完全相同,由此可知該加密方法沒有信息損失。
2、安全性分析
首先分析了該算法的密鑰空間。本算法密鑰空間的大小只與密鑰的長(zhǎng)度有關(guān),它們之間的關(guān)系如表1所示。理論上,在計(jì)算速度允許的情況下,本算法的密鑰長(zhǎng)度沒有限制,密鑰空間可以為無限大,實(shí)際應(yīng)用時(shí),密鑰長(zhǎng)度的選取與安全性的要求有關(guān)。
其次,本文做了密鑰敏感性分析。對(duì)于密圖6來說,用相似的密鑰可以對(duì)Baker map加密的密圖進(jìn)行解密,結(jié)果如圖12和13所示。說明Baker map加密算法對(duì)密鑰的敏感性較低。對(duì)于密圖8和密圖10來說,分別對(duì)其加密密鑰的最后一位進(jìn)行微小變動(dòng)用于解密這兩個(gè)密圖,即對(duì)于密圖8來說,將其密鑰12345670654改為12345670653來進(jìn)行解密,解密圖像如圖14所示。對(duì)于密圖10來說,將其密鑰9874560123改為9874560124來進(jìn)行解密,解密圖像如圖15所示。由圖14和圖15可以看出,這兩個(gè)密鑰均不能正確解密圖像,雖然它們與原密鑰只有最后一位有微小差別,說明這兩種算法對(duì)密鑰非常敏感,加密安全性比較高,有較強(qiáng)的抵御攻擊的能力。
最后計(jì)算分析了原圖和密圖的不動(dòng)點(diǎn)比和信息熵。若原圖像A中的像素點(diǎn)為(i,j),在加密后其灰度值沒有發(fā)生變化,則稱該像素點(diǎn)為不動(dòng)點(diǎn)。圖像中不動(dòng)點(diǎn)占所有像素的百分比稱為該圖的不動(dòng)點(diǎn)比,用BD(A)表示。原圖5與密圖8的不動(dòng)點(diǎn)比為0.3096,原圖5與密圖10的不動(dòng)點(diǎn)比為0.37%,這說明不動(dòng)點(diǎn)的數(shù)目很少,利用該加密算法改變了原圖99.696以上的像素的位置,由該參數(shù)可看出這種算法的置亂效果很好。
不過在很多情況下,該參數(shù)只能反映出兩個(gè)圖像對(duì)應(yīng)點(diǎn)變化的數(shù)目情況,不能反映出灰度值的變化程度,需要與信息熵一起才能正確反映出圖像的置亂度。信息熵反映的是圖像中的灰度分布情況,分布越均勻,信息熵越大,包含的不確定信息也就越多口根據(jù)信息熵的計(jì)算公式,原圖5的信息熵為7.3693,密圖8的信息熵為7.9669,密圖10的信息熵為7.9810,這兩個(gè)密圖的信息熵均與原圖的信息熵不同,這說明圖像加密不僅改變了圖像像素的位置,而且改變了圖像的灰度值,使攻擊難度增加,加密安全性高。
小知識(shí)之信息熵
所謂信息熵,是一個(gè)數(shù)學(xué)上頗為抽象的概念,在這里不妨把信息熵理解成某種特定信息的出現(xiàn)概率。而信息熵和熱力學(xué)熵是緊密相關(guān)的。根據(jù)Charles H. Bennett對(duì)Maxwell's Demon的重新解釋,對(duì)信息的銷毀是一個(gè)不可逆過程,所以銷毀信息是符合熱力學(xué)第二定律的。而產(chǎn)生信息,則是為系統(tǒng)引入負(fù)(熱力學(xué))熵的過程。所以信息熵的符號(hào)與熱力學(xué)熵應(yīng)該是相反的。









