林文兵, 張敏情, 周 能, 孔詠駿
(武警工程大學網絡與信息安全武警部隊重點實驗室, 西安 710086)
可逆信息隱藏技術[1-2]是信息隱藏研究領域的重要分支,是接收方在正確提取信息后,還能無差錯地恢復原始載體。嚴格來講,它屬于一種脆弱水印。因此,通常應用于遠程醫學、司法取證等領域。近年來,可逆信息隱藏技術得到不斷的發展,目前有三種典型的嵌入方式:無損壓縮[3-4]、差分擴展[5-6]和直方圖平移[7-9]。Thodi等[10]提出了預測誤差擴展算法。此后,該算法得到不斷的改進,如直方圖平移和預測誤差擴展相結合等。
隨著黑客攻擊,網易郵箱泄露等信息安全事件的頻繁發生,密文域可逆信息隱藏受到了廣泛的關注[11-13]。它要求用于嵌入信息的載體是經過加密的,并且在正確提取信息后能無損地恢復原始載體。同時,由于云服務的推廣,密文域可逆信息隱藏技術作為密文信號處理技術與信息隱藏技術的結合也得到了持續的研究。
為了提高嵌入容量,Ma等[14]提出了加密前預留空間的方法,通過將像素值的最低有效位嵌入到其他像素值中,從而得到預留空間進行信息嵌入。雖然該方法可以提高嵌入容量,但是存在發送方不能提前知道嵌入信息的長度和復雜預處理增加系統負擔的問題。因此,不能滿足實際應用。相反,加密后預留空間[15-17]是對加密后的像素進行修改,從而得到預留空間。Zhang[15]提出加密后預留空間的方法,通過翻轉每個塊中的三個最低有效位,從而進行信息的嵌入。Hong等[16]通過更好地運用空間相關性,將Zhang的算法進一步改進。Zhang[18]提出了可分離算法,即接收方可以在明文和密文上正確提取秘密信息。Qian等[19]運用信源分布編碼將Zhang的方法進一步改進。Ren等[20]將置換有序二進制(permutation ordered binary,POB)編碼技術引入密文域可逆信息隱藏。
受文獻[20]的啟發,為了進一步解決嵌入信息時造成溢出問題和加密后圖像分塊內仍存在一定的相關性問題。同時,提高秘密信息的嵌入容量?,F將混沌映射和POB編碼運用于密文域可逆信息隱藏。首先,圖像擁有者運用混沌映射對原始圖像進行加密,得到加密圖像。然后,數據隱藏者對加密圖像進行預處理后,運用POB編碼技術在滿足嵌入條件的像素點上進行秘密信息的嵌入。以期實現秘密信息的正確提取和原始圖像的無損恢復。


(1)

(2)
式中:i為二進制字符串的位置;j為POB編碼系統中的數值位置;bj為二進制字符串各個位置的數值,如0或1;Pj為二進制字符串各個位置的數值之和;V(B)為POB編碼系統中的數值。
1.2.1 Logistic映射
Logistic映射[22]是一種非線性方程,具有混沌特性,可表示為
xn+1=uxn(1-xn)
(3)
式(3)中:u為控制參數,取值范圍為[0,4];xn為輸出的混沌序列。
1.2.2 Sine映射
Sine映射與Logistic映射相類似,也具有簡單的混沌特性,可表示為
xn+1=rsin(πxn)
(4)
式(4)中:r為控制參數,取值范圍為(0,1];xn為輸出的混沌序列。
1.2.3 改進的混沌映射
張靜等[23]為了解決區間受限和點分布不均勻問題,將Logistic映射和Sine映射結合越來,得到改進后的混沌映射,可表示為
xn+1=r{usin(πxn)[1-sin(πxn)]×2kmod1}
(5)
式(5)中:r= 20;k為控制參數,取k= 18。
基于混沌映射和POB編碼的密文域可逆信息隱藏算法流程如圖1所示。

圖1 方案流程圖Fig.1 Scheme flow chart
2.1.1 混沌系統初始化
在圖像加密過程中,由SHA-256哈希函數生成一個256位的密鑰K。將該密鑰等分成32組。如K=k1,k2,…,k32,其中,ki= {ki,0,ki,1,…,ki,7}(i=1,2,…,32)。同時,通過密鑰K和4個預設密鑰可對混沌系統進行初始化,表示為
x=x0+

