随着网络和计算机技术的发展,多媒体安全的研究成为了人们的热点,特别是利用混沌的优点来保护数字图像被认为是图像加密中很有希望的研究领域之一。有专家提出了一种基于高维混沌的图像加密算法,其过程包括两个阶段:首先是利用Arnold猫映射对原图像像素的位置进行置乱,其次是利用Lorenz混沌系统产生的值来加密置乱后的像素值,最后,通过以上两个部分可以得到密文图像。
但是这种图像加密算法在图像安全性上有许多优点包括密钥敏感性和大密钥空间等,同时也存在着一些能够被攻击者利用的缺陷,那么我们今天就针对这种高维混沌图像加密算法做一些列改进,让它更有利于图像文件加密。
一、基于高维混沌图像加密算法所隐含的缺点
基于高维混沌图像加密算法存在两个缺陷:
1)(0,0)像素位置没能被改变同时位置的置乱和灰度值的替换之间缺少联系。
由于Arnold猫映射固有的缺点,所以原算法无论经过多少轮的迭代,原图像(0,0)像素位置始终没有被改变,即如果(x0,y0)=(0,0),经过n轮迭代,(xn0,yn0)=(0,0)。同时,位置的置乱和像素的替换是逐个像素单独进行,而在两个像素之间却缺少关联。因此,由于该加密算法对加密图像缺少必要的扩散效果,这样对于选择明文攻击来说是可行的,攻击者可以利用一些特殊的图像(例如两幅只有一个像素不同的图像)来进行算法的分析,从而找出该图像加密算法中像素置乱的规则。图1说明了当两幅明文图像中有一个像素点有变化时,用原算法进行加密得到的密文图像也只有一个像素有变化。其中明文图像为标准Girl灰度图像,系统参数和初始条件如下:对于Arnold猫映射:p=25,q=5,迭代次数M=7,对于Lorenz混沌系统:x0=1.8552,y0=1.2254,z0=1.2545。
2)所产生的加密数据流仅依赖于Lorenz混沌系统的初始条件而与明文没有关联。
原算法所产生的加密数据流{bx,by,bz}仅依赖于Lorenz混沌系统的初始条件x0,y0,z0,而与图像明文没有任何关联。这样,当混沌系统的初始条件没有改变,所对应的加密数据流{bx,by,bz}也不会发生变化。这对于抵抗已知明文攻击来说非常脆弱。例如,一个攻击者可以利用大量已知的明文和密文对(di,ci)(注:这些明文和密文对分别来自于d={d1,d2,......,dN×N}和c={c1,c2,......,cN×N},其中d是图像像素经过置乱后由图像像素值所排列成的二进制序列流,c是密文序列流)来产生加密所需要的数据流,从而可以解密用此密钥加密的密文图像。其数据流恢复的过程如下:
首先,把原加密算法中图像像素值替换公式进行等价变换。
可以注意到,经过上面的变换,等式左边的运算结果是一致的。
第二,把式(1)中的结果再进行以下等价变换,就可以得到解密用的密钥数据流(其中i=1,2,......代表对Lorenz混沌系统进行第i次迭代):
如果利用选择明文攻击的特点来考虑这个缺陷,当两幅图像用相同的密钥进行加密(其置乱规则已知),我们就可以充分利用其中一幅图像的明文和密文对异或后产生的数据流by⊕bx,bz⊕by,bx⊕bz来恢复另一幅明文图像。其原因在于当攻击者得到数据流by⊕bx,bz⊕by,bx⊕bz之后,就等于得到了原算法的密钥。图2给出了利用选择明文攻击的例子(加密密钥同上对第一个缺陷的分析),可以得出,当用相同的密钥加密两幅不同的图像时(标准Lena和Girl灰度图像),如果从一幅图像中得到了数据流by⊕bx,bz⊕by,bx⊕bz,则另一幅图像就可以完全恢复出来。
二、对原算法的安全性和效率的改进
1、安全性改进设计
根据前面我们介绍的内容,为了解决原算法在安全性上的缺陷,我们提出了以下4点改进方法:
1)由于Arnold猫映射在进行图像置乱中对于(0,0)位置上的像素不起任何作用,因此,可把(0,0)位置上的像素和一个固定位置(i,j)(0<i≤N,0<j≤N)的像素在每轮迭代过程后进行交换。这样,前一轮(0,0)位置的像素就可以在下一轮迭代中被置乱。其中(i,j)可以被看作密钥进行控制。
2)针对原算法中像素位置置乱和像素值替换之间缺少关联的缺点,对原算法中两个加密步骤统一进行多轮迭代,即每一轮迭代都会进行位置置乱和像素值的替代。
3)由于原算法中加密数据流{bx,by,bz}的产生只是简单地依赖于Lorenz混沌系统的初始条件,这样很有可能被攻击者所利用,因此,应使数据流不但依赖于Lorenz混沌系统,同时也与明文相关。
4)对于加密数据流{bx,by,bz},在改进设计中,它的产生应该以一个链式结构递推进行,即在任意两个像素之间都应该有关联。这样,经过多轮迭代之后,就能取得较好的置乱和扩散效果。
2、加密速度改进设计
对于原算法,如果只进行以上的改进,则安全性将得到很大程度的提高。但是,要想取得较为满意的置乱和扩散效果,则需要进行多轮(轮数n>42)加密,这显然不符合实际应用中图像加密的需要,其原因就在于此算法的置乱效果只依赖于置乱阶段,而扩散效果也只依赖于扩散阶段。
为了在较少的加密轮数就能取得令人满意的加密效果,我们可以通过在算法框架结构中添加一些简单的运算操作(如查表操作,异或操作)来实现。在本加密算法的改进中,两个简单的异或操作(XOR)被分别引入到了置乱阶段的前面和后面,而其他的操作步骤没有发生变化。这样,在第一个阶段,像素位置的置乱和像素值的替换是同时进行的,而第二个阶段的像素变换也增加了扩散的效果。这样改进的结果是扩散效果不单是依赖于扩散阶段,而且还与置乱阶段有联系。因此,在较少的加密轮数下就能取得同样的加密效果,而加密速度却得到了很大的提高。对于这两个异或操作来说,第一个异或操作是把前一个被处理后的像素值和当前的明文像素值进行运算(顺序是按行从上到下,从左到右进行),其中第一个像素要和一个固定的密钥值进行异或,而最后一个处理后的像素要和(2,2)像素进行异或运算。对于第二个异或操作,运算步骤基本相同,只是像素值是按列从左到右,从上到下逐像素进行。式(3)给出了两个异或运算的基本结构:
其中pri,j是当前明文像素,vri,j是经过第一次XOR处理后的像素值,vci,j是经过置乱和第二次XOR处理后的像素值,S和S*是两个用户控制的密钥固定值,Per[x]是在第二次XOR处理前的置乱操作,v*2,2是(2,2)点经过处理后的最终像素值(其中0<i≤N,0<j≤N)。以上的简单XOR操作能有效的改变图像中每个像素加密后的像素值,达到很好的扩散效果。因此,这样的结构非常有利于实现图像的加密。
三、改进后的加密和解密算法
根据前面对原算法在安全性和速度上进行的有效改进设计,本节列出了改进算法中每一轮的加解密具体步骤,其中密钥包括Arnold猫映射的系统参数p,q,两次异或操作的初始值S,S*,Lorenz混沌系统的系统初始值x0,y0,z0,(0,0)像素交换位置(i,j)以及迭代轮数M。关于改进加密算法,其基本的加密结构如图3。
1、加密算法
步骤1、输入原始明文图像K(大小N×N)和密钥,并进行第一个XOR运算,得到变换后的图像。接着把变换图像运用Arnold猫映射进行一次置乱,并交换(0,0)位置和(i,j)位置的像素。然后完成第二个XOR运算,得到图像D。
步骤2、把图像D排列成一维向量Z={Z1,Z2,Z3,......,ZN×N},其中每个元素是十进制的像素值。
步骤3、连续迭代Lorenz混沌系统(首先进行初始迭代,迭代次数大于某个正整数),得到三个运算值xi,yi,zi,i=1,2,......,然后把其运用于式(4),并结合向量Z来求得加密数据流{bx,by,bz},则所得加密数据流不仅依赖于Lorenz混沌系统,而且还与图像D有关联,其中前两个值Z-1和Z0可设置为Z-1=127,Z0=255,n=4,abs(*)代表取绝对值,round(*)代表四舍五入进行取整,mod(*)为取模运算。
步骤4、图像D与加密数据流{bx,by,bz}按式(5)进行异或运算,其中i=1,2,......代表对Lorenz混沌系统进行第i次迭代,bitxor(*)返回两数异或后得到的结果。Lorenz混沌系统对向量Z中每个元素都产生对应的运算值xi,yi,zi,i=1,2,......。经过以上操作从而可以得到对应的密文向量c={c1,c2,c3,......,cN×N}。
步骤5、重复以上步骤,直到加密迭代轮数到M为止,此时所输出的图像就是密文图像。
2、解密算法
本图像改进加密算法的解密过程即为加密过程的逆过程,其中首先需要将密文图像转变为一维向量,然后利用连续迭代Lorenz混沌系统所产生的值来恢复向量Z={Z1,Z2,Z3,......,ZN×N}。其过程可以用式(6)表示:
最后再进行反向的两个XOR运算和置乱运算,这样如此多轮迭代,便可得到最终的明文图像。
本文提出了不同情形下的基于双线性映射的身份认证方案,实现用户与用户之间的身份认证,在用户认证过程中并不需要KGC的介入,而且第二种情形可以用于在不同KGC注册的用户之间进行身份认证识别,使得该方案非常适合于现代战机敌我识别等需要在个体间进行认证的应用领域。与已有方案相比,本文的方案需要更少计算量和通信次数,具有更好的效率。所提出的认证方案在椭圆曲线离散对数问题不可解的假设下,能有效抵抗假冒用户攻击,冒充攻击和重放攻击,具有很好的安全性能。
小知识之线性映射
在数学中,线性映射(也叫做线性变换或线性算子)是在两个向量空间之间的函数,它保持向量加法和标量乘法的运算。术语“线性变换”特别常用,尤其是对从向量空间到自身的线性映射(自同态)。