曾祥秋,叶瑞松
(汕头大学 数学系,广东 汕头 515063)
在大数据时代,信息具有极大的价值,图像是承载信息的一个重要载体,某些图像隐含的信息至关重要。因此,必须保证数字图像的传输、存储、访问等过程安全可靠。图像加密技术能够保障多媒体数据的隐私和保密性,是目前保护图像安全最有效的方法之一,在许多应用中发挥着重要作用,如军事图像数据库、付费电视、保密视频会议、健康管理系统、在线私人相册等[1]。
常见的图像加密方案主要有2 种策略:一类重点关注加密系统中随机序列的生成方式;另一类关注加密算法的结构设计。在第一类图像加密策略中,随机序列的生成方式大部分基于混沌系统,在基于混沌序列的图像加密方案中,研究人员大多关注混沌映射的构造,原因是加密系统的安全性依赖其所使用的混沌系统的复杂性。现有的混沌映射具有周期性短、点分布不均匀、控制参数受限等缺点,因此,有很多学者针对混沌系统进行改进,以获得更好的安全性。文献[2]以混沌系统的初始值和参数作为密钥,采用改进Joseph 遍历的方法对图像进行加密。文献[3]利用2 个现有混沌映射作为种子映射,将余弦变换作为框架,从而生成一种新的混沌映射,并将其应用于所设计的图像加密算法中。文献[4]提出一种基于比特反转的增强型数字混沌映射,其可以有效增强密钥流的混沌特性。高维混沌映射比一维混沌映射更具安全性,前者经常直接被用于加密系统中:文献[5]直接利用二维Logistic 映射进行图像加密;文献[6-7]分别利用二维和三维可逆模块化混沌映射加密灰度图像和彩色图像,它们有效增大了密钥空间;文献[8]将Logistic 映射和sine 映射相耦合,将一维映射扩展到二维并用于图像加密以获得更快的速度和更好的性能。在关注加密算法结构设计的图像加密策略中,利用DNA 运算和比特层次进行加密是常见的做法[9-10]。文献[11]利用DNA序列实现多图像加密中基于索引的置乱和扩散操作。文献[12]提出一种结合缠绕Logistic 映射、动态DNA 编码与运算的彩色图像加密算法。文献[13]利用比特替换的方法将混沌映射置乱后的图像序列融合为2 组混沌序列,从而产生中间密文并有效隐藏明文信息。文献[14]提出基于PWLCM 混沌映射、交叉替换和循环移位以实现比特级加密的图像加密算法。
在上述2 类图像加密策略的启发下,本文改进传统的一维Logistic 映射,提出一种同时进行置乱与扩散的加密算法。通过增加模运算使传统Logistic映射的混沌参数范围变大,参数范围突破(0,4]的限制,利用该混沌系统设计的加密系统的密钥空间也将扩大。为了使改进Logistic 映射在原有参数范围(0,4]中所生成的序列具有更好的混沌特性,本文对改进映射所生成的序列进行比特重排,以使序列具有更好的混沌特性、遍历性、初值敏感性、伪随机性。利用改进Logistic 映射生成混沌序列用于预加密以及置乱-扩散阶段的加密。为了抵抗已知明文攻击或者选择明文攻击,加密算法的密钥流设计不仅与密钥有关,同时还和明文图像信息相关联。
本文对经典的一维Logistic 混沌映射进行改进,利用改进的Logistic 映射构造一个新的混沌系统。用分叉图、Lyapunov 指数图以及SP800-22Rvlla 的15 标准检测对照改进前后混沌系统所生成序列的混沌特性,结果表明,改进后的混沌映射比传统Logistic 映射具有更好的混沌特性和更大的参数范围。
一维Logistic 映射[15]的数学 表达式如式(1)所示:
其中:μ为控制参数,μ∈(0,4],只有当3.569 945 627 ≤μ≤4 时,序列Xn才处于混沌状态。
为在一维Logistic 映射的基础上解决控制参数范围受限、点分布不均等问题,本文对传统的Logistic 映射进行改进,具体如下:
其中:r≠0 为控制参数;Xn∈(0,1);模函数mod(s,t)表示取模,返回余数。显然,式(2)是式(1)的推广。虽然增加模运算会提高运算量以及加密系统的时耗,但是增加模运算可以使得式(2)中参数r的范围突破(0,4]的限制,从而扩大系统的混沌区域以及加密系统的密钥空间。为了使式(2)在参数范围(0,4]中所生成的序列具有更好的混沌特性,本文对式(2)所生成的序列进行比特重排,此时式(2)生成序列的具体步骤如下:
1)将r和初始值X0代入式(2)得到新的X1,再将X1化为L位的二进制形式。例如,假设X1为0.75,把0.75 写成L位的二进制形式,L可以取任意的正整数,假设L=16,则有0.75→0.1100000000000000。
2)将小数点后的二进制序列进行比特重排,将奇数位比特值倒序排在前半部分,将偶数位比特值倒序排在后半部分,得到一个新的数,如图1 所示。
图1 比特重排示意图Fig.1 Bit rearrangement diagram
3)将第2 步中得到的二进制数转化为十进制数,作为新的初始值X1,代入式(2)得到下一个值,如此重复第2 步和第3 步,得到一个长度为n的混沌序列。
比特重排能够提升序列的混沌性能,当系统初值和系统参数发生微小改变时,在刚开始的混沌过渡态中2 个轨道的点差别十分小,意味着过渡态中的序列值改变不大,将这样的点列量化为整数,将大概率出现相同的整数值。对所生成的差异小的点列进行比特重排,可以使得重排后的2 个更新点列的差异变大,从而使更新序列具有更好的敏感依赖性、伪随机性、遍历性等混沌特性。图2 分别为Logistic映射和基于改进Logistic 映射进行比特重排的新混沌映射的分岔图,从中可以看出,本文改进的混沌映射比传统Logistic 映射具有更大的混沌参数范围,新混沌系统在(0,4]范围内具有更好的混沌特性,其对所有参数所生成的序列均遍历整个(0,1)状态空间,并且具有更好的分布均匀性。
图2 2 种映射的分岔图Fig.2 Bifurcation diagrams of two kinds of maps
对初始值的敏感依赖性是一个可以清晰表达动力系统混沌性质的重要属性,该性质可以用Lyapunov 指数来刻画,利用计算机数值计算得到的Lyapunov 指数若是正值,说明系统具有混沌性,Lyapunov 数值越大,系统的混沌性越强。图3 所示为Lyapunov 指数图,其中:图3(a)为经典Logistic 映射的Lyapunov 指数图,参数范围为(0,4],混沌区域为3.569 945 627 ≤μ≤4;图3(b)为对Logistic 映 射进行模运算之后的新Logistic 映射的Lyapunov 指数图,其混沌参数范围更大,但不是所有参数对应的Lyapunov 指数都是正值;图3(c)是对新Logistic 映射进行比特重排之后得到的改进Logistic 映射的Lyapunov 指数图,所有参数对应的系统Lyapunov 指数均是正值,并且较大,达到21 以上,远大于传统混沌映射的Lyapunov 指数。从图3 可以看出,在改进Logistic 映射中,所有参数对应的系统均具有正值的Lyapunov 指数并且数值相对较大,说明本文所提改进Logistic 映射具有更好的混沌性能。
图3 3 种映射下的Lyapunov 指数情况Fig.3 The case of Lyapunov exponent under three kinds of maps
通过检测序列在2 个不同时刻的相关程度,可以进一步刻画序列的伪随机性。将控制参数r和初始值X0分别设置为0.23 和3.98,分别将这2 个参数进行微小的改变,改变量均为10-14,得到2 个新序列,将新序列和原序列进行互相关系数计算。图4(a)、图4(b)分别是由改进前后混沌系统所产生混沌序列的自相关系数图,图4(c)~图4(f)为混沌序列互相关系数图,图4(c)、图4(d)是改进前混沌系统所产生序列的互相关系数图,图4(e)、图4(f)是改进后混沌系统所产生序列的互相关系数图。
图4 混沌序列的自相关和互相关系数图Fig.4 Coefficient diagram of autocorrelation and cross correlation of chaotic sequences
SP800-22Rvlla 标准由美国国家标准技术研究所(NIST)提出,专门用于对密码应用中的随机数或伪随机数发生器产生的二进制随机序列进行统计测试。SP800-22Rvlla测试给出了15种测试方法[1],通过每种测试计算一个p值并与给定的显著性水平作比较,从而判断被测试的比特序列是否具有随机性。将混沌序列转化为比特序列的具体方法是将混沌序列值转化为二进制形式,然后取小数点后的前52位比特值组成比特序列。利用SP800-22Rvlla 来测试比特重排前后的混沌系统所产生的混沌序列是否具有随机性,设置比特序列长度为106,显著性水平为0.01,当测试p值大于显著性水平时,检验通过,测试结果如表1~表3所示。
表1 SP800-22Rvlla 测试结果Table 1 SP800-22Rvlla test results
表2 随机旅行测试结果Table 2 Random travel test results
表3 随机旅行变种测试结果Table 3 Random travel variant test results
从表1~表3 可以看出,比特重排后的混沌系统所生成的比特序列可以通过15 个子测试,而重排前的混沌系统所生成的比特序列只能通过15 个子测试中的一部分,说明由新混沌系统所生成的序列具体更好的随机性。
由混沌系统的分岔图、Lyapunov 指数图以及SP800-22Rvlla 标准测试实验结果可以看出,比特重排后得到的改进混沌系统的随机性能优于比特重排前系统,前者所产生序列的混沌性能更优。
在整个加密过程中使用的密钥包括6 个部分,分别为X1、r1、X2、r2、L、Z,前5 个分别是2 个新混沌映射的初始值和系统参数值以及将混沌序列转化为二进制形式时所取小数点后的位数,Z是与明文相关的量,其目的是提高加密系统的明文敏感性,计算如式(3)所示:
其中:f表示输入的明文图像,大小为M×N。
本文加密算法采用预加密、置乱与扩散同时进行的结构,以对灰度图像进行加密,算法流程如图5所示。
图5 加密算法流程Fig.5 The procedure of encryption algorithm
将大小为M×N的灰度图像作为输入,加密算法的具体步骤如下:
步骤1产生混沌序列K。利用密钥X1、r1、L、Z以及第2 节提出的新混沌系统,迭代Z次,跳过混沌系统的过渡态,再迭代n次,生成长度为n的混沌序列K=(k1,k2,…,kn),n=M×N。
步骤2生成随机矩阵F。将步骤1 中得到的序列K进行量化,转化为与明文图像大小相同的随机矩阵F=mod(floor(K×108),256),其中,函数floor(x)返回不大于x的最大整数。
步骤3预加密。将随机矩阵F与明文图像P进行比特异或操作,得到新的图像PC:PC=PC⊕F。
步骤4分块。将PC分成大小均等的4 个部分,每个块大小均为M1×N1。
步骤5分块同时进行置乱与扩散操作,具体流程如图6 所示。
图6 置乱与扩散同时操作的流程Fig.6 The operation process of scrambling and diffusion is carried out simultaneously
图6 所示流程具体步骤如下:
1)将每个矩阵块按行优先原则转换为一维数组,数组长度为n1,n1=M1×N1。
2)产生2 个待置换的位置D1、D2。位置D1为顺序位置m(m从第一个位置开始顺序往后取)。位置D2由第2 节所提混沌系统及式(4)计算得到:首先利用密钥X2、r2、L以及新混沌系统迭代一次得到一个数d,再利用式(4)计算位置D2。
3)判断位置D1、D2是否被重复选取。如果D1、D2中有一个被重复选取,则跳过该位置。若顺序位置D1被重复选取,则D1向后顺延一位,D1=m+1;若随机位置D2已被选取过,则D2向后顺延一位,即D2=D2+1。
4)利用比特平面翻转和动态异或扩散位置D1、D2处的像素值:
(1)比特平面翻转。将位置D1、D2处的像素值PCD1、PCD2分解为8 个比特平面,高4 位比特平面和低4 位比特平面翻转交换,然后合成得到新的灰度值PCZ1、PCZ2。
(2)动态异或。Y由位置D1、D2动态生成,Y=mod(D1×D2,256),然后将灰度值PCZ1、PCZ2分别与Y进行动态异或,Z1=PCZ1⊕Y,Z2=PCZ2⊕Y,得到Z1、Z2。
5)交换D1、D2位置处的像素值。
6)利用X2=mod(d×D2,1)生成新的初始值X2,代入混沌系统生成新的d后,代入式(4),产生新的随机位置D2,顺序位置D1=m+1。
步骤6在同时进行置乱与扩散操作后,将所有的块合并成一块,顺时针旋转90°,再重复一次置乱与扩散操作,得到新图像PZ。
步骤7将PZ顺时针旋转180°得到PZ1,重复1 轮上述操作,得到密文图像C。
本文所提加密算法的解密过程是加密的逆过程,进行反向操作即可无失真地还原明文图像,本文不再详述。
为了验证本文加密方案的性能,采用标准256×256 的Lena、Clock 和Walter Cronkite 灰度图 像进行实验,加密系统的密钥设置为:X1=0.76,r1=17.92,X2=0.21,r2=0.35,L=56。3 张图像的加密结果如图7 所示,其中:图7(a)、图7(b)分别为Lena 的明文和密文图像;图7(c)、图7(d)分别为Lena 的明文和密文图像的直方图;图7(e)、图7(f)分别为Clock 的明文和 密文图像;图7(g)、图7(h)分别为Walter Cronkite 的明文和密文图像。
图7 本文方案的加密结果Fig.7 The encryption results of this scheme
基于改进Logistic 映射的混沌图像加密系统的密钥包括X1、X2、r1、r2、L、Z,其中:X1、X2的取值范围在0~1 之间;r1、r2可取任意非零的数值;X1、X2、r1、r2的步长均为10-14。因此,密钥空间大小为1056,大于2100,即所提加密系统的密钥空间足够大,可以有效抵抗穷举密钥攻击。
3.2.1 直方图分析
利用直方图可以直观地看出一幅图像的像素值分布特征,为了进一步从客观上说明直方图的均匀性,本文利用χ2检验进行验证。取常用的显著性水平α=0.05,临界值为χ2(255,0.05)=293.25。通过计算,Lena、Clock、Walter Cronkite 的密文图像χ2统计量分别 为273.14、252.66、197.91,均 比χ2(255,0.05)小,即在显著性水平为0.05 的情况下,可以认为密文图像直方图呈现均匀分布。
3.2.2 相邻像素相关性
明文图像在水平、垂直、对角方向上的相邻像素之间相关性都较强,理论上而言,通过加密系统加密后的密文图像在各个方向上的相关性很弱才表明加密系统的加密效果理想。为了测试密文图像的相邻像素相关性,在密文图像各个方向上随机选取2 000个相邻像素值,通过式(5)、式(6)计算相邻像素的相关性系数,计算结果如表4 所示。
表4 相邻像素相关性系数统计结果Table 4 Statistical results of correlation coefficient of adjacent pixels
从表4 可以看出,明文图像在各个方向上的相邻像素相关性很强,而密文图像在各个方向上的相邻像素相关性很弱。与文献[16-17]算法相比,本文算法可以降低相邻像素的相关性。
敏感性包括密钥敏感性、明文敏感性等,是指密钥或者明文发生微小改变时加密后得到的2 幅密文图像是否有显著差别。衡量2 幅图像的差别主要有定性方式和定量方式2 种方法:定性方式直接显示2 幅图像的差异;定量方式主要通过计算像素变化率(NPCR)和归一平均变化强度(UACI)进行衡量。NPCR 和UACI 的计算公式分别为式(7)和式(8),其中,函数D用来比较2个数值是否相等,当C1(i,j)=C2(i,j),D(C1(i,j),C2(i,j))=0;否则,D(C1(i,j),C2(i,j))=1。
3.3.1 密钥敏感性
密钥敏感性强是指在加密或解密过程中,密钥发生微小的变化,在加密同一个明文图像得到的2 个密文图像或者解密同一个密文图像得到的2 个明文图像之间有巨大差异。对于密钥X1、X2、r1、r2、L,每次实验改变其中一个密钥值,其他保持不变,分析2 个密文图像之间的差异。利用Lena、Clock 和Walter Cronkite 图像进行实验,计算所得密文图像的NPCR 和UACI 值,计算结果如表5 所示。从表5 可以看出,本文加密系统具有很好的密钥敏感性。部分解密结果如图8 所示,解密系统同样具有良好的密钥敏感性。
表5 加密过程的密钥敏感性Table 5 Key sensitivity of encryption process %
图8 部分解密结果Fig.8 Partial decryption results
3.3.2 明文敏感性
拥有良好明文敏感性的加密算法可以有效抵抗差分攻击。使用同一密钥对差别微小的2 个明文图像进行加密,得到的2 幅密文图像相差较大,即说明加密系统具有明文敏感性。随机改变明文图像的一个位置像素值或一个灰度级来产生具有微小差别的2 幅明文图像,重复随机选取像素位置100 次,经过相同密钥加密后得到2 幅密文图像,计算2 幅密文图像之间的NPCR 和UACI 值。100 个NPCR 和UACI值的平均结果如表6 所示,从表6 可以看出,本文方案的NPCR 和UACI 值接近NPCR 和UACI 的数学期望值(99.609 4%和33.463 5%),说明本文加密系统具有很好的明文敏感性,与文献[18-19]算法相比,本文算法在抵御差分攻击上具有更好的性能。
表6 明文敏感性对比结果Table 6 Plaintext sensitivity comparison results %
信息熵可以反映图像的随机性或不确定性。如果一幅图像随机性越强,那么其信息熵越接近于数学理论值[20]。信息熵的计算公式为:
其中:T是灰度等级数;p(i)表示灰度值i出现的概率。对于T=256 的灰度随机图像来说,H的理论值为8。各个明文图像和密文图像的信息熵结果如表7 所示,从表7 可以看出,密文图像的信息熵接近于理想值,与文献[18-19]算法相比,本文算法信息熵结果更优,其可以更好地抵御信息熵攻击。
表7 信息熵对比结果Table 7 Information entropy comparison results
本文对经典Logistic 映射进行改进,添加模运算并对所生成的序列进行比特重排,使得新混沌映射所生成的序列具有更好的混沌特性,并利用改进混沌系统所生成的序列设计一个包含预加密且同时进行置乱与扩散操作的图像加密方案。在预加密阶段对图像像素进行预处理,扩散图像的像素值,然后利用改进Logistic 映射随机不重复生成置乱-扩散的像素位置,其中,由简单的交换实现置乱,对像素的比特平面进行翻转和动态异或完成扩散。实验结果表明,该图像加密方案具有较高的安全性,可以抵抗暴力攻击、差分攻击、统计攻击、明文攻击等。本文是对标准256×256 灰度图像进行加密与解密研究,下一步考虑将加密方案推广到彩色图像领域,同时在加密性能与加密时间2 个方面进行折中以获得更好的加密效果。