(6)
y=y0+

(7)
u=mod(u0+k17⊕k18⊕k19⊕k20⊕k21⊕
k22⊕k23⊕k24/256,1)
(8)
r=mod(r0+k25⊕k26⊕k27⊕k28⊕k29⊕
k30⊕k31⊕k32/256,1)
(9)
2.1.2 圖像加密
圖像擁有者將大小為M×N的原始圖像I轉化成大小為L的8位二進制圖像I′,其中,L=M×8N。同時,通過混沌系統初始化得到的x、u、r代入式(5)中進行N+L次迭代。然后,舍棄前N次后可得到混沌序列S= {s1,s2, …,sL},并將其按升序進行排列得到序列Sn= {sn,1,sn,2, …,sn,L}和相應的位置索引index = {d1,d2, …,dL}。將轉化后的圖像I′通過位置索引index進行置亂得到圖像I″,表示為
I″i=I′di,i=1,2,…,L
(10)
同理可得,將混沌系統初始化的y、u、r代入式(5)中,經過N+L次迭代,得到序列XS。而后,通過式(11),可得到擴散圖像C。

(11)
同時,將Ci進行合并可得到大小為M×N的圖像Ic。再將混沌序列S、XS代入式(12)和式(13)中,可得S1、Xt,即
S1=mod[floor(1016S),M×N]+1
(12)
Xt=104XS-fix(104XS)
(13)
再將S1和Xt相加,組合成大小為16的數組bs,如式(14)所示。
bs(k)=S1(k2+80)+Xt(256k),k=1,2,…,16
(14)
將得到數組bs按升序進行排列,可得到相應的位置索引Tb= {tb1,tb2, …,tb16}。最后,將圖像Ic分成16份,按位置索引Tb進行置亂,可得到密文圖像Im。同時,將加密密鑰K、初始值x、y、r、u和迭代次數N運用算術編碼進行壓縮后,嵌入到最后一行的最低有效位中。
2.2.1 差分直方圖生成
數據隱藏者收到加密圖像后,將其劃分成不重疊、大小為3×3的小分塊。同時,標記為B(1,1)、B(1,2)、B(1,3)、B(2,1)、B(2,2)、B(2,3)、B(3,1)、B(3,2)、B(3,3),并以中心像素點B(2,2)為參考像素點。分塊內的參考像素與其相鄰像素的差值可通過式(15)計算得到,即
di,j=B(i,j)-B(2,2),B(i,j)≠B(2,2)
(15)

