谢国波,王朝阳
广东工业大学 计算机学院,广州 510003
随着数字通讯行业和数字多媒体技术的迅猛发展,图像信息的存储与在开放信道中传输的安全性愈发引起人们的关注。数字图像的未授权转载和侵权使用使得图像加密变得更加重要。人们可以通过诸如IDEA或AES等算法对数据信息进行加密。然而由于图像数据维度高,以及像素点之间的相关性高,致使上述加密算法不能有效的应用到图像加密上。近年来,基于混沌的图像加密技术开始展现它的优越性。混沌系统具有伪随机性和敏感依赖性,初始值和控制参数的细微变化会引起最终状态发生显著的改变。也正是这些特点使得更多的密码学研究人员把混沌系统应用到图像加密中[1-3]。基于这些特点,Liu等人提出了多种基于混沌系统的图像加密方法,一次性密钥加密具有密钥空间大的优点,基于比特位值替代的加密算法能够有效的降低相邻像素相关性,DNA序列加密能够实现高存储密度和高并行性[4-6]。但上述方法也存在一定的缺陷,如密钥分发困难,加密效率低,容易受到攻击等。
图1 图像加密流程
陈关荣提出基于“置乱—替代”结构的混沌加密算法[7]。该方案具有运行速度快,形式简单等优点,但无法有效地抵抗选择明文攻击。为了避免上述安全漏洞,邓晓衡等人提出一种改进方案,利用明文自身特性来影响密钥序列的机制[8]。其核心思路是通过计算数字图像的所有像素点之和sum,将其应用到混沌系统参数的生成公式中。这样,当明文图像中的任意一个像素点的值加1,将导致sum变化,最终使混沌系统控制参数发生改变,从而产生完全不同的混沌密钥序列。然而该方案仍存在安全缺陷,假设把明文图像的其中一个像素点的值加1,另一个像素点的值减1。sum不会改变,最终生成的混沌序列也不会改变。这样修改后图像产生的密文图像与原明文图像对应的密文图像只会有两个点的像素值不同。此时对多组只有2个像素值不同的图像进行加密,对比其加密结果,仍可推导出整个图像加密算法的全局置乱操作的等价变换公式,使得该方案无法有效地抵御选择明文攻击。
针对上述缺点,本文提出一种基于滑块与矩阵旋转的混沌图像加密算法。首先,使用MD5算法为明文图像生成一个唯一的哈希值,根据该哈希值计算出混沌系统控制参数,使混沌系统最终产生的混沌序列与明文图像自身紧密相关。其次,读取混沌序列与其排序后对应的下标序列。根据下标序列计算明文图像每个子矩阵块的位置和大小,根据混沌序列计算子矩阵块的旋转角度。依次旋转所有子矩阵块以实现明文图像像素位置的全局置乱。最后,在像素值替代过程中,利用滑块加密方法,使每一个像素点的加密结果都会影响滑块内的其他若干像素点,从而使所有像素点的加密结果相互关联。解决了密文与明文依赖性不强的问题,提高了加密图像的安全性。仿真实验结果表明,本文加密算法密钥敏感性高,密钥空间大,同时具有较强的明文敏感性,可以有效地抵御差分攻击和统计特征攻击。
本文提出的加密算法首先结合MD5算法生成混沌系统控制参数,使密钥序列与明文图像本身密切相关。然后通过旋转图像矩阵的子矩阵来进行像素位置全局置乱。最后,在像素值替代过程中使用滑块让每一个像素点的加密结果都会影响到其他若干个像素点的加密结果。从而实现对不同的明文图像加密会产生完全不同的密文图像。
基于矩阵旋转的像素位置全局置乱和基于滑块加密的像素值替代加密流程,如图1所示。
本文选取的混沌系统为Kent映射,该系统性能优良[9-10],其映射关系为式(1):
其中,x0为初始条件,S为混沌系统控制参数。当时,该映射的Lyapunov指数大于0,此时该映射处于混沌状态,区间(0 ,1)为该映射的混沌不变集。Kent映射对初始值是非常敏感的,因其具有良好的伪随机性,初始值发生极其细微的变化都会导致该映射产生的伪随机序列完全不同。图2是Kent映射对于两个不同初始条件的时间响应轨迹。当初始值仅发生10-16的改变,在迭代50次后,两条轨迹产生了显著的偏离。说明Kent映射对初始条件敏感性很强,因此可以很好地应用于图像加密算法中。
图2 Kent映射的初始条件相差10-16的轨迹
MD5算法具有抗修改性的特点。如果对原数据进行任何改动,哪怕只是修改1个字节,所得到的MD5的哈希值都将会完全不同[11-12]。把MD5算法应用到混沌系统控制参数的生成中,对于一个明文图像,只要有一个像素点被修改则对应的混沌系统控制参数将完全不同,致使最终的密文图像也完全发生改变。
本文首先使用MD5算法为所要加密的明文图像产生一个唯一的Hash值,一个32位的16进制数。然后将这个数转化为一个10进制的数D。利用公式(2)和(3)分别计算出Kent混沌系统的控制参数a和迭代次数n。
此阶段是通过旋转子矩阵的方式打乱原图像。本文使用Kent映射产生混沌序列,一方面根据该混沌序列每个元素的值,可以计算出对应各子矩阵块将来要旋转的角度,分别对应0°、90°、180°、270°。另一方面,将该混沌序列进行排序,可以得到记录排序后序列各元素在原始混沌序列中位置的下标序列,使用该下标序列可以确定各子矩阵的位置和大小。
设Am×n表示大小为m×n的灰度图像,加密算法步骤如下所示:
步骤1根据公式(2)、(3)计算出控制参数S和预迭代次数K,设定初始密钥x0,代入式(1)预迭代Kent混沌系统K次消除暂态效应带来的不良影响。然后继续迭代式(1)m×n次,产生长度为m×n的混沌序列P={P1,P2,…,Pm×n}。
步骤2对混沌序列P进行从小到大的排序得到P′,产生一个用于记录P'中各元素在原始序列P中位置的下标序列T。
步骤3计算每个子矩阵的位置和大小。对于步骤2计算出的Ti,首先,根据公式(4)可计算出对应点Ti的子矩阵左上角元素的行标 rowi,结合公式(5)、(6)可计算出该子矩阵左上角元素的列标coli。
然后,根据公式(7)、(8)求出子矩阵的大小 sizei:
步骤4计算每个子矩阵的旋转角度。对于步骤1计算出的混沌序列P,利用根据公式(9)、(10),可以计算出每个元素Pi对应Ti子矩阵的旋转角度Ri:
步骤5根据上述步骤求出的结果,可以确定Ti对应的原图像A的子矩阵大小为sizei,左上角位于第rowi行,第coli列。接着,将其对应的子矩阵旋转Ri度。再次替换其原来位置的元素。
步骤6重复步骤4、步骤5。直到i值达到m×n,得到经过全局位置置乱的图像A′。
本阶段操作将实现对像素值位置全局置乱后的图像A′进行像素值替代加密,以混淆密文与明文之间的关系。首先把上一次加密的结果A′转换为一维序列W,在每个像素点Wi与混沌序列Ki进行异或之前,先计算滑块长度本算法设定参数α为滑块的最大长度。经多次实验对比,当参数α=30时,加解密效率最高,同时加密效果也比较好。得到滑块长度β后,接着使起点为Wi,长度为β的滑块内的所有元素都与Qi进行异或操作替换原像素点的值,间接的实现了每个像素点的加密都会影响到其他若干个像素点未来加密的结果。从而使所有像素点紧密相关,致使任何像素点值的细微变化都会导致最终的替代结果完全不同。像素值替代加密算法的具体步骤描述如下。
步骤1设定混沌系统的初始值为x′0,控制参数S为另一个S′。Kent混沌系统迭代K2次以消除暂态效应,并继续迭代m×n次,以产生长度为m×n的混沌序列 Q′={q′1,q′2,…,q′m×n}。
步骤2将混沌序列K'的各序列值依次带入公式(11)进行转化,使其取值范围为[0,255],得到混沌图像序列Q={Q1,Q2,…,Qm×n}。同时把置乱图像A'按照行优先的顺序转换为长度为m×n的一维序列W={W1,W2,…,Wm×n}。
步骤3对给定的Wi,根据公式(12)计算当前滑块长度β,然后将以Wi为起点长度为β的滑块内的所有元素与Ki异或,其计算公式为公式(13)。最后把每个元素的异或结果都替换原始元素。
例如,假设W={3,4,10,7,5,8,9,3,9,2},Q={5,7,7,2,8,7,2,1,8,4},α=5,则W1=3,β=mod(3,5)+1,β=4,此时滑块长度为4,起始元素为W1。依次计算滑块内元素W1、W2、W3、W4与Q1异或的结果,如:。经过这一轮循环W1、W2、W3、W4的值都发生了改变,此时W={6,1,15,2,5,8,9,3,9,2}。
步骤4步骤3的一轮操作结束后,Qi变为下一个元素。滑块向后移动。再次进行步骤3的操作。
步骤5重复步骤3、步骤4,Wi的值将一直发生变化,滑块持续后移,直到i值达到m×n,此时将得到最终的一维密文序列W,然后将其按照行优先的顺序转化为大小为m×n的密文图像C。加密过程结束。需要注意的是,当滑块的尾部超出序列时,仅对序列内的滑块元素进行计算。
下面将结合加密示意图3、图4,对每个加密步骤进行更为详细直观的描述。
2.4.1基于矩阵旋转的像素位置全局置乱
假设明文图像如图3(a)所示,T={6,8,25,…,3},R={90°,180°,0°,…,270°}。
对于T1:
最终可求出:row1=2,col1=1,size1=4,R1=90°。此时T1对应的子矩阵如图3(a)灰色部分所示,该部分旋转90°后,原图像转变为图3(b)。
图3 T1=8旋转加密
对于T2:
最终可求出:row2=2,col2=3,size2=3,R2=180°。此时,T2对应的子矩阵如图3(c)灰色部分所示,该部分旋转180°后,原图像转变为图3(d)。
2.4.2 基于滑块加密的像素值替代
假设图像序列W={3,4,10,7,5,8,9,3,9,2},混沌序列Q={5,7,7,2,8,7,2,1,8,4},α=5对于W1,,其加密过程如图4(a)所示。对于,其加密过程如图4(b)所示。
图4 基于滑块加密的像素值替代
解密的过程也就是加密的逆过程。
第一阶段的处理:像素值反替代操作。先取出密文图像的第1个点的像素值C1,然后计算该点与混沌序列Q的第一个元素Q1异或的结果为该点解密后的值W1,然后计算 β=mod(W1,α),使第1个元素之后的β个元素均与Q1进行异或。对于第2个元素,先使其与Q2进行异或,的到原始的W2,然后,将已解密的元素组合成新序列W′={W′1,W′2}。接下来继续求后面元素的值。首先,使用加密的原理,计算W′2的加密结果,接着求出,然后使第2个元素之后的β′个元素均与Q2异或,替换原来的像素值。不断重复上述步骤,直到i值达到m×n。此时的序列W是经过全局置乱后的图像对应的一维图像序列。
第二阶段的处理:反全局像素位置置乱。首先,把第一阶段处理得到的一维序列W按行优先的顺序转化为大小为m×n的置乱矩阵A′,然后,计算下标序列T最后一个元素Tm×n的位置以及旋转角度,使其对应的子矩阵朝相反的方向旋转同样的角度,从后向前依次对序列Tm×n的所有元素对应A′内的子矩阵进行旋转,直到操作完T序列所有元素对应的子矩阵。此时的矩阵则是明文图像对应的二维矩阵,从而就得到了经过恢复的明文图像A。
本文选取了大量的大小为256×256的灰度图像进行测试,限于篇幅,仅给出经典图像Lena的加密结果作为代表性实验数据。加密的初始密钥x0=0.141 421 356 2,x′0=0.173 205 080 7,以 及 像 素 值 替 代 阶 段 的 S′=0.223 606 797 7,K2=500。图5(a)为原始图像,图5(b)为加密效果图。
图5 Lena加密前后图像及直方图
本文选择像素点位置置乱阶段混沌系统的初始值x0,像素点值替代阶段的混沌迭代初始值x′0,以及控制参数S′为该加密算法的密钥,这3个数值的取值范围都是0至1的任意浮点数。若不去考虑实际的限制条件,这两个值均可以取小数点后面的任意位数。考虑到实际存储的话,每个双精度数据最多都可以保留16位小数。那么本文的加密算法可以使密钥空间达到1048,如此大的密钥空间,通过暴力破解的方法是无法还原图像的。
3.3.1 直方图分析
直方图可以有效地衡量加密算法对原始明文图像加密的效果。对Lena进行加密,直接观察图6(a)原始图像的直方图,灰度值分布不均匀,可以很明显看出明文图像的像素分布特征。而图6(b)则表明加密后密文图像的灰度值分布比较平坦,很好地隐藏了原始图像的信息。
本文通过计算密文图像直方图的方差来衡量直方图的均匀性。式(14)为直方图方差计算公式[13]:
其中,Z是直方图像素值向量,且Z={z1,z2,z3,…,z256},zi和zj分别是灰度值为i、j的像素点的个数。
直方图方差越小,表明加密图像的像素点灰度值均匀性越高。本文对图7的4张图片进行加密,并计算出明文和密文图像的直方图方差,实验结果由表1所示,其中后3列分别为原始图像、加密图像,以及Yannick等人在文献[14]提出算法的密文图像的直方图方差。可以看出,该算法密文图像的直方图方差远低于明文图像的直方图方差,且优于文献[14]算法对应密文图像直方图的方差。
图6 灰度直方图
图7 用于测试的原始图像
表1 明文和密文图像直方图方差
本文对比相同的明文图像由两个不同密钥加密所产生密文图像直方图的方差,两个方差值的接近程度将表示密钥变化时密文图像的均衡度。实验数据如表2所示,对于同一密钥集,仅改变其中的一个密钥,所得到密文图像直方图的方差变化很小,由此可知该加密算法是有效的。
表2 不同密钥密文图像直方图方差
3.3.2相邻像素相关性分析
相邻像素的相关性也是用来衡量一个加密算法性能的重要指标。以Lena图像为例,对加密后图像的水平,垂直和对角3个方向随机选取5000对相邻像素点,使用公式(18)计算其相关性系数。
本文也给出了文献[15-17]实验仿真结果进行比照,对比结果如表3所示。根据表3的结果可以看出,原始的明文图像相邻像素点之间的相关性很强,而密文图像相邻像素点之间几乎没有任何相关性。同时,本文密文相邻像素点相关性远低于其他方案的密文相邻像素点相关性,这也说明该算法明文图像的统计特征已经扩散到随机密文图像中,而且加密效果更优。
表3 相邻像素相关性系数对比分析
同时,本文分别从明文图像和密文图像随机抽取水平方向上1 000组相邻像素点,根据其像素值绘制出其像素值关系图,如图8所示。从图8(a)中可以看出,明文图像水平相邻像素点的像素值是非常接近的,其相关性系数接近于1;从图8(b)则可以看出该算法最终生成的密文图像,其水平相邻像素点的像素值差别显著,相关性几乎为0。可见,本文算法能够较好地破坏相邻像素点之间的相关性,使得密文图像具有了更好的随机分布特性。
3.4.1 密钥敏感性分析
图8 相邻像素相关性
密钥敏感性是指对于同一个密文图像,解密时,只要密钥发生极其细微的改变,也将会产生两个完全不同的明文图像。本实验再次设置原始初始密钥x′0值为0.254 398 745 945 520。使用该密钥可以得到图像9(a)。此时如果把该初始密钥改变为0.254 398 745 945 521,其他参数保持不变。再次进行解密。则可以得到最终的结果为图9(b)。从实验中可以看出,即使把密钥进行10-15的细微改变,也无法得到正确的原始图像。同理,把其中的任意参数作细微改变都会达到上面的效果。由此可知,该加密算法对密钥有较高的敏感性。
图9 密钥敏感性分析
3.4.2明文敏感性
密文图像对明文的敏感性越高,算法愈能抵抗包括差分攻击在内的选择明文攻击。当攻击者偶然获得了加密工具的使用机会,此时他可以选择一些较为特殊的明文图像,并以此得到与之对应的密文图像。通过对比这些明密文图像序列,可以推算出等价的“明文—密文”变换方式,从而实现了算法的破解。现有方案中,基于“置乱—替代”结构的混沌图像加密,常用的攻击方法就是选择明文攻击。一个比较通用的方法是,选择一个像素值均为100的大小与待解密图像一致的图像作为明文图像,依次改变该图像的每个像素点的值,然后对其进行加密。通过追踪密文图像像素值的变化规律,攻击者可以轻易地推算出“明文—密文”像素点的对应关系,从而也就成功破解出了待解密图像所对应的原始图像。文献[7]“像素位置与比特双重置乱的图像混沌加密算法”使混沌系统的控制参数与原图像像素点之和联系起来。此时无法追踪一个像素点的值,因为当一个像素点的值发生改变时,像素点之和必然发生改变,从而整个混沌加密序列也发生了变化,最终导致密文图像所有像素点都发生改变。但是其忽略了如果同时追踪两个像素点的值,一个像素点的值加1,另一个点的值减1,那么最终的和不会发生改变,此时通过每组追踪两个点的方式,仍可以推算出“明文—密文”像素点的对应关系。
上述的攻击方法在本文的加密算法中是行不通的,因为本文采用了MD5消息摘要算法为图像产生唯一的32位的字符串序列,再把字符串序列转换为对应的十进制数,最后转换为[0,1]之间的数作为混沌序列的控制参数S。只要改变图像序列的任意一个或多个像素点,得到的序列值一定是不同的。同时由于像素值替代阶段,每个像素值都会影响后面若干个元素的下一次加密结果,这样即使想通过定位中间密文来追踪像素点位置,理论上讲也是完全不可行的。同理,对于选择密文攻击,本文算法也有良好的抵御效果。
本文通过计算像素改变率(Number of Pixels Change Rate,NPCR)和归一化像素值平均改变强度(Unified Average Changing Intensity,UACI)来衡量加密算法对明文图像的敏感性强度[18]。假设两个图像的明文图像只有一个像素点(i,j)的值不同,对应的像素值分别为A1(i,j)和A2(i,j)。NPCR和UACI的计算公式为:
其中,M、N分别为图像像素的行数和列数;通常NPCR与UACI比较理想的数值[19]是NPCRE=99.609 4%和UACIE=33.463 5%。本文实验中任取一点对其像素值作微小的改变,如位置为(102,15)的像素点,将该点的像素值由95改变为96,根据公式(20)、(21)可以计算出NPCR=99.609 3%,UACI=33.433 4%。可以看出,实验结果与理想数值比较接近,明文图像的任意像素点值发生微小的变化,都会使密文图像发生显著改变。因此,该加密算法具有较强的明文敏感性,同时也能有效地抵抗差分攻击。
针对一些图像加密算法无法有效的抵御差分攻击的特点,本文提出了一种改进的图像加密算法。该算法主要有三个特点:第一,利用MD5哈希函数计算混沌系统的控制参数,保证加密的密钥序列与明文图像本身紧密关联,使选择明文攻击失效。第二,根据密钥序列的数值,不断旋转明文图像不同位置的子矩阵块以打乱明文图像所有像素点的位置,最大程度地降低了明文像素点的相关性。第三,该算法定义了滑块,使每个点的加密结果,都会影响滑块内的所有元素的加密结果,从而使图像像素点之间的关系更加紧密。使攻击者无法通过标注像素点来破解密钥序列,进一步提高了算法抵抗选择明文攻击的能力。通过实验仿真证明,本文提出的加密算法有较大的密钥空间。直方图分析和像素点相关性分析表明,该算法能够较好地实现破坏相邻像素点之间的相关性,使得密文图像具有了更好的随机分布特性,可以有效地抵抗统计分析攻击。同时,该算法也具有较高的明文敏感性和密钥敏感性,能够有效地抵抗差分攻击、选择明文攻击和选择密文攻击。最终实验表明,本文算法不仅加密效果好,同时也有较高的安全性。