基于J-UNIWARD的改进隐写算法
2022-01-19伍迁吴建斌刘子璇宋梦丽
伍迁,吴建斌,刘子璇,宋梦丽
华中师范大学物理科学与技术学院,湖北武汉430079
为了提高隐写算法的安全性,在秘密消息嵌入时应遵循“改得少、改得好”的原则,尽可能减小对载体的修改,将秘密信息嵌入到难以检测的位置,JPEG图像是隐写的常用载体之一。
早期关于JEPG图像隐写的方法大多没有关注载体统计特性的前后变化,如JSteg[1]算法。秘密消息嵌入前后,图像的DCT系数或像素值的统计特性发生明显改变,为了减少对载体图像的修改,提高算法抗隐写分析能力,编码的思想被引入到隐写术中。如在F5[2]算法中采用矩阵编码,相比F4[3]算法在嵌入相同秘密信息的情况下进一步减少修改的点,结合湿纸编码的nsF5[4](no-shrinkage F5)算法较好地解决了F5算法中的收缩问题。但矩阵编码[5]和湿纸编码[6]仅提高了隐写效率,并未考虑隐写位置与隐写安全之间的关系。而自适应隐写的出现较好地解决了这个问题,尤其是STC[7]编码的出现,使自适应隐写的关注点集中到了失真函数的设计之上。性能优异的失真函数能够使秘密信息嵌入到难以建模的区域,如Fridrich等[8]最早在2005年提出了一种新的JPEG自适应隐写算法--扰动量化算法。此算法用量化取整误差的方法来构造嵌入失真函数,并且结合湿纸编码,在DCT系数取整时,干扰其取整方向以嵌入秘密信息。为进一步提高算法的安全性,Huang等[9]提出NPQ(Normalized PQ)隐写算法,上述隐写算法提出了新的信道选择规则,信道选择规则用于寻找最小可检测失真的DCT系数,相应地,隐写容量会受到限制。为了解决这一问题,受“扩频通信”思想启发,有学者提出了均匀嵌入思想,利用均匀嵌入的思想设计出的失真代价度量函数被称为均匀嵌入失真函数[10-11](uniform embedding distortion,UED),为使用所有DCT系数(包括DC、零和非零AC系数)作为覆盖元素,文献[12]提出了均匀嵌入重访失真(uniform embedding revisited distortion,UERD)算法,进一步提升了UED算法的性能。类似于S-UNIWARD空域自适应隐写算法,文献[13]提出J-UNIWARD隐写算法和Slide-Informed UNIWARD(SI-UNIWARD)隐写算法,前者将UNIWARD算法运用于JPEG图像,而后者着重将其运用于图像的边缘部分,从而达到提高抗隐写分析的能力。相较于传统的隐写算法,自适应隐写算法抗统计分析的能力,安全性有了明显的提高。但上述嵌入失真均为加性失真,事实上在秘密信息嵌入过程中,失真函数也会发生变化,根据之前的嵌入失真函数难以合理选择后续嵌入点的嵌入位置。为了解决上述问题并且进一步提高隐写算法的安全性,本文在J-UNWARD算法的基础上进行改进,引入了图像复杂度的衡量,依据图像复杂度来决定嵌入容量。具体来说,首先将载体图像分块并计算每个子块的复杂度,再根据复杂度的大小排序依次嵌入,每块嵌入完成后重新计算失真函数。根据图像纹理复杂度决定嵌入容量能在嵌入总量不变的情况下,提高在纹理较为复杂区域的嵌入量,降低在图像纹理复杂度较低区域的嵌入量。实验结果表明,该隐写算法具有较强的抗隐写分析能力,在同等嵌入率下抗隐写分析性能较J-UNIWARD算法有了进一步的提高。
1 理论知识
文献[14]指出将秘密信息嵌入纹理复杂区域能提高算法的安全性,评价图像纹理复杂度的方法有很多,本文采用较常用的灰度共生矩阵来衡量图像纹理的复杂度。灰度共生矩阵是一种通过研究灰度的空间相关特性来描述纹理的常用方法。熵和反差是其中2个重要的指标,本文采用文献[15]中的熵和逆差作为评价图像复杂度的指标。
STC编码是一种特殊的矩阵编码,在失真函数下能使秘密信息的嵌入达到理论的最大值。STC编码主要思想是利用奇偶校验矩阵H建立网格图像,将最小失真问题转化为求最短路径的问题,而该问题可以通过维特比译码算法快速得到。编码中嵌入失真可根据具体情况自行定义。奇偶校验矩阵H是由一系列特殊的子矩阵ˆH级联拼接而成的,ˆH由享密钥K随机产生,大小为h×w,h决定了编码的速度和效率,w的值由嵌入率α决定。H的构成方式为
UNIWARD的嵌入失真是载体图像的方向滤波器组分解中的系数的相对变化总和。这种方向性使得嵌入变化多集中在难以建模的区域,如纹理和噪声区域,而避免了光滑区域被修改。方向滤波器组包括3个线性平移不变滤波器,B={K(1),K(2),K(3)}表示这组方向滤波器的核,这3个滤波器通过计算式(1)所示的方向残差分别从水平垂直跟对角线评估给定图像的X的光滑程度
式中:∗为镜像填充(mirror-padded)卷积,使方向残差W(k)矩阵与载体图像量化后DCT系数矩阵一致,镜像填充是为了防止在边界引入嵌入失真。滤波器的核由一维高通和低通小波分解滤波器构成,小波表示已知的能够为自然场景提供良好的去相关性(decorrelation)和能量紧凑化(energy compactif ication)。方向滤波器的核可由式(2)~(4)表示
UNIWARD隐写算法中滤波器分别对应二维LH、HL和HH小波方向的高通滤波器,并且滤波器的残差方向与X第一级未抽取小波在LH、HL、HH分解方向一致,由这组方向滤波器计算出图像的失真函数
式中:ε为正数,避免分母为零;和为载体图像和载密图像第K层分解得到的第uv个小波系数。通过失真函数使秘密信息嵌入纹理复杂的区域,从而提高隐写算法的安全性。
2 算法实现
如前所述,通过改进失真函数的表达来改进原有算法。本文算法的具体操作是在计算每一处的嵌入位置时会根据之前的嵌入情况重新计算失真函数,这样能使每一处的失真函数的值更加准确,从而择优选择嵌入的位置。
为了使秘密信息更好地嵌入图像纹理复杂的区域并减少对载体图像的修改,改进算法通过将图像分块来计算每块复杂度的大小,根据复杂度大小动态调整嵌入的秘密信息的多少。在每块嵌入完成后更新失真函数,同时结合STC编码在选取合适的嵌入点的同时,减少对图像的修改,从而达到提高抗隐写分析的能力。
2.1 嵌入过程
嵌入过程流程图如图1所示。
图1 秘密信息嵌入流程示意图Figure 1 Schematic diagram of the secret information embedding process
隐写算法嵌入过程具体实现步骤如下:
步骤1首先将图像2×2分块,对分得的图像依次标记为1、2、3、4。依次求得分块所得的4个图像的灰度共生矩阵,而熵和反差是描述图像复杂度的两个重要指标,本文用
作为度量图像复杂度的标准,C值越大,说明图像越复杂,越适合秘密信息的嵌入,C值越小,则说明图像越平滑,不利于秘密信息的嵌入。
步骤2计算出4个子图像复杂度后,按复杂度从大到小依次排序记为C(1)、C(2)、C(3)、C(4),由原始载体计算出原始的失真函数D(X,Y),用嵌入率α计算出图像的嵌入总量,记为M。根据每个子图复杂度大小分配每块图像的嵌入量为
步骤3选出复杂度最高的子图像,根据整个载体图像的失真函数及分配容量,利用SCT编码将秘密信息嵌入到子图像中。利用SCT编码进行秘密信息的嵌入及提取的公式为
式中:X为原始图像;Y为载密图像;m为秘密信息;G(X,Y)为秘密信息嵌入后的总体失真,C(m)={z∈{0,1}n|Hz=m}为m的陪集,在C(m)中找到与原始图像X有最小失真的载密图像,即完成秘密信息的嵌入。得到含密子图像后将其与其他3块未嵌入的子图像恢复成原始图像,再计算第一次嵌入后载体图像的失真函数。
式中:X′为嵌入复杂度最高的那块恢复后的载体图像;Y′为对应的含密图像。
步骤4根据新的失真函数,将复杂度第二的子图像进行嵌入,依此类推直到所有子图像嵌入完成,即将秘密信息全部嵌入载体图像。
2.2 提取过程
接收方接收到含密图像后依据提取算法提取图像中的秘密信息,提取过程流程图如图2所示。
图2 秘密信息提取流程图Figure 2 Flow chart of secret information extraction
接收方在接收到含密图像后,以同样的方式对图像分块并计算其复杂度,按照复杂度由大到小,根据共享校验矩阵H提取出秘密信息m,提取公式为
最后根据复杂度的大小将秘密信息组合,最终得到传输的秘密信息。
3 实验结果
实验基于第一届信息隐藏大赛图像库,实验环境为Windows 10系统,CPU为Intel酷睿i7-10750,内存为16 GB,实验工具为Matlab 2016b。从图像库中随机选取1 000幅图像进行JPEG压缩,压缩因子分别为70和95,取750张图像作为训练图像,250张图像作为测试图像。考虑到在嵌入率为0.2~0.7时应用较多,本文算法测试在嵌入率为0.2~0.7的情况下进行。秘密信息比特是随机产生,由于DCTR隐写分析和ccJRM隐写分析对JPEG域的隐写具有良好的检测性能,并且集成分类器(Ensemble Classif ier)能在高维特征下进行快速训练,所以本文选取DCTR特征和ccJRM特征,并在集成分类器下进行分类测试,最小平均错误率PE可以表示为
式中:PFA和PMD分别表示虚警率和漏检率。当PE值较大时,隐写分析方法难以识别,说明隐写性能较好。以像素大小512×512的载体图像为例,质量因子为95和70,嵌入率为0.2~0.7,分别以J-UNIWARD算法、nsF5算法、本文算法进行嵌入并记录测试数据。
图3是QF=70时在DCTR隐写检测分析情况下,改进算法与非自适应隐写算法nsF5的检测结果,其中横坐标表示嵌入率,纵坐标表示在DCTR隐写分析下的检测错误率,从结果中可以看出,相较于传统的非自适应隐写算法,改进后的自适应隐写算法在抗隐写分析能力上具有明显的优势,因为相比于非自适应隐写,改进算法在嵌入点的选取上加的合理,在嵌入相同的秘密信息时修改的位置更少,具有较好的抗隐写分析能力。
图3 DCTR特征下改进算法与nsF5算法检测结果Figure 3 DCTR feature improved algorithm and nsF5 algorithm detection results
图4为QF=95的情况下,改进算法与原始算法的检测结果。A和B表示在隐写分析的错误率均为0.25时,原始算法和本文改进算法所对应的嵌入率。从图4中可以看出在同等嵌入率的情况下,改进后的算法抗隐写分析能力有了一定的提高。尤其是嵌入率在0.40~0.65范围内时,两种算法性能对比更加明显。当嵌入率达到0.65之后,随着嵌入率的增加,本文算法相较原始算法性能提升的差距开始减小,但抗隐写分析能力一直高于原始算法。此外,比较A和B的横坐标可以看出,当隐写分析的错误率均为0.25时,改进算法在此错误率下的嵌入容量有所增大。
图4 DCTR特征在QF=95下的检测结果Figure 4 Detection results of DCTR features under QF=95
由图5可知,当DCTR特征在QF=70下的检测结果与QF=95时类似,同样是在嵌入率为0.30~0.65范围内时,改进后的算法在抗隐写分析能力上提高的较为明显,并且与原始算法相比,在错误率相同的情况下,本文改进算法嵌入容量更高。
图5 DCTR特征在QF=70下的检测结果Figure 5 Detection results of DCTR features under QF=70
从上图6中可以看出,算法与嵌入率均一致的情况下,相比于DCTR隐写分析,ccJRM隐写分析的错误率比DCTR隐写分析高,性能较弱。但本文改进后的隐写算法在面对这两种隐写分析时,抗隐写分析能力结果大致保持一致,在常用的嵌入率0.30~0.60范围内,算法性能达到最优。
图6 ccJRM特征在QF=95下的检测结果Figure 6 ccJRM feature detection results under QF=95
图7为J-UNIWARD隐写算法和本文算法使用QF为70图像作为载体图像并且在ccJRM特征下隐写分析的结果,其结果与图6所示结果相近。
图7 ccJRM特征在QF=70下的检测结果Figure 7 ccJRM feature detection results under QF=70
从图3~7中可以看出,相比于J-UNIWARD算法,本文算法的抗DCTR隐写分析及ccJRM隐写分析能力均有了提高,而nsF5隐写算法是非自适应隐写算法,在抗隐写分析的能力上与自适应隐写算法存在明显差距。当嵌入率低于0.25时,本文算法抗隐写分析性能与原始算法提升不明显,这是因为嵌入率越小,失真函数的改变也会变小,算法性能的提升也比较小。由于图像改动的点数会随着嵌入率的增加而增加,如果简单地将失真当作加性失真来看,图像点修改较多的话,势必会造成嵌入点的位置选取不当,容易在孤立的像素点或者平滑区域嵌入秘密信息。而本文算法考虑了每次嵌入对后面嵌入的影响,当嵌入量大时,失真函数的更新幅度也会随之变大,相比于原始算法,本文算法在后面嵌入时选取的嵌入位置的抗隐写分析的能力会更强。从本文4组实验结果中可以看出,当嵌入率为0.60左右时,相较于原始算法,改进后算法的抗隐写分析能力提升最大约为6%。由于两种算法得失真函数选取的点最终趋于相同,所以当嵌入率达到0.65之后,改进算法性能提高的程度会随着嵌入率的增加而下降,逐渐接近原始算法。
对比实验结果图5和7可知,DCTR隐写分析的性能明显高于ccJRM。以QF=95的图4和6进行分析,在DCTR隐写分析器下,当测试错误率为0.25时,J-UNIWARD算法的嵌入率为0.50,而改进后算法的嵌入率可以达到0.60。相同错误率的ccJRM隐写分析器下,J-UNIWARD算法的嵌入率约为0.55,而改进后算法的嵌入率可以达到0.65。从图3~6中可以分析出,当嵌入率在0.40之后,相同的错误率下,改进后的算法的容量也有一定的提升。为了进一步确定图像质量因子对改进算法的影响,取不同质量因子的图像在相同嵌入率的情况下用DCTR隐写分析下测试,测试结果如表1所示。
表1 在不同质量因子下改进算法的检测结果Table 1 Detection results of the improved algorithm under different quality factors
从表1中可以看出,随着载体图像质量因子的升高,检测结果总体趋势减小,质量因子为40时,相同嵌入率情况下抗隐写分析能力最强,所以在选取改进算法进行隐写时,质量因子较低的图像有助于提高抗隐写分析能力。
4 结语
本文考虑到失真函数会随秘密消息的嵌入而改变,所以选择将秘密信息分开依次嵌入图像中。嵌入一次之后重新计算失真函数,再次对失真函数进行更新,因此能较好地解决加性失真问题。随秘密消息的嵌入,算法抗隐写分析的性能提升更加明显,在嵌入率为0.30~0.65范围内,改进算法的安全性逐渐增高。除此之外,本文将图像的纹理特征作为分配嵌入容量的依据,不仅能使秘密信息更好的嵌入在纹理复杂难以建模的区域,还可以进一步提高算法的抗检测分析能力。尤其在嵌入率达到0.60时,本文改进后算法相较于原始算法,抗隐写分析能力提升最大约为6%。本文表现更佳。当我们将载体进行分块嵌入时,每次嵌入都会重新计算子块的失真函数,而且在嵌入之前要计算子块的复杂度以及子块嵌入量,所以相较于原始算法,本文算法的嵌入时间以及计算量均会不同程度的增加。原算法嵌入完成一次所需时间为3 s,而改进算法嵌入完成一次所需时间为8 s,但是由于实验环境机器性能一般,而且没有采用GPU,在算力很强的计算中心,总的时间开销增加并不大。在此基础上,如何找到一个合适的分块数量,在提高算法性能的同时还能保证嵌入时间,以及如何科学的评价一个图像的复杂度使嵌入容量的分配函数设计的更加合理是下一步工作的研究方向。