郭家偉 張大興 楊珊珊 王詩迢
(杭州電子科技大學(xué)計(jì)算機(jī)學(xué)院 浙江 杭州 310018)
現(xiàn)如今,數(shù)字圖像被廣泛地應(yīng)用在互聯(lián)網(wǎng)中,對(duì)于一些機(jī)密圖像通常要進(jìn)行加密處理以防止信息泄露。同時(shí),為了節(jié)省網(wǎng)絡(luò)帶寬,通常會(huì)將圖像壓縮后再進(jìn)行傳輸。如果能在壓縮圖像的同時(shí)對(duì)圖像進(jìn)行加密,便可以簡(jiǎn)化對(duì)機(jī)密圖像的處理。
近年來,研究人員提出了一些針對(duì)圖像的壓縮加密聯(lián)合算法。一般而言,這類算法有三種不同的研究方向。第一種是將壓縮合并到加密算法中,文獻(xiàn)[1]使用行程編碼方案和Henon混沌映射實(shí)現(xiàn)了壓縮加密。由于其壓縮操作根植于加密算法,因此壓縮性能受到很大限制。第二種是將加密合并到壓縮算法中,文獻(xiàn)[2]提出一種基于JPEG壓縮的選擇加密方案,將加密集成在DCT變換中。文獻(xiàn)[3]修改了標(biāo)準(zhǔn)的JPEG壓縮,在壓縮過程中進(jìn)行加密,但加密后的圖像存在格式兼容問題。文獻(xiàn)[4]中,使用哈希表和中國剩余定理實(shí)現(xiàn)圖像的無損壓縮,同時(shí)使用混沌系統(tǒng)實(shí)現(xiàn)加密。這類算法的加密操作根植于壓縮算法,因此安全性不足。第三種是將壓縮和加密操作聯(lián)合起來,文獻(xiàn)[5-7]中,通過對(duì)量化后的DCT系數(shù)的進(jìn)行置亂和代換操作實(shí)現(xiàn)加密,但是其加密操作破壞了DCT系數(shù)原有的分布規(guī)律,導(dǎo)致后續(xù)的編碼量增加,算法壓縮性能下降?;谝陨戏治?,本文提出了一種與JPEG壓縮相結(jié)合的圖像加密算法,該算法兼顧了安全性與壓縮性,在安全加密圖像的同時(shí),仍然保證了很好的壓縮性能。
圖1描述了該算法的流程圖。其中直角矩形部分代表JPEG壓縮操作,圓角矩形部分代表加密操作。y0、z0、w0、p是加密算法的密鑰。關(guān)于Logistic混沌系統(tǒng)的說明,詳見1.1節(jié)。
圖1 算法流程圖
算法流程描述如下:
步驟1讀入BMP格式的明文圖像,以非重疊分塊的形式將圖像分成若干個(gè)8×8的子塊。
步驟2由初始值y0迭代出一個(gè)混沌序列,將該序列作為置亂算法的控制參數(shù)。使用分組合并置亂算法對(duì)子塊的RGB分量進(jìn)行置亂。分組合并置亂算法詳見1.2節(jié)。
步驟3對(duì)置亂后的圖像進(jìn)行正常JPEG壓縮,在完成DCT變換和量化后,對(duì)DC系數(shù)和AC系數(shù)分別進(jìn)行置亂,置亂算法的控制參數(shù)由混沌初始值z(mì)0迭代產(chǎn)生。
步驟4由混沌初始值w0迭代產(chǎn)生一個(gè)混沌序列a1,a2,…,an,使用該序列修改DCT系數(shù)符號(hào)位。修改方法如下式所示:
d=d×(-1)ai
(1)
式中:d代表當(dāng)前處理的DCT系數(shù)值。
步驟5繼續(xù)進(jìn)行后續(xù)的編碼操作,完成JPEG壓縮,得到JPEG格式的密文圖像。
解密算法為上述過程的逆過程。
混沌系統(tǒng)是一種非線性的系統(tǒng),它具有對(duì)初始值敏感、偽隨機(jī)性強(qiáng)的特點(diǎn),將混沌系統(tǒng)應(yīng)用于加密技術(shù),可以形成良好的圖像加密系統(tǒng)[8]。Logistic映射是一種被廣泛應(yīng)用于圖像加密的混沌系統(tǒng),其定義公式如下:
xk+1=μxk(1-xk)xi∈[0,1]
(2)
式中:μ為分支參數(shù),對(duì)于任意一個(gè)初始值x0∈[0,1],都可以通過不斷迭代產(chǎn)生一個(gè)序列x1,x2,…,xn,當(dāng)3.569 945 6<μ≤4,該序列將處于混沌狀態(tài)[9],可以將該序列用于加密系統(tǒng)中。
混沌序列的隨機(jī)程度會(huì)直接影響到加密算法的安全性。為了驗(yàn)證混沌序列的隨機(jī)性,本文使用美國國家標(biāo)準(zhǔn)和技術(shù)研究院提供的統(tǒng)計(jì)測(cè)試軟件包對(duì)混沌序列進(jìn)行測(cè)試。該軟件包中有15項(xiàng)測(cè)試,每項(xiàng)測(cè)試均使用P-value來表示測(cè)試結(jié)果。其測(cè)試原理是建立在假設(shè)檢驗(yàn)的基礎(chǔ)上,對(duì)于每一個(gè)測(cè)試項(xiàng),給定一個(gè)顯著性水平α,α∈[0.001,0.01],然后計(jì)算出P-value的值,若P-value值大于α,則認(rèn)為序列是隨機(jī)的[10]。設(shè)定混沌初始值x0=0.23,分支參數(shù)μ=4.0,對(duì)Logistic映射產(chǎn)生的序列進(jìn)行測(cè)試,其中顯著性水平α設(shè)定為0.005。實(shí)驗(yàn)結(jié)果如表1所示,可以看到所有測(cè)試項(xiàng)的P-value值均大于顯著性水平α,這說明Logistic映射產(chǎn)生的混沌序列具有很強(qiáng)的偽隨機(jī)性。
表1 Logistic混沌序列隨機(jī)性測(cè)試結(jié)果
由于Logistic映射產(chǎn)生的混沌值均在0到1之間,使用時(shí)需要進(jìn)行變換,變換公式如下:
ri=xi×106%N
(3)
式中:xi為原始值,ri為變換后的值。該變換將區(qū)間[0,1]中的值映射到區(qū)間[0,N-1]中。
本文的置亂算法是基于分組合并思想提出的一種簡(jiǎn)單線性變換,該算法實(shí)現(xiàn)簡(jiǎn)單,運(yùn)算速度快,適合對(duì)圖像這種密集型數(shù)據(jù)進(jìn)行運(yùn)算。其置亂原理如下:
(4)
式中:Gi表示第i組子序列。將分組后的子序列重新合并為S′=G1,G2,…,Gk。
經(jīng)過上述變換后,序列S中的第i個(gè)元素xi變成了序列S′中的第i′個(gè)元素xi′,兩者的映射關(guān)系為:
(5)
式中:%、 、 、min分別表示取余數(shù)、向下取整、向上取整和求最小值。該置亂變換為一對(duì)一映射,且可逆,k是算法的控制參數(shù),加密過程中k的值由混沌系統(tǒng)產(chǎn)生,以此保證置亂過程的隨機(jī)性。使用該算法對(duì)圖像子塊的RGB分量置亂時(shí),可以將一行或一列圖像子塊看作一個(gè)序列S。序列中的元素為圖像子塊。同理,對(duì)DC系數(shù)和AC系數(shù)進(jìn)行置亂時(shí),是將每個(gè)子塊的DC系數(shù)或AC系數(shù)看作序列中的元素。
為了獲得更好的置亂效果,每行的元素序列使用不同的k值進(jìn)行置亂,在行方向上完成置亂后,用同樣的方法在列方向上進(jìn)行置亂。由于不同序列之間不存在數(shù)據(jù)共享,因此可以利用GPU的多線程對(duì)置亂過程進(jìn)行并行處理,即同時(shí)開啟多個(gè)線程,每個(gè)線程負(fù)責(zé)處理一個(gè)序列的置亂,多個(gè)線程并行置亂,大幅提升運(yùn)算速度。
為了驗(yàn)證本文算法的加密效果,在個(gè)人電腦上進(jìn)行了仿真實(shí)驗(yàn)。具體實(shí)驗(yàn)環(huán)境:Intel Core i5 CPU,主頻3.1 GHz,4 GB RAM,GPU為GeForce GTX 760。算法在Visual Studio 2015平臺(tái)下運(yùn)行。實(shí)驗(yàn)中用到的圖像均來自于南加州大學(xué)信號(hào)與圖像處理研究所(USC-SIPI)圖像庫[10]。設(shè)定y0=0.23,z0=0.35,w0=0.58,p=4.0,將它們作為密鑰輸入混沌系統(tǒng),分別對(duì)圖像Baboon和Peppers進(jìn)行加密,同時(shí)設(shè)定壓縮過程中的質(zhì)量因子Q=50。圖2為實(shí)驗(yàn)結(jié)果,可以看到加密后的圖像已經(jīng)看不出原始圖像的任何信息,圖像信息被完全隱藏。為了對(duì)加密效果進(jìn)行量化評(píng)價(jià),本文使用以下指標(biāo)來比較明文圖像與密文圖像之間的差距。
(a) Baboon明文(b) Baboon密文
(c) Peppers明文(d) Peppers密文圖2 加密效果圖
峰值信噪比用于衡量?jī)煞鶊D像之間的差異大小,差別越大,PSNR值越小。通過計(jì)算原始圖與加密圖的PSNR值來量化兩者之間的差異,PSNR值越小說明加密效果越好。PSNR的計(jì)算公式如下:
(6)
(7)
式中:L代表每個(gè)采樣值的比特?cái)?shù),圖像中用8比特表示一個(gè)顏色分量,因此這里L(fēng)=8,m和n分別為圖像的長(zhǎng)和寬,p(i,j)和c(i,j)分別為明文圖像和密文圖像在(i,j)位置處的像素值。當(dāng)PSNR<20時(shí),意味著密文圖像變得完全不可辨識(shí)。經(jīng)過實(shí)驗(yàn)計(jì)算,Baboon圖像的PSNR為11.382 1,Peppers圖像的PSNR為10.995 1,說明明文與密文之間的差別很大,算法具有很好的加密效果。
通常,原始圖像中的相鄰像素是高度相關(guān)的,良好的圖像加密算法應(yīng)該有效降低這種相關(guān)性。本文使用相關(guān)系數(shù)對(duì)像素相關(guān)性進(jìn)行量化評(píng)估。相關(guān)系數(shù)的計(jì)算公式如下:
(8)
(9)
式中:E(x)和D(x)分別表示x的均值和方差,n代表像素點(diǎn)的個(gè)數(shù)。
實(shí)驗(yàn)中,我們從Baboon圖像的明文和密文中各自選取了2 000對(duì)像素點(diǎn),分別計(jì)算這些像素點(diǎn)的RGB分量在水平、垂直和對(duì)角線方向上的相關(guān)系數(shù)。表2展示了Baboon圖像的明文與密文中R分量相鄰像素的相關(guān)系數(shù),圖3為加密前后的相鄰像素分布情況??梢钥闯觯魑膱D像中的像素點(diǎn)高度相關(guān),加密后其相關(guān)性大幅降低,這說明本文算法能夠有效降低圖像中相鄰像素的相關(guān)性。
表2 Baboon圖像R分量相鄰像素相關(guān)系數(shù)
(a) 加密前(b) 加密后圖3 加密前后圖像中相鄰像素分布
本文算法在加密過程中,充分考慮到壓縮性能,以圖像子塊為單位進(jìn)行置亂不會(huì)影響JPEG壓縮流程,對(duì)DC系數(shù)和AC系數(shù)分別進(jìn)行置亂,使DCT系數(shù)的分布規(guī)律被保留下來,不會(huì)使后續(xù)編碼量增加。為了驗(yàn)證算法壓縮性能,本文對(duì)USC-SIPI圖像庫中的209幅圖像分別進(jìn)行直接壓縮和加密壓縮,比較兩種操作后的圖像大小。實(shí)驗(yàn)結(jié)果表明加密壓縮后的圖像與直接壓縮的圖像相比,圖像大小平均增加約10%,這說明本文算法對(duì)壓縮操作影響很小,算法具備良好的壓縮性能。表3列舉了部分實(shí)驗(yàn)結(jié)果。
表3 直接壓縮和加密壓縮后的圖像大小
本文算法中的加密操作主要是分塊的置亂和DCT系數(shù)的置亂以及符號(hào)位的修改,沒有復(fù)雜的邏輯運(yùn)算,加密速度快,耗時(shí)少。為了驗(yàn)證算法的速度性能,對(duì)圖像庫中的209幅圖像進(jìn)行JPEG壓縮后使用AES算法加密,比較該操作的耗時(shí)與本文算法的耗時(shí)。實(shí)驗(yàn)中,分別統(tǒng)計(jì)了不同尺寸的圖像在兩種操作下的平均耗時(shí),結(jié)果如圖4所示。可以看出本文算法可以大幅減少加密壓縮耗時(shí)。
圖4 不同尺寸的圖像加密和壓縮耗時(shí)
本文算法分別在空域和頻域?qū)D像進(jìn)行了加密操作,整個(gè)加密過程由Logistic混沌系統(tǒng)控制,混沌系統(tǒng)對(duì)初始值敏感以及隨機(jī)性強(qiáng)的特性保證了加密的安全性。下面將從密鑰空間和密鑰敏感性兩個(gè)方面做進(jìn)一步說明。
2.5.1密鑰空間
密鑰空間是評(píng)價(jià)一個(gè)加密算法安全性的重要指標(biāo),一般而言,密鑰空間越大,加密算法就越安全。本文算法中的密鑰包括y0、z0、w0、p,密鑰空間的大小取決于這4個(gè)參數(shù)的組合數(shù)量。由于它們都是十進(jìn)制浮點(diǎn)數(shù),根據(jù)IEEE浮點(diǎn)運(yùn)算標(biāo)準(zhǔn)[11],64位雙精度數(shù)的計(jì)算精度為,因此這4個(gè)參數(shù)組成的密鑰空間大小為252×252×252×252=2208,可以看出這個(gè)密鑰空間已經(jīng)足夠大,可以有效應(yīng)對(duì)窮舉攻擊。
2.5.2密鑰敏感性
本文算法的密鑰為混沌初始值,由于混沌系統(tǒng)對(duì)初始值敏感,初始值的微小改變會(huì)使迭代后的混沌序列完全不同。這使得本文算法具有很強(qiáng)的密鑰敏感性。為了驗(yàn)證,使用密鑰k=(0.25,0.38,0.67,4.0)對(duì)Lena圖像進(jìn)行加密,然后用4組發(fā)生微小改變的密鑰分別去解密該圖像,這4組密鑰分別為:
k1=(0.26,0.38,0.67,4.0)
k2=(0.25,0.39,0.67,4.0)
k3=(0.25,0.38,0.66,4.0)
k4=(0.25,0.38,0.67,3.99)
圖5是實(shí)驗(yàn)結(jié)果??梢钥闯?,雖然每組解密密鑰都只發(fā)生了微小的改變,但是解密結(jié)果卻與正確圖像相差甚遠(yuǎn),這說明算法具有很強(qiáng)的密鑰敏感性。
(a) 使用密鑰k的加密圖(b) 正確密鑰解密圖
(c) 使用密鑰k1的解密圖(d) 使用密鑰k2的解密圖
(e) 使用密鑰k3的解密圖(f) 使用密鑰k4的解密圖圖5 錯(cuò)誤密鑰解密圖
本文基于混沌系統(tǒng),提出了一種與JPEG壓縮相結(jié)合的圖像加密算法。該算法首先在空域?qū)D像分塊進(jìn)行置亂,然后在頻域進(jìn)行了DCT系數(shù)的置亂和符號(hào)位的隨機(jī)修改,整個(gè)加密過程被很好地嵌入到JPEG壓縮流程中。理論分析和仿真實(shí)驗(yàn)表明,該加密算法密鑰空間大、密鑰敏感性強(qiáng),具有很高的安全性,同時(shí)加密后的圖像仍然保持了很高的壓縮比,對(duì)原有的壓縮操作影響很小,能充分滿足對(duì)圖像同時(shí)進(jìn)行壓縮和加密的要求。