圖2 傳統的移位嵌入與本文算法的直接嵌入對比Fig.2 Comparison of traditional shift embedding and direct embedding of the algorithm in this paper
由于圖像加密后仍存在一定的相關性,所以分塊內相鄰像素間的差值一般集中在[-1,1],生成的直方圖如圖2所示。傳統的運用預測誤差擴展算法進行信息嵌入時,會先移位以騰出嵌入空間。而后,在差值為0或1上進行信息的嵌入。以Lena為例,嵌入過程如圖2(a)、圖2(b)所示。但是,傳統的嵌入方法會不可避免地造成溢出問題或者會引入輔助信息,從而增加系統運算的負擔。圖2(c)是本文算法的嵌入過程,該方案在滿足參考像素與其相鄰像素的差值為-1、0、1時,在相應的像素點上直接進行信息的嵌入。同時,嵌入信息后不會產生溢出問題。
2.2.2 信息嵌入
對加密圖像進行分塊后,利用參考像素與其相鄰像素之間的差值生成直方圖。同時,通過差值直方圖中-1、0、1的高度來預估可嵌入的容量。如果,待嵌入秘密信息的長度L大于可嵌入容量時,則不能進行信息嵌入的操作。如果,待嵌入秘密信息的長度L小于可嵌入容量時,則對每個滿足條件的像素點進行秘密信息的嵌入。而后,利用POB編碼系統轉化為對應的POB值。根據POB編碼的特性,如果向每個像素點中嵌入1 bit秘密信息時,則轉化成POB系統中的最大值是125;如果向每個像素點中嵌入2 bit秘密信息時,則轉化成POB系統中的最大值是251。所以,本文選擇在每個滿足條件的像素點中嵌入2 bit秘密信息,一方面不超過灰度圖像像素的最大值,另一方面還提高了嵌入容量。最后,當秘密信息嵌入完成后,將秘密信息的長度L和像素點嵌入的比特數進行壓縮,然后嵌入到參考像素點的最低有效位。為了便于理解,以下通過一個具體例子來說明。
如圖3所示,以Lena大小為3×3的局部分塊來細節說明信息嵌入的過程。首先,將加密后的像素值轉化成相應的8位二進制。由于加密后的分塊間仍存在一定的相關性。所以,以分塊中B(2,2)=169為參考像素點,并與其相鄰的像素作差,可得到相應的差值di,j。同時,判斷該差值是否在[-1,1]范圍內。如果不滿足條件,則跳過該像素點,進行下一輪的判斷。如果滿足條件,則對該像素點進行2 bit秘密信息的嵌入。假設待嵌入的秘密信息是011110…011,則對滿足條件的d1,2、d2,1、d3,1依次進行秘密信息的嵌入,使其轉化成10位二進制的POB序列。然后,運用POB編碼系統將POB序列進行無損壓縮,而后轉化成相應的POB值。最后,將嵌入后的像素點按原來的位置進行還原,得到含秘的加密圖像。同時,將秘密信息的長度L和嵌入的比特數進行算術編碼壓縮,嵌入到參考像素的最低有效位中。
當接收方收到含秘的加密圖像后,先將含秘的加密圖像劃分成不重疊、大小為3×3的小分塊。而后,從分塊中參考像素點的最低有效位提取出秘密信息的長度L和嵌入信息的比特數,并進行解碼。其次,根據嵌入的比特數,將分塊里的B(1,1)、B(1,2)、B(1,3)、B(2,1)、B(2,3)、B(3,1)、B(3,2)、B(3,3)轉化成10位的POB序列。然后,取相鄰像素點的前8位與參考像素點作差值。如果差值在[-1,1]范圍內,則提取出后兩位秘密信息。如果差值不在[-1,1]范圍內,則該像素點沒有進行信息嵌入操作。
在秘密信息提取完成后,從加密圖像的最后一行中提取出加密密鑰K、初始值x、y、r、u和迭代次數N。然后運用算術編碼進行解壓縮,根據得到的輔助信息,進行加密的反向操作就可以無損地恢復原始圖像。
為了測試該算法性能,選用USC-SIPI圖像庫中大小為512×512的256級灰度圖像進行實驗,實驗環境為:CPU: Intel(R) Core(TM) i7-8550U @ 2.00GHz, RAM: 16 GB, OS: Windows 10, Programming: MATLAB R2018a。并以4張測試圖像來顯示結果,如圖4所示。主要從三個方面加密性能、嵌入容量與峰值信噪比和文獻性能比較進行分析。
利用混沌系統對圖像進行加密,為了驗證該算法加密的安全性和抗攻擊能力,實驗分析了加密圖像的相關性、直方圖和信息熵以及選擇明文攻擊下的魯棒分析。為了更好演示結果,以Lena圖像為例進行實驗。
3.1.1 圖像的相關性分析
原始圖像的相鄰像素之間具有一定的相關性,但是加密圖像在理想狀態下,相關系數幾乎為0,如圖5所示。

圖5 原始圖像與加密圖像的相關性Fig.5 Correlation between original image and encrypted image
從圖5可以看出,原始圖像相關性比較明顯,在對角線上的分布各不相同。然而,加密圖像接近于隨機均勻分布。因此,加密后不會造成信息泄露。
3.1.2 圖像的信息熵分析
信息熵是系統有序程度的度量,不確定性越大,熵也就越大。因此,對原始圖像和加密圖像的信息熵進行分析。其中,信源s的信息熵計算公式為

(16)
式(16)中:P(si)為像素si的概率。通過實驗可得,原始圖像和加密圖像的信息熵如表1所示。

表1 原始圖像與加密圖像的信息熵
從表1中可以得出一般情況下,原始圖像的信息熵比相應的加密圖像小。在理想情況下,8位的灰度圖像在加密后得到的信息熵等于8。本文運用混沌映射系統對原始圖像進行加密后,圖像的信息熵近似等于8。因此,原始圖像在該加密算法進行加密后具有較高的安全性。
3.1.3 圖像的直方圖分析
直方圖是圖像的最基本的統計特征,用來表示圖像中像素不同灰度值出現的頻率。其中,Lena的原始圖像與加密圖像的直方圖如圖6所示。

