◆施秦 刘畅 梁谦旺 黄丰逸
安全模型、算法与编程
基于GAN的面向博客发布的图像隐写术
◆施秦 刘畅 梁谦旺 黄丰逸
(华东理工大学信息学院 上海 200237)
在当今的数字化时代,随着社交媒体发展的迅猛,信息安全问题日益严重,信息隐藏技术已经成为信息安全领域研究的热点。隐写术是信息隐藏技术的一个重要分支。面向博客发布进行图像隐写,具有隐蔽性强、载体图像选择灵活等优点。同时,考虑到传统图像隐写术难以抵抗基于统计的隐写分析算法的检测,本文采用一种基于生成对抗网络(Generative Adversarial Network, GAN)的图像隐写术(SteganoGAN),并基于Flask框架实现了在博客的发布与浏览过程中,对秘密信息进行嵌入与提取,具有一定的理论研究价值和实用性。
图像隐写;生成对抗网络;Flask;博客发布;博客浏览
21世纪是互联网、大数据、人工智能改变人们生活的时代。随着科技的迅猛发展,传统媒体内容逐渐数字化。信息安全问题随之层出不穷,信息隐藏技术越来越被重视。由于图像的广泛可获取性以及人类在图像上的视觉冗余特性,图像成为信息隐藏中的重要载体[1]。
博客,作为一种新兴的信息分享平台,具有篇幅短小、内容丰富以及互动性强的特点,近年来发展迅速,得以广泛应用。一方面,博客能够满足人们对高效率分享信息和获取信息的需求。另一方面,博客同时支持文字和图像的发布,这为图像隐写提供了很大的空间[2]。传统的图像隐写术在嵌入秘密信息量较大时,存在含密图像与载体图像的视觉差异明显,抗隐写分析的能力差的缺点。
近年来,随着深度学习技术的快速发展,生成对抗网络(Generative Adversarial Network,GAN)[3]的研究不断深入。GAN模型中的对抗博弈思想为信息隐藏技术提供了新的思路。基于GAN的图像隐写术主要有基于载体修改、载体选择和载体合成这3类方法[4]。本文采用的SteganoGAN是一种基于载体修改的图像隐写术[5],该技术在GAN模型的框架下,将信息的嵌入与提取视为编码与解码的问题。原始GAN模型的生成器作为编码器将秘密信息嵌入载体图像,生成含密图像,而判别器则作为解码器从含密图像中恢复出嵌入的秘密信息。同时,引入评估器来评估生成的含密图像的质量。
本文将SteganoGAN与Falsk框架结合,设计了一个面向博客发布的信息隐藏网站。测试结果表明,该设计将SteganoGAN具有的生成图像质量高、抗隐写分析能力强、安全性高等优点与博客具有的简单、快捷和受众面广等优点结合起来,将深度学习的前沿技术实用化,具有一定的新颖性和实用性。
图1 GAN的结构
GAN的思想来源于博弈论的二人零和博弈,其结构如图1所示。生成器G将输入的噪声z映射为与真实数据分布px(data)相近的样本分布pG(z)。判别器D不断判断输入的是真实数据还是生成的样本。生成器和判别器同时训练,生成器的目标是使生成样本尽量与真实数据相近,判别器则是要尽可能地给出正确的判断。二者在相互对抗的过程中,迭代优化,最终达到纳什均衡。
整个GAN网络的优化过程被视为一个极大极小博弈问题,其优化问题如式(1)所示:
其中,(,)为损失函数,代表求解期望值,()代表为真实图像的概率,()代表由噪声生成的图像。
SteganoGAN是生成对抗网络的衍生模型,是一种端到端的模型。主要由三个部分组成,即编码器,解码器和评估器。其框架如图2所示。SteganoGAN的对抗训练的过程中,使用多个损失函数来同时优化编码器、解码器和评估器[5]。
图2 SteganoGAN的框架
图3 SteganoGAN网络结构
1.2.1编码器
编码器的结构如图3(b)所示。编码器网络的前面各层与后面层采用密集连接(Dense Connection)的方式,有效解决了网络深度增加时,梯度消失的问题[6]。将载体图像C和二进制秘密信息M同时输入编码器ε。其中,C是像素为W×H的RGB图像,M是维度为D×W×H的张量,D代表载体图像的每个像素能够嵌入的秘密信息的比特量。
其中,Conv→D’:∈R×W×H→∈R×W×H,表示通过卷积块将张量映射为和其具有相同宽度和高度,但可能具有不同深度的特征图,下文同理。
步骤3:如图3(a),在不同层的卷积块之间引入附加的连接,使得前面层生成的特征图连接到后面层生成的特征图。该连接结构来源于文献[6]。该步骤可用式(4)表示成:
步骤4:最终,编码器输出一张含密图像={b,,}(,),该含密图像与载体图像具有相同的像素大小和深度。该步骤用式(5)表示:
1.2.2解码器
解码器的目的是恢复原始的秘密信息。将编码器生成的含密图像输入到解码器网络中。解码过程可用公式(6)表示:
1.2.3评估器
评估器用于评估编码器生成的图像质量,通过评估器和编码器二者的对抗训练,不断优化编码器,使得其生成的图像与真实图像尽可能相似。如图3(a),评估器网络由三个卷积块和一个单通道输出的卷积层构成。如式(7)所示,卷积层采用自适应池化,输出评估的标量分数。
其中,表示自适应均值池化。
隐写术的主要性能指标包括隐蔽性、嵌入量和抗隐写分析能力。
为了评价算法的隐蔽性,本文从主观角度和客观角度评价图像的质量。
主观评价:选择图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值,能定量的评价含密图像的质量。
另一个指标SSIM分别从亮度、对比度和结构三方面来度量图像相似性。SSIM取值范围是[0,1]。SSIM值越大,两张图像间的差异越小。
本文在Python3.7的环境下,基于PSNR和SSIM两项参数指标对图和图进行客观的定量分析。
嵌入秘密信息后的PSNR值为37.212dB,SSIM值为0.955。实验结果证明基于SteganoGAN的信息隐藏算法是有效的。
基于SteganoGAN的图像隐写术能实现4.4比特/像素的相对隐写容量,而传统的图像隐写术仅在0.4比特/像素的相对隐写容量范围内有效[5]。该图像隐写术在隐写容量上具有较大的优势。
采用基于统计的StegExpose对SteganGAN进行隐写分析,通过绘制受试者工作特征(ROC,Receiver Operating Characteristic)曲线发现,ROC曲线下方与坐标轴围成的面积为0.59,StegExpose对SteganoGAN的隐写检测仅略好于随机猜测[5],因此该图像隐写术能够有效地抵抗隐写分析。
Flask是Armin ronacher用Python语言开发的微框架,也被称为“microframework”。Flask虽然小,但是并不意味着它比其他框架的功能少[7]。微框架中的“微”字表示 Flask 的目标是保持核心简洁轻巧的同时可扩展性强[8]。
Flask主要依赖两个核心库Werkzeug和Jinja。Flask在这两个核心库的基础上,允许扩展第三方库来实现自己想要的功能,其轻量级与模块化的设计,可以部署诸多项目。
Flask具备的以上优点,使其成为部署机器学习和深度学习模型上线、提供应用编程接口(Application Programming Interface,API)的优选框架。本文基于Flask框架将SteganoGAN模型嵌入网络应用中,搭建了一个小型的博客网站。在本地运行应用进行测试后,将其部署到面向公众的阿里云服务器上。
图5为网站的总体功能模块。
图5 网站总体功能模块
各模块的主要功能如下:
用户注册与登录:新用户首次使用网站时,须在网站的注册页面进行注册,这样网站才能识别并登入用户。用户在网站首页点击注册链接,便可进入注册页面,输入用户名、密码以及邮箱。
发布博客:发布博客的过程就是信息隐藏的功能。用户输入微博标题,微博正文、需隐藏的秘密信息、提取的密码,并上传载体图片,完成后点击按钮。此时,后端会调用SteganoGAN模型,将秘密信息嵌入到载体图像中,并发布了一条带有秘密信息的博客。图6(a)为发表博客的界面。
浏览博客:图6(b)为已发表的博客的浏览界面,在这里可浏览自己以及他人发布过的博客。通过每条微博后的ReadMore进入该博客的详情页。
博客详情:图6(c)为博客的详情页,能看到博客完整的文字内容以及图片,博客浏览方(即秘密信息的接收方)可通过博客通信双方共享通信密钥的方法,输入正确的密钥后,后端调用SteganoGAN的解码器,提取出博客发布方嵌入的秘密信息,以完成保密通信通信的目的。若输入的密钥与博客发布方共享的不一致,则无法提取出秘密信息,前端界面出现提示信息“密码错误,无法提取信息!”。如图6(d)所示。
为了提高数据管理的效率,在SQLite数据库中建立了User表和Post表。其中,User表用于存储用户名、密码以及邮箱,每个用户都有唯一的id主键。Post表用于存储已经发布的博客,上传的图片以及提取秘密信息的密码。User表和Post表之间有一对多关系,即一个用户可以发表多篇博客。
开发本网站时,在Flask的两个核心库的基础上,扩展了诸多库,例如,扩展Flask_script用于插入脚本,扩展Flask-SQLalchemy用于操作数据库,扩展Flask_migrate用于管理、迁移数据库等。在实现网站的注册、登录以及发布博客的功能时,主要使用了Flask-WTF、Flask-login两个库。
图6 网站界面
使用阿里云ECS服务器,在服务器上部署Flask项目,安装python3、Gunicorn以及相关第三方库,配置nginx,完成以上步骤服务器搭建成功,项目部署后可以在云服务器上运行并且能够远程访问网站页面。
本文将基于SteganoGAN的图像隐写术与网络应用结合,在发布博客、查看博客的过程中实现信息的隐藏与提取,具有一定的实用性和创新性。当前的研究仅支持网络端的应用,下一步的开发将针对移动端展开。
[1]彭伟,胡宁,胡璟璟.图像隐写分析算法研究概述[J].计算机科学,2020,47(S1):325-331.
[2]赵显芬.基于手机微博的隐蔽通信技术研究[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]刘佳,柯彦,雷雨,李军,等.生成对抗网络在图像隐写中的应用[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 开发[M].安道译.北京:人民邮电出版社,2018.
[8]李辉.Flask Web开发实战入门、进阶与原理解析[M].北京:机械工业出版社,2018.