数字图像密码算法详解:基于C、C#与MATLAB
上QQ阅读APP看书,第一时间看更新

1.1 图像加密的研究进展

本节按时间先后顺序,依次介绍那些为图像加密研究做出了重大贡献的专家和学者在密码学领域的杰出贡献,他们的研究成果推动了图像加密技术的发展和成熟(注:由于篇幅有限和作者能力有限,难免有些重大成果被疏漏)。

1949年,伟大的信息论创始人Shannon在他的杰作中指出主要存在两种类型的加密处理,即乘积加密和加权加密[2]。假设两个加密变换分别记为RS,则乘积加密算子为TRS(系统输入赋给SS的加密输出作为R的加密输入,R的输出作为乘积加密的输出),加权加密算子为TpRqS,其中,pq=1(系统输入以概率p赋给R,以概率q赋给SRS的输出作为加权加密的输出)。Shannon列举了几种常用的文本密码技术,如有趣的Vigenère密码和Playfair密码。Vigenère密码中,密钥取长度为d的字符序列{kii=0,1,2,…,d-1},加密长度为n的消息{mii=0,1,2,…,n-1},密文为ei=(mikimodd)mod 26,i=0,1,2,…,n-1。当d=1时,Vigenère密码退化为Caesar密码;当dn时,Vigenère密码即为Vernam密码(即一次一密系统)。Shannon在密码学上的重大贡献在于他提出了扩散(Diffusion)和置乱(Confusion)的加密方法[2]。扩散方法将明文信息的统计特性分散到尽可能多的密文信息中(从而明文中的冗余信息分散到密文信息中),例如,(mod 26),其中,m表示明文字母;y表示密文字母。置乱使密钥与密文的关系尽可能复杂,即从密文信息的统计量中无法反演密钥。扩散和置乱方法使得密码系统可以有效地对抗已知/选择明文攻击和唯密文攻击。

