任志敏
(常州紡織服裝職業(yè)技術(shù)學(xué)院機(jī)電學(xué)院,江蘇 常州 213164)
隱寫術(shù)作為信息安全領(lǐng)域的重要技術(shù)之一,通常用于隱藏秘密信息,比如消息、圖片或聲音,這類信息也稱為載荷數(shù)據(jù)(payload),用于嵌入載荷數(shù)據(jù)的通常為圖像、圖片、聲音等非秘密文件,也稱為宿主文件(cover),從而保證載荷數(shù)據(jù)的不可見性,嵌入了有效載荷數(shù)據(jù)的宿主文件稱為Stego文件。在隱寫術(shù)中,總是希望在盡可能多隱藏有效載荷數(shù)據(jù)和確保宿主文件的保真度之間取得平衡。圖片和聲音等文件因其尺寸通常稱為宿主文件的首選。與隱寫術(shù)相對(duì)的是隱寫分析,隱寫分析是用來識(shí)別存放有效載荷的宿主文件[1]。
在圖片作為宿主文件的隱寫術(shù)中,有效載荷數(shù)據(jù)通常為一特定的文本信息。這一領(lǐng)域的重點(diǎn)方向或是尋找圖片的噪聲區(qū)域,或是尋找圖片的邊緣、紋理等區(qū)域,在這些區(qū)域嵌入載荷信息從而保證不扭曲圖片本身。例如,最低有效位(LSB)替換在圖片隱寫術(shù)中使用非常廣泛[2],一種最簡單的LSB方法把秘密載荷信息替換到宿主圖片選定像素的最低有效位(通常是1位或2位),由于圖像像素分布的變化,因此通過隱寫分析,很容易檢測(cè)到宿主圖片是否因此載荷數(shù)據(jù)。當(dāng)然,后面的研究人員對(duì)經(jīng)典的LSB方法進(jìn)行了改進(jìn),利用圖片的紋理、邊緣和像素亮度來估算LSB的位數(shù)以增強(qiáng)該方法隱藏載荷數(shù)據(jù)的魯棒性。
另外,研究人員利用頻域知識(shí)提取其他原始特征實(shí)現(xiàn)信息隱藏。比如,通過小波變換獲得權(quán)重的方法查找圖片噪聲和紋理實(shí)現(xiàn)載荷信息的嵌入。通過修改直方圖的表示方式實(shí)現(xiàn)信息隱藏的方法。使用宿主圖片的邊緣擴(kuò)展載荷信息的嵌入數(shù)量并避免在隱寫分析過程中被偵測(cè)到。
與以上方法不同的是,本文提出了一種利用宿主圖片直接隱藏載荷圖片的方法,雖然文本等載荷信息本身不是圖片,但是可以把文本轉(zhuǎn)為位圖,仍舊可以采用本文提出的方法。該方法本質(zhì)上是設(shè)計(jì)一個(gè)深度學(xué)習(xí)網(wǎng)絡(luò)[3],通過它自動(dòng)提取宿主圖片和載荷圖片的最佳特征并合并信息。該方法是通用的,可以應(yīng)用于任何類型的圖片,為了驗(yàn)證這一點(diǎn),利用公開的數(shù)據(jù)集CIFAR-100進(jìn)行了測(cè)試。
在信息嵌入階段,即編碼階段,本文用卷積神經(jīng)網(wǎng)絡(luò)CNN(convolutional neural network)對(duì)宿主圖片和載荷數(shù)據(jù)圖片進(jìn)行合成,生成混合圖片。在信息解碼階段,同樣借助CNN,從混合圖片中恢復(fù)載荷數(shù)據(jù)圖片[4]。生成混合圖片的CNN網(wǎng)絡(luò)架構(gòu)如圖1所示,載荷圖片的解碼和提取CNN網(wǎng)絡(luò)架構(gòu)如圖2所示。
圖1 生成混合圖片的CNN網(wǎng)絡(luò)架構(gòu)圖
圖2 提取載荷圖片卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)圖
從圖1中可以看出,編碼器網(wǎng)絡(luò)有宿主圖片和載荷圖片作為輸入,利用CNN的各個(gè)層提取圖片特征向量的同時(shí),隱藏了載荷圖片的細(xì)節(jié),生成混合圖片,目標(biāo)上生成的混合圖片應(yīng)與宿主圖片在視覺上盡可能保持一致。
輸入端的編碼器網(wǎng)絡(luò)有兩個(gè)分支并行運(yùn)行,分別稱為宿主分支和載荷分支。載荷分支接收載荷圖片,并使用8個(gè)卷積層和ReLU(Rectified Linear Activation Function)層將載荷圖片分解為低層(邊緣、顏色、紋理等)和高層特征。宿主分支接收宿主圖片輸入,使用10層卷積層和ReLU層分解輸入圖片,將其特征放入到特征向量表示的層次結(jié)構(gòu)中,同時(shí)將提取的載荷圖片特征合并到宿主圖片中。為了合并載荷圖片的數(shù)據(jù),編碼器網(wǎng)絡(luò)提取并合并來自載荷分支的特征圖到對(duì)應(yīng)宿主分支的特征圖,這一過程一共重復(fù)了8次,即8層,把載荷分支的特征圖全部合并到宿主分支,經(jīng)過一系列的卷積操作和ReLU后,在最后一個(gè)卷積層生成Stego圖片。
使用Relu激活函數(shù)[5],在神經(jīng)網(wǎng)絡(luò)中,上一層神經(jīng)元的輸出值傳遞給下一層(隱層)神經(jīng)元的輸入值或輸出層直接輸出,上層節(jié)點(diǎn)的輸出和下層節(jié)點(diǎn)的輸入之間有個(gè)函數(shù)關(guān)系,這個(gè)函數(shù)稱為激活函數(shù)。ReLU函數(shù)是一種常見的激活函數(shù),ReLU本質(zhì)上是求最大值的函數(shù),函數(shù)圖像如圖3所示。
圖3 ReLU函數(shù)圖像
從圖3中可以看出,ReLU 是一個(gè)分段線性函數(shù),如果輸入為正,它將直接輸出,否則,它將輸出為零。在輸入是負(fù)值的情況下,它會(huì)輸出0,那么神經(jīng)元就不會(huì)被激活。這意味著同一時(shí)間只有部分神經(jīng)元會(huì)被激活,從而使得網(wǎng)絡(luò)很稀疏,進(jìn)而對(duì)計(jì)算來說是非常有效率的。
圖2所示的解碼提取網(wǎng)絡(luò)則分離合成圖片中的隱藏特征,重新生成載荷圖片。解碼器網(wǎng)絡(luò)接收編碼器產(chǎn)生的Stego圖片,先經(jīng)過5層卷積和ReLU提取合成圖片的特征向量,再經(jīng)過兩個(gè)分支,分別是提取宿主分支和提取載荷分支,各自分別經(jīng)過6層卷積和5層ReLU恢復(fù)宿主圖片和載荷圖片。
損失函數(shù),又叫目標(biāo)函數(shù),是編譯一個(gè)神經(jīng)網(wǎng)絡(luò)模型必須的兩個(gè)要素之一。另一個(gè)必不可少的要素是優(yōu)化器。損失函數(shù)用來評(píng)價(jià)模型的預(yù)測(cè)值和真實(shí)值不一樣的程度,損失函數(shù)越好,通常模型的性能越好。不同的模型用的損失函數(shù)一般也不一樣。本方法采用的損失函數(shù)為式(1)。
Loss=α‖Isource-Ostego‖2+β‖Ipayload-Opayload‖2+γ‖Isource-Osource‖2.
(1)
Loss函數(shù)一共有3項(xiàng)組成,每一項(xiàng)都通過MSELoss的均方誤差損失函數(shù)計(jì)算獲得,其公式為式(2)。
(2)
式(2)中Yi為真實(shí)值,Yi_pred為預(yù)測(cè)值,MSE值越小代表模型越好。式(1)中Isource和Ipayload表示輸入編碼網(wǎng)絡(luò)的宿主圖片和載荷圖片,Ostego表示編碼器輸出的合成Stego圖片,Osource和Opayload表示解碼網(wǎng)絡(luò)提取出來的宿主圖片和載荷圖片。α,β和γ為控制參數(shù)。
本文在CIFAR-100數(shù)據(jù)集上實(shí)施了該方法。CIFAR-100數(shù)據(jù)集是CIFAR-10數(shù)據(jù)集的細(xì)分[6]。CIFAR-10一共有6萬張32×32像素大小的彩色圖片組成,其中5萬張是訓(xùn)練集圖片,1萬張是測(cè)試集圖片。CIFAR-10劃分為飛機(jī)、汽車、鳥、貓、鹿、狗、青蛙、馬、船和卡車共10個(gè)分類,每個(gè)類別6千張圖片。這些分類是完全互斥的,汽車和卡車分類之間沒有重疊,汽車分類只包括轎車、SUV之類的車輛,卡車分類只包括大卡車,兩種分類都不包括皮卡車。CIFAR-100有20個(gè)超類,每個(gè)超類又分成5個(gè)分類,共計(jì)100個(gè)類。每個(gè)類包含600個(gè)圖片,總計(jì)6萬張圖片,每個(gè)類各有500張訓(xùn)練圖片集和100張測(cè)試圖片集。先對(duì)CIFAR-100數(shù)據(jù)集進(jìn)行預(yù)處理,步驟如下:
s1:下載CIFAR-100數(shù)據(jù)集,選擇5萬張圖片訓(xùn)練集,并進(jìn)行shuffle打亂順序,設(shè)置batch_size為64。
s2:獲取CIFAR-100分類數(shù)字0,1,…,99,并隨機(jī)選擇其中50%作為宿主圖片集,剩余的50%作為載荷數(shù)據(jù)集。
s3:把載荷數(shù)據(jù)集轉(zhuǎn)換為僅有一個(gè)通道的灰度圖,如圖4所示,其中第一張為宿主圖片,像素大小為32×32×3,第二張為載荷圖片的原始圖片,像素大小為32×32×3,第三張為輸入編碼網(wǎng)絡(luò)的載荷圖片的灰度圖,像素大小為32×32×1,即輸入編碼網(wǎng)絡(luò)的是第一張圖片和第三張圖片。
圖4 宿主圖片和載荷圖片及其灰度圖
s4:把宿主圖片集和載荷數(shù)據(jù)集的像素值歸約到0~1之間。
s5:把宿主圖片集和載荷數(shù)據(jù)集的80%作為訓(xùn)練集,10%作為驗(yàn)證集,10%作為測(cè)試集。
編碼網(wǎng)絡(luò)和解碼網(wǎng)絡(luò)都采用固定學(xué)習(xí)率的Adam優(yōu)化器,其中l(wèi)earningrate設(shè)置為0.001,公式(1)損失函數(shù)控制參數(shù)α=β=γ=1,卷積神經(jīng)網(wǎng)絡(luò)層的所有過濾器都使用單個(gè)像素移動(dòng)的步幅,并使用相同的填充padding。
本文通過計(jì)算2項(xiàng)指標(biāo)來衡量宿主圖片與Stego圖片,輸入載荷圖片與提取載荷圖片的質(zhì)量,一是結(jié)構(gòu)相似性SSIM(Structural SIMilarity),SSIM是一種衡量兩幅圖像相似度的指標(biāo),對(duì)于兩張圖片,SSIM計(jì)算包括亮度(luminance)對(duì)比、對(duì)比度(contrast)對(duì)比、結(jié)構(gòu)(structure)對(duì)比三個(gè)部分。二是峰值信噪比PSNR(Peak Signal-to-Noise Ratio),是一種評(píng)價(jià)圖像的客觀標(biāo)準(zhǔn), 是最普遍,最廣泛使用的評(píng)鑒圖片質(zhì)量的的客觀量測(cè)法[7-8]。PSNR 通常使用均方誤差MSE(mean-square error)來定義,MSE是反映估計(jì)量與被估計(jì)量之間差異程度的一種度量。另外通過平均每像素的位數(shù)bpp(bits per pixel)來衡量宿主圖片的嵌入載荷圖片的能力,載荷圖片嵌入宿主圖片bpp為8位,數(shù)據(jù)量占比為33.3%。
在CIFAR-100數(shù)據(jù)集隨機(jī)選擇宿主圖片(32×32×3)和載荷圖片(32×32×3轉(zhuǎn)換為灰度32×32×1),隨機(jī)選出5組圖片,實(shí)驗(yàn)結(jié)果如圖5所示。
圖5 實(shí)驗(yàn)結(jié)果圖
圖5中一共5組圖片,每組5張圖片,其中第1列為經(jīng)過編碼網(wǎng)絡(luò)輸出的Stego圖片,第2列為經(jīng)過解碼提取的載荷圖片,第3列為經(jīng)過解碼網(wǎng)絡(luò)提取的宿主圖片,第4列是輸入編碼網(wǎng)絡(luò)的原始宿主圖片,第5列是輸入編碼網(wǎng)絡(luò)的原始載荷圖片。從直觀視覺上看,第1、3、4列圖片看不出差異性,第2、5列圖片幾乎也是相同的,初步滿足了圖片隱藏與提取的目的。從定量的衡量指標(biāo)看,圖5的結(jié)果見表1。
表1 圖片性能指標(biāo)表
從表1中可以看出,PSNR值均大于30dB,表明生成的Stego圖片和解碼提取的載荷圖片質(zhì)量都是好的,在驗(yàn)證集上所有圖片原始宿主圖片與Stego圖片的平均PSNR值為32.99,原始載荷圖片與解碼載荷圖片的平均PSNR值為33.61。因此,不管是從圖5中定性顯示,還是從表1中定性分析可以看出,該方法可以可靠地用于圖片隱藏。