任志敏
(常州纺织服装职业技术学院机电学院,江苏 常州 213164)
隐写术作为信息安全领域的重要技术之一,通常用于隐藏秘密信息,比如消息、图片或声音,这类信息也称为载荷数据(payload),用于嵌入载荷数据的通常为图像、图片、声音等非秘密文件,也称为宿主文件(cover),从而保证载荷数据的不可见性,嵌入了有效载荷数据的宿主文件称为Stego文件。在隐写术中,总是希望在尽可能多隐藏有效载荷数据和确保宿主文件的保真度之间取得平衡。图片和声音等文件因其尺寸通常称为宿主文件的首选。与隐写术相对的是隐写分析,隐写分析是用来识别存放有效载荷的宿主文件[1]。
在图片作为宿主文件的隐写术中,有效载荷数据通常为一特定的文本信息。这一领域的重点方向或是寻找图片的噪声区域,或是寻找图片的边缘、纹理等区域,在这些区域嵌入载荷信息从而保证不扭曲图片本身。例如,最低有效位(LSB)替换在图片隐写术中使用非常广泛[2],一种最简单的LSB方法把秘密载荷信息替换到宿主图片选定像素的最低有效位(通常是1位或2位),由于图像像素分布的变化,因此通过隐写分析,很容易检测到宿主图片是否因此载荷数据。当然,后面的研究人员对经典的LSB方法进行了改进,利用图片的纹理、边缘和像素亮度来估算LSB的位数以增强该方法隐藏载荷数据的鲁棒性。
另外,研究人员利用频域知识提取其他原始特征实现信息隐藏。比如,通过小波变换获得权重的方法查找图片噪声和纹理实现载荷信息的嵌入。通过修改直方图的表示方式实现信息隐藏的方法。使用宿主图片的边缘扩展载荷信息的嵌入数量并避免在隐写分析过程中被侦测到。
与以上方法不同的是,本文提出了一种利用宿主图片直接隐藏载荷图片的方法,虽然文本等载荷信息本身不是图片,但是可以把文本转为位图,仍旧可以采用本文提出的方法。该方法本质上是设计一个深度学习网络[3],通过它自动提取宿主图片和载荷图片的最佳特征并合并信息。该方法是通用的,可以应用于任何类型的图片,为了验证这一点,利用公开的数据集CIFAR-100进行了测试。
在信息嵌入阶段,即编码阶段,本文用卷积神经网络CNN(convolutional neural network)对宿主图片和载荷数据图片进行合成,生成混合图片。在信息解码阶段,同样借助CNN,从混合图片中恢复载荷数据图片[4]。生成混合图片的CNN网络架构如图1所示,载荷图片的解码和提取CNN网络架构如图2所示。
图1 生成混合图片的CNN网络架构图
图2 提取载荷图片卷积神经网络架构图
从图1中可以看出,编码器网络有宿主图片和载荷图片作为输入,利用CNN的各个层提取图片特征向量的同时,隐藏了载荷图片的细节,生成混合图片,目标上生成的混合图片应与宿主图片在视觉上尽可能保持一致。
输入端的编码器网络有两个分支并行运行,分别称为宿主分支和载荷分支。载荷分支接收载荷图片,并使用8个卷积层和ReLU(Rectified Linear Activation Function)层将载荷图片分解为低层(边缘、颜色、纹理等)和高层特征。宿主分支接收宿主图片输入,使用10层卷积层和ReLU层分解输入图片,将其特征放入到特征向量表示的层次结构中,同时将提取的载荷图片特征合并到宿主图片中。为了合并载荷图片的数据,编码器网络提取并合并来自载荷分支的特征图到对应宿主分支的特征图,这一过程一共重复了8次,即8层,把载荷分支的特征图全部合并到宿主分支,经过一系列的卷积操作和ReLU后,在最后一个卷积层生成Stego图片。
使用Relu激活函数[5],在神经网络中,上一层神经元的输出值传递给下一层(隐层)神经元的输入值或输出层直接输出,上层节点的输出和下层节点的输入之间有个函数关系,这个函数称为激活函数。ReLU函数是一种常见的激活函数,ReLU本质上是求最大值的函数,函数图像如图3所示。
图3 ReLU函数图像
从图3中可以看出,ReLU 是一个分段线性函数,如果输入为正,它将直接输出,否则,它将输出为零。在输入是负值的情况下,它会输出0,那么神经元就不会被激活。这意味着同一时间只有部分神经元会被激活,从而使得网络很稀疏,进而对计算来说是非常有效率的。
图2所示的解码提取网络则分离合成图片中的隐藏特征,重新生成载荷图片。解码器网络接收编码器产生的Stego图片,先经过5层卷积和ReLU提取合成图片的特征向量,再经过两个分支,分别是提取宿主分支和提取载荷分支,各自分别经过6层卷积和5层ReLU恢复宿主图片和载荷图片。
损失函数,又叫目标函数,是编译一个神经网络模型必须的两个要素之一。另一个必不可少的要素是优化器。损失函数用来评价模型的预测值和真实值不一样的程度,损失函数越好,通常模型的性能越好。不同的模型用的损失函数一般也不一样。本方法采用的损失函数为式(1)。
Loss=α‖Isource-Ostego‖2+β‖Ipayload-Opayload‖2+γ‖Isource-Osource‖2.
(1)
Loss函数一共有3项组成,每一项都通过MSELoss的均方误差损失函数计算获得,其公式为式(2)。
(2)
式(2)中Yi为真实值,Yi_pred为预测值,MSE值越小代表模型越好。式(1)中Isource和Ipayload表示输入编码网络的宿主图片和载荷图片,Ostego表示编码器输出的合成Stego图片,Osource和Opayload表示解码网络提取出来的宿主图片和载荷图片。α,β和γ为控制参数。
本文在CIFAR-100数据集上实施了该方法。CIFAR-100数据集是CIFAR-10数据集的细分[6]。CIFAR-10一共有6万张32×32像素大小的彩色图片组成,其中5万张是训练集图片,1万张是测试集图片。CIFAR-10划分为飞机、汽车、鸟、猫、鹿、狗、青蛙、马、船和卡车共10个分类,每个类别6千张图片。这些分类是完全互斥的,汽车和卡车分类之间没有重叠,汽车分类只包括轿车、SUV之类的车辆,卡车分类只包括大卡车,两种分类都不包括皮卡车。CIFAR-100有20个超类,每个超类又分成5个分类,共计100个类。每个类包含600个图片,总计6万张图片,每个类各有500张训练图片集和100张测试图片集。先对CIFAR-100数据集进行预处理,步骤如下:
s1:下载CIFAR-100数据集,选择5万张图片训练集,并进行shuffle打乱顺序,设置batch_size为64。
s2:获取CIFAR-100分类数字0,1,…,99,并随机选择其中50%作为宿主图片集,剩余的50%作为载荷数据集。
s3:把载荷数据集转换为仅有一个通道的灰度图,如图4所示,其中第一张为宿主图片,像素大小为32×32×3,第二张为载荷图片的原始图片,像素大小为32×32×3,第三张为输入编码网络的载荷图片的灰度图,像素大小为32×32×1,即输入编码网络的是第一张图片和第三张图片。
图4 宿主图片和载荷图片及其灰度图
s4:把宿主图片集和载荷数据集的像素值归约到0~1之间。
s5:把宿主图片集和载荷数据集的80%作为训练集,10%作为验证集,10%作为测试集。
编码网络和解码网络都采用固定学习率的Adam优化器,其中learningrate设置为0.001,公式(1)损失函数控制参数α=β=γ=1,卷积神经网络层的所有过滤器都使用单个像素移动的步幅,并使用相同的填充padding。
本文通过计算2项指标来衡量宿主图片与Stego图片,输入载荷图片与提取载荷图片的质量,一是结构相似性SSIM(Structural SIMilarity),SSIM是一种衡量两幅图像相似度的指标,对于两张图片,SSIM计算包括亮度(luminance)对比、对比度(contrast)对比、结构(structure)对比三个部分。二是峰值信噪比PSNR(Peak Signal-to-Noise Ratio),是一种评价图像的客观标准, 是最普遍,最广泛使用的评鉴图片质量的的客观量测法[7-8]。PSNR 通常使用均方误差MSE(mean-square error)来定义,MSE是反映估计量与被估计量之间差异程度的一种度量。另外通过平均每像素的位数bpp(bits per pixel)来衡量宿主图片的嵌入载荷图片的能力,载荷图片嵌入宿主图片bpp为8位,数据量占比为33.3%。
在CIFAR-100数据集随机选择宿主图片(32×32×3)和载荷图片(32×32×3转换为灰度32×32×1),随机选出5组图片,实验结果如图5所示。
图5 实验结果图
图5中一共5组图片,每组5张图片,其中第1列为经过编码网络输出的Stego图片,第2列为经过解码提取的载荷图片,第3列为经过解码网络提取的宿主图片,第4列是输入编码网络的原始宿主图片,第5列是输入编码网络的原始载荷图片。从直观视觉上看,第1、3、4列图片看不出差异性,第2、5列图片几乎也是相同的,初步满足了图片隐藏与提取的目的。从定量的衡量指标看,图5的结果见表1。
表1 图片性能指标表
从表1中可以看出,PSNR值均大于30dB,表明生成的Stego图片和解码提取的载荷图片质量都是好的,在验证集上所有图片原始宿主图片与Stego图片的平均PSNR值为32.99,原始载荷图片与解码载荷图片的平均PSNR值为33.61。因此,不管是从图5中定性显示,还是从表1中定性分析可以看出,该方法可以可靠地用于图片隐藏。