图像数据在网上传输需要经过加密处理,而现在很多加密算法都遵循动力学的衰退原理,会退化成具有周期性的算法,而会导致图像信息的泄漏等问题。为此我们提出一种基于伪随机点的混合图像融合算法,它先把图像分成8×8的小块,然后对每块图像进行变换,产生一个伪随机序列,将图像块内的像素值和按伪随机序列所对应的像素值相融合进行一次置乱,然后对EW编码后的图像用混沌序列再一次置乱。
一、基于伪随机点的混合图像融合加密方法
通过对数字图像像素值点分布的分析我们可以发现,图像的重要信息都集中在低频区域中,而高频的部分都是反映图像细节的。小波变换是无损的,能很好地将图像的重要细节保留下来,同时运用小波的多重分解可以把图像按频率进行分离,把图像用高频滤波器和低频滤波器分离开来,根据自己的要求有针对性地对需要的图像进行处理,达到所期望的结果,是现在使用广泛的一种数字图像处理方式。
现在使用的JPEG标准是对图像的DCT系数做熵编码,而基于伪随机点的混合图像融合加密方法采用的是小波编码。
1、背景介绍
混沌现象是在确定性的非线性动力系统中出现的类似随机的现象。这种过程既非周期又不收敛,并且对初始值有敏感的依赖性。一维多参数非线性动力系统定义如下:Xn+1=G(Xn,μi)其中μi为参数,Xn为状态,而G是一个映射,把当前状态从xn映射到下一个状态xn+1。如果从初始值Xo开始反复应用这种映射关系,就可以得到一个序列{Xm|m =0,1,2,…},这一序列就称为离散时间动力系统的一条轨迹。如果为μi选择恰当的数值,使G满足三个条件(G具有对初始条件的敏感性和依赖性,G是拓扑传递的,G的点分布稠密),则对应的动力系统是混沌的。其中Logistic映射是比较具有代表性的映射。它的定义为xn+1= μXn(1-Xn),其中O≤μ≤4称为分支参数,xn∈( o,1)。当3 569 945 972<μ≤4时,该动力系统进入混沌状态。进入混沌区域后,系统的混沌就变得非常复杂。
图2中,x轴表示μ的取值范围,y由表示状态xn的范围。
图3中,a的初值是5,b初值是5.1,c初值是S 2。Y轴表示取值,X轴表示迭代的次数。
由以上的实验数据可以清楚看到,Logistic映射对初始值是相当敏感的,同时也可以证明初始条件微小的改变都会得到完全不同的结果,它与混沌序列对初始值敏感是一致的。
sinx、cosx都可以用泰勒级数或麦克劳林级数展开为无穷级数,具体展开式如下:
而且在实数域上分布均匀,函数的可微性和连续性较好,又符合图像分布的特性,所以这里用函数G(i,j)=|s×sin(u×i)+t×cos (v×j)|在[o,1]上的映射来确定X0,并把X0的输出作为Logistic映射的控制参数,由于s、u、t、v是随机数,这样生成的初始条件具有很强的隐蔽性,也增强了混沌序列的随机性。
2、方法的具体实现
先将m×n的图像分成8×8的块,对每块图像进行处理。然后利用图像融合的方法将图像进行操作生成一个新的图像,确定一个输入序列,作为单向函数的输入,生成一个伪随机序列,将两个像素值进行融合。然后将得到的图像做EZW编码,再把编码后的图像用混沌序列进行再次置乱,使图像的安全性大大提高。
a、b、s、t、u、v是随机正整数,u是一个确定的常数圯原图像为F由a+b×c的值作为输入端生成的伪随机序列对应的目标图像为0,融合结果图像为E两幅图像上对应像素(i,j)的灰度值分别记为F(i,j)和O(i,j),其中F(i,j)为原图像在(i,j)处的像素灰度值,0(i,j)为目标图像在(i,j)处的像素灰度值。c是图像块内图像按zigzag方式得到的离散余弦变换(Discrete CosineTransfom,DCT)系数序列的编号。采用SHA中的散列函数来作为单向函数。
(1)加密算法
将参数a、b代入,计算a+b×c的值,把它作为单向函数的输入,可以得到新的序列。此序列就是图像融合的对象序列,用融合公式生成新的图像灰度值,计算s×(b+a×c)+t×(a+b×c)的值并以此作为单向函数的输入,由序列生成置乱矩阵,把融合后的图像置乱,至此离散余弦变换DCT系数置乱结束。用Logistic映射对EZW编码后的系数再次进行置乱。
1)利用图像融合加密公式:E(i,j)=O(i,j)+F_(i,j)/2生成新的灰度图像值。
2)将图中所有块全部采用上面的方法进行融合。
3)计算s×(b+a×c)+t×(a+b×c)的值并以此作为单向函数的输入生成一个伪随机序列,由该序列组成一个置乱矩阵。
4)重复3直到把全部图像块的系数全部置乱。
5)计算G(i,j)=|s×sin(u×i)+t×cos_(v×j)|的值,作为Logistic映射的状态值xn。
6)重复5直到把编码后的每块图像用混沌序列进行加密置乱。
(2)解密算法
加密用的参数a、b、s、t、u、v和单向函数要告诉解密方,用u、s、t、u、v的值可以算出G(i,j)的值,对编码后的图像进行解密,得到编码前的系数矩阵。再计算s×(b+a×c)+t×(a+b×c)的值作为单向函数的输入,得到原置乱矩阵,算出还原矩阵。计算a+b×c的结果作为单向函数的输入重新得到序列,通过逆运算可以得到原图像。
二、实验结果和分析
本方案是在CIU-T2130 1.86 GHz,2儡内存的电脑上实现的,用Matlab作为图像的处理工具,选取具有典型特性的四幅图像作为实验数据。具体的实验结果如图4所示。
若采用Arnold变换,加密的图像存在周期性的变换,在一定周期内总存在一幅复原图像,这样就会失去加密的效果,存在一定的风险性。
图5是Arnold变换的置乱程度与之乱次数的关系曲线图,当迭代到192次时图像正好恢复原状。
采用融合变换M1由于DC系数普遍大于AC系数的关系,通过对直方图的分析容易被识别,进而造成图像信息的泄露。而采用本文提出的方法能较有效地防止出现这种情况。
本文对目标图像进行了两次文件加密处理,第一次是在图像生成DCT系数的时候,第二次是在编码结束后。第一次文件加密很好地保护了DC系数,第二次加密保护了编码后的系数。先将图像的DCT系数进行融合,然后用置乱矩阵来进行第一次置乱,之后经过EZW编码后进行第二次置乱。经过这两次的置乱可以较好地保证图像安全,而且函数G(i,j)是由基本初等函数经过初等变换得到的,也可以根据需要来选择函数,并对选取的函数作不同的变化。这里之所以要选取初等函数是因为它运算简单而且效率高,可以增加混沌序列的随机性,同时也使想要破解图像的信息变得困难。Logistic映射对初值是极其敏感的,因此只有正确的密钥才能恢复原图像,得到正确信息。即使图像的部分信息被拦截,没有密钥或是错误的密钥所得到的图像也是经过变换的图像,无法获知图像原来的信息。综合运用置乱和像素值替代算法,可以大大提高图像的安全性,解决了采用单一置乱算法的周期性问题也克服了像素值替代算法容易被破解的缺点。用上述方法对原图像经过50次的反复变换操作,处理所得的图像与原图像相比肉眼几乎看不出失真。若需对原图操作连续处理超过50次,新的图像可能存在一定失真。为了得到比较好的效果,超过50次以上的处理用原图像再次处理的效果更好。
小知识之DCT
DCT是英文Dual Clutch Transmission的简写,中文直译为“直接换挡变速器”,因其是通过两套离合器工作,所以目前一般被称为双离合变速器。