◆施秦 劉暢 梁謙旺 黃豐逸
安全模型、算法與編程
基于GAN的面向博客發(fā)布的圖像隱寫術(shù)
◆施秦 劉暢 梁謙旺 黃豐逸
(華東理工大學信息學院 上海 200237)
在當今的數(shù)字化時代,隨著社交媒體發(fā)展的迅猛,信息安全問題日益嚴重,信息隱藏技術(shù)已經(jīng)成為信息安全領域研究的熱點。隱寫術(shù)是信息隱藏技術(shù)的一個重要分支。面向博客發(fā)布進行圖像隱寫,具有隱蔽性強、載體圖像選擇靈活等優(yōu)點。同時,考慮到傳統(tǒng)圖像隱寫術(shù)難以抵抗基于統(tǒng)計的隱寫分析算法的檢測,本文采用一種基于生成對抗網(wǎng)絡(Generative Adversarial Network, GAN)的圖像隱寫術(shù)(SteganoGAN),并基于Flask框架實現(xiàn)了在博客的發(fā)布與瀏覽過程中,對秘密信息進行嵌入與提取,具有一定的理論研究價值和實用性。
圖像隱寫;生成對抗網(wǎng)絡;Flask;博客發(fā)布;博客瀏覽
21世紀是互聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能改變?nèi)藗兩畹臅r代。隨著科技的迅猛發(fā)展,傳統(tǒng)媒體內(nèi)容逐漸數(shù)字化。信息安全問題隨之層出不窮,信息隱藏技術(shù)越來越被重視。由于圖像的廣泛可獲取性以及人類在圖像上的視覺冗余特性,圖像成為信息隱藏中的重要載體[1]。
博客,作為一種新興的信息分享平臺,具有篇幅短小、內(nèi)容豐富以及互動性強的特點,近年來發(fā)展迅速,得以廣泛應用。一方面,博客能夠滿足人們對高效率分享信息和獲取信息的需求。另一方面,博客同時支持文字和圖像的發(fā)布,這為圖像隱寫提供了很大的空間[2]。傳統(tǒng)的圖像隱寫術(shù)在嵌入秘密信息量較大時,存在含密圖像與載體圖像的視覺差異明顯,抗隱寫分析的能力差的缺點。
近年來,隨著深度學習技術(shù)的快速發(fā)展,生成對抗網(wǎng)絡(Generative Adversarial Network,GAN)[3]的研究不斷深入。GAN模型中的對抗博弈思想為信息隱藏技術(shù)提供了新的思路?;贕AN的圖像隱寫術(shù)主要有基于載體修改、載體選擇和載體合成這3類方法[4]。本文采用的SteganoGAN是一種基于載體修改的圖像隱寫術(shù)[5],該技術(shù)在GAN模型的框架下,將信息的嵌入與提取視為編碼與解碼的問題。原始GAN模型的生成器作為編碼器將秘密信息嵌入載體圖像,生成含密圖像,而判別器則作為解碼器從含密圖像中恢復出嵌入的秘密信息。同時,引入評估器來評估生成的含密圖像的質(zhì)量。
本文將SteganoGAN與Falsk框架結(jié)合,設計了一個面向博客發(fā)布的信息隱藏網(wǎng)站。測試結(jié)果表明,該設計將SteganoGAN具有的生成圖像質(zhì)量高、抗隱寫分析能力強、安全性高等優(yōu)點與博客具有的簡單、快捷和受眾面廣等優(yōu)點結(jié)合起來,將深度學習的前沿技術(shù)實用化,具有一定的新穎性和實用性。
圖1 GAN的結(jié)構(gòu)
GAN的思想來源于博弈論的二人零和博弈,其結(jié)構(gòu)如圖1所示。生成器G將輸入的噪聲z映射為與真實數(shù)據(jù)分布px(data)相近的樣本分布pG(z)。判別器D不斷判斷輸入的是真實數(shù)據(jù)還是生成的樣本。生成器和判別器同時訓練,生成器的目標是使生成樣本盡量與真實數(shù)據(jù)相近,判別器則是要盡可能地給出正確的判斷。二者在相互對抗的過程中,迭代優(yōu)化,最終達到納什均衡。
整個GAN網(wǎng)絡的優(yōu)化過程被視為一個極大極小博弈問題,其優(yōu)化問題如式(1)所示:
其中,(,)為損失函數(shù),代表求解期望值,()代表為真實圖像的概率,()代表由噪聲生成的圖像。
SteganoGAN是生成對抗網(wǎng)絡的衍生模型,是一種端到端的模型。主要由三個部分組成,即編碼器,解碼器和評估器。其框架如圖2所示。SteganoGAN的對抗訓練的過程中,使用多個損失函數(shù)來同時優(yōu)化編碼器、解碼器和評估器[5]。
圖2 SteganoGAN的框架
圖3 SteganoGAN網(wǎng)絡結(jié)構(gòu)
1.2.1編碼器
編碼器的結(jié)構(gòu)如圖3(b)所示。編碼器網(wǎng)絡的前面各層與后面層采用密集連接(Dense Connection)的方式,有效解決了網(wǎng)絡深度增加時,梯度消失的問題[6]。將載體圖像C和二進制秘密信息M同時輸入編碼器ε。其中,C是像素為W×H的RGB圖像,M是維度為D×W×H的張量,D代表載體圖像的每個像素能夠嵌入的秘密信息的比特量。
其中,Conv→D’:∈R×W×H→∈R×W×H,表示通過卷積塊將張量映射為和其具有相同寬度和高度,但可能具有不同深度的特征圖,下文同理。
步驟3:如圖3(a),在不同層的卷積塊之間引入附加的連接,使得前面層生成的特征圖連接到后面層生成的特征圖。該連接結(jié)構(gòu)來源于文獻[6]。該步驟可用式(4)表示成:
步驟4:最終,編碼器輸出一張含密圖像={b,,}(,),該含密圖像與載體圖像具有相同的像素大小和深度。該步驟用式(5)表示:
1.2.2解碼器
解碼器的目的是恢復原始的秘密信息。將編碼器生成的含密圖像輸入到解碼器網(wǎng)絡中。解碼過程可用公式(6)表示:
1.2.3評估器
評估器用于評估編碼器生成的圖像質(zhì)量,通過評估器和編碼器二者的對抗訓練,不斷優(yōu)化編碼器,使得其生成的圖像與真實圖像盡可能相似。如圖3(a),評估器網(wǎng)絡由三個卷積塊和一個單通道輸出的卷積層構(gòu)成。如式(7)所示,卷積層采用自適應池化,輸出評估的標量分數(shù)。
其中,表示自適應均值池化。
隱寫術(shù)的主要性能指標包括隱蔽性、嵌入量和抗隱寫分析能力。
為了評價算法的隱蔽性,本文從主觀角度和客觀角度評價圖像的質(zhì)量。
主觀評價:選擇圖4(a)所示的大小為512*512的彩色圖作為載體圖像,再選取圖4(b)所示的秘密信息。利用SteganGAN模型進行秘密信息的嵌入與提取。如圖4,利用SteganoGAN的編碼器進行秘密信息嵌入后,含密圖像和原始的載體圖像從視覺上看幾乎看不出差別,圖像隱蔽性好。同時,SteganoGAN的解碼器能夠準確地提取出秘密信息。
圖4 載體圖像與含密圖像的對比
客觀評價:采用峰值信噪比(Peak Signal-to-Noise Ratio,PSNR)和圖像相似度(Structural SIMilarity,SSIM)作為評價指標。
其中,PSNR單位為分貝(dB),其典型值在30~40dB。PSNR越高,兩張圖像越相近。通過測試PSNR值,能定量的評價含密圖像的質(zhì)量。
另一個指標SSIM分別從亮度、對比度和結(jié)構(gòu)三方面來度量圖像相似性。SSIM取值范圍是[0,1]。SSIM值越大,兩張圖像間的差異越小。
本文在Python3.7的環(huán)境下,基于PSNR和SSIM兩項參數(shù)指標對圖和圖進行客觀的定量分析。
嵌入秘密信息后的PSNR值為37.212dB,SSIM值為0.955。實驗結(jié)果證明基于SteganoGAN的信息隱藏算法是有效的。
基于SteganoGAN的圖像隱寫術(shù)能實現(xiàn)4.4比特/像素的相對隱寫容量,而傳統(tǒng)的圖像隱寫術(shù)僅在0.4比特/像素的相對隱寫容量范圍內(nèi)有效[5]。該圖像隱寫術(shù)在隱寫容量上具有較大的優(yōu)勢。
采用基于統(tǒng)計的StegExpose對SteganGAN進行隱寫分析,通過繪制受試者工作特征(ROC,Receiver Operating Characteristic)曲線發(fā)現(xiàn),ROC曲線下方與坐標軸圍成的面積為0.59,StegExpose對SteganoGAN的隱寫檢測僅略好于隨機猜測[5],因此該圖像隱寫術(shù)能夠有效地抵抗隱寫分析。
Flask是Armin ronacher用Python語言開發(fā)的微框架,也被稱為“microframework”。Flask雖然小,但是并不意味著它比其他框架的功能少[7]。微框架中的“微”字表示 Flask 的目標是保持核心簡潔輕巧的同時可擴展性強[8]。
Flask主要依賴兩個核心庫Werkzeug和Jinja。Flask在這兩個核心庫的基礎上,允許擴展第三方庫來實現(xiàn)自己想要的功能,其輕量級與模塊化的設計,可以部署諸多項目。
Flask具備的以上優(yōu)點,使其成為部署機器學習和深度學習模型上線、提供應用編程接口(Application Programming Interface,API)的優(yōu)選框架。本文基于Flask框架將SteganoGAN模型嵌入網(wǎng)絡應用中,搭建了一個小型的博客網(wǎng)站。在本地運行應用進行測試后,將其部署到面向公眾的阿里云服務器上。
圖5為網(wǎng)站的總體功能模塊。
圖5 網(wǎng)站總體功能模塊
各模塊的主要功能如下:
用戶注冊與登錄:新用戶首次使用網(wǎng)站時,須在網(wǎng)站的注冊頁面進行注冊,這樣網(wǎng)站才能識別并登入用戶。用戶在網(wǎng)站首頁點擊注冊鏈接,便可進入注冊頁面,輸入用戶名、密碼以及郵箱。
發(fā)布博客:發(fā)布博客的過程就是信息隱藏的功能。用戶輸入微博標題,微博正文、需隱藏的秘密信息、提取的密碼,并上傳載體圖片,完成后點擊按鈕。此時,后端會調(diào)用SteganoGAN模型,將秘密信息嵌入到載體圖像中,并發(fā)布了一條帶有秘密信息的博客。圖6(a)為發(fā)表博客的界面。
瀏覽博客:圖6(b)為已發(fā)表的博客的瀏覽界面,在這里可瀏覽自己以及他人發(fā)布過的博客。通過每條微博后的ReadMore進入該博客的詳情頁。
博客詳情:圖6(c)為博客的詳情頁,能看到博客完整的文字內(nèi)容以及圖片,博客瀏覽方(即秘密信息的接收方)可通過博客通信雙方共享通信密鑰的方法,輸入正確的密鑰后,后端調(diào)用SteganoGAN的解碼器,提取出博客發(fā)布方嵌入的秘密信息,以完成保密通信通信的目的。若輸入的密鑰與博客發(fā)布方共享的不一致,則無法提取出秘密信息,前端界面出現(xiàn)提示信息“密碼錯誤,無法提取信息!”。如圖6(d)所示。
為了提高數(shù)據(jù)管理的效率,在SQLite數(shù)據(jù)庫中建立了User表和Post表。其中,User表用于存儲用戶名、密碼以及郵箱,每個用戶都有唯一的id主鍵。Post表用于存儲已經(jīng)發(fā)布的博客,上傳的圖片以及提取秘密信息的密碼。User表和Post表之間有一對多關系,即一個用戶可以發(fā)表多篇博客。
開發(fā)本網(wǎng)站時,在Flask的兩個核心庫的基礎上,擴展了諸多庫,例如,擴展Flask_script用于插入腳本,擴展Flask-SQLalchemy用于操作數(shù)據(jù)庫,擴展Flask_migrate用于管理、遷移數(shù)據(jù)庫等。在實現(xiàn)網(wǎng)站的注冊、登錄以及發(fā)布博客的功能時,主要使用了Flask-WTF、Flask-login兩個庫。
圖6 網(wǎng)站界面
使用阿里云ECS服務器,在服務器上部署Flask項目,安裝python3、Gunicorn以及相關第三方庫,配置nginx,完成以上步驟服務器搭建成功,項目部署后可以在云服務器上運行并且能夠遠程訪問網(wǎng)站頁面。
本文將基于SteganoGAN的圖像隱寫術(shù)與網(wǎng)絡應用結(jié)合,在發(fā)布博客、查看博客的過程中實現(xiàn)信息的隱藏與提取,具有一定的實用性和創(chuàng)新性。當前的研究僅支持網(wǎng)絡端的應用,下一步的開發(fā)將針對移動端展開。
[1]彭偉,胡寧,胡璟璟.圖像隱寫分析算法研究概述[J].計算機科學,2020,47(S1):325-331.
[2]趙顯芬.基于手機微博的隱蔽通信技術(shù)研究[D].南京理工大學,2012.
[3]Goodfellow,Ian &Pouget-Abadie,Jean & Mirza,Mehdi& Xu,Bing &Warde-Farley,David &Ozair,Sherjil& Courville,Aaron &Bengio,Y..(2014). Generative Adversarial Nets. ArXiv.
[4]劉佳,柯彥,雷雨,李軍,等.生成對抗網(wǎng)絡在圖像隱寫中的應用[J].武漢大學學報(理學版),2019,65(02):139-152.
[5]Zhang K A,Cuesta-Infante A,Xu L,et al. SteganoGAN: High Capacity Image Steganography with GANs[J]. 2019.
[6]Huang,G.,Liu,Z.,van der Maaten,L.,and Weinberger,K.Q.Densely connected convolutional networks.IEEE Conf. On Computer Vision and Pattern Recognition(CVRR),pp.2261-2269,2017.
[7](美)米格爾·格林貝格. FLASK Web 開發(fā)[M].安道譯.北京:人民郵電出版社,2018.
[8]李輝.Flask Web開發(fā)實戰(zhàn)入門、進階與原理解析[M].北京:機械工業(yè)出版社,2018.