圖6 原始圖像與加密圖像的直方圖Fig.6 Histogram of original image and encrypted image
如圖6所示,一般情況下,原始圖像的直方圖分布是不均勻的,具有較大的波動性。但是,加密圖像的直方圖分布是均勻的、一致的。因此,原始圖像經過加密后得到的加密圖像是安全的。
3.1.4 選擇明文攻擊下的魯棒分析
已知明文攻擊是指攻擊者擁有用于待破解的密文相同密鑰加密的一個或多個明密文對,密碼學中認為選擇明文攻擊的難度比已知明文攻擊要復雜。所以,只要能夠抵抗選擇明文攻擊就能抵抗已知明文攻擊。

圖7 差異分析Fig.7 Difference analysis
如圖7所示,雖然圖7(b)相比于原始圖像只改變了1 bit。但是,加密后的圖像完全不同。所以選擇任何圖片運用混沌映射進行加密,都能抵抗選擇明文的攻擊。
為了顯示嵌入信息后圖像的視覺變化,通常運用峰值信噪比(PSNR)來表示。其中PSNR可以通過式(17)和式(18)進行計算。同時,本文結合結構相似性(SSIM)對還原后的圖像是否具有可逆性進行判別,結構相似性可通過式(19)計算。

(17)

(18)

(19)
式中:M、N為圖像的尺寸;p(i,j)為原始載體的像素值;c(i,j)為加密后圖像的像素值;μX、μY為圖像的像素;σX、σY為圖像像素的標準差;σXY為圖像像素的協方差。
通過測試圖像在最大嵌入容量下進行PSNR、SSIM的測試。由于該算法只能在差值為[-1, 1]的范圍內進行信息嵌入。所以,最大嵌入容量是可嵌像素點的2倍,即最大嵌入率Ec通過式(20)計算。如表2所示,4張測試圖像本身平滑度各不相同,所以最大嵌入容量也不相同。由于Plane圖像整體上較為平滑,分塊內像素值差異較小。因此,最大嵌入容量可達到0.502 bpp(bits per pixel)。同時,還原后圖像的PSNR = ∞,SSIM = 1,表明該算法具有真實的可逆性。

(20)
式(20)中:d-1為參考像素與相鄰像素的差值為-1;d0為參考像素與相鄰像素的差值為0;d1為參考像素與相鄰像素的差值為1。

表2 加密圖像中秘密信息的最大嵌入容量

表3 本文算法與相關文獻的最大嵌入率比較

圖8 不同嵌入率下加密圖像中PSNR值的變化Fig.8 Changes in PSNR values in encrypted images at different embedding rates
從表3中可以得出,加密圖像中的最大嵌入容量取決于圖像的平滑度。同時,與近期相關文獻相比,該算法的最大嵌入容量的優勢比較明顯。例如,在Lena圖像中,運用本文算法進行信息嵌入,嵌入率相比于文獻[20]提高了0.112 1 bpp。
本小節主要對加密圖像中相關性問題以及是否能無損恢復原始圖像進行比較。假設向加密后的Lena、Man中嵌入79 665 bit秘密信息。從圖8可以看出,文獻[17]在最低有效位進行信息嵌入,會產生一些微小的變化。但是,運用POB編碼進行信息嵌入后的PSNR會發生新的、較大的改變,從而進一步破壞塊內的相關性,提高了加密算法的安全性。同時,本文測試了還原圖像的準確率。從圖9可以看出,與文獻[15]和文獻[18]相比,隨著嵌入率增大時,文獻[15]和文獻[18]在圖像還原過程中會存在失真情況。但是,運用POB編碼進行信息嵌入,能夠無損地恢復原始圖像。

圖9 不同嵌入率下還原圖像的PSNR值Fig.9 PSNR values of restored images at different embedding rates
將POB編碼引進密文域可逆信息隱藏,不僅能夠解決嵌入信息時造成的溢出問題,而且可以進一步破壞加密圖像中的相關性。同時,運用參考像素點與其相鄰像素點作差值,使得嵌入容量有了較大的提高。但是,運用POB編碼進行信息的嵌入,會使直接解密的圖像存在一定的失真。所以,下一步要研究在保證嵌入容量的條件下,如何提高圖像的峰值信噪比。