1. 引言
隐写术是信息隐藏技术在隐蔽通信方面的一个重要应用。它是将秘密信息隐藏于一个公开的载体媒介当中,通过公开载体媒介的传输,实现秘密信息的安全传输。JPEG图像压缩格式可以实现很高的压缩率,同时能够保证良好的图像质量,在互联网和日常生活中被广泛使用。因此以JPEG图像作为载体的信息隐藏算法研究具有重要的理论和实际应用价值。
以JPEG图像为载体的典型隐写方法有Jsteg [1] [2] 、Outguess [3] 、F5 [4] 等。其中Jsteg嵌入方法会引起系数直方图出现值对趋于相等的异常 [5] ,容易被基于直方图统计特性的隐写算法所检测,如卡方分析,安全性较差。Outguess方法在Jsteg方法的基础上通过牺牲一半的信息隐藏容量来修正由于信息嵌入引起的直方图改变,虽然能够较好地保持JPEG图像DCT系数直方图统计特性,但是信息隐藏容量有限。F5方法能够较好地保持JPEG图像DCT系数直方图特性,同时能够取得较大的信息隐藏容量,但是信息嵌入时DCT系数直方图中会出现0值两边的数值向中间收缩,值为0的DCT系数的个数明显增加的情况,即“收缩”(Shrinkage)现象,这一点容易被攻击者所利用 [6] 。
JPEG图像一阶直方图统计特性 [4] ,作为JPEG图像的基本特征,经常被用于JPEG图像的隐写检测。如何提出新的嵌入策略实现在不牺牲信息隐藏容量的情况下,较好保持JPEG图像直方图统计特性,具有重要意义。
文献 [7] [8] 中指出提高嵌入效率,最大限度地减少由于信息嵌入对载体造成的影响是增强隐写方法安全性的一个重要途径。隐写编码可以有效提高信息嵌入效率,减少信息嵌入对原始载体的改动及影响。矩阵编码 [4] 是最早被用于提高嵌入效率的编码方法。当矩阵编码参数为
时,可以实现在
个载体数据中嵌入k比特秘密信息,而最多仅需改动其中的1个载体数据。Filler等人在文献 [9] 中提出STC (syndrome-trellis codes)编码方法,与矩阵编码方法相比,可以实现更高的嵌入效率。
基于上述分析,本文结合STC编码方法,并通过控制低频部分用于信息嵌入的绝对值为1的DCT系数比例来保持DCT系数直方图统计特性,提出了一种新的以JPEG图像为载体的隐写方法。实验结果表明,该方法与Jsteg方法、F5方法相比,不仅可以实现更大的信息隐藏容量和更高的嵌入效率,而且隐秘图像具有更好的图像质量,同时可以较好地保持JPEG图像DCT系数直方图统计特性,能够抵抗一般的基于直方图统计特性的隐写检测。
2. STC隐写编码
一般隐写算法的流程图如图1所示,包括信息嵌入和提取两个部分。
Figure 1. General flow chart of steganography algorithm
图1. 隐写算法一般流程图
假定信息嵌入和提取操作是直接在二进制比特序列(可以通过对嵌入信息的图像像素值或DCT系数进行转换得到)上进行的,针对隐写算法中信息嵌入和提取两个操作,分别定义两个映射:
嵌入映射:
提取映射:
这两个映射满足:
(1)
其中x表示载体序列,m表示消息序列,y表示嵌入消息后的隐秘序列。
定义由于信息嵌入引起的载体图像失真:
(2)
表示第i个载体元素变化引入的失真,也称为该载体元素对应的湿度级,若ρi = 1时,
即表示由于信息嵌入引起的载体元素变化数目。假定采用二进制线性编码,H为奇偶位校验矩阵,则式(1)中Ext(y) = Hy = m。为了最小化嵌入引入的影响,输出y要求满足如下方程:
(3)
STC (syndrome-trellis codes)编码为求解方程(3)提供了一种途径。STC编码 [9] 作为一种二进制线性码,H为STC编码的奇偶位校验矩阵,则
表示对应消息序列m的陪集。从式(2)可以看出,STC编码就是从m对应的陪集C(m)中搜寻出与原始载体序列x相比失真最小的z,作为编码的输出y,即
(4)
STC编码时,首先需要确定一个奇偶位校验矩阵
(由一个子矩阵
平移叠放得到),这样使得满足Hy = m的每一个解变为通过网格的一条路径,而方程(4)求解变为通过网格的最短路径的求解问题,而最短路径可以由维特比译码的方式快速得到。
一般情况下,当嵌入率小于0.5时,STC编码能够明显提高嵌入效率,但是当嵌入率大于0.5时,STC编码虽然仍然可以使用,但这时不能够完全发挥出其提高嵌入效率的良好性能。
3. 基于STC编码的JPEG图像隐写
3.1. 嵌入策略
本文结合STC编码,提出了一种新的采用正常量化表的JPEG图像隐写方法。该方法在采用STC隐写编码提高嵌入效率的同时,采用新的嵌入策略保持DCT系数的直方图统计特性。采用的嵌入策略具体如下:
1) 信息嵌入时,选择绝对值不为0的AC DCT系数进行信息嵌入,用正偶系数、负奇系数代表信息比特0,用正奇系数、负偶系数代表信息比特1,将DCT系数代表的信息比特排成一列,作为载体序列,然后使用STC编码将秘密信息编码到这个载体序列当中。STC编码后,与隐秘序列相比,若载体序列中的某个元素发生变化,则将其对应的DCT系数绝对值加1,若没有发生变化,则对应DCT系数值不变。
2) 由于秘密信息在嵌入之前一般要经过加密置乱等预处理,经过预处理之后的秘密信息序列可以看作是服从均匀分布的二进制随机比特流。假定嵌入信息之前载体图像为X,它的DCT系数直方图为H(X),P(X = i)表示直方图H(X)中值为i的DCT系数出现的频数。根据JPEG图像DCT系数一般统计特性 [4] [10] ,P(X = 1)、P(X = 2)、P(X = 3)、P(X = 4)需要满足以下两个关系:
(5)
如果仅按照策略1进行操作,当嵌入比(率)较高时,每个DCT系数值由于信息嵌入发生变化的概率近似为0.5。假定信息嵌入后得到隐秘图像Y,其对应DCT系数直方图为H(X),P(Y = j)表示直方图H(Y)中值为i的DCT系数出现的频数。P(Y = 1)、P(Y = 2)可以用P(X = 1)、P(X = 2)进行表示:P(Y = 1) = 0.5 × P(X = 1),P(Y = 2) = 0.5 × P(X = 1) + 0.5 × P(X = 2),可以得到P(Y = 1) < P(Y = 2)。这种情况明显破坏JPEG图像DCT系数直方图统计特性,容易被基于DCT系数直方图统计特性的隐写分析攻击。
对JPEG压缩过程中量化后的8 × 8 DCT系数块进行统计分析发现,在量化后的8 × 8 DCT系数块中,绝对值为1的DCT系数大部分位于中低频范围。为避免上述情况的发生,较好地保持DCT系数直方图统计特性,考虑通过控制低频部分用于信息嵌入的绝对值为1的DCT系数比例
,实际上也即限定低频顺序范围[2,r]中绝对值为1的DCT系数不进行信息嵌入,以此减少绝对值为1的DCT系数改变数目来实现目的。这里2到r的频率顺序是按照Zigzag顺序扫描得到,如图2所示。
关于
及低频范围[2,r]的确定,具体过程如下:
由于JPEG图像直方图对称性,仅对取值为正数部分DCT系数进行分析,对取值为负数部分的DCT系数进行分析可以得到同样的结果。假定载体图像X中用于信息嵌入的值为1的DCT系数比例为
,在高嵌入比(率)时,假定每个DCT系数变化概率为0.5,信息嵌入后,得到隐秘图像Y,其对应DCT系数直方图为H(Y),P(Y = j)表示直方图H(Y)中值为j的DCT系数出现的频数,则P(Y = j)与P(Y = i) (这里仅需列举
情况即可)的关系如下:
(6)
根据JPEG图像DCT系数直方图统计特性 [4] [10] ,P(Y = 1)、P(Y = 2)、P(Y = 3)、P(Y = 4)、P(Y = 5)需要满足如下要求:
(7)
根据式(7)得到
取值范围
(8)
根据
的取值范围(8)可以确定满足
取值范围的r取值。为了在较好地保持DCT系数直方图统计特性的同时取得最大的信息隐藏容量,在r取值中取其最小值rmin,即限定在低频范围[2,rmin]中绝对值为1的DCT系数不进行信息嵌入。
3.2. 具体实现操作流程
3.2.1. 信息嵌入部分
Step 1:得到JPEG图像的DCT系数矩阵,并确定用于控制嵌入信息的绝对值为1的DCT系数比例的低频范围[2,rmin];
Step 2:根据策略1,将用于嵌入秘密信息的DCT系数代表的信息比特排成一列,并对其进行混洗,之后作为载体序列cover;
Step 3:根据STC编码,将秘密信息比特序列msg调制编码到载体序列cover中,得到隐秘序列stego;
Step 4:根据隐秘序列stego,对隐秘序列每个比特对应的DCT系数按照策略1进行操作:如果stego(i)与cover(i)不相等,则将对应的DCT系数进行绝对值加1的操作;如果相等则不变;
Step 5:根据得到的隐藏有秘密信息的DCT系数矩阵,继续JPEG编码,得到隐秘图像。
3.2.2. 信息提取部分
Step 1:得到隐秘图像的DCT系数矩阵,提取相关参数信息:消息长度msg_len,STC编码参数h,低频范围限定参数rmin;
Step 2:根据限定的低频范围,将有效的DCT系数代表的信息比特排成一列,并与信息嵌入部分Step 2进行同样混洗,重新得到隐秘序列stego;
Step 3:根据STC编码,输入隐秘序列stego,消息长度msg_len,STC编码参数h,提取得到秘密信息msg。
4. 实验结果与分析
选取Lena、airplane、baboon、peppers四张512 × 512的JPEG格式灰度图像(质量因子为80)进行实验,用伪随机数发生器产生的0、1序列作为秘密信息,对提出的方法行仿真实现,并与F5方法、Jsteg方法在信息隐藏容量、嵌入效率、直方图统计特性保持方面进行比较,以验证本文提出方法的有效性。
采用PSNR来衡量嵌入信息后的隐秘图像质量,嵌入效率用每个DCT系数变化能够负载的秘密信息的比特数来进行衡量,计算公式如下:
(9)
STC编码在嵌入比(率)大于0.5时,性能会有所下降,可能会对本文提出算法的性能产生影响。为此进行了两个实验,分别在低嵌入比和高嵌入比两种情况下对文提出方法在嵌入效率、隐秘图像质量、直方图统计特性等性能方面进行分析,并与Jsteg、F5方法进行比较。
1) 在低嵌入比情况下,选择Lena图像进行实验,分别使用三种方法在其中嵌入10,000 bit秘密信息,实验结果如下。
Table 1. Comparison of embedding efficiency in the case of low embedding ratio
表1. 低嵌入比情况下嵌入效率比较
由表1可以看出,Jsteg、F5方法的嵌入效率都在2左右,其中F5方法虽然采用了矩阵编码,但是由于其收缩现象的存在,产生无效嵌入,导致其实际嵌入效率小于理论值。而新提出的方法的嵌入效率将近是F5、Jsteg方法的嵌入效率的二倍。同时可以看出,由于嵌入效率的提高,本文提出方法由于信息嵌入引起载体图像DCT系数变化数目更少,隐秘图像的图像质量相对更好。在低嵌入比(率)情况下,本文提出的方法产生的隐秘图像的DCT系数直方图与载体图像的直方图相比没有明显变化。
2) 在高嵌入比情况下,选择baboon图像进行实验,分别使用三种方法在其中嵌入30,000比特。
Table 2. Comparison of embedding efficiency in the case of high embedding ratio
表2. 高嵌入比情况下嵌入效率比较
由表2可以看出,在高嵌入比情况下,由于STC编码性能下降,本文提出方法嵌入效率有所下降,但仍然将近是Jsteg、F5方法的二倍。同时可以看出在高嵌入比情况下本文提出方法产生的隐秘图像质量优于F5方法,与Jsteg方法产生的隐秘图像质量相近。
在高嵌入比情况下嵌入信息后Jsteg方法产生隐秘图像的直方图表现出了明显的值对出现频数趋向相等的情况;F5方法虽然可以很好的保持直方图统计特性,但是表现出明显的“收缩”现象。而本文提出的新方法不仅避免了“收缩”现象,而且很好地保持JPEG图像DCT系数直方图统计特性。
综合低嵌入比和高嵌入比情况下的实验结果可以看出,本文提出的新方法在两种情况下都能够较好地保持JPEG图像DCT系数直方图统计特性,同时由于采用STC隐写编码,嵌入效率显著提高,与Jsteg、F5方法相比,在嵌入同样长度秘密信息的情况下,有效减少了由于信息嵌入时对载体图像的改动,隐秘图像具有相对更好的图像质量,因此本文提出的方法具有更强的抗隐写分析能力。
5. 结论
本文结合STC隐写编码,提出了一种新的信息嵌入策略,通过控制低频部分用于信息嵌入的绝对值为1的DCT系数比例来保持DCT系数直方图统计特性,由此建立一种新的针对JPEG图像的隐写方法。仿真实验表明,该方法与Jsteg、F5等典型隐写方法相比,不但在没有牺牲信息隐藏容量的情况下较好地保持JPEG图像DCT系数的直方图统计特性,而且能够实现更大的信息隐藏容量,同时由于采用STC隐写编码,减少了由于信息嵌入时对载体图像的改动,提高了隐秘图像的图像质量,因而具有更强的安全性。
本文对隐写算法安全性的分析主要是从JPEG图像一阶直方图统计特性的层面出发,本文提出的方法虽然能够较好地保持DCT系数直方图统计特性,但不能保证DCT系数高阶统计特性不会发生变化。至于从DCT系数的高阶统计特性和JPEG图像的其他特征层面对隐写算法安全性进行分析,在下一步中会进行研究。