赵 耿 李建新 马英杰 秦晓宏
1(西安电子科技大学 陕西 西安 710071)2(北京电子科技学院 北京 100070)
随着互联网的迅速发展,多媒体信息被广泛传输,图像作为多媒体信息的重要部分,其安全性受到重视。如今混沌在信息安全领域的应用越来越多,混沌密码作为密码学的新分支已经受到国内外研究人士的广泛关注。
利用混沌的图像加密大致分为空域加密和变换域加密两种。随着小波变换的广泛使用,变换域加密的优点被放大,加密和压缩的共同完成提高了加密效率,变换域的过程提高了复杂度。使用低维Logistic映射[1-4]和小波变换进行加密的方案取得了不错的效果。但是低维混沌加密方案存在被破解风险[5],所以使用高维混沌进行图像加密更优。文献[6]使用Lorenz混沌映射,经过处理得到混沌序列,然后进行小波域加密。文献[7]使用了超混沌系统。本文使用基于m序列扰动的Lorenz混沌系统来生成抗退化混沌序列。首先结合小波变换进行子带系数获取,将各子带系数置乱,进行低频子带系数扩散,小波逆变换重构之后得到初始加密图像;然后对初始加密图像使用耦合扩散的方法进行二次加密得到最终加密图像;最后对加密图像进行了密钥空间、统计分析,以及抗穷举攻击、抗统计攻击和抗差分攻击等评测。
小波变换是一种从时域到频域的分析方法,它在短时傅里叶变换局部化的思想上,有效地克服了窗口大小不随频率变化等问题。小波变换用小波函数系中的一族函数去表示某一函数,且这一族函数是由基本小波函数进行平移或伸缩得到的。
定义1设ψ(t)∈L2(R),其傅里叶变换为ψ(ω),当ψ(ω)满足如下允许条件时,称ψ(t)为一个基本小波或母小波。
(1)
将母函数ψ(t)经伸缩和平移后得到连续小波基函数:
(2)
式中:a是伸缩因子;b是平移因子。
小波变换可分为连续小波变换和离散小波变换。
定义2对任意f(t)∈L2(R),在基本小波ψ(t)下展开,称为f(t)的连续小波变换(CWT)。其表达式为:
(3)
(4)
则任意函数f(t)的离散小波变换为:
(5)
混沌是在确定的非线性性系统中出现的内在随机性现象。混沌系统具有以下特点:对初始条件敏感、正的Lyapunov指数、运动的遍历性、有界性、分形与分维性、自相似性、连续功率谱以及类噪声性等[8-9]。
Lorenz系统是一个三维混沌系统,用其生成的混沌序列有三个优点:一是复杂度高,Lorenz系统的结构比常见的一维和二维混沌系统复杂,故产生的实数值序列不可预测性更强;二是密钥空间大,Lorenz系统有三个初始值以及三个系统参数,均可作生成加密混沌序列的种子密钥,则Lorenz系统的密钥空间高于低维混沌系统;三是设计更具灵活性,Lorenz系统可以输出三路实数值混沌序列,可以对单路进行处理,也可以对三路进行组合处理[10]。
Lorenz系统的动力学方程式为:
(6)
式中:参数值a=10,b=28,c=8/3时,Lorenz系统处于混沌状态。在MATLAB上可以得到Lorenz混沌系统的相图如图1所示。
图1 Lorenz混沌系统的x-y-z相图
(1) Lorenz方程系统参数选取a=10,b=28,c=8/3。给定系统方程初始值x0、y0和z0后,使用四阶Runge-Kutta算法进行计算,舍去前1 000组混沌序列值,以第1 001次得到的计算值作为新的初始值。此后计算可得到的三个离散混沌序列分别记为X、Y、Z。
(2) 二值化处理:截取三个混沌序列中L位的二值序列作为输出序列。经验证发现,只选取一个序列不如依次选取X、Y、Z的某些位连接后的伪随机性好,而且将这三位进行“异或”的伪随机性并不好。这里将三个序列按求余方式选取。第t次选取,则有:当t(mod3)=1时,选取X;当t(mod3)=2时,选取Y;当t(mod3)=0时,选取Z。这里设置实数精度为双精度,则可以对之前以取余方式选取的混沌序列进行转二进制,并取小数点后的部分位作为预处理输出序列S。
(3) m序列是最长线性移位寄存器序列的简称,是一种伪随机序列、伪噪声(PN)码或伪随机码[11]。n级线性反馈移位寄存器的输出序列的最大周期为2n-1,当达到最大周期时,此序列是n级m序列。若m序列的长度小于2n-1,则该长度的序列是非周期序列。图2为m序列产生器的结构。
图2 m序列产生器的结构
本文采用16级线性反馈移位寄存器LFSR生成m序列,简记为R。其特征多项式为f(x)=x16+x12+x3+x+1,即图2中c0=c1=c3=c12=c16=1,其余的ci为0。
(4) 每隔n次与X的后s位与m序列的s位作“异或”处理,返回到输入,作为对系统的扰动。扰动过后重新回到(1)继续计算,最终输出序列为S′。如果需要伪随机二值序列的长度为M,则需要如此循环M/n次。
系统的结构框图如图3所示。该方案中,Lorenz混沌系统和LFSR相互独立,Lorenz混沌系统输出端得到3个二进制比特序列集,经过对这3个二进制比特序列集的截取与组合得到初始输出序列,通过与LFSR输出的序列R间隔性进行“异或”,实现扰动,并将扰动结果返回至系统的输入端,进行下一轮运算。相比原数字混沌系统,经过扰动的混沌序列的周期就至少扩大了n(2N-1)倍[12]。
图3 m序列扰动Lorenz系统的伪随机数发生器结构框图
图像的加密过程由小波系数获取、子带系数置乱与扩散和初始加密图像扩散3个过程。小波系数获取过程进行两层分解,置乱过程使用Arnold变换,低频子带系数扩散基于扩散参数和混沌序列生成的扩散矩阵,扩散参数使用第二层小波分解的高频系数获取。最后进行的初始加密图像扩散使用混沌序列“异或”与像素间耦合加密组成。加密算法整体框图见图4。
图4 加密算法整体框架图
原始图像经过小波变换,会将原始数据变换到频域,由4个子带图像组成。LL:水平和垂直方向的低频子带图像;LH:水平方向的低频和垂直方向的高频子带图像;HL:水平方向的高频和垂直方向的低频子带图像;HH:水平和垂直方向的高频子带图像。由于在频域内,低频部分包含了图像大多数信息,能量更为集中,而高频部分则包含了图像的大多数细节信息。对于图像数据,存在冗余性高的问题,相比传统的对原图像空间域进行加密,对低频部分加密会减少加密数据量,提高加密效率。如果对图像细节保密要求高,则高频部分保留的细节也需要进行部分处理,不过与低频部分的大信息量相比,此部分可以进行简化处理,如子带系数矩阵置乱。
本文采用“db1”小波对灰度图像进行两层的小波变换。第一层变换得到LL1、LH1、HL1和HH1,第二层变换是在LL1上再次进行小波变换,得到LL2、LH2、HL2和HH2。以灰色头像Lena为示例图像进行小波变换,图5(a)为原始图像,在两次小波分解之后分别得到第一层压缩图像图5(b)和第二层压缩图像图5(c)。因此,通过低频信息仍然可以看出图像内容,同时由表1数据可以得出,图像数据量得到了大大的压缩。
(a) 原始图像 (b) 第一层压缩图像 (c) 第二层压缩图像图5 原始图像和各层压缩图像
表1 原始图像和各层压缩图像大小对比
对原始图像I首先进行尺寸变换,将原始图像变为长宽相等的IM×M,长宽不等图像进行空位点像素值补0操作。然后进行两层小波分解,对各子带系数矩阵进行置乱处理,再对置乱后的第二层低频子带系数使用混沌序列进行扩散。
(1) 置乱:由于是对子带系数进行处理,置乱过程可以改变子带系数矩阵分布,从而在小波重构后得到相邻像素相关性更低的加密图像。
本文使用Arnold变换对子带系数矩阵进行置乱加密。设(xn,yn)是变换前某点的位置,则Arnold变换过程如下:
(7)
(8)
混沌二值序列以8位为划分单位,获得一个与低频子带系数大小相同的扩散矩阵C,此部分需要M2/2位混沌二值序列。将得到的扩散参数用在第一步得到的置乱低频子带系数上,与扩散矩阵C进行计算:
(9)
(1) 使用混沌二值序列生成M×M大小的扩散矩阵K,生成方式为每8位为一组,作为扩散矩阵K的一个元素,共需要混沌二值序列8M2位。
(2) 从第二个像素开始,将每个位置的像素值与其前一位置的像素值进行二进制按位“异或”操作,最后与扩散矩阵K进行二进制按位“异或”的操作。
(10)
如果相邻像素间相关性较大,使用像素点之间的耦合操作会有:
I′(x,y)≈K(x,y)
(11)
这使得被加密的像素点的值近似为扩散矩阵对应位置的值,既减少了相关性,又增加解密的复杂性。
解密的过程是加密的逆过程:
(1) 将解密密钥中x0、y0和z0作为混沌系统的初始值,按照混沌序列的产生方式生成混沌序列;将前M2/2位混沌序列转为扩散矩阵C,再取8M2位混沌序列转为扩散矩阵K。
(12)
(4) 将步骤(3)中得到的子带系数矩阵进行Arnold逆变换得到LL2、LH2、HL2、HH2、LH1、HL1和HH1:
(13)
(5) 将步骤(4)中得到的子带系数矩阵进行小波重构,得到原始图像,完成第二次解密。
本文采用256×256的Lena灰度图像进行加密和解密仿真实验,仿真环境为MATLAB 9.0(R2016a)软件平台。Lorenz混沌系统的三个初值分别取0.25、0.13和0.15,置乱参数a=15,b=9,n=20。图像加密效果如图6所示,其中(a)为原始Lena图像,(b)为加密之后得到的加密Lena图像。
(a) 原始Lena图像 (b) 加密Lena图像图6 图形加密效果对比
如果密钥空间很大,则攻击时间和代价会变得很高,使得攻击者无法使用穷举攻击。密钥空间越大,加密算法抵御穷举攻击的性能越强。本算法的密钥由混沌系统初值(x0,y0,z0)和16级m序列寄存器初始值。三个混沌系统初值均为双精度实数,小数位由52位二进制表示。16级m序列寄存器初始值为16位二进制数。由此可计算密钥空间为252×252×252×216=2172。故本算法具有抗穷举攻击能力。
密钥敏感性分析是在微小改变密钥后,来测试对解密密钥的敏感性。如果算法的敏感性强,应该在密钥改动最小精度时,也不能正确解密。由于本算法混沌初始值采取双精度实数作为密钥,其精度达到10-14。对原始密钥改变10-14,获取解密图像。m序列寄存器初始值改变1位作为解密密钥进行解密,获取解密图像。正确密钥和错误密钥解密对比见图7,其中(a)为正确密钥解密图,(b)为使用错误密钥x0的解密图,(c)为使用错误密钥y0的解密图,(d)为使用错误密钥z0的解密图,图7(e)为使用错误的寄存器初始值的解密图。图7表明本文算法对密钥具有很高的敏感性。
(a) 正确密钥解密图 (b) 错误密钥x0解密图
(c) 错误密钥y0解密图(d) 错误密钥z0解密图
(e) 错误密钥寄存器初始值解密图图7 正确密钥与错误密钥解密图
直方图可以直观地反映图像像素灰度值的分布情况。如果像素灰度值分布直方图是均匀分布的,则能有效抵抗统计攻击。图8(a)是原始图像加密前的灰度值分布直方图,(b)是原始图像加密后的灰度值分布直方图。
(a) 加密前灰度值分布直方图
(b) 加密后灰度值分布直方图图8 原始图像加密前后的灰度值分布直方图
香农的信息论中提出信息熵的概念,用来表示平均信息量,反映了信源的不确定度。信息熵计算公式为:
(14)
式中:P(Si)为Si出现的概率。由于使用灰度级为256的图像,理论上信息熵是8。本文算法的信息熵计算值与其他文献比较见表2。可以看出,本文算法信息熵更接近理论值,可以更加有效地抵御外来熵攻击。
表2 本文算法与参考文献算法信息熵比较
绝大多数明文图像的相邻像素都有较高的相关性。衡量加密效果的一个方面就是进行相关性分析,图像的相关性越小,说明置乱效果越好。计算公式为:
(15)
(16)
(17)
(18)
本文从原始明文图像和加密图像中随机选择2 000对相邻像素点,通过计算公式得到水平、垂直和对角三个方向上的相关系数,见表3。加密前后相邻像素相关性对比图见图9。
表3 相邻像素相关系数对比
(a) 原图水平方向(b) 加密图像水平方向
(c) 原图垂直方向(d) 加密图像垂直方向
(e) 原图对角方向(f) 加密图像对角方向图9 图像加密前后相邻像素相关性
表3是本文算法与参考文献的相邻像素相关系数的比较。可以看出,原始图像在水平、垂直和对角三个方向上的相关系数均接近于1,说明相邻像素是具有高度相关性的。在经过本文算法的加密之后,三个方向上的相关系数都接近于0,说明原始图像经过加密之后各像素得到了良好的扩散。
一个好的图像加密算法应该具有抵御差分攻击的能力,衡量此能力的重要指标是像素变化率(NPCR)和归一化平均变化强度(UACI)。
设密文图像C1和密文图像C2,两者的原始图像之间仅有一个像素位置的灰度值是不相等的,令矩阵D与密文图像C1和密文图像C2的大小一致。当C1(i,j)=C2(i,j)时,D(i,j)=0,否则D(i,j)=1。NPCR和UACI的计算公式为:
(19)
(20)
NPCR的理想值为0.996,UACI的理想值为0.334。作为对比,随机选取10个点,灰度值先后增加1,计算出每个点的NPCR和UACI,然后取平均值作为本文的NPCR和UACI。与文献[16]对比结果见表4,结果表明本文算法更加接近理想值,所以本算法具有更好的抗差分攻击能力。
表4 NPCR和UCAI对比结果
本文基于小波变换,结合混沌系统,通过对各子带系数矩阵的置乱处理和对低频系数的扩散处理实现初始加密,最后对初始加密图像进行像素扩散和像素耦合加密,完成最终的加密。混沌系统经过抗退化处理得到的混沌序列具有优良的随机性,与小波的结合加强了加密性能和效率。仿真结果表明,本文算法具有密钥空间大、密钥敏感性强和统计特性良好等优点,可以抵御穷举攻击、统计攻击和差分攻击等。