杨 丹,谢淑翠,张建中
(1.西安邮电大学 通信与信息工程学院,陕西 西安 710119;2.西安邮电大学 理学院,陕西 西安 710119;3.陕西师范大学 数学与信息科学学院,陕西 西安 710119)
近年来,研究人员一直在努力寻找图像加密[1]的最优方法,由于混沌具有初值敏感性,非周期性和不可预测性[2],许多学者利用混沌系统产生密钥流从而加密图像。这种方法通常有两个步骤组成:像素置乱和扩散,在置乱过程中,像素的位置被改变,在扩散过程中,像素的值被改变[3]。
目前,研究者提出了许多基于混沌的图像加密算法,其中一些算法不是被发现不安全就是时间开销过大。文献[4,5]均提出了超混沌图像的加密算法,鲁棒性好安全性高,但加密速度不够理想;文献[6]提出了新型置换和替代加密算法,增加破解难度,但采用一维混沌系统,密钥空间小安全性不高;文献[7]提出了一种典型的图像加密算法,具有结构简单加密速度快的优点,却存在安全问题,主要是因为其等效密钥与明文无关,无法抵抗选择明文攻击。如果一种加密算法具有较高的安全级别,但运行很耗时,就不适合于实时加密环境。因此,需要设计具有高安全性的快速图像加密方案,以满足实时通信的要求。基于以上分析,本文提出一种基于超混沌和分块操作的快速图像加密算法。算法的图像置乱过程是以块为单位,包括块间交换及块内循环,以期提高加密效率,节省时间。通过建立密钥和明文的关联,提高密钥敏感性。利用动态密钥进行扩散,增强安全性。我们对图像灰度分布、相邻像素相关性、密钥空间、密钥敏感性、加密速度、抗差分攻击能力及抗噪声和裁剪的鲁棒性进行了深入分析和仿真实验,结果表明本算法具有较高的安全性及较快的运行速率。
本文采用超混沌Lorenz系统[8]产生混沌序列
(1)
其中,a,b,c,r为系统控制参数,x,y,z,w为系统的状态变量。当a=10,b=8/3,c=28, -1.52≤r≤-0.06时,系统(1)表现为混沌运动。取r=-1,用matlab R2016a进行仿真,得到的吸引子相图如图1所示,可见系统(1)具有极其复杂的动力学特性,运动轨迹难以预测,适合用于图像加密。
假设明文图像为P,大小为M×N。 为了消除暂态过程带来的影响,系统(1)用龙格库塔算法迭代N0(N0≥1000) 次,接着选择与明文相关的动态原始序列
I=mod(p(n),4)
(2)
图1 系统(1)的部分吸引子相图
当I=0,I=1,I=2,I=3,分别从x,y,z,w中进行取样,用取样的值组成原始动态序列D,大小为M×N。
加密算法包括两个步骤:像素置乱和扩散。
将P分成m1·n1个小块,其中m1能整除M,n1能整除N,经过块间交换和块内循环得到置乱图像Q。
2.1.1 块间交换
沿着不同方向进行两轮的块交换,每个块和另一个块进行交换,块间交换的位置由K1控制,K1由下式产生
temp=floor((abs(D)-floor(abs(D)))×10^14)
K1=mod(temp,256)
(3)
其中,abs(x) 为x的绝对值,floor(x) 为小于等于x的最大整数,K1∈[0,255]。
假设一个块图像的位置为 (p1,q1),和它交换的另一个块图像的位置为 (p2,q2),(p2,q2) 由下式确定
(4)
(5)
其中,temp1=1,2…,m1,temp2=m1+1,…,m1+n1,g1=inverse(temp1),g2=inverse(temp2),inverse表示逆序数。块与块之间的交换由式(6)表示
P′p1,q1=Pp2,q2;P′p2,q2=Pp1,q1
(6)
其中,P′p1,q1表示在 (p1,q1) 位置处交换后的块图像,Pp2,q2表示在 (p2,q2) 处的块图像。
第一轮块置换是从第一行扫描到第m1行,第二轮块置换是从第一列扫描到第n1列,经过两轮块置乱后的图像记为A。
2.1.2 块内循环
将A按块排成一列,每个子块是m×n的矩阵,总共m1×n1个子块,每个子块内的像素用索引矩阵Hm和Hn中的不同元素进行两个方向的循环移位,即Hm和Hn中的元素分别表示向右、向下循环移位的位数。步骤如下:
步骤1 由式(7)产生大小为M×N的S1序列
S1=mod((floor(D×10^14)),256)
(7)
步骤2 从S1中选m=M/m1个数作为Hm的第一行,再选m个数作为Hm的第二行,选取m1·n1次,直到Hm成为m1·n1行,m列的矩阵。同理从S1选数使Hn成为m1·n1行,n=N/n1列的矩阵;
步骤3 进行循环右移,第一个子块中的m行由Hm中第一行的m个数控制进行循环右移,第二个子块中的m行由Hm中第二行的m个数控制进行循环右移,以此类推,直到循环右移完所有的子块;
步骤4 接着进行循环下移,第一个子块中的n列由Hn中第一行的n个数控制进行循环下移,第二个子块中的n列由Hn中第二行的n个数控制进行循环下移,以此类推,直到循环下移完所有的子块。
为了进一步提高加密算法的安全性,还需进行像素扩散,扩散使用的密钥为K2
K2=mod(fix(D×10^3),256)
(8)
fix(x) 为向0取整。将置乱图Q转化成一维序列进行如下操作
(9)
这里,T为预先设定的参数。
图像解密是加密的相反操作,其中扩散的解密执行下式
(10)
接着进行置乱的解密操作,首先将经过上式解扩散得到的图分成m1·n1的子块,每个子块中的像素进行循环上移和循环左移,接着进行两轮块间交换的解密操作:第一轮按列扫描,第二轮按行扫描,最终得到解密图。
本文采用512×512的Lena图,在Win7操作系统下,以MATLAB R2016a为平台进行仿真。超混沌Lorenz系统的初始密钥设为x0=1.1,y0=2.2,z0=3.3,w0=4.4,r=-1。 加密过程中的参数设为T=1。 对Lena进行加解密如图2所示,可见加密图像隐藏了明文信息,确保了传输安全,并且解密图像可以很好地恢复出明文图像。下面给出详细分析。
图2 加密和解密
信息熵反映图像信息的不确定性,通常被认为熵越大,不确定性越大,可视信息越少[9]。对于灰度等级为L的图像,假设灰度值i出现的概率为p(i),信息熵计算公式如下
(11)
对于L=256的灰度随机图,信息熵的理论值为8[10]。经过本算法加密的密文图像的信息熵为7.9992,接近理想值,表明本文算法可以生成随机性更好的密文图像。
直方图是用来显示像素分布特性的,在加密算法中,改变分布特性是十分重要的。图3(a)和图3(b)分别表示明文图像和加密图像的直方图,可以看出原始明文图像具有明显的统计特性,而加密图像每个灰度值出现的概率趋于相等,因此对密文图像进行基于频率的攻击是无效的[11]。
图3 加密前后的直方图
图像中相邻像素之间通常具有很强的相关性,因此一个好的加密算法应该能够产生具有低相关性的密文图像,从而隐藏图像信息,抵抗统计攻击[12]。相邻像素相关性由下式确定
(12)
其中,E(x) 和D(x) 分别为变量x的期望和方差,rx,y为相邻像素x和y的相关系数。
从Lena测试图和它的加密图中随机选取3000对相邻像素进行相关性分析,测得水平方向的相关分布如图4所示,可以看出,明文图像的相邻像素值位于斜率为1的直线附近,这表明相邻两个像素的相关性较高;密文图像的像素值布满整个区域,这表明相邻两个像素的相关性较低。表1给出了本文在水平、垂直、对角3个方向相关性的测试值,可以看出,明文图像的相邻像素具有较高相关性 (rxy→1),密文图像的相邻像素具有较低相关性 (rxy→0),同时与文献[13]和文献[14]的相应结果进行对比,表明本文所提出的加密算法相邻像素的相关性更低,可以更有效抵抗统计攻击[15]。
图4 相邻像素水平方向的相关分布
表1 相邻像素的相关系数
加密算法对密钥和明文敏感意味着微小改变密钥和明文将会产生完全不同的加密结果。通常有两个指标衡量:像素变化率(number of pixels change rate,NPCR)和归一化像素平均改变强度(unified average changing intensity,UACI[16])。NPCR的计算公式为
(13)
UACI的计算公式为
(14)
其中,P1和P2为两幅大小为M×N的图像。
为了衡量密钥敏感性,取密钥x0=1.1,y0=2.2,z0=3.3,w0=4.4加密原始明文图5(a)并得到加密图5(b),轻微改变z0(z0+10-12) 后再次对图5(a)进行加密得到图5(c),图5(d)为图5(b)和图5(c)的差分图。图5(e)和图5(f)分别是用正确密钥解密图5(b)和用微小改变的密钥解密图5(b)的解密图。图5(a)和图5(b)间的NPCR和UACI分别为99.60%,33.45%,它们均接近相应的理想值NPCR=99.6094%,UACI=33.4635%[8],这表明本文算法具有强的密钥敏感性。
图5 密钥敏感性
为了衡量明文敏感性,用上述相同的密钥加密图5(a)并得到加密图6(a),轻微改变明文图像(第4个像素最低位取反)并且加密该明文图像得到相应的加密图6(b),图6(c)为图6(a)和图6(b)的差分图。图6(a)和图6(b)间的NPCR和UACI分别为99.62%,33.46%,它们均接近相应的理想值NPCR=99.6094%,UACI=33.4635%[8],这表明本文算法具有强的明文敏感性。
本文算法密钥由4个初值 (x0,y0,z0,w0) 和控制参数r组成,采用精确到小数点后15位的浮点数表示,密钥空间可达到1015×1015×1015×1015×1015=1075≈2249,文献[17]的密钥空间为1073,且本文加密过程中的初值T也可作为密钥。由此可见,本文算法有更大的密钥空间,能更好地抵抗穷举攻击。
图6 明文敏感性
在实时系统中,除了对安全性有高的要求外,加密时间还需尽可能的短,以达到较高的实用性。表2是本文与文献[18]加密速度的比较,结果表明,本文在加密速度方面尤其对较大图像具有较强的优势。
表2 加密速度对比/s
差分攻击是一种选择明文攻击,抗差分攻击性能依赖于对明文的敏感性,通常用NPCR和UACI来衡量。我们分别对两幅图像进行加密,一幅为原始明文图像,另一幅为明文图像随机选择一个像素点并将该像素的最低位取反,计算得NPCR=99.50%,UACI=33.43%。 它们均接近其灰度图像的对应理想值:NPCR=99.6094%,UACI=33.4635%[7],所以该算法具有强的抗差分攻击能力。
在传输过程中,密文图像会受到种种的干扰及攻击,一个好的加密算法还需使图像对外界的干扰具有鲁棒性[19]。
抗噪声攻击分两种情况进行分析。第一种,图像加密前被噪声污染,在原始明文图像中加入均值为0,方差为0.05的椒盐噪声如图7(a)所示,经过加密得到密文图像如图7(b)所示,到接收端进行解密后使用中值滤波器进行滤波得到图7(c)。由图可见,即使明文图像受到噪声污染后,原始图像也可以通过加密、解密、滤波来恢复。第2种是在传输过程中密文图像被噪声污染,图8(a)和图8(b)分别为密文图像和受均值为0,方差为0.0005高斯噪声污染的密文图像,在接收端进行解密得到图8(c),可以看出,解密后的图像仍有噪声,但能恢复出原始图像的主要信息,可以根据实际需要进一步进行去噪处理。由以上分析可知,本文加密算法在微噪声的污染下仍能恢复有效的信息,对噪声具有较强鲁棒性。
图7 椒盐噪声污染测试
图8 高斯噪声污染测试
在抗裁剪攻击的分析中,我们分别对密文图像进行不同位置、不同大小的裁剪,然后对裁剪后的图像进行解密,如图9所示。由图可见,在对密文经过各种裁剪后,解密后的明文图像仍具有较高的辨析度,这表明本文算法对裁剪攻击具有很好的鲁棒性。
图9 裁剪攻击测试
本文提出了一种基于超混沌与分块操作的快速图像加密算法,首先通过超混沌Lorenz系统构建动态原始序列D,该序列用来产生置乱和扩散的密钥,其次对图像进行分块处理,实行块间置乱及块内移位从而实现像素置乱,使加密速度得到较大提升,接着利用动态密钥进行像素扩散以实现图像加密。理论分析和仿真结果表明,本文所提出的算法具有更大的密钥空间,更高的密钥敏感性以及更快的运行速度,能有效抵抗统计攻击和差分攻击等攻击手段,对噪声及裁剪具有较好的鲁棒性。因此,本文所提出的算法在实时保密通信中具有较大的应用价值。