趙培越, 張珍珍, 丁海洋, 李子臣
(北京印刷學(xué)院 信息工程學(xué)院, 北京 102600)
近年來, 互聯(lián)網(wǎng)、云計(jì)算、大數(shù)據(jù)等技術(shù)朝著高效快速的方向發(fā)展, 數(shù)據(jù)隱私保護(hù)和信息安全[1]日益受到重視, 其中圖像加密和數(shù)字水印成為了研究的熱點(diǎn).在一些特殊領(lǐng)域如醫(yī)學(xué)、軍事、衛(wèi)星監(jiān)測(cè)等需要對(duì)圖像進(jìn)行處理, 將密碼技術(shù)與數(shù)字水印結(jié)合到一起,提供了圖像加密與水印共存的安全保護(hù)方案[2].
圖像置換作為一種重要的圖像加密和技術(shù), 其目的是將目標(biāo)圖像進(jìn)行一定程度上的修改, 使其包含的真實(shí)信息可以不被破壞地隱藏起來, 這樣便具有不可見性, 保證了圖像傳輸?shù)陌踩?其基本思想是將數(shù)字圖像作為矩陣進(jìn)行有限次的初等置換來使圖像的像素點(diǎn)變得混亂無序, 從而實(shí)現(xiàn)加密效果.典型的有幻方置換、騎士巡游置換、Fibonacci置換、基于Hilbert曲線置換[3]等算法.其中Arnold置換直觀、簡(jiǎn)單、具有周期性, 使用非常方便, 該方法使像素的移動(dòng)具有混沌特性, 加密后的圖像安全性較高.
水印算法根據(jù)操作域的不同可分為3類: 空域算法、頻域算法以及壓縮域算法.空域算法有基于LSB的水印算法、基于差值擴(kuò)展的水印算法[4]和基于無損壓縮的水印算法[5]等.其中基于直方圖平移的可逆水印算法[6]是最具代表性的算法之一.文獻(xiàn)[7]對(duì)圖像分塊, 建立多個(gè)差值直方圖來嵌入水印信息; 文獻(xiàn)[8]通過混沌加密與直方圖平移結(jié)合, 實(shí)現(xiàn)了無損提取水印信息, 但其水印嵌入容量十分有限; 文獻(xiàn)[9]利用多組差值直方圖平移獲取更多差值, 通過圖像分塊和邊緣差值嵌入, 雖然提高了嵌入率, 但是其含水印圖像質(zhì)量隨之下降.文獻(xiàn)[10]提出了對(duì)載體圖像進(jìn)行分塊置換加密, 并通過DCT變換來嵌入水印信息, 文獻(xiàn)[11]對(duì)水印信息進(jìn)行置換加密, 對(duì)載體圖像進(jìn)行分塊后過DCT變換與直方圖平移來嵌入水印.
交換加密水印算法是現(xiàn)階段實(shí)現(xiàn)密碼技術(shù)和水印技術(shù)相結(jié)合的一種主要方法.文獻(xiàn)[12]最先提出了交換加密水印技術(shù)(Commutative Encryption and Watermarking , CEW), 將加解密、水印嵌入、提取融合到一起, 在發(fā)送前既可先加密后嵌水印, 也可先嵌水印后加密, 均能得到含水印的密文; 在發(fā)送后既可從密文中先提取水印, 再解密恢復(fù)圖像, 也可先解密, 再提取水印恢復(fù)圖像[13].而置換加密后不會(huì)對(duì)圖像的某些統(tǒng)計(jì)特征造成影響[14], 所以可通過修改原始載體圖像的統(tǒng)計(jì)特征來嵌入水印從而實(shí)現(xiàn)交換加密水印算法.文獻(xiàn)[15]將原始載體圖像分組嵌入比特信息后, 通過修改數(shù)據(jù)最低比特, 使得全組數(shù)據(jù)之和的奇偶性與對(duì)應(yīng)嵌入的水印信息相同, 并在同組數(shù)據(jù)范圍內(nèi)進(jìn)行置換從而實(shí)現(xiàn)CEW, 但僅對(duì)載體數(shù)據(jù)進(jìn)行置亂, 安全性有待提高.文獻(xiàn)[16]通過空間位置置換及修改載體圖像直方圖嵌入水印信息實(shí)現(xiàn)CEW.
基于對(duì)上述算法的研究, 利用Arnold置換前后直方圖不變的特性, 提出了一種基于Arnold置換的交換加密水印算法.原始載體圖像先進(jìn)行分塊, 再進(jìn)行塊內(nèi)和塊間的置換加密, 通過直方圖平移來實(shí)現(xiàn)水印嵌入.加密操作與水印嵌入操作的順序不影響含水印密文的生成, 且解密操作與水印提取操作的順序不影響水印信息的提取與圖像的恢復(fù).實(shí)驗(yàn)結(jié)果表明, 該算法可以無損恢復(fù)原始載體圖像并提取水印, 且解密后的含水印明文圖像質(zhì)量高, 水印的不可見性好.
本節(jié)主要介紹Arnold置換, 直方圖平移可逆水印算法及交換加密水印算法.
Arnold置換(又稱貓臉置換)是一種基于古典密碼體制的圖像加密算法, 本質(zhì)上是對(duì)長(zhǎng)寬相等的圖像中像素點(diǎn)的位置進(jìn)行多次矩陣運(yùn)算, 從而改變空間中像素點(diǎn)的位置, 破壞圖像相鄰像素點(diǎn)之間的相關(guān)性.
2.1.1 Arnold置換原理
傳統(tǒng)的Arnold置換[3]的矩陣形式可以表達(dá)為: 設(shè)有平面點(diǎn)集S=[0,1]×[0,1], 對(duì)(x,y)∈S則有:
若(x,y)為二維圖像坐標(biāo), 那么上述置換可以轉(zhuǎn)化為:
其中,n代表第n次變換.
2.1.2 Arnold置換的周期性
Arnold置換具有周期性[17], 通過對(duì)一個(gè)4×4矩陣進(jìn)行Arnold置換來說明Arnold的周期性.
可以看到經(jīng)過3次置換后, 矩陣A恢復(fù)成原始狀態(tài).Arnold置換周期與圖像階數(shù)的關(guān)系見表1.
表1 圖像階數(shù)N與置換周期T的關(guān)系
2.1.3 Arnold置換恢復(fù)算法
解密時(shí)需要用到Arnold置換恢復(fù)算法.目前歸納的Arnold置換恢復(fù)算法[18]有3種: 一是利用周期恢復(fù);二是通過逆矩陣恢復(fù); 三是解方程組法.本算法利用周期性來恢復(fù).
設(shè)大小為N×N的圖像進(jìn)行Arnold置換, 置換了n次, Arnold置換周期為T, 以此求恢復(fù)圖像.已經(jīng)置換n次, 利用置換周期, 只要再經(jīng)過T-(nmodT)次即可恢復(fù)原圖.
文獻(xiàn)[19]提出了基于直方圖平移的信息隱藏基本方案, 直方圖中橫坐標(biāo)是灰度值, 縱坐標(biāo)是該灰度值對(duì)應(yīng)的像素點(diǎn)的數(shù)量, 而每一個(gè)豎條稱為一個(gè)bin.直方圖中最高的那個(gè)點(diǎn), 就稱為峰點(diǎn)P.最低的那個(gè)點(diǎn)(通常為0), 叫做零點(diǎn)Z(如無為0的點(diǎn), 可以將灰度值為254的點(diǎn)的灰度值改為255, 并進(jìn)行標(biāo)記, 以此空出254位置, 最后可根據(jù)標(biāo)記恢復(fù)).
對(duì)灰度圖像直方圖進(jìn)行分析, 通過將直方圖峰值點(diǎn)與零點(diǎn)的像素平移來空出嵌入空間, 并在峰值點(diǎn)嵌入水印信息, 提取恢復(fù)時(shí)根據(jù)峰值點(diǎn)與相臨的bin便可提取水印信息并恢復(fù)圖像.直方圖平移嵌水印過程如圖1.
圖1 直方圖平移嵌水印流程圖
在發(fā)送方, 加密與嵌入水印順序可以交換; 在接收方, 可從含水印的密文圖像中直接提取水印, 也可從解密后恢復(fù)圖像的中提取水印, 從而達(dá)到交換加密水印的目的.交換加密水印算法框架如圖2.其中I為原始載體圖像,w為水印,k為密鑰,Iw為含水印圖像,為含水印密文圖像.
圖2 交換加密水印算法框架
本文提出的基于Arnold置換的交換加密水印算法如圖3.
圖3 基于Arnold置換的交換加密水印算法
算法步驟可總結(jié)如下:
(1) 對(duì)原始圖像進(jìn)行分塊;
(2) 在嵌入水印時(shí), 在明文和密文中均可以嵌入,最終得到含水印密文圖像;
(3) 提取水印時(shí), 可從含水印密文圖像中直接提取,也可解密后再提取.
算法中涉及的參數(shù)有a、b、n1、n2、T1、T2.其中a、b為置換矩陣參數(shù),ab≠0, (n1modT1)≠0,(n2modT2)≠0.n1為水印圖像置換次數(shù)與原始圖像各小塊的塊間置換次數(shù),n2為原始圖像各小塊的塊內(nèi)置換次數(shù).T1為水印圖像對(duì)應(yīng)的置換周期,T2為原始圖像小塊對(duì)應(yīng)的置換周期.
3.1.1 先加密后嵌水印
其步驟可總結(jié)如下:
(1) 水印圖像m置換n1次, 得到水印w;
(2) 把原始圖像I分為k個(gè)的大小為8×8的明文分塊, 記第k小塊為I(k).對(duì)I(k)按照2.1.1小節(jié)分別進(jìn)行塊內(nèi)置換n2次、塊間置換n1 次, 最終得到密文圖像I′;
(3) 按照從上到下、從左到右的方式遍歷密文小塊I′(k)的像素點(diǎn);
(4) 將小塊內(nèi)P+1到Z-1的所有bin向右平移一位, 空出P+1的bin.可通過判斷某個(gè)點(diǎn)的灰度值是否在P-Z之間, 然后對(duì)應(yīng)灰度值加1即可;
(5) 每個(gè)密文小塊嵌入1 bit信息, 嵌入到峰值點(diǎn)P中.僅在第一個(gè)峰值點(diǎn)像素值P處嵌入信息.嵌0就是加0運(yùn)算, 嵌1就是加1運(yùn)算, 這樣像素值就會(huì)保持為P不變或者變?yōu)镻+1.
嵌入公式如式(4)所示:
其中,p是原始像素值,b是1 bit水印,p′是嵌入信息后的像素值;
(6)將全部水印信息嵌入到密文圖像I′, 最終得到含水印的密文圖像.
3.1.2 先嵌水印后加密
其步驟可總結(jié)如下:
(1) 水印圖像m置換n1次, 得到水印w;
(2) 把原始圖像I分為k個(gè)的大小為8×8的明文分塊, 記第k個(gè)小塊為I(k);
(3) 按照3.1.1小節(jié)中步驟(3)-步驟(5), 將水印w嵌入到原始圖像I中, 每個(gè)小塊嵌入1 bit信息, 最終得到含水印的圖像Iw;
(4) 對(duì)Iw按照式(3)分別進(jìn)行塊內(nèi)置換n2次、塊間置換n1次, 最終得到含水印的密文圖像.
接收方接收到含水印的密文圖像后進(jìn)行相應(yīng)處理,可先提取水印信息、恢復(fù)圖像; 也可解密以后再提取水印信息、恢復(fù)圖像.在提取水印時(shí), 因?yàn)槊總€(gè)小塊只嵌入1 bit水印信息, 所以只需判斷像素值為P+1的點(diǎn)的個(gè)數(shù)即可得知該小塊嵌入的是0還是1.
本文以先加密后嵌水印得到的含水印密文圖像為例, 對(duì)提取水印恢復(fù)圖像過程進(jìn)行詳細(xì)描述.
3.2.1 直接提取水印、恢復(fù)圖像
其步驟可總結(jié)如下:
(1) 按照與嵌入時(shí)相同的方式遍歷小塊Iw′(k)的像素點(diǎn).
(2) 判斷小塊Iw′(k)內(nèi)像素值P+1的個(gè)數(shù)num.
(3) 提取1 bit水印信息, 如式(5)所示:
(4) 其他小塊重復(fù)步驟(1)-步驟(3), 完成全部水印信息的提取, 最終得到水印圖像w, 然后對(duì)w再置換T1-(n1modT1)次得到水印圖像m.
(5) 提取水印后, 將I′(k)中像素值進(jìn)行處理, 如式(6)所示:
(6) 其他小塊重復(fù)步驟(1)-步驟(5), 最終獲取完整的密文圖像I′.
(7) 對(duì)I′(k)塊間置換T1-(n1modT1)次, 塊內(nèi)置換T2-(n2modT2)次, 得到恢復(fù)圖像.
3.2.2 先解密, 再提取水印恢復(fù)圖像
其步驟可總結(jié)如下:
(2) 對(duì)Im各小塊進(jìn)行處理, 同3.2.1小節(jié)中步驟(1)-步驟(3).最終得到水印m.
(3) 按照式(6)對(duì)提取水印后的圖像進(jìn)行處理, 得到恢復(fù)圖像.
本文算法在Matlab R2020a, Windows 10操作系統(tǒng)下進(jìn)行仿真測(cè)試, 使用水印算法的客觀評(píng)價(jià)標(biāo)準(zhǔn), 選取大小為512×512的經(jīng)典灰度圖像進(jìn)行測(cè)試, 從加密參數(shù)、不可見性、可逆性、效率說明算法的性能.置換矩陣中參數(shù)選取為a=1,b=1.
嵌入率可以用來衡量算法的嵌入容量, 計(jì)算公式如式(7)所示:
選取三幅灰度圖Lena、Boat、Peppers, 在嵌入水印容量為0.156 bpp時(shí), 對(duì)置換加密參數(shù)(n1,n2)進(jìn)行測(cè)試.選取6對(duì)不同參數(shù)對(duì) (n1,n2)時(shí), 在密文域嵌水印,解密后得到的含水印圖像的PSNR值見表2.
表2 不同(n1, n2)時(shí)含水印圖像PSNR值 (dB)
峰值信噪比PSNR值可以說明含水印明文圖像中水印的不可見性, PSNR值越大, 說明水印的不可見性越好.本文算法在不同嵌入容量下, 解密得到的含水印圖像的PSNR值及平均PSNR值.見表3.
表3 不同嵌入容量下PSNR值及平均值 (dB)
通過表3不難看出, 本文算法在水印嵌入后, PSNR平均值都在51 dB以上, 且隨著嵌入容量的增加, PSNR值有所提升.
嵌入率為0.0156 bpp, 載體圖像為L(zhǎng)ena圖時(shí)在密文中嵌水印實(shí)驗(yàn)結(jié)果, 如圖4.
嵌入率為0.0156 bpp, 載體圖像為L(zhǎng)ena圖時(shí)在明文中嵌水印實(shí)驗(yàn)結(jié)果, 如圖5.
通過圖4和圖5可以看出在密文域或明文域中嵌水印, 解密后含水印圖像質(zhì)量較高, 水印不可見性好.
圖4 密文域嵌水印實(shí)驗(yàn)結(jié)果
圖5 明文嵌水印實(shí)驗(yàn)結(jié)果
本文還與文獻(xiàn)[7-9]中相關(guān)經(jīng)典算法進(jìn)行對(duì)比, 見表4.
表4 算法性能對(duì)比
與文獻(xiàn)[7]、文獻(xiàn)[8]算法對(duì)比, 可以看出本文算法在PSNR值與嵌入容量上占優(yōu); 與文獻(xiàn)[9]對(duì)比, 在嵌入容量相近時(shí), 本文算法PSNR值也要更高.
通過歸一化系數(shù)NC值來判斷是否有可逆性.本文給出了10幅512×512大小的灰度圖像的NC值, 見表5.
從表5中可以看出, 所有圖像的NC值均為1, 說明恢復(fù)圖像與原始圖像一樣.而且提取出的水印錯(cuò)誤率為0, 說明本算法具有可逆性.
表5 可逆性測(cè)試
本實(shí)驗(yàn)還進(jìn)行了算法效率測(cè)試, 在不同嵌入容量下, 對(duì)10幅灰度圖分別進(jìn)行10次測(cè)試, 最后取平均值,結(jié)果見表6.
表6 不同嵌入容量下各算法的運(yùn)行時(shí)間(s)
由表6可知, 隨著數(shù)據(jù)量的增大, 算法所需時(shí)間有所增長(zhǎng), 但總體滿足效率要求.
本文提出的基于Arnold置換的交換加密水印算法, 實(shí)現(xiàn)了加密操作與水印操作的交換, 解密后的含水印圖像質(zhì)量高, 水印的不可見性好.算法中兩次置換加密提高了載體圖像在使用及分發(fā)時(shí)的安全性, 不僅能有效保護(hù)與恢復(fù)載體圖像, 而且從含水印密文圖像或解密后的含水印圖像中都能提取水印信息, 對(duì)于身份認(rèn)證與版權(quán)保護(hù)有著重要作用, 可以廣泛地應(yīng)用于醫(yī)學(xué)、軍事等領(lǐng)域.