1. 引言
数字技术的日益发展和互联网的快速普及给人们的生产和生活提供了极大的便利,但是由于数字信息易获取、易被篡改的特点,导致数字信息在互联网上的传输受到了极大的威胁。通过特定的技术手段对图像加密处理,可以掩盖图像的原始信息,这种方法成为了当今网络环境中一种极其有效的策略,避免了数字图像的恶意盗取与篡改。
传统的图像加密算法有Arnold置乱、应用混沌序列加密、ZigZag变换等方法。Arnold置乱容易实现,图像置乱效果好 [1] ,但用迭代次数作为密钥,密钥空间太小;利用单一混沌序列对图像进行加密的算法 [2] [3] [4] ,具有易于实现、对密钥敏感性高等特点,但其属于一类简单的混沌系统,密钥空间小,不能抵抗穷举性攻击;ZigZag变换具有算法简单、密钥周期大的特点 [5] ,但是传统的ZigZag算法存在一定的缺陷,并且对密钥的灵敏度低,易被非法用户破解。为了克服传统算法的缺陷,本文对ZigZag置乱算法进行改进,设计了基于改进ZigZag置乱与应用混沌序列改变像素值相结合的图像加密算法,显著增大了密钥空间,并且保留了混沌序列的密钥敏感性,打乱了加密图像的相邻像素之间的相关性,提高了加密图像的安全性。
2. 改进ZigZag置乱
标准的ZigZag置乱算法是从矩阵的左上角开始,对矩阵中的各元素依次进行“之”字形扫描,扫描路径如图1所示。

Figure 1. Standard ZigZag scan path
图1. 标准ZigZag的扫描路径
根据图1可知,对矩阵连续进行不同次数的ZigZag变换可以得到不同的矩阵,这说明了迭代次数可以作为图像保密信息的一个十分重要的密钥。同时,由于矩阵元素个数是确定的,因此,ZigZag变换具有周期性。ZigZag的周期会随着矩阵的维数增大而增大。Arnold变换同样可以将离散化的数字图像矩阵中的点进行重新排列并具有周期性 [6] ,表1列出了ZigZag变换与Arnold变换的周期。
根据表1可知,对于相同大小(维数
)的矩阵,ZigZag变换的周期比Arnold的周期大,并且随着矩阵维数的不断扩大,ZigZag变换的周期大的更多,因此ZigZag变换对比Arnold变换来说具有更大的密钥。然而,传统的ZigZag算法只能对方阵进行处理,而且根据图1可以看出,不论经过多少次变换,1、2、15与16的位置始终是不变的,这是标准ZigZag变换的一个重要缺陷。改进的ZigZag算法有效的改进了这个缺陷,同时可以运用于非方阵矩阵。具体步骤如下:
我们定义扫描的起始点为矩阵的右下角,然后依次进行“之”字形变换,这样保证了在迭代过程中,每一个元素的位置都可以得到改变。同时,改进后的ZigZag变换可适用与非方阵矩阵。拿一个3 × 4大小的矩阵进行举例,如图2所示。
3. 混沌序列模型
混沌现象是指发生在非线性动力系统中出现的确定的、类似随机的过程,这种过程没有周期性又不收敛,并对初值有极其敏感的依赖性,所以非常适用于信息安全的范畴 [7] 。
Logistic映射是一种非常简单却被广泛应用的经典混沌映射 [8] ,Logistic映射系统定义如下:
(1)
其中,
,状态量
。Schuster H.G证明式(1)生成的混沌序列的概率分布密度函数为 [9] :
(2)
由式(2)可知,Logistic映射不满足一致分布,为了得到随机性更好的一致分布的随机系统,我们再对式(1)进行变换,得到下式:

Table 1. The relation of periodic and dimension between standard ZigZag transform and Arnold transform
表1. 标准ZigZag变换与Arnold变换的周期与维数的关系

