如何保护图像的安全,防止非法攻击,我们提出了一种用于图像文件加密的可逆二维混沌映射,该映射由左映射和右映射两个子映射组成。通过对图像文件的拉伸和折叠处理,实现了图像文件的混沌加密。
一、新的二维可逆混沌映射
设图像为L级灰度图,大小为N×N,如图1所示。从对角线方向将图像分为上下两个部分并重新组合成一个平行四边形。利用四边形的列像素数目与相邻列的像素数目差,将某列中的像素水平插入到相邻列像素之间。反复该过程,依次连接,将图像拉伸成为一列长为Nz的直线,然后将它折叠成为N×N的图像。
下面举例说明左映射。图2(a)中图像大小为偶数4×4,(0,0)被插入到(1,1)和(0,1)当中,(2,2)被插入到(3,3)和(2,3)当中…,经过拉伸得到一个数列(1,1),(O,o),(0,1),(3,3),(2,2)--,然后折叠得到密图。为了保证两个三角形的每一列都能插入到后一列之中,将像素插入改为从第二列开始。上三角形的倒数第二列插入到最后一列之中。重复上述过程,得到密图。
右映射时,沿从右到左的方向对图像像素进行操作,其过程与左映射水平对称。
二、二维混沌映射算法
图像大小为N×N,设A(i,j),i,j=0,1,…,N-1为图像中的任意一点像素值,L(i),i=0,1,…,N2—1为将Ai,j拉伸后的一维向量。
1、左映射算法
如图1(a)所示,左映射算法是,当j≥i,N和j同时为奇数或同时为偶数时,当j≥i,N和j不同时为奇数或偶数时,当j<i,j是偶数时,当j<i,J是奇数时:
2、右映射算法
右映射算法可以通过下列过程得到:
将原图作一次镜像,A'表示变换后的图像式中:i=0,1,…,N- 1;j=0,l,…,N- 1。
通过左映射算法公式(1)~(4),可得到右映射算法。
3、折叠算法
式中:i=0,l,…,N- l;j=0,1,…,N- 1。
三、图像文件加密和解密算法
映射分为左映射和右映射,其映射次数可以作为密钥Key。例如Key=1234,表示依次用左映射1次,用右映射2次,然后用左映射3次,最后用右映射4次。加密算法如图3所示。其中K1和K2可以分别是密钥K的一部分,也可以相同,或可互相推导。函数F(K)为密钥的函数,其输出为扩散函数的参数。
式中:vk为每一个像素的值;Vk'为扩散后的像素值v-l=F(K2);G(V'k-1)=5×v'-1;256灰度图L=256。
加密算法可分为三步:
(1)利用密钥Ki及式(1)~(5),将图像A(i,j)拉伸成一条直线L(i),i=0,1,…,N2—1。
(2)利用式(6)折叠直线得到置乱图像B(i,j)。
(3)利用密钥K2及扩散函数对B(i,j)进行处理,得到密图。
图像解密算法与加密算法相反,如图4所示。密钥与加密过程的密钥相同,因此该系统为对称加密系统。
四、加密实例和安全性能分析
如图5所示,对lena256灰度图进行加密。为了研究二维混沌映射的加密效果,首先令K2=0,即不使用扩散函数。此时,加密系统仅仅置乱图像,没有改变图像的像素值(直方图不变)。
即使Key=1,使用该映射加密之后,图像也没有原图的特征。而Baker map等在加密次数为1时,原图特征依然明显。如5(b)所示,当Key =1234567890123456时,密图像素随机分布,加密效果良好。
1、安全分析
密钥空间分析
由于最基本、最流行的破解方法是对密钥进行穷尽搜索。密钥空间大是加密算法安全的前提。加密算法的密钥空间(无扩散函数)如表1所示。研究表明,密钥空间大小只与密钥长度有关,在理想情况下(计算速度允许),可认为密钥能无限增加。
密钥敏感度测试
对用Key=1234567890123456加密的密图来说,用KeYi=1234567890123455解密,用Key2=1234567890123457解密,如图6(b)所示口即使加密密钥与解密密钥仅有很小的差异,也无法解密密图,可见算法对密钥非常敏感。
统计分析
由于图像相邻像素之间具有很强的相关性,因此,如果加密后相邻像素之间相关性趋近于零,能说明加密算法的安全性较强。计算相邻点的相关系数。图7为密图像素(x,y)与(x,y+l)之间的关系。原图的相关系数为0. 9442,加密之后的相关系数为0. 00540其它相邻点的相关系数如表2所示。加密后密图像素之间的相关系数非常小。
2、扩散算法
仅对图像进行置乱是不够安全的,不能抵御明文攻击。为了增强加密算法的安全性,需要在二维混沌映射的基础上增加扩散函数。
对原图像只有一个像素点有差异的两个密图进行NPCR和UACI分析。如图9和图10所示。
当加密次数n=2时,NPCR≈1。在参数不变的情况下,两个有一个像素不同的图像,随着加密次数的增加,密图变得完全不同,两个原图的差别扩散到密图的整个区域。
小知识之映射
映射,或者射影,在数学及相关的领域经常等同于函数。 基于此,部分映射就相当于部分函数,而完全映射相当于完全函数。