方 颂,王彦娴,谭 阳
(1.湖南大学 计算机科学学院,长沙 410000; 2.湖南广播电视大学,长沙 410004)
数字图像安全技术在军事和医学等高度机密领域发挥着重要作用。在加密图像的传输或归档过程中,需要在加密阶段使用密钥情况下对其进行分析[1-2],尤其是在加密阶段必须完成对加密域中可逆数据隐藏的数据压缩和认证。例如,在云计算场景中,如果不知道图像的原始内容或用于加密图像的密钥,则可在加密图像中封装秘密消息。但在解码阶段,要求原始图像必须完全可恢复,秘密信息必须无差错提取。因此,需要在封装容量和重建图像质量之间取得权衡点[3-4]。
针对上述问题,研究人员提出了很多解决方案。文献[5]对原始图像进行AES加密,并随机选取1个4×4像素位置进行秘密信息封装,为重建覆盖图像,对图像局部标准偏差进行分析。文献[6]提出用简单XOR操作加密原始图像,然后将加密图像划分成块,并且对每个块进行集合分割。在每个集合中,每个像素关键位进行压缩腾出空间以便获得额外数据。在解码阶段,观察块进行原始信息平滑恢复和提取。文献[7]提出图像加密保留技术,采用可逆数据隐藏法直方图释放原始图像的一部分。之后,通过加密图像中的最高有效位(Most Significant Bit,MSB)值对图像进行加密,并插入信息。文献[8]利用概率和同态性质的公钥密码加密封装图像,加密后将数据嵌入加密像素的MSB信息中。文献[9]描述了一种基于分布式信源编码(Dishibuted Source Coding,DSC)的方法,利用流密码对原始图像进行加密,在MSB层面对一些位数据进行压缩,从而为秘密数据腾出空间。以上研究都获得了较好的数据加密效果,但是均未考虑加密数据的容量问题。因此,加密图像在信息封装过程中存在容量限制问题。
为解决上述问题,本文提出一种基于MSB预测的高容量可逆数据隐藏图像加密算法。由于清晰图像中像素与其相邻区域之间的局部相关性,相邻2个像素值非常接近,使用已经解密的图像来预测像素值较合理,但存在一些误差。因此,本文给出一种修正预测误差的大容量可逆数据隐藏方法。该方法在加密前首先预测误差纠正,根据误差位置图对原始图像进行预处理,避免所有预测误差,然后对预处理后的图像加密处理,通过MSB预测对图像进行无损重建。
现有的图像加密方法没有很好地融合高嵌入容量(接近1bpp)和高视觉质量(大于50 dB)。在大多数情况下,基于预测误差分析(PE)或使用直方图移位技术的方法,替换一些像素的LSB值来隐藏秘密消息的比特。然而,如果图像被加密,则很难检测是否包含隐藏消息。事实上,加密图像的像素值是伪随机生成的。因此,像素与其邻域之间没有相关性。基于上述原因,本文使用MSB值而不是LSB值来嵌入隐藏消息。通过这种方法,在加密域中,保密性仍然相同,并且在解密期间,MSB值的预测比LSB值的预测更容易获得[10-11]。
本节首先提出一种数据加密封装与修复算法,实现对数据加密的可逆恢复。该算法的编码阶段包括3个主要步骤:MSB预测误差检测,考虑融合MSB误差的加密,MSB替代数据加密,具体过程如图1所示。
图1 加密域数据封装算法编码过程
基于MSB的加密数据封装算法的目标是m×n像素的原始图像I,可以通过使用一个密钥Ke,其他人可以在不知道密钥Ke的情况下利用隐藏密钥Kw对使用数据消息进行封装。在这个过程中,得到标记加密图像Iew,同原始图像大小相同。该算法实现过程如下:
1)预测误差检测:提出利用MSB替换的秘密信息封装方法,数据隐藏步骤之后原始的MSB值丢失。在解码阶段,能够毫无差错地预测MSB值。为了重建原始图像,使用以前的像素预测当前像素值。因此,需要分析原始图像内容,以检测所有可能的预测错误。具体步骤为:
步骤1考虑当前像素p(i,j)。其中0≤i 步骤2根据对以前像素p(i,j)的邻域扫描,计算pred(i,j)的值,并作为解码步骤中的预测器。 步骤3计算pred(i,j)和p(i,j)之间的绝对差值,以及pred(i,j)和inv(i,j)之间的绝对差值,分别表示为Δ和Δinv,形式为: (1) 步骤4对比Δ和Δinv的计算值,如果Δ<Δinv,则不存在预测误差,因此p(i,j)的原始值比逆值更接近预测值。否则,会存在误差,可将此信息存储到误差位置的二进制图中,这个过程并不会增加过程的复杂度。 2)图像加密:为了使原始图像不可直接读取,使用加密密钥Ke=(c,x0)对其进行加密,如图2所示。 图2 图像加密过程 从图2可知,该密钥的元素用作混沌发生器的参数,混沌发生器采用分段线性混沌图方式[10]。通过使用该混沌发生器,可得到伪随机序列s(i,j),并可通过异或(XOR)操作对像素pe(i,j)进行加密计算: pe(i,j)=s(i,j)⊕p(i,j) (2) 由于加密阶段是完全可逆的,没有溢出,可以恢复清晰图像而不作任何更改。此外,本算法中使用了1个混沌发生器,但对于密码安全的伪随机数发生器是兼容的。例如,在OFB模式下使用AES算法,唯一的要求是在加密阶段使用流密码方式进行数据加密。 3)数据封装:在数据封装阶段,可在不知道加密密钥Ke和原始图像内容的情况下,对加密图像中的数据进行封装。通过使用数据隐藏密钥Kw,首先对插入的消息进行加密,以防止标记加密图像封装后对其进行检测。其次,对加密图像像素进行扫描,从左到右,从上到下(扫描线顺序),对秘密消息的每个可用像素的MSB利用1位bk进行替代,0≤k pew(i,j)=bk×128+(pe(i,j)mod 128) (3) 只有第一个像素不能被标记,因为值是不可预测的,所以值不能更改。 图3 解码方法结构示意图 如果接收者只有Kw,按照扫描线顺序对标记加密图像的像素进行扫描,每个像素的MSB进行提取以检索加密的秘密消息[11]: bk=pew(i,j)/128 (4) 步骤1加密密钥Ke可利用m×n伪随机字节生成序列s(i,j)。 步骤2基于扫描线顺序对标记加密图像的像素进行扫描,对于每个像素,在伪随机流中使用关联二进制序列s(i,j),结合标记加密值pew(i,j)异或操作可提取到7个MSB,异或操作形式为: (5) 其中,⊕表示异或操作符。 步骤3MSB值预测。 (1)利用先前已经解密的相邻像素的值,可计算预测器pred(i,j)的值。 (2)利用MSB=0和MSB=12种情形计算像素值,这2个像素值的差异分别表示为Δ0和Δ1,则可得到预测器pred(i,j)的计算值。 (6) (3)Δ0和Δ1之间的最小值给出搜索的像素值。 (7) 上述算法过程实现了对数据加密过程的封装和加密数据的修复,但是没有考虑数据加密恢复的精度问题,并且加密数据的容量受到限制,容量增大会大幅度降低加密数据修复的精度。 本节提出预测误差修正的大容量可逆数据隐藏算法,如图4所示。 图4 大容量可逆数据隐藏算法 首先对原始图像进行预处理,以避免所有的预测误差,以便能够在解码步骤中重建图像。通过此过程,可以加密预处理图像。在封装阶段,加密图像的所有像素标记为1位消息,使用这种方法可得到最大的有效载荷(等于1 bpp)。大容量可逆数据隐藏算法的具体步骤如下: 步骤1(预测器) 建议使用之前计算的像素来预测当前像素的值。对于这种方法(除第1行和第1列)考虑左上像素的平均值作为预测器pred(i,j): (8) 本文使用平均值作为预测器,在有误差时减轻对执行像素的修改,尤其是在当前像素值与其相邻值之间有高差值的情况下。 步骤2(图像预处理) 预测误差检测阶段后,提出原始图像I的预处理过程以获得没有任何预测误差的图像I′。对于每个有问题的像素,观察误差的幅度,并计算必要的最小像素修改值,以避免误差。式(9)给出了在解码阶段没有预测错误所必需的必要条件: |pred(i,j)-p(i,j)|<64 (9) 在算法1中给出了纠正所有预测误差的详细预处理算法。预处理阶段结束后,根据式(2)对预处理图像I′进行加密,然后执行误差位置信息封装过程。 算法1预处理算法 输入原始图像I,大小为m×n 输出预处理m×n图像I′ For i←0 to m do For j←0 to n do inv(i,j)←(p(i,j)+128)mod256; If i=0 or j=0 then 特殊处理; Else Endif Δ←|pred(i,j)-p(i,j)|; Δinv←|pred(i,j)-inv(i,j)|; If Δ≥Δinvthen If p(i,j)<128 then p′(i,j)←pred(i,j)-63; Else p′(i,j)←pred(i,j)+63; Endif Else p′(i,j)←p(i,j); Endif Endfor Endfor 图像预处理算例分析:如果存在p(i,j)=50,p(i-1,j)=78,p(i,j-1)=154,则有: inv(i,j)=(50+128)mod 256=178 然后计算Δ和Δinv: Δ=|116-50|=66 Δinv=|116-178|=62 因为Δ≥Δinv,存在误差,必须修改当前像素p(i,j)的值。则可得: pred(i,j)-p(i,j) 由此可得: p(i,j)>pred(i,j)-64 对p(i,j)进行修改使得图像失真最小化: p′(i,j)=pred(i,j)-63=116-63=53 步骤3(误差位置信息封装) 在预测误差检测中,预测误差的位置存储在误差定位二进制图中,根据式(2)对预处理图像I′进行加密。在封装步骤之前,采用加密图像Ie避免预测误差。然后将加密后的图像Ie分成8个像素块,并按扫描块顺序逐块扫描。根据误差位置,二进制图可在数据块中识别至少1个预测误差,利用先前像素的MSB对当前块进行1位替换。在当前数据块中,如果存在预测误差,则利用1位像素的MSB值进行替换,否则,利用0位像素的MSB值进行替换,如图5所示。 图5 MSB值替换过程 步骤4(数据提取与图像恢复) 在解码步骤中,可以通过以下步骤提取秘密消息: 1)利用扫描线顺序对标记加密图像进行扫描,对于每个像素根据式(4)提取MSB值,并进行存储。 2)该序列可作为误差序列的开始,因为在数据隐藏步骤中没有标记下一个像素,对像素进行扫描直到下一序列的所有MSB值均为1,表明误差序列结束。 3) 重复此过程直到图像处理结束。 由于这种方法是完全可逆的,因此可以完全重建原始图像I。首先,利用式(5)对标记加密图像进行解密,以恢复每个像素的7个MSB。然后,利用式(6)和式(7)对像素的MSB值进行预测。 实验过程中采用硬件配置如下:CPU为intel i7-6500 k 3.0 GHz,内存大小为6 GB ddr4-2400 k,仿真软件平台是Matlab2012a,系统为win7旗舰版。选定大小为128×128的医学CT图像作为实验原始图像[12-13],如图6所示。 图6 实验原始图像 在加密图像中,数据隐藏需要测量不同的性能,即不正确提取的比特数、有效载荷(即嵌入率)和数据提取后的重建图像质量。算法的实验结果进行统计分析,以验证是否具有较高的视觉安全级别。使用不同的统计度量:原始图像和加密或标记图像的水平和垂直相关系数、Shannon熵、χ2测试指标,像素改变率(Number of Pixels Change Rate,NPCR),一致变化强度均值(Unified Average Changing Inlensity,UACI)和峰值信噪比(Peak Signal to Noise Ratio,PSNR)指标[12-14]。其中,对比算法选取文献[15-16]。 1)水平和垂直相关系数: (10) 其中,pN指的是p的邻域,E(x)是样本均值,V(x)是样本方差,S是样本的大小。E(x)和V(x)的计算公式为: (11) 2)Shannon熵值指标: (12) 其中,I是具有256级灰度αl的大小为m×n的图像,0≤l<256,P(αl)是灰度αl的概率。 3)χ2测试指标: (13) 4)像素改变率: (14) 其中,d(i,j)的取值为: 5)一致变化强度均值: (15) 6)峰值信噪比指标: (16) 本文算法在图6选取的3幅测试图像上的水平和垂直相关系数指标情况如图7所示。 图7 水平和垂直相关系数指标 从图7可以看出,原始图像的水平和垂直相关系数呈现出一定的相关性,关联点分布于对角线位置上。但利用本文算法获得的加密图像,基本实现了零相关要求。本文算法、文献[15-16]算法在加密图像复原过程中提取图像的峰值信噪比随有效载荷的变化对比情况如图8所示。 图8 不同算法峰值信噪比对比情况 由图8峰值信噪比对比情况可知,本文算法在不同有效载荷取值下的峰值信噪比,均要优于文献[15-16]对比算法。本文算法、文献[15-16]算法选取实验原始图像,加密重建过程中测试指标a~指标f上的实验对比结果如表1所示,其中,指标a~指标f分别对应式(10)~式(16)。 根据表1数据可知,在水平和垂直相关系数指标上,本文算法小于文献[15-16]2种对比算法,表明本文算法获得的加密重建图像与原始图像的相关性较低。χ2测试指标和Shannon熵值指标上,本文算法具有更低的测试值,表明加密或标记加密图像中的数据是无序的、不均匀的和不相关的,该算法具有更高的抵抗统计攻击的能力。同时,本文对比了本文算法、文献[15-16]算法在NPCR,UACI 和PSNR 3组指标上结果,显示本文算法具有更高的NPCR和UACI指标值,具有更低的PSNR指标值,表明本文算法相对于文献[15-16]算法,可得到更优的加密重建效果。NPCR和UACI指标值更高体现出了本文算法在加密容量上的优势。 表1 图像重建质量评价对比 本文提出一种基于最高有效位的大容量可逆数据加密算法。利用预测误差检测、融合误差加密、替代数据加密3个过程对加密域数据进行MSB数据隐藏,其密钥的元素用作混沌发生器的参数,构建分段线性混沌图加密方式。在此基础上,给出一种预测误差修正方法,构建加密数据误差的二进制图,并利用先前像素的MSB数据对当前数据块进行1位替代修复,利用没有预测误差数据块的8个像素对数据进行隐藏,实现大容量数据的可逆隐藏。实验结果验证了该算法的有效性。下一步考虑在每个像素隐藏多个加密数据位,比如在每个像素中嵌入大量的二进制MSB信息。2 大容量可逆数据隐藏算法
3 实验结果与分析
4 结束语