Figure 2. Improved ZigZag scan path
图2. 改进ZigZag的扫描路径
(3)
变量y的分布函数为:
(4)
所以,变量Y的概率分布函数为
(5)
所以,该式在(0, 1)区间满足一致分布,具有更好的随机性分布。根据式(3),我们提出了一种基于改进ZigZag变换和混沌序列相结合的数字图像加密算法。
4. 基于改进ZigZag变换与混沌序列相结合的数字图像加密算法
4.1. 加密算法
设
表示大小为
的一幅图像,
表示图像
在点
处的像素灰度值,
表示为加密后的图像
在点
处的像素灰度值。基于图像像素值替代的加密算法设计如下:
(1) 给定迭代次数
,将原图的灰度值矩阵
进行改进ZigZag变换,得到变换后的矩阵
;
(2) 给定两个Logistic系统的参数
和
,并给定两个系统初值
和
;
(3) 取原始图像的所有像素点的灰度值之和,然后对256进行取余运算,得到一个范围在[0, 255]之间的整数,再将该整数除以256作为密钥
,
;
(4) 使用密钥
对混沌系统的初值进行修改:
,
。以
和
作为混沌系统的初值,根据式(1)构造两个长度为
的实数混沌序列;
(5) 将由步骤(3)得到的两个混沌序列按照式(3)进行转换,得到两个改进之后的混沌序列:
,
,
;
(6) 顺序从图像中取点,设该点序号为n,若n为奇数,则由实数混沌序列
构造加密密钥:
;若n为偶数,则由实数混沌序列
构造加密密钥:
,其中floor表示向下取整,mod表示第一个参数对第二个参数进行求余运算;
(7) 用步骤(6)得到的每个像素点的加密密钥与原始图像的该点的像素灰度值进行二进制异或运算,得到加密之后的该点的像素值。
解密过程是上述算法的逆过程,算法类似,整个算法的流程图如图3所示。
4.2. 评价指标
评价一个图像加密算法的好坏主要有密钥的空间大小、密钥的敏感性以及相邻像素的相关性几点[10],其中相邻像素的相关性主要体现在水平、垂直和对角三个方向上的相邻像素的相关系数,其计算式如下:
(6)
(7)
(8)
(9)
其中,
为像素点的个数,
和
为相邻像素点的灰度值,
为协方差,
为方差,
为均值。
4.3. 算法思想的改进
在本节中我们主要描述了对一幅灰度图像进行加解密的过程,其实该方法也可以应用到彩色图像中来。在彩色图像中,我们可以对图像每个像素点的R、G、B三个分量分别应用上述提到的加密算法[11],最后对得到的三个加密结果使用cat函数即可以得到彩色图像的加密图像。同时,我们还可以针对不同的分量选取不同的初值,这样可以大大的增大密钥空间。
5. 实验结果及分析
在Windows 10操作系统、Intel(R) Core(M) i5-3210M CPU@2.50 GHz,内存为6 GB的计算机上,编程环境为MATLAB2014a,我们按照上述加解密算法对以下几幅图片进行了加密处理:lena(512 × 512)、全黑图像black(300 × 300)以及SEU(500 × 800)。本文选取密钥参数
、
、
、
、
,对三幅图像进行处理,得到结果如图4。其中,(a)、(b)、(c)三幅图像表示的是原图,(d)、(e)、(f)表示的是经过上述算法加密后的图像,(g)、(h)、(i)表示经过解密之后的图像。
5.1. 密钥敏感度分析
为了测试解密过程中对解密参数的敏感度,我们在lena512图片解密的过程中将参数
增加了10−3、10−4、10−10,结果解密结果都仍是一幅杂乱无章的图片。我们通过计算均方误差MSE(Mean Square Error)来统计错误的解密图像与原始图像的差异 [12] ,结果如图5所示。图5表明,只有当
刚到等于0.2时,原始图像才能被正确解密。在使用其他
初值时,MSE的值都非常大,由此可以看出算法对密钥的初值具有极强的敏感性。
5.2. 密钥空间分析
本算法过程中一共涉及到五个参数,他们分别是ZigZag迭代次数
、混沌系统参数
和
、混沌系统初值
和
。其中ZigZag的迭代次数与图像的大小有关,由5.1节可知,另外四个参数都有10−15次方的精度,这样密钥空间的大小数量级可以达到1060,这样的密钥控件足以抵抗穷举攻击,具有极高的可靠性。

Figure 5. Key sensitivity test results
图5.密钥敏感性测试结果
5.3. 相邻像素的相关性分析
我们做出三幅图像加密前和加密后的直方图,如图6所示。其中,(a)、(b)、(c)分别表示lena512、black和SEU原图的灰度直方图,(d)、(e)、(f)为对应的加密后的灰度直方图。通过直方图看出,在加密前像素分布的比较集中,而在加密之后,图像的像素分布的十分均匀,攻击者很难利用灰度像素的统计特征来恢复原始图像。

Table 2. The average correlation coefficient between adjacent pixels in different directions before and after encryption
表2. 加密前和加密后不同方向上相邻像素点之间的平均相关系数
我们分别从水平方向、垂直方向和对角线方向随机选取lena图像中5000对像素点,利用式(6~9)得到三个不同方向的相邻像素点的相关性,结果如表2。可以看出,原图在三个不同的方向上相邻像素之间都具有很强的相关性,而在加密之后,无论在哪一个方向上,相邻像素之间的平均相关系数几乎为0,可见加密算法打破了原图的结构,极大的降低了原图的相关性。
6. 结束语
本文提出了一种基于改进的ZigZag变换与混沌序列相结合的数字图像加密算法,该算法主要思想为先对原始图像进行改进 ZigZag置乱变换,然后通过混沌序列与原始图像的每一个像素点进行位运算来进行加密。该算法可以对非方阵图像进行加密,降低了相邻像素之间的相关性,对密钥具有极高的敏感性,同时该算法显著增大了密钥空间,能很好地抵抗穷举性攻击。