奚新宝, 谢淑翠, 张建中
(1.西安邮电大学 通信与信息工程学院,陕西 西安 710121; 2.西安邮电大学 理学院,陕西 西安 710121;3.陕西师范大学 数学与信息科学学院,陕西 西安 710061)
随着网络技术、数字信息化技术的发展,数字图像越来越成为多媒体信息交流的重要载体之一。由于网络的信息共享性和开放性,图像信息数据传输的安全问题日益严峻,使得研究高安全性和高效的图像加密算法成为当前研究的热点问题。密码学和混沌学[1]这两门学科在结构上存在着许多联系和相似性,因此,启发人们将混沌理论的研究应用到密码学领域。且混沌系统具有伪随机性、不可预测性和初值敏感性[2]等特点,适用于图像加密系统的设计。
1998年,Fridrich J首次将混沌系统和数字图像加密相结合[3],在此之后各种基于混沌系统的图像加密方案被陆续提了出来。文献[4]设计了一种改进型Henon映射,更加适用于设计安全的密码系统。Chai X L等人[5]设计了一种基于脱氧核糖核酸(DNA)操作的混沌图像加密方法,加密效果良好。尽管多种加密方案层出不穷,但部分方案的加密算法存在安全性缺陷。文献[6]设计了一种基于元胞自动机(cellular automata,CA)和Tent映射的图像加密方案,但采用一维混沌系统,使得密钥空间小,安全性不高。在文献[7]设计了一种图像加密算法,在像素扩散阶段采用典型耦合映射格(CML)和信息熵来产生另一密钥流,但密文图像的部分信息容易暴露,从而算法安全性较低。
本文在置乱阶段使用三维细胞神经网络(cellular neural network,CNN)混沌系统生成的伪随机序列与二维广义Arnold映射对图像完成2次置乱,同时将该映射产生的混沌序列用于像素值扩散阶段,采用加取模和循环移位来进行像素值扩散得到最终密文图像。该算法克服了混沌系统结构单一等问题,仿真结果和安全性分析表明该算法是安全可行的。
收稿日期:2020—09—29
本文利用推广后的二维广义Arnold映射[8],方程如下
(1)
式中 (x,y)和(x′y′)分别为经过Arnold变换前后的图像像素位置,参数a,b均为正整数,n为变换次数,N为图像矩阵的阶数。
引入分段线性混沌映射(piece wise linear chaotic map,PWLCM)生成二维广义Arnold映射的控制参数,每循环一次Arnold映射的控制参数都不同,从而达到动态产生密钥的效果。分段线性混沌映射表示为
(2)
式中x,c分别为该混沌映射的系统状态变量和控制参数,当控制参数c∈(0,0.5),x∈(0,1)时,系统处于混沌状态。
Chua L O在1988年第一次提出了CNN的概念,CNN是一种通过于局部细胞互连构造而成的神经网络系统[9]。三维CNN系统的动力学方程为
j=1,2,3
(3)
式中j为细胞,xj为细胞状态,Ajk为反馈模板,Sjk为控制模板,Ij为阈值,f(xj)为输出,其表达式如下
(4)
实验证明,当三维CNN系统中的参数取值如式(5)时,三维CNN系统可产生混沌现象
aj=0
(5)
将以上参数代入式(3)后即可以得到三维CNN混沌系统的动力学方程如下
(6)
本文的加密算法主要由置乱和扩散两个阶段构成,明文图像记为PM×N,M,N分别为图像的高和宽。
步骤1 利用SHA—256函数计算明文图像的256 bit哈希值作为密钥,记作K,K=[k1,k2,…,k32]。其中,ki={ki1,ki2,…,ki8},i=1,2,…,32。
利用明文图像计算辅助参数d,公式如下
d=mod(floor(sum/(MN)×256)×1012,32)+1
(7)
步骤2 将明文图像PM×N按行或列展开成一维向量,记为A。利用步骤1产生三维CNN混沌系统的初始值,然后对三维CNN混沌系统迭代产生长度分别为MN/3的混沌序列x1(i),x2(i),x3(i),其中,ceil为向上取整函数,由于混沌序列的值域范围较大,不利于数据批处理,因此,需对其进行优化预处理,预处理过程如下
x1(i)=1014x1(i)-floor(1014x1(i))
(8)
式中 floor为取整函数,另外2个序列的预处理运算过程同式(8)。所得混沌序列记s={x1(i),x2(i),x3(i)},由s生成伪随机序列X,序列X中第j个数表示如下
Xj=mod(floor((sj+100)×1010),M×N)+1,
j=1,2,…,M×N
(9)
步骤3 将序列X中重复出现的伪随机数只保留一个,将集合{1,2,…,MN}中没有出现在序列X中的数值按由小到大顺序添加到序列X的末尾。最后将A(Xj)与A(XMN-j+1)交换位置,即完成无重复置乱,得到的中间密文图像记为B,B=reshape(A,M,N)。
步骤4 输入PWLCM的系统状态初始值x0与控制参数c,将该映射迭代2 000次生成混沌序列F,并通过式(10)、式(11)产生广义Arnold映射加密所需的控制参数
h=fix(F(k)×10p)-fix(F(k)×10q)×10p-q
(10)
u=(h×105)mod 256,v=(h×106)mod 256
(11)
式中p,q为正整数;fix为朝0方向取整,k为小于2 000的正整数。对图像B借助二维广义Arnold映射进行置乱,将步骤重复R轮得到2次置乱后的中间密文图像,记为H。
步骤1 利用置乱阶段步骤2得到的混沌序列s生成伪随机序列S,公式如下
S=mod(floor(s×pow2(16)),256)
(12)
步骤2 用H和G分别为基于加取模扩散前后的图像,在加取模运算过程中,需要将明文任意像素点信息扩散到密文的整个图像之中,正向的算法如下
Gi=(Gi-1+Si+Hi)mod 256
(13)
其中,G0=0,逆向的算法如下
Gi=(Gi+1+Si+Hi)mod 256
(14)
在基于加取模扩散算法的基础上添加循环移位操作,具体公式如下
Gimod 256<< (15) 式中 LSB3为取数据的最低3位,即如果是l位的灰度图像,则应取数据的最低log2l位或者任意的log2l位。最后,将一维向量还原成二维图像即得到最终密文图像,记为C。 先对密文图像的数据点进行循环右移操作。分别对加取模扩散运算的逆向算法进行正向操作和对正向算法进行逆向操作,最后对Arnold变换做逆变换,再进行无重复置乱的逆运算,得到明文图像。 仿真实验使用的测试图像是大小为512×512的Lena图像,PWLCM的控制参数c=0.2,状态变量初值x0=0.5,二维广义Arnold映射的控制参数n=160,循环轮数R=3。使用MATLAB 2014b版本平台下进行加解密实验。仿真结果如图1所示,可见本文算法具有很好的加解密效果。 图1 仿真结果 文献[10]指出一个安全有效的加密算法的密钥空间大小应该至少为2100,本文算法的密钥由明文图像256 bit哈希值K,PWLCM的初始状态值x0和控制参数c,Arnold变换次数n和循环轮数R以及明文像素值之和sum组成。采用精确到小数点后16位的双精度表示,密钥空间大小为2256×(1016)4×sum≈2469≫2100,说明加密算法的密钥空间可以抵抗穷举攻击。 图2给出了Lena图像与其密文图像的直方图,可见明文图像的直方图分布是呈高低不均状态,而密文图像的直方图分布相对更加均匀。即本文算法加密后所得的密文图像的像素值是满足均匀分布的。 图2 明密文图像的直方图 相邻像素相关系数的计算公式如下 (16) (17) (18) 式中x,y为相邻两个像素的灰度值,E(x),E(y)分别为x,y的期望,rxy为相关系数,N为相邻像素对的数目。图3给出了Lena明文图像与其密文图像的相邻像素在水平方向相关分布情况,表1给出了本文算法相关系数的计算结果。 图3 明密文的相邻像素在水平方向的分布情况 表1 相邻像素的相关系数 由表1可见,本文算法得到的密文图像的相关系数几乎接近于0,明文图像的相关系数接近于1。相比于文献[11~13],本文算法得到的密文图像相关系数较小,说明密文图像在各个方向上几乎不具有相关性。 一般使用像素数变化率(number of pixels change rate,NPCR)以及统一平均变化强度(unified average changing intensity,UACI)两项指标来衡量加密系统的抗差分攻击能力[14]。NPCR和UACI定义如下 (19) (20) 式中C1(i,j)≠C2(i,j)时,D(i,j)为1;C1(i,j)=C2(i,j)时,D(i,j)为0。,M,N分别为图像像素的行数和列数,C1(i,j),C2(i,j)分别为两幅灰度图像。表2给出了本文算法对100组Lena原始密文图像和随机微小改变明文后加密得到的密文图像之间的最大、最小和平均NPCR和UACI值。 表2 明文敏感性测试结果 由表2可见,本文算法计算得到的NPCR和UACI的平均值非常接近于理想值,相比于文献[13,15],本文提出的算法对明文的微小改变的敏感性较强,所以,本文算法更能有效地抵抗差分攻击。 密钥敏感性[16]是指在加解密过程中,当密钥发生微小变化时,加解密图像会发生很大变化。选取一组密钥{c,x0,K},3个微小改变后的密钥:KEY1={c+10-14,x0,K},KEY2={c,x0+10-14,K},KEY3={c,x0,Km}。其中,密钥c,x0微小改变的量为10-14,K的微小改变量为1 bit的哈希值,记为Km,利用微小改变后的密钥分别加密Lena图像并解密其密文图像,计算得到的NPCR,UACI值如表3所示,可见计算得到的NPCR和UACI值接近于理想值。因此,本文算法的密钥敏感性较强。 表3 密钥敏感性测试结果 % 信息熵计算公式如下 (21) 式中L图像的灰度等级,p(i)为灰度值i出现的概率,对于L=256的灰度图像,其信息熵的理想值为8。表4给出了信息熵的测试结果,和文献[13,17]相比,本文算法的密文图像的信息熵更接近理论值8。所以,本文算法加密得到的密文图像可以有效地抵抗统计分析攻击。 表4 信息熵测试结果 本文提出了一种基于多混沌系统的图像加密算法,首先利用三维CNN混沌系统产生的混沌序列用于对明文图像进行无重复置乱,并对置乱后的图像进行Arnold变换完成2次置乱,之后在像素扩散阶段,使用三维CNN混沌系统产生的混沌序列作为会话密钥与置乱后的图像,采用加取模和循环移位来进行像素值的扩散。仿真结果和安全性分析表明:本文提出的加密算法密钥空间大,密文图像直方图分布均匀,相邻像素相关性小,密钥敏感性高,抗差分攻击能力强。因此,本文提出的算法具有较高的安全性,并在保密通信应用中具有较大的实用价值。3 解密算法
4 仿真结果
5 安全性分析
5.1 密钥空间
5.2 灰度直方图
5.3 相邻像素相关性
5.4 抗差分攻击分析
5.5 密钥敏感性
5.6 信息熵分析
6 结束语