羅 昊, 謝曉堯, 彭長根,3
(1. 貴州大學(xué) 計算機科學(xué)與技術(shù)學(xué)院 貴州 貴陽 550025; 2. 貴州師范大學(xué) 貴州省信息與計算科學(xué)重點實驗室 貴州 貴陽 550001; 3. 貴州省公共大數(shù)據(jù)重點實驗室 貴州 貴陽 550025)
信息內(nèi)容安全技術(shù)是利用計算機從包含海量信息并且迅速變化的網(wǎng)絡(luò)中,對特定安全主題相關(guān)信息進行自動獲取、識別和分析的技術(shù).廣義的信息內(nèi)容安全還包括信息內(nèi)容的保密、知識產(chǎn)權(quán)保護、信息隱藏、隱私保護等[1],而可逆水印技術(shù)就屬于信息隱藏的范疇.可逆水印技術(shù)是一種將水印隱藏到原始載體中,在提取水印以后,能夠無損地恢復(fù)出原始載體的技術(shù).該技術(shù)在醫(yī)療圖像、軍事圖像、司法圖像等不能容忍圖像恢復(fù)失真的情況下,有著極其重要的作用.
近年來,云計算、大數(shù)據(jù)逐漸被人們所關(guān)注.用戶可以將自己的資料上傳到云端,還可以從云端下載數(shù)據(jù)供自己使用.這樣在給廣大用戶帶來極大便利的同時,也帶來了數(shù)據(jù)安全和隱私保護的問題.因此,需要對原始載體進行加密處理,來保護個人的隱私數(shù)據(jù).
隨著泄密事件的不斷出現(xiàn),個人的隱私保護顯得越來越重要,加密域可逆水印技術(shù)逐漸成為一個值得研究的熱點問題.把加密技術(shù)和可逆隱藏技術(shù)結(jié)合起來,既能加強載體數(shù)據(jù)的安全性,又能保護載體的完整性.文獻[2]提出了一種在載體圖像加密域中取反圖像像素的最低三位來隱藏數(shù)據(jù),并在接收端利用圖像的相關(guān)性來提取隱藏數(shù)據(jù)的方法.文獻[3]提出了利用信源編碼的方法對載體圖像加密域中的像素低三位進行無損壓縮,把嵌入空間騰出來,但是它們直接解密圖像的PSNR值都不高.因此,本文提出了一種加密域下的直方圖平移可逆水印算法,該算法既能無損地恢復(fù)原始載體,又能保證個人的隱私數(shù)據(jù).在加密域下利用直方圖平移技術(shù)[4-6]對水印進行嵌入和提取,只有擁有水印加密密鑰才能成功地提取水印,只有擁有圖像加密密鑰才能成功地恢復(fù)原始圖像,從而保證了水印和載體圖像的安全性.實驗結(jié)果表明,該算法針對直接解密圖像的PSNR值要優(yōu)于文獻[2]和文獻[3]中的算法.
圖像加密方法采用了文獻[2]、[3]、[7]中的方法.設(shè)載體圖像M為原始的灰度圖像,圖像大小為P×Q,圖像像素值為mi,j,1≤i≤P,1≤j≤Q,每個像素值mi,j可以表示為一個八位二進制數(shù)據(jù)串.每一位數(shù)據(jù)可以表示為bi,j(k),1≤k≤8,有
(1)
首先利用產(chǎn)生Logistic混沌序列的方法偽隨機產(chǎn)生長為8PQ的比特位串si,j(k),然后與bi,j(k)按位異或?qū)崿F(xiàn)圖像加密,有
ni,j(k)=bi,j(k)⊕si,j(k),
(2)
式中:ni,j(k)為加密后的數(shù)據(jù).加密后的像素值Ni,j可以表示為
(3)
本文算法是一種在圖像加密域下的可逆水印算法,算法的框圖如圖1所示.
圖1 算法的框圖Fig.1 Sketch of the proposed scheme
該算法首先通過加密密鑰k1把原始圖像進行加密,得到加密以后的圖像.同時,通過水印加密密鑰k2對原始水印進行加密,然后利用直方圖平移技術(shù),把加密后的水印嵌入到加密的圖像中.在進行水印提取時,首先提取出加密的水印,然后利用水印加密密鑰k2解密出水印,在提取水印的同時,注意利用直方圖平移技術(shù)恢復(fù)出加密的圖像載體,然后利用加密密鑰k1解密出圖像載體.
水印的嵌入步驟如下.
1) 利用Logistic混沌序列對原始水印進行異或加密.
2) 同樣利用Logistic混沌序列,應(yīng)用本文第1小節(jié)的方法對原始圖像載體進行加密.
3) 對步驟2)的加密圖像載體生成灰度直方圖h.
4) 在直方圖中,找到最大值點Pmax和最小值點Pmin.Pmax,Pmin∈[0,255].
5) 若h(Pmin)>0,則可以轉(zhuǎn)化為“有零點的情況”嵌入水印.h(Pmin)表示灰度值為Pmin的像素點的個數(shù).
① [xmin,ymin]=find(E==Pmin);//E為加密后的載體圖像,找到灰度值為Pmin的點的位置
② for i=1∶length(xmin)
record(xmin(i),ymin(i))=1;//利用一個與原始載體圖像一樣大小的位圖record,記錄
//Pmin在原始載體圖像中出現(xiàn)的位置,xmin,ymin為像素點的坐標
end
③ huffmanresult←huffencode(record);//對位圖record進行Huffman壓縮,把壓縮的結(jié)果存放
//在經(jīng)過Huffman壓縮的原始載體圖像的副本中,huffencode表示Huffman壓縮
④ for i=1∶length(xmin)
E(xmin(i),ymin(i))=Pmax;//把原始圖像中像素值為Pmin的點賦值為Pmax,這樣就使得
//h(Pmin)=0
end
6) 不失一般性,假定Pmax if (E(i,j)∈(Pmax,Pmin)) E(i,j)=E(i,j)+1; //將所有灰度值為(Pmax,Pmin)的點的灰度值加1,則所有灰度值為 //Pmax+1的位置空余 end 7) [x,y]=find(E==Pmax);//按照一定的順序掃描載體圖像,把所有灰度值為Pmax的點記錄下來, //x,y為像素點的坐標. 8) if (binarywatermark(i,j)==1) E(x(k),y(k))=E(x(k),y(k))+1; //若水印值為1,則灰度值為Pmax的點的灰度值加1 k=k+1; //k為x,y的下標 end if (binarywatermark(i,j)==0) k=k+1; //若水印值為0,則灰度值為Pmax的點的灰度值不變 end 水印的提取步驟如下. 1) 生成含有水印的圖像的直方圖extracth. 2) 利用與嵌入水印時相同的掃描順序掃描圖像,把每個灰度值為Pmax和Pmax+1的點的位置記錄下來,放置到x,y中: for i=1∶wM* wN //wM,wN為水印圖像的長寬 if (E(x(k1),y(k1))==Pmax) //k1為x,y的下標 exwatermark(r1)=0; //如果灰度值為Pmax,則水印為0,r1為exwatermark的下標 end if(E(x(k1),y(k1))==Pmax+1) exwatermark(r1)=1; //如果灰度值為Pmax+1,則水印為1 E(x(k1),y(k1))=Pmax; //把該像素點的灰度值設(shè)置為Pmax end end 3) 利用水印加密時的Logistic混沌序列,對提取出來的秘密水印進行解密. 4) 再次掃描圖像. if (E(i,j)∈(Pmax,Pmin]) E(i,j)=E(i,j)-1; //將灰度屬于(Pmax,Pmin]的點的灰度值減1 end 5)若載體副本中含有最小值點Pmin非空的信息,則只需要將最小值點的灰度值恢復(fù)即可. twodimextrecord←huffdecode(tt)//tt為最小值點Pmin非空的信息,twodimextrecord為 //把非空信息進行Huffman解壓縮,然后轉(zhuǎn)化為二維圖像的結(jié)果,huffdecode表示Huffman //解壓縮 [extxmin,extymin]=find(twodimextrecord==1);//找到最小值點Pmin的位置 for i=1∶length(extxmin) E((extxmin(i)),(extymin(i)))=Pmin; //把這些位置的點的灰度值賦值為Pmin end 6) 利用圖像載體加密時用到的Logistic混沌序列,對恢復(fù)出來的加密載體圖像進行解密,最終得到原始載體圖像. 選用256×256的Lena灰度圖像作為載體進行實驗,結(jié)果如圖2所示.若采用22×22的水印圖像,經(jīng)過實驗得出恢復(fù)處理后的載體圖像的PSNR=Inf,含水印的直接解密圖像的PSNR=55.377 2 dB.圖2(d)的PSNR值為無窮大,說明本文算法在成功提取水印以后能使載體恢復(fù)過程無失真,達到了算法可逆的基本要求. 圖2 Lena圖像的實驗結(jié)果Fig.2 Experimental results on Lena image 除了Lena圖像以外,還選取了Venice、Couple、Sailboat、Airplane、Carnev、Bridge、Barche這7幅圖像進行測試,8幅測試圖像如圖3所示.分別應(yīng)用本文算法、文獻[2]算法(簡稱為算法1)、文獻[3]算法(簡稱為算法2)計算出含水印的直接解密圖像的PSNR值. 表1列出了Lena、Sailboat、Airplane、Barche圖像對應(yīng)的PSNR值計算結(jié)果.另外,本文還選取了圖3中的Venice、Couple、Carnev和Bridge圖像,給出了它們對應(yīng)的含水印的直接解密圖像的PSNR值折線圖,結(jié)果如圖4所示. 圖3 8幅測試圖像Fig.3 Eight test images 從表1和圖4的結(jié)果中可以看出,每張圖像對應(yīng)的含水印直接解密圖像的PSNR值波動不明顯,應(yīng)用本文算法計算出的PSNR值比算法1和算法2計算出的PSNR值高,說明應(yīng)用本文算法直接解密得到的圖像質(zhì)量要好于應(yīng)用算法1和算法2的圖像質(zhì)量.而應(yīng)用本文算法恢復(fù)出來的載體圖像的PSNR值,經(jīng)過計算得出的結(jié)果都是無窮大,并且都能正確提取出水印,水印提取的錯誤率為0,很好地滿足了可逆水印的基本要求.另外,本文對原始水印進行了加密,在恢復(fù)出水印前還需要解密,這樣更增強了水印本身的安全性. 表1 PSNR值計算結(jié)果 圖4 PSNR值折線圖Fig.4 Line charts of PSNR 提出了一種在加密域中進行直方圖平移的可逆水印算法,該算法既能夠保證原始載體的信息不對外泄露,做到了隱私保護,又能保證水印的安全性.應(yīng)用該算法計算出的含水印直接解密圖像的PSNR值比較高,能夠無失真地恢復(fù)出原始載體,并且能正確提取水印.實驗結(jié)果表明,應(yīng)用本文算法計算得到的直接解密的圖像質(zhì)量要比應(yīng)用算法1和算法2的圖像質(zhì)量好,充分說明了本文算法是有效且可行的. 參考文獻: [1] 張煥國,韓文報,來學(xué)嘉,等.網(wǎng)絡(luò)空間安全綜述[J].中國科學(xué)(信息科學(xué)),2016,46(2):125-164. [2] ZHANG X P. Reversible data hiding in encrypted image[J]. IEEE signal processing letters,2011,18(4):255-258. [3] ZHANG X P. Separable reversible data hiding in encrypted image[J]. IEEE transaction on information forensics and security,2012,7(2):826-832. [4] NI Z C, SHI Y Q, ANSARI N,et al. Reversible data hiding[J]. IEEE transaction on circuits and system for video technology,2006,16(3):354-362. [5] 武丹. 可逆數(shù)字水印技術(shù)的研究[D]. 杭州:浙江大學(xué),2009. [6] 王俊祥,楊波. 基于直方圖平移可逆水印的性能估計[J]. 計算機應(yīng)用,2010,30(12):3246-3251. [7] HONG W, CHEN T S, WU H Y. An improved reversible data hiding in encrypted images using side match[J]. IEEE signal processing letters,2012,19(4):199-202.3.2 水印的提取
4 實驗結(jié)果與分析
5 結(jié)束語