方 頌,王彥嫻,譚 陽(yáng)
(1.湖南大學(xué) 計(jì)算機(jī)科學(xué)學(xué)院,長(zhǎng)沙 410000; 2.湖南廣播電視大學(xué),長(zhǎng)沙 410004)
數(shù)字圖像安全技術(shù)在軍事和醫(yī)學(xué)等高度機(jī)密領(lǐng)域發(fā)揮著重要作用。在加密圖像的傳輸或歸檔過(guò)程中,需要在加密階段使用密鑰情況下對(duì)其進(jìn)行分析[1-2],尤其是在加密階段必須完成對(duì)加密域中可逆數(shù)據(jù)隱藏的數(shù)據(jù)壓縮和認(rèn)證。例如,在云計(jì)算場(chǎng)景中,如果不知道圖像的原始內(nèi)容或用于加密圖像的密鑰,則可在加密圖像中封裝秘密消息。但在解碼階段,要求原始圖像必須完全可恢復(fù),秘密信息必須無(wú)差錯(cuò)提取。因此,需要在封裝容量和重建圖像質(zhì)量之間取得權(quán)衡點(diǎn)[3-4]。
針對(duì)上述問(wèn)題,研究人員提出了很多解決方案。文獻(xiàn)[5]對(duì)原始圖像進(jìn)行AES加密,并隨機(jī)選取1個(gè)4×4像素位置進(jìn)行秘密信息封裝,為重建覆蓋圖像,對(duì)圖像局部標(biāo)準(zhǔn)偏差進(jìn)行分析。文獻(xiàn)[6]提出用簡(jiǎn)單XOR操作加密原始圖像,然后將加密圖像劃分成塊,并且對(duì)每個(gè)塊進(jìn)行集合分割。在每個(gè)集合中,每個(gè)像素關(guān)鍵位進(jìn)行壓縮騰出空間以便獲得額外數(shù)據(jù)。在解碼階段,觀察塊進(jìn)行原始信息平滑恢復(fù)和提取。文獻(xiàn)[7]提出圖像加密保留技術(shù),采用可逆數(shù)據(jù)隱藏法直方圖釋放原始圖像的一部分。之后,通過(guò)加密圖像中的最高有效位(Most Significant Bit,MSB)值對(duì)圖像進(jìn)行加密,并插入信息。文獻(xiàn)[8]利用概率和同態(tài)性質(zhì)的公鑰密碼加密封裝圖像,加密后將數(shù)據(jù)嵌入加密像素的MSB信息中。文獻(xiàn)[9]描述了一種基于分布式信源編碼(Dishibuted Source Coding,DSC)的方法,利用流密碼對(duì)原始圖像進(jìn)行加密,在MSB層面對(duì)一些位數(shù)據(jù)進(jìn)行壓縮,從而為秘密數(shù)據(jù)騰出空間。以上研究都獲得了較好的數(shù)據(jù)加密效果,但是均未考慮加密數(shù)據(jù)的容量問(wèn)題。因此,加密圖像在信息封裝過(guò)程中存在容量限制問(wèn)題。
為解決上述問(wèn)題,本文提出一種基于MSB預(yù)測(cè)的高容量可逆數(shù)據(jù)隱藏圖像加密算法。由于清晰圖像中像素與其相鄰區(qū)域之間的局部相關(guān)性,相鄰2個(gè)像素值非常接近,使用已經(jīng)解密的圖像來(lái)預(yù)測(cè)像素值較合理,但存在一些誤差。因此,本文給出一種修正預(yù)測(cè)誤差的大容量可逆數(shù)據(jù)隱藏方法。該方法在加密前首先預(yù)測(cè)誤差糾正,根據(jù)誤差位置圖對(duì)原始圖像進(jìn)行預(yù)處理,避免所有預(yù)測(cè)誤差,然后對(duì)預(yù)處理后的圖像加密處理,通過(guò)MSB預(yù)測(cè)對(duì)圖像進(jìn)行無(wú)損重建。
現(xiàn)有的圖像加密方法沒(méi)有很好地融合高嵌入容量(接近1bpp)和高視覺(jué)質(zhì)量(大于50 dB)。在大多數(shù)情況下,基于預(yù)測(cè)誤差分析(PE)或使用直方圖移位技術(shù)的方法,替換一些像素的LSB值來(lái)隱藏秘密消息的比特。然而,如果圖像被加密,則很難檢測(cè)是否包含隱藏消息。事實(shí)上,加密圖像的像素值是偽隨機(jī)生成的。因此,像素與其鄰域之間沒(méi)有相關(guān)性。基于上述原因,本文使用MSB值而不是LSB值來(lái)嵌入隱藏消息。通過(guò)這種方法,在加密域中,保密性仍然相同,并且在解密期間,MSB值的預(yù)測(cè)比LSB值的預(yù)測(cè)更容易獲得[10-11]。
本節(jié)首先提出一種數(shù)據(jù)加密封裝與修復(fù)算法,實(shí)現(xiàn)對(duì)數(shù)據(jù)加密的可逆恢復(fù)。該算法的編碼階段包括3個(gè)主要步驟:MSB預(yù)測(cè)誤差檢測(cè),考慮融合MSB誤差的加密,MSB替代數(shù)據(jù)加密,具體過(guò)程如圖1所示。
圖1 加密域數(shù)據(jù)封裝算法編碼過(guò)程
基于MSB的加密數(shù)據(jù)封裝算法的目標(biāo)是m×n像素的原始圖像I,可以通過(guò)使用一個(gè)密鑰Ke,其他人可以在不知道密鑰Ke的情況下利用隱藏密鑰Kw對(duì)使用數(shù)據(jù)消息進(jìn)行封裝。在這個(gè)過(guò)程中,得到標(biāo)記加密圖像Iew,同原始圖像大小相同。該算法實(shí)現(xiàn)過(guò)程如下:
1)預(yù)測(cè)誤差檢測(cè):提出利用MSB替換的秘密信息封裝方法,數(shù)據(jù)隱藏步驟之后原始的MSB值丟失。在解碼階段,能夠毫無(wú)差錯(cuò)地預(yù)測(cè)MSB值。為了重建原始圖像,使用以前的像素預(yù)測(cè)當(dāng)前像素值。因此,需要分析原始圖像內(nèi)容,以檢測(cè)所有可能的預(yù)測(cè)錯(cuò)誤。具體步驟為:
步驟1考慮當(dāng)前像素p(i,j)。其中0≤i 步驟2根據(jù)對(duì)以前像素p(i,j)的鄰域掃描,計(jì)算pred(i,j)的值,并作為解碼步驟中的預(yù)測(cè)器。 步驟3計(jì)算pred(i,j)和p(i,j)之間的絕對(duì)差值,以及pred(i,j)和inv(i,j)之間的絕對(duì)差值,分別表示為Δ和Δinv,形式為: (1) 步驟4對(duì)比Δ和Δinv的計(jì)算值,如果Δ<Δinv,則不存在預(yù)測(cè)誤差,因此p(i,j)的原始值比逆值更接近預(yù)測(cè)值。否則,會(huì)存在誤差,可將此信息存儲(chǔ)到誤差位置的二進(jìn)制圖中,這個(gè)過(guò)程并不會(huì)增加過(guò)程的復(fù)雜度。 2)圖像加密:為了使原始圖像不可直接讀取,使用加密密鑰Ke=(c,x0)對(duì)其進(jìn)行加密,如圖2所示。 圖2 圖像加密過(guò)程 從圖2可知,該密鑰的元素用作混沌發(fā)生器的參數(shù),混沌發(fā)生器采用分段線性混沌圖方式[10]。通過(guò)使用該混沌發(fā)生器,可得到偽隨機(jī)序列s(i,j),并可通過(guò)異或(XOR)操作對(duì)像素pe(i,j)進(jìn)行加密計(jì)算: pe(i,j)=s(i,j)⊕p(i,j) (2) 由于加密階段是完全可逆的,沒(méi)有溢出,可以恢復(fù)清晰圖像而不作任何更改。此外,本算法中使用了1個(gè)混沌發(fā)生器,但對(duì)于密碼安全的偽隨機(jī)數(shù)發(fā)生器是兼容的。例如,在OFB模式下使用AES算法,唯一的要求是在加密階段使用流密碼方式進(jìn)行數(shù)據(jù)加密。 3)數(shù)據(jù)封裝:在數(shù)據(jù)封裝階段,可在不知道加密密鑰Ke和原始圖像內(nèi)容的情況下,對(duì)加密圖像中的數(shù)據(jù)進(jìn)行封裝。通過(guò)使用數(shù)據(jù)隱藏密鑰Kw,首先對(duì)插入的消息進(jìn)行加密,以防止標(biāo)記加密圖像封裝后對(duì)其進(jìn)行檢測(cè)。其次,對(duì)加密圖像像素進(jìn)行掃描,從左到右,從上到下(掃描線順序),對(duì)秘密消息的每個(gè)可用像素的MSB利用1位bk進(jìn)行替代,0≤k pew(i,j)=bk×128+(pe(i,j)mod 128) (3) 只有第一個(gè)像素不能被標(biāo)記,因?yàn)橹凳遣豢深A(yù)測(cè)的,所以值不能更改。 圖3 解碼方法結(jié)構(gòu)示意圖 如果接收者只有Kw,按照掃描線順序?qū)?biāo)記加密圖像的像素進(jìn)行掃描,每個(gè)像素的MSB進(jìn)行提取以檢索加密的秘密消息[11]: bk=pew(i,j)/128 (4) 步驟1加密密鑰Ke可利用m×n偽隨機(jī)字節(jié)生成序列s(i,j)。 步驟2基于掃描線順序?qū)?biāo)記加密圖像的像素進(jìn)行掃描,對(duì)于每個(gè)像素,在偽隨機(jī)流中使用關(guān)聯(lián)二進(jìn)制序列s(i,j),結(jié)合標(biāo)記加密值pew(i,j)異或操作可提取到7個(gè)MSB,異或操作形式為: (5) 其中,⊕表示異或操作符。 步驟3MSB值預(yù)測(cè)。 (1)利用先前已經(jīng)解密的相鄰像素的值,可計(jì)算預(yù)測(cè)器pred(i,j)的值。 (2)利用MSB=0和MSB=12種情形計(jì)算像素值,這2個(gè)像素值的差異分別表示為Δ0和Δ1,則可得到預(yù)測(cè)器pred(i,j)的計(jì)算值。 (6) (3)Δ0和Δ1之間的最小值給出搜索的像素值。 (7) 上述算法過(guò)程實(shí)現(xiàn)了對(duì)數(shù)據(jù)加密過(guò)程的封裝和加密數(shù)據(jù)的修復(fù),但是沒(méi)有考慮數(shù)據(jù)加密恢復(fù)的精度問(wèn)題,并且加密數(shù)據(jù)的容量受到限制,容量增大會(huì)大幅度降低加密數(shù)據(jù)修復(fù)的精度。 本節(jié)提出預(yù)測(cè)誤差修正的大容量可逆數(shù)據(jù)隱藏算法,如圖4所示。 圖4 大容量可逆數(shù)據(jù)隱藏算法 首先對(duì)原始圖像進(jìn)行預(yù)處理,以避免所有的預(yù)測(cè)誤差,以便能夠在解碼步驟中重建圖像。通過(guò)此過(guò)程,可以加密預(yù)處理圖像。在封裝階段,加密圖像的所有像素標(biāo)記為1位消息,使用這種方法可得到最大的有效載荷(等于1 bpp)。大容量可逆數(shù)據(jù)隱藏算法的具體步驟如下: 步驟1(預(yù)測(cè)器) 建議使用之前計(jì)算的像素來(lái)預(yù)測(cè)當(dāng)前像素的值。對(duì)于這種方法(除第1行和第1列)考慮左上像素的平均值作為預(yù)測(cè)器pred(i,j): (8) 本文使用平均值作為預(yù)測(cè)器,在有誤差時(shí)減輕對(duì)執(zhí)行像素的修改,尤其是在當(dāng)前像素值與其相鄰值之間有高差值的情況下。 步驟2(圖像預(yù)處理) 預(yù)測(cè)誤差檢測(cè)階段后,提出原始圖像I的預(yù)處理過(guò)程以獲得沒(méi)有任何預(yù)測(cè)誤差的圖像I′。對(duì)于每個(gè)有問(wèn)題的像素,觀察誤差的幅度,并計(jì)算必要的最小像素修改值,以避免誤差。式(9)給出了在解碼階段沒(méi)有預(yù)測(cè)錯(cuò)誤所必需的必要條件: |pred(i,j)-p(i,j)|<64 (9) 在算法1中給出了糾正所有預(yù)測(cè)誤差的詳細(xì)預(yù)處理算法。預(yù)處理階段結(jié)束后,根據(jù)式(2)對(duì)預(yù)處理圖像I′進(jìn)行加密,然后執(zhí)行誤差位置信息封裝過(guò)程。 算法1預(yù)處理算法 輸入原始圖像I,大小為m×n 輸出預(yù)處理m×n圖像I′ For i←0 to m do For j←0 to n do inv(i,j)←(p(i,j)+128)mod256; If i=0 or j=0 then 特殊處理; Else Endif Δ←|pred(i,j)-p(i,j)|; Δinv←|pred(i,j)-inv(i,j)|; If Δ≥Δinvthen If p(i,j)<128 then p′(i,j)←pred(i,j)-63; Else p′(i,j)←pred(i,j)+63; Endif Else p′(i,j)←p(i,j); Endif Endfor Endfor 圖像預(yù)處理算例分析:如果存在p(i,j)=50,p(i-1,j)=78,p(i,j-1)=154,則有: inv(i,j)=(50+128)mod 256=178 然后計(jì)算Δ和Δinv: Δ=|116-50|=66 Δinv=|116-178|=62 因?yàn)棣ぁ荭nv,存在誤差,必須修改當(dāng)前像素p(i,j)的值。則可得: pred(i,j)-p(i,j) 由此可得: p(i,j)>pred(i,j)-64 對(duì)p(i,j)進(jìn)行修改使得圖像失真最小化: p′(i,j)=pred(i,j)-63=116-63=53 步驟3(誤差位置信息封裝) 在預(yù)測(cè)誤差檢測(cè)中,預(yù)測(cè)誤差的位置存儲(chǔ)在誤差定位二進(jìn)制圖中,根據(jù)式(2)對(duì)預(yù)處理圖像I′進(jìn)行加密。在封裝步驟之前,采用加密圖像Ie避免預(yù)測(cè)誤差。然后將加密后的圖像Ie分成8個(gè)像素塊,并按掃描塊順序逐塊掃描。根據(jù)誤差位置,二進(jìn)制圖可在數(shù)據(jù)塊中識(shí)別至少1個(gè)預(yù)測(cè)誤差,利用先前像素的MSB對(duì)當(dāng)前塊進(jìn)行1位替換。在當(dāng)前數(shù)據(jù)塊中,如果存在預(yù)測(cè)誤差,則利用1位像素的MSB值進(jìn)行替換,否則,利用0位像素的MSB值進(jìn)行替換,如圖5所示。 圖5 MSB值替換過(guò)程 步驟4(數(shù)據(jù)提取與圖像恢復(fù)) 在解碼步驟中,可以通過(guò)以下步驟提取秘密消息: 1)利用掃描線順序?qū)?biāo)記加密圖像進(jìn)行掃描,對(duì)于每個(gè)像素根據(jù)式(4)提取MSB值,并進(jìn)行存儲(chǔ)。 2)該序列可作為誤差序列的開(kāi)始,因?yàn)樵跀?shù)據(jù)隱藏步驟中沒(méi)有標(biāo)記下一個(gè)像素,對(duì)像素進(jìn)行掃描直到下一序列的所有MSB值均為1,表明誤差序列結(jié)束。 3) 重復(fù)此過(guò)程直到圖像處理結(jié)束。 由于這種方法是完全可逆的,因此可以完全重建原始圖像I。首先,利用式(5)對(duì)標(biāo)記加密圖像進(jìn)行解密,以恢復(fù)每個(gè)像素的7個(gè)MSB。然后,利用式(6)和式(7)對(duì)像素的MSB值進(jìn)行預(yù)測(cè)。 實(shí)驗(yàn)過(guò)程中采用硬件配置如下:CPU為intel i7-6500 k 3.0 GHz,內(nèi)存大小為6 GB ddr4-2400 k,仿真軟件平臺(tái)是Matlab2012a,系統(tǒng)為win7旗艦版。選定大小為128×128的醫(yī)學(xué)CT圖像作為實(shí)驗(yàn)原始圖像[12-13],如圖6所示。 圖6 實(shí)驗(yàn)原始圖像 在加密圖像中,數(shù)據(jù)隱藏需要測(cè)量不同的性能,即不正確提取的比特?cái)?shù)、有效載荷(即嵌入率)和數(shù)據(jù)提取后的重建圖像質(zhì)量。算法的實(shí)驗(yàn)結(jié)果進(jìn)行統(tǒng)計(jì)分析,以驗(yàn)證是否具有較高的視覺(jué)安全級(jí)別。使用不同的統(tǒng)計(jì)度量:原始圖像和加密或標(biāo)記圖像的水平和垂直相關(guān)系數(shù)、Shannon熵、χ2測(cè)試指標(biāo),像素改變率(Number of Pixels Change Rate,NPCR),一致變化強(qiáng)度均值(Unified Average Changing Inlensity,UACI)和峰值信噪比(Peak Signal to Noise Ratio,PSNR)指標(biāo)[12-14]。其中,對(duì)比算法選取文獻(xiàn)[15-16]。 1)水平和垂直相關(guān)系數(shù): (10) 其中,pN指的是p的鄰域,E(x)是樣本均值,V(x)是樣本方差,S是樣本的大小。E(x)和V(x)的計(jì)算公式為: (11) 2)Shannon熵值指標(biāo): (12) 其中,I是具有256級(jí)灰度αl的大小為m×n的圖像,0≤l<256,P(αl)是灰度αl的概率。 3)χ2測(cè)試指標(biāo): (13) 4)像素改變率: (14) 其中,d(i,j)的取值為: 5)一致變化強(qiáng)度均值: (15) 6)峰值信噪比指標(biāo): (16) 本文算法在圖6選取的3幅測(cè)試圖像上的水平和垂直相關(guān)系數(shù)指標(biāo)情況如圖7所示。 圖7 水平和垂直相關(guān)系數(shù)指標(biāo) 從圖7可以看出,原始圖像的水平和垂直相關(guān)系數(shù)呈現(xiàn)出一定的相關(guān)性,關(guān)聯(lián)點(diǎn)分布于對(duì)角線位置上。但利用本文算法獲得的加密圖像,基本實(shí)現(xiàn)了零相關(guān)要求。本文算法、文獻(xiàn)[15-16]算法在加密圖像復(fù)原過(guò)程中提取圖像的峰值信噪比隨有效載荷的變化對(duì)比情況如圖8所示。 圖8 不同算法峰值信噪比對(duì)比情況 由圖8峰值信噪比對(duì)比情況可知,本文算法在不同有效載荷取值下的峰值信噪比,均要優(yōu)于文獻(xiàn)[15-16]對(duì)比算法。本文算法、文獻(xiàn)[15-16]算法選取實(shí)驗(yàn)原始圖像,加密重建過(guò)程中測(cè)試指標(biāo)a~指標(biāo)f上的實(shí)驗(yàn)對(duì)比結(jié)果如表1所示,其中,指標(biāo)a~指標(biāo)f分別對(duì)應(yīng)式(10)~式(16)。 根據(jù)表1數(shù)據(jù)可知,在水平和垂直相關(guān)系數(shù)指標(biāo)上,本文算法小于文獻(xiàn)[15-16]2種對(duì)比算法,表明本文算法獲得的加密重建圖像與原始圖像的相關(guān)性較低。χ2測(cè)試指標(biāo)和Shannon熵值指標(biāo)上,本文算法具有更低的測(cè)試值,表明加密或標(biāo)記加密圖像中的數(shù)據(jù)是無(wú)序的、不均勻的和不相關(guān)的,該算法具有更高的抵抗統(tǒng)計(jì)攻擊的能力。同時(shí),本文對(duì)比了本文算法、文獻(xiàn)[15-16]算法在NPCR,UACI 和PSNR 3組指標(biāo)上結(jié)果,顯示本文算法具有更高的NPCR和UACI指標(biāo)值,具有更低的PSNR指標(biāo)值,表明本文算法相對(duì)于文獻(xiàn)[15-16]算法,可得到更優(yōu)的加密重建效果。NPCR和UACI指標(biāo)值更高體現(xiàn)出了本文算法在加密容量上的優(yōu)勢(shì)。 表1 圖像重建質(zhì)量評(píng)價(jià)對(duì)比 本文提出一種基于最高有效位的大容量可逆數(shù)據(jù)加密算法。利用預(yù)測(cè)誤差檢測(cè)、融合誤差加密、替代數(shù)據(jù)加密3個(gè)過(guò)程對(duì)加密域數(shù)據(jù)進(jìn)行MSB數(shù)據(jù)隱藏,其密鑰的元素用作混沌發(fā)生器的參數(shù),構(gòu)建分段線性混沌圖加密方式。在此基礎(chǔ)上,給出一種預(yù)測(cè)誤差修正方法,構(gòu)建加密數(shù)據(jù)誤差的二進(jìn)制圖,并利用先前像素的MSB數(shù)據(jù)對(duì)當(dāng)前數(shù)據(jù)塊進(jìn)行1位替代修復(fù),利用沒(méi)有預(yù)測(cè)誤差數(shù)據(jù)塊的8個(gè)像素對(duì)數(shù)據(jù)進(jìn)行隱藏,實(shí)現(xiàn)大容量數(shù)據(jù)的可逆隱藏。實(shí)驗(yàn)結(jié)果驗(yàn)證了該算法的有效性。下一步考慮在每個(gè)像素隱藏多個(gè)加密數(shù)據(jù)位,比如在每個(gè)像素中嵌入大量的二進(jìn)制MSB信息。2 大容量可逆數(shù)據(jù)隱藏算法
3 實(shí)驗(yàn)結(jié)果與分析
4 結(jié)束語(yǔ)