金必强
(池州学院 安徽 池州 247000)
随着计算机和网络传输的成熟,人们广泛地使用网络进行信息传输。但是信息安全事件也是层出不穷,导致信息安全这一领域也开始被人重视,信息安全也逐渐成为国际社会普遍关注的问题。在信息传输的过程中,图片作为网络传输过程中最为重要的信息载体,应用在军事领域、医学领域、教育领域等,但是由于图片高冗余性和像素之间关联性强等特点,使得传统加密算法(如DES、RSA、AES 等)在加密时不能克服上述缺点,导致加密效果较差,易被攻击者进行统计分析和差分等攻击[1-2]。
近年来,基于CML 提出了各种图像加密算法[3-4]。张慧丽[5]使用NCA 映射改进CML 系统,并且利用DNA对像素值进行编码。使用NCA 映射作为驱动函数,提高了原有的CML 系统混沌特性。而且NCA 映射导致了控制参数范围变大,使得密钥空间更大。Guan 等[6]提出了新的混沌系统,主要是利用3 个格子的耦合映射为加密算法提供伪随机序列,并且利用新的系统将伪随机序列进行重新组合,提高了源CML 系统的伪随机性。根据Wang 等[7]的研究结果,使用二进制编码会降低加密速度效率,并且仅依赖混沌系统控制的密钥容易被破解。Song 等[8]提出了将线性系统和非线性系统相结合的新CML 时空系统,避免了CML 周期窗口问题,并用DNA 序列进行扩散操作。孙鑫等[9]、Huang 等[10]发现了一种基于DNA 技术的加密系统可以通过利用部分已知明文或密文来重构等效密钥,但该系统在面对差分攻击时无法提供足够的保护。
为了克服上述缺点,本文使用混沌系统和折叠算法提出了一种高安全性的图像加密算法。首先在密钥生成部分,选择一部分明文信息作为密钥的一部分,使用SHA-512函数生成密钥,然后将哈希序列拆分成加密算法中的混沌系统的初始值和各个加密步骤中的控制参数。
Step 1:选择明文信息中的部分明文信息,累加计算求和,记作sumPixel。在本文中随机选择了10 个像素值进行累加求和。
Step 2:利用SHA-512 将密钥key 和sumPixel 进行Hash 处理,生成可计算密钥。在本文中,使用初始密钥和明文信息Hash 后得到可计算密钥Hash,明文信息是手动在明文图片中进行随机选择。因此可计算密钥如式(1)所示。
Step 3:利用Matlab 自带的排序函数sort(·) 对数据进行置乱处理。
Step 4:使用折叠矩阵进行像素置乱处理。本文针对大小为M×N的明文图像P进行折叠置乱,其中M是明文图片的行数,N是明文图片的列数。在传统的折叠算法中,从4 个不同的方向对明文图像P和混沌矩阵Q进行异或操作,以达到像素值置乱的目的。具体加密操作如下。
(1)从上到下折叠
将明文图像P分为上矩阵和下矩阵,以同样的分割方式将置乱矩阵Q1分为上下两个矩阵。定义上半部分矩阵为Uh,下半部分矩阵为Dh,具体操作如图1 和式(2)所示。
图1 从上到下折叠
(2)从左到右折叠
将密文图像c分为左矩阵和右矩阵,以同样的分割方式将置乱矩阵Q2分为左和右两个矩阵。定义左半部分矩阵为Lh,右半部分矩阵为Rh,具体操作如图2 和公式(3)所示。
图2 从左到右折叠
(3)从右上往左下折叠
将密文图像c分为右上矩阵和左下矩阵,以同样的分割方式将置乱矩阵Q3分为左下矩阵和右上矩阵。定义左下半部分矩阵为Ld,右上半部分矩阵为Rup,具体操作如图3 和式(4)所示。
图3 从右上往左下折叠
(4)从左上往右下折叠
将密文图像c分为左上矩阵和右下矩阵两个矩阵,以同样的分割方式将置乱矩阵Q4也分为左上矩阵和右下矩阵。定义左上半部分矩阵为Lup,右下半部分矩阵为Rd,具体操作如图4 和式(5)所示。
利用基于NCA 映射的ACML 系统,生成置乱矩阵Qi,其中置乱矩阵的大小大于明文的大小,所以需要在置乱矩阵中利用pos()函数选择矩阵。dir()是决定折叠函数的方向,对于折叠算法中的4 个方向分别定义为0,1,2,3。利用dir 决定加密的顺序。
Step 5:利用已经确定的置乱矩阵Qi和位置函数pos()和方向函数dir(),并且用折叠算法进行图像置乱操作。
Step 6:扩散操作。利用公式(7)进行扩散操作。
其中X是利用ACML 生成的混沌向量,在新的混沌向量中需要舍弃前500 次混沌序列,然后再进行异或操作。
解密算法与加密算法相类似,是加密算法的逆过程。解密算法的具体步骤描述如下:
Step 1:获得初始密钥。通过分解密钥,得到各个步骤中需要的控制参数和初始值参数。
Step 2:进行逆扩散操作,通过密钥中的参数,计算混沌向量,然后通过式(7)计算扩散的逆步骤结果。
Step 3:确认方向函数和位置函数。通过密钥可以得到方向函数和位置函数。利用ACML 计算加密过程中的折叠矩阵,然后按照方向函数和位置函数,进行按位异或操作,得到解密结果。
Step 4:进行sort 函数重排。利用密钥中index_Rowi和index_Colj进行重新排列得到最终的明文。
在本章节中, 给定初始密钥为 key =[da883291jkdlafanfaj0113dsk2913kl],选择明文信息中下标为60~70 的明文信息作为sumPixel,将key 和明文信息进行哈希散列之后得到最终密钥。以灰度图像Lena 举例,哈希值:
Hash =[3ba735684defc5f577d26c84086b0f45f534fc96e 55ee723a436c773fb70b2fb5ef907d5dcb1c7a88179c8d4ab4 55de704f3afd05ceb55c6dbb437c150fac44f],仿真实验结果如图5 所示。
图5 实验结果
优秀的加密系统应该有足够大的密钥空间,足够大的密钥空间可以抵御暴力破解。在本文中提出算法所使用的密钥包含:长度为512bit 的Hash 值;给定的格子数L和置乱序列index_Rowi和index_Colj。假如计算机的计算精度是10-14,那么在本文中,本算法的有效密钥空间是2512×dec2bin(M×N×L)×1014。以“Lena”图像为例,在本文中所使用的图片大小为256× 256,格子数目L=20,因此“Lena”的有效密钥空间大约是2532,远远大于设计密码系统时所要求的2100,所以在密钥空间方面所设计的密码系统是可以抵御暴力攻击的。
直方图描述了像素值的分布情况,如果加密后的密文分布不均匀,会泄露明文图像的特征信息,通过统计分析攻击可能破解加密系统。在图6 中展示了明文图像和密文图像的直方图分布情况。可以观察到在加密前,明文图像的直方图呈现高低分布不均匀的情况,而在密文图像的直方图中的像素是服从均匀分布的。证明在加密后的图像是不会泄露明文图像信息的。
图6 直方图分析
在明文图像中,由于相邻像素之间存在较高的相关性,使其容易受到统计攻击[11],所以在加密完成后,需要衡量相邻像素相关性。使用式(8)和式(9)去计算像素间相关性,本文在密文图像中随机选择了10 000 对像素点,测试了水平、垂直、对角线3 个方向上的相邻像素间的相关性。测试结果如图7 所示。
图7 水平、垂直、对角线3 个不同方向像素相关性对比
其中,
在表1 中给出密文图像的相关性系数。从表1 中可以观察到,原始的明文图像呈现出相邻像素之间较大的相关性;而在密文图像中,相邻像素之间的相关性显著减小,甚至呈现负相关,表示本文所提出的算法完全消除了原始像素值之间的相关性。值得注意的是,与文献[5]、文献[6]和文献[11]的算法相比,本算法在3 个方向上的相关性系数基本都优于对比文献。
表1 明文图像与密文图像相邻像素间的相关性
综上所述,本文使用SHA-512 将明文信息和密钥进行计算,将明文和密钥信息相互结合作为加密系统的密钥,用来抵抗选择明文攻击和选择密文攻击,并且密钥在计算各个步骤中的控制值和参数可以达到有限次的一次一密。在像素级上利用基于NCA 的耦合映射格子和排序函数,进行多次置乱和一次扩散的加密。安全性分析表明了新加密算法的密钥空间大,可计算密钥敏感性强,可以抵御差分攻击和统计分析等常见的攻击方式。