1989年,Matthews提出借助混沌系统产生大量伪随机数的方法[3],建议将混沌系统的参数和初始值用作密码系统的密钥,从而大大减小了密钥的长度,这是对一次一密系统(One-time Pad)的密钥管理的重大改进。Matthews认为Logistic映射(即xnλ xn-1(1-xn-1))的混沌区域内存在着大量周期窗口,并不适合用作密码发生器,他借助不动点分析方法设计了一种新型的混沌映射,这里称为Matthews映射,即gx)=(β+1)(1+1/ββx(1-xβ,其中,1≤β≤4,0≤x≤1。然后,Matthews使用控制参数β和初始值x0作为密钥,迭代Matthews映射得到密码流。

1998年,Baptista提出借助混沌系统的遍历性加密字符的算法[4],这里使用了一维Logistic映射,即xn+1bxn(1-xn),将状态空间的取值域等分为256个区间,每个区间对应一个字符,对应关系作为密钥。此外,控制参数b和初始值x0也作为密钥。明文由字符组成,密文由表示迭代次数的整数组成。例如,从x0开始迭代Logistic映射,当迭代的状态值落入第一个明文所在的小区间时,其迭代次数为第一个密文;以此时的迭代值作为新的初值,继续迭代到状态值落入第二个明文所在的小区间时,新的迭代次数为第二个密文;依此类推(参考文献[4]中,当发送方的控制参数η=0时,取大于250且小于65532的最小迭代次数;当0.99≥η>0,每次迭代到目标区间的同时发送方借助高斯分布的随机数发生器产生一个随机数κ,如果κη,则取大于250且小于65532的迭代次数,否则继续迭代。接收方无须知道η)。这种方法可以用于加密数字图像,只是加密后的密文图像比原始明文图像体积稍大。同年,Fridrich指出,图像数据量巨大使得公钥密码术不适用于图像加密,因此,她提出了基于扩展的二维混沌映射的私钥(对称)图像加密算法[5]。实际上,Fridrich的突出贡献在于首次提出了借助离散化的Baker映射进行图像像素点位置扰乱的算法,有些学者甚至将“置乱—扩散”结构称为Fridrich结构(我们更倾向称之为Shannon结构)。

2004年,Chen等提出了图像密码系统对抗差分攻击能力的两个指标[6-7],即像素数改变率(Number of Pixels Change Rate,NPCR)和归—化像素值平均改变强度(Unified Average Changing Intensity,UACI)。这两个指标是作为明文敏感性测试指标提出来的,现在也广泛用于测试密钥敏感性和密文敏感性。

2005年,Lian等破译了Fridrich的图像密码算法[8],Wang等破译了Chen等提出的基于三维猫映射的图像密码算法[9]。自此,选择明文攻击方法成为破译各种密码方案设计有缺陷的图像密码系统的最常用方法,涌现了大量破译图像密码系统的研究工作。

2006年,Pareek等提出使用80位长的“外部”密钥,而不是直接使用混沌系统初值和参数作为密钥,进行图像加密的算法[10];Pisarchik等尝试借助单向耦合映像格子进行图像加密的算法[11];Li等展示了选择明文攻击、选择密文攻击和已知明文攻击方法的典型应用方法[12];Gao等在Logistic映射基础上提出了一种新的混沌映射,并证实了新映射可以产生随机特性更好的密码序列[13]

2007年,Xiang等提出了只加密像素点高4位的选择图像加密算法[14];Kwok等提出借助Tent映射和高维猫映射生成伪随机序列的方法,并使用NIST伪随机序列测试标准详细测试了这些伪随机序列的统计特性[15];Zeghid等展示了AES可以用于图像加密[16]; Zhang等提出了使用猫映射和单向耦合映像格子进行图像加密的算法,该算法结构与Feistel结构类似[17]

2008年,Massoudi等综述了图像加密系统的选择加密算法,从Shannon密码理论中找到了理论依据[18];Arroyo等分析了Pisarchik等[11]的图像密码系统的安全性问题[19],提出了一种所谓的时间攻击方法;Gao等提出了一种借助混沌序列置乱图像像素点的方法[20];Behnia等提出了借助混沌耦合映射和单混沌映射产生密码序列的算法[21];Tong等进一步提出了借助复合混沌映射产生密码序列的算法[22];Wong等提出了使用循环移位操作的扩散算法,循环移位在几乎不增加运算量的前提下,提高了扩散性能[23]

2009年,Wong等提出了借助查找表实现扩散的算法[24];Wang等提出了借助Logistic映射的状态更新标准映射(Standard Map)、Arnold猫映射和推广的Baker映射控制参数的方法[25];Mazloom等提出了一种借助耦合非线性混沌映射产生密码序列的方法[26];Gangadhar等提出了一种基于超混沌的图像密码算法,并详细分析了其对抗唯密文攻击和已知/选择明文攻击的性能[27];Tong等提出了一种明文关联的反馈型密码发生器,并对密文作了NIST SP800-22伪随机性测试[28];Wang等提出了组合4个一维混沌映射产生密码序列的方法[29]

1998—2009年,图像密码系统研究的主要工作有3个方面:①研究新的混沌系统,评估其产生伪随机序列的统计特性及其在图像加密方面的应用;②研究已有的混沌系统的组合及其变种系统,评估其产生的伪随机序列的统计特性及其在图像加密方面的应用;③研究图像加密的新的置乱算法和/或扩散算法,提高图像密码系统对抗已知/选择明文攻击等被动攻击的能力。事实上,这一时期的大量研究工作偏重于前两方面的研究,而或多或少地忽视图像密码系统算法与结构设计方面的研究,导致这些研究成果被后来的学者们使用已知/选择明文攻击等方法逐一破译,就连早期Fridrich的工作也难于幸免。但是,在这种图像加密与图像破译的争鸣中,图像密码系统的研究工作持续高速发展。

2010年,Wang等提出了结合神经元模型的图像加密算法[30];Tong等研究了一种新型组合混沌系统,并证实了该混沌系统的最大Lyapunov指数比Logistic的最大Lyanpunov指数大[31];Ye提出了一种位位置扰乱的图像加密算法[32];Liao等提出了借助正弦波形离散值变换像素点灰度值的方法[33];Yang等提出了图像加密和明文图像认证的算法,但是在密钥分配方面存在缺陷[34];Ye提出了借助Toeplitz和Hankel矩阵进行像素位置置乱的算法[35];Wang等提出了借助DNA编码变换进行图像加密的算法[36]

2011年,Zhang等借助Tent映射实现了图像像素点的全置乱处理[37];Jolfaei等提出了基于简化的AES的图像密码算法[38];Ye提出了借助混沌小波函数进行图像加密的算法[39];Patidar等提出借助图像整行和整列操作加快处理速度的方法[40];Ye提出了融合异或运算和加模256运算的扩散算法[41];Fu等提出了借助Arnold映射进行图像位位置置乱的方法[42];Rao等提出了使用Brahmagupta-Bh ã skara方程和Logsitc映射的图像加密算法,其同时使用了同或运算和异或运算[43];Zhu等提出了一种新的借助猫映射进行位位置扰乱的算法[44]

2012年,Zhu等提出了明文关联的密码序列生成方法[45],并改进了Tent映射,使其状态空间由(0,1)缩小为(q,1-q),q为小的正小数。例如,q=0.1;Akhshani等引入了量子Logistic映射进行图像加密[46];Kanso等提出了基于三维猫映射进行彩色图像加密的算法[47];Wang等提出了魔方置乱和动态查找表方法扩散的图像加密算法[48];El-Latif等提出了基于多项式混沌的图像像素位位置扰乱的算法[49];Abdullah等引入基因交叉算法进行图像加密[50];Fu等使用Chirikov标准映射和Chebyshev映射进行图像置乱和扩散,扩散中同时使用了异或运算以及求和取模运算[51];Ye等提出基于离散Arnold映射和行列循环偏移的图像加密算法[52];Mirzaei等提出将图像分成4幅子图像进行并行加密的算法[53]

2013年,Song等构造了一种耦合映射格子并用于图像加密[54];Zhang等结合超混沌和DNA编码序列进行图像加密[55];Zhou等组合Logistic映射、Sine映射和Tent映射成为一个参数可控系统作为密码发生器[56];El-Latif等借助量子混沌系统产生密码序列,并使用了提升小波变换进行变换域置乱[57];Yang等进行了量子Fourier变换下的图像加密预研工作[58];Ping等提出了使用二维元胞自动机的图像加密算法[59];Behnia等借助Jacobian椭圆混沌映射生成密码序列[60];Zhang等提出了一种明文关联的扩散算法[61];Tong分析了fx)=0.5-4x2的混沌特性并用其产生密码序列[62];Zhou等设计了基于量子交换电路的量子图像扰乱算法[63];Nandeesh等提供了多种扫描方式下的位位置扰乱技术[64]

2014年,Fouda等提出了基于分段线性混沌映射(PWLCM)和线性Diophantine方程(LDE)的图像加密算法,使用了256位长的外部密钥[65];Zhang等提出了基于位立方体旋转的置乱算法[66];Wang等提出基于Brownian运动的置乱算法[67];Zhang等提出基于时空混沌的图像加密算法[68];Zhang等[69]提出Zhang等[55]的图像密码方案的选择明文攻击方法;Zhou提出了组合两种一维混沌映射得到新的混沌系统的方法,并将其用于图像加密[70];Norouzi等提出了基于salsa20 Hash函数的图像加密算法,使用了512位长的外部密钥[71];Ye提出了基于正弦波和混沌系统的图像加密算法[72];Wang等提出了基于动态S盒的图像加密算法[73];Yang等提出了基于混沌Josephus矩阵的图像置乱算法[74];Hussain借助Tent映射、时空混沌和S盒实现了图像加密处理[75];Wu等模拟水波纹实现了图像置乱与扩散算法[76]

2015年,Cheng等提出了置乱与扩散同时进行的图像密码算法[77];Hua等提出了基于随机选择量子门电路的量子图像加密算法[78];Wang等提出了基于Langton's Ant元胞自动机的图像加密算法[79];Zhou等实现了Arnold映射的量子版本并用其进行图像加密变换[80];Wang等提出了基于行互换和列互换的图像加密算法[81];Som等提出了使用4个一维混沌映射(Logistic映射、Tent映射、正弦映射和立方映射)进行图像扩散的算法[82];Murillo-Escobar等提出了借助优化的一维Logistic状态序列进行图像加密的算法[83];Hua等提出了借助二维Logistic调制映射进行图像加密的算法[84];Liu等提出了借助Hénon映射产生密码序列的方法[85];Khan等提出了一种新型的S盒,并使用了Tinkerbell映射产生密码序列[86];Tong等提出了借助带扰动的混沌映射生成密码序列的方法[87];Zhao等进行了公钥与私钥融合加密光学图像的尝试[88];Seyedzadeh等提出了基于二维Logistic映射和量子Logistic映射进行图像加密的算法,其中,同时应用了异或运算以及求和取模256运算[89];Chen等使用了动态更新混沌状态序列作为密码序列的方法进行图像加密处理[90]

2016年,Hua等提出了组合Logistic映射和正弦映射的新混沌映射,并用其产生密码序列[91];Zhang等提出了基于二维Logistic映射和可更新S盒的图像加密算法[92];Assad等提出了基于二维猫映射的图像像素位置乱算法[93];Zhang等提出了基于动态DNA编码算法的图像加密方法[94];Murugan等研究了基于Henon映射的置乱方法和基于Lorenz系统的扩散方法[95];Diaconu使用了一种新型的双变元混沌系统进行图像加密[96];Guesmi等提出了借助SHA2和DNA序列的图像加密算法,其中使用了Lorenz系统生成密码序列[97];Parvin等提出了一种密文有损情况下成功还原原始图像的图像密码算法[98];Wu等提出了一种基于二维离散小波变换和六维超混沌系统的图像加密算法[99];Rostami等提出了一种基于DNA序列和Logistic映射的图像加密算法[100];Zhu等提出了两个二维组合混沌系统,并将其用于产生密码序列[101];Devaraj等提出了基于变型标准映射和动态S盒进行图像加密的算法[102];Li等提出了基于混合元胞自动机的图像加密算法[103];Liang等提出了仿射变换的量子实现版本,并将其用于量子图像加密[104];Yang等提出了基于一维量子元胞自动机的量子图像加密算法[105];Liu等提出了基于DNA编码S盒的图像加密算法[106];Ye等提出了基于SHA3的块图像加密算法[107]

2017年,Chai等提出了基于DNA序列和正弦波动的图像加密算法[108];Çavuşoğlu等提出了一种新的混沌系统,并用其构造了S[109];Hu等提出了基于DNA计算的图像加密算法[110];Pak等组合一维Logistic映射、正弦映射、Chebyshev映射的新型混沌系统,并将其用于图像加密[111];Chai等提出了基于Chua混沌系统、元胞自动机和DNA编码的图像加密系统[112];Wang等提出了基于分段线性混沌映射(PWLCM)和DNA编码的图像加密系统[113];Li等提出了基于Tent映射的图像加密系统[114];Li等提出了一种量子彩色图像加密算法[115];Zhu等提出了一种二维组合超混沌系统及其图像加密应用方法[116];Chai等提出了加密过程中的动态等价密钥选择算法[117];Chai提出了基于SHA2和组合混沌系统的图像加密算法[118];Hu等提出了基于Lorenz系统、Chen超混沌系统和DNA序列的图像加密算法[119];Belzai等提出了基于S盒和多个混沌系统的图像加密系统[120]

2010年至今,仍有大量图像密码系统方面的研究工作聚焦于混沌密码发生器的研究,可见密码序列在图像密码系统中的重要地位,现有的研究思路集中在发掘新型混沌系统上,这方面的未来研究工作可能需要深入考虑计算机的有限字长效应;一些学者在研究S盒构造方法及其非线性特性,这是一个重要的研究方向,S盒和查找表是实时的图像密码系统必不可少的组成构件,这方面的工作可能需要基于有限域进行深入研究;一些学者提出了基于DNA序列的图像密码系统,这些工作正如Rostami等学者[100]指出的,实质上是一种模4的二进制序列运算,这方面的大量研究工作被证实是不安全的,可能需要结合未来DNA计算机的数据结构和遗传算法进行深入有效的研究;一些学者开始探索基于量子图像的量子加密算法,由于量子计算机仍处于萌芽阶段,所以这部分工作最近几年内都将属于预研性质的研究工作,可能需要投入更多的研究人员和研究资源;图像加密与解密系统结构方面的研究工作也取得了一定的进展,学者们普遍重视明文关联的等价密钥生成算法和明文关联的加密系统的设计,这方面的研究工作属于图像密码学的核心工作,如果致力于设计类似AES这类数据加密标准算法的图像加密标准算法,形成全球统一的图像加密标准,可能需要在图像加密系统结构与算法上进行深入的研究。显然,任何一个科学领域的研究工作都应该是有始无终的,即使未来产生了图像加密标准,图像加密研究工作也只是有了一个参照标准,相应的研究工作也会持续发展下去。

下面谈一下我们科研小组在图像密码学领域的粗浅认识和研究工作[121-139]。首先,在图像密码系统的系统结构研究方面,研究了基于“扩散—置乱—扩散”结构的图像密码系统,其中,两个扩散操作都是明文无关的,而置乱操作是明文关联的,以提高图像密码系统的处理速度,在最新的研究成果中,还研究了基于“遮盖—扩散—扩散—置乱”型的图像密码系统和欺骗性图像密码系统及其与遮盖性图像密码系统的关系。其次,在图像密码算法研究方面,研究了明文关联的置乱算法,研究了加密算法与解密算法相同的图像密码算法并给出了严格的证明,最新的一项研究工作实现了基于卷积运算的扩散算法。然后,在图像密码系统算法实现研究方面,研究了基于MATLAB语言、C语言和C#语言进行图像密码系统实现的方法,形成了以MATLAB语言快速图像密码系统实现和统计特性分析以及敏感性分析、以C语言和C#语言进行加密效率与安全评价的体系方法,设计了C语言进行图像加密算法设计的框架工程,并开发了基于C#语言进行图像加密的工程项目。最后,在图像密码系统性能评价方面,研究了计算NPCR和UACI的理论值的统计方法和算法程序,不但计算出了两幅随机图像间的NPCR和UACI值,而且可以计算任意图像与随机图像间的NPCR和UACI值,从而使得密文敏感性分析和解密系统的密钥敏感性分析成为可能。此外,还研究了块平均变化强度(Blocked Average Changing Intensity,BACI)指标,理论上BACI指标比NPCR和UACI指标更具有说明性,同时,理论上给出了计算BACI的统计方法。

在未来的研究工作中,我们科研小组将继续使用MATLAB和C#语言作为研究工具,在图像密码系统的新型系统结构设计、新型密码发生器、新型加密算法设计、新型性能评价指标和图像加密应用技术等方面开展深入的研究,培养优秀的信息安全专业研究生,用更安全、更快速的图像密码系统服务于大众通信和国家安全。