数字图像密码算法详解——基于C、C#与MATLAB(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-28 17:50:57

点击下载

作者:张勇

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

数字图像密码算法详解——基于C、C#与MATLAB

数字图像密码算法详解——基于C、C#与MATLAB试读:

前言

1977年,美国国家标准局,即现在的美国国家标准与技术研究院(NIST)发布了数据加密标准(DES),这是地球上第一个用于文本信息加密的标准(为美国政府服务)。由于DES的密钥长度仅为56位,20世纪末的个人计算机已经可以在有限的时间内借助穷举密钥方法破译DES。于是2002年,NIST发布了高级加密标准(AES)取代DES。AES的密钥长度可以取128位、192位或256位,至今仍然为文本信息的加密标准。

然而,在数字图像加密方面,全球仍然没有一个标准密码算法,同时也没有衡量图像密码算法优劣的一系列标准指标。有些学者认为基于文本数据的AES算法不适合于数字图像加密,由于数字图像具有数据量巨大、信息冗余度大、相邻像素点相关性强等特点,AES用于数字图像加密可能存在加密速度慢、加密效果差的缺点。事实上,这种观点忽视了AES的强大数据加密能力。本书首先从DES和AES算法的阐述开始,详细分析了这两种数据加密算法应用于图像加密时的性能特点;然后以基于AES的图像密码算法的性能为比较基准,研究了3种基于混沌系统的图像密码算法。

全书内容共分为7章。

第1章首先回顾了图像密码技术的研究历程,按时间顺序,从Shannon关于保密通信的杰作开始,一直阐述到本书截稿时图像密码算法的最新研究成果;然后展示了本书使用的灰度图像以及3个软件平台,即MATLAB、Eclipse C和Visual Studio。其中,Eclipse C用于C语言开发,第2章的DES使用了C语言;而Visual Studio用于C#语言开发,全部章节的图像密码算法均使用了C#语言。

第2章首先详细介绍了DES算法结构及其实现方法,然后介绍了TDES(三重数据加密标准)算法及其在图像加密方面的应用技术,并给出了MATLAB、C语言和C#语言工程。一般地,由于MATLAB库函数丰富,所以MATLAB常用于图像密码算法快速实现,但是,MATLAB程序是解释执行的(MATLAB库函数除外),故MATLAB程序不能用于客观地评价图像密码算法的执行效率;C语言是比较图像密码算法执行速度的最佳语言,但是C语言程序调试复杂且图形界面设计难度大;C#语言的执行效率较C语言稍差,但是基于面向对象技术,程序健壮,本书借助C#语言评价图像密码算法效率。

第3章首先深入分析了AES算法的实现技术,并设计了其MATLAB和C#实现代码,接着,基于AES设计了两种图像密码系统,即AES-S和AES-D。AES-S系统是基于CBC模式使用AES加密大数据的标准结构。AES-D系统包含两个AES-S系统,实现了图像分块的双向加密处理。此外,附录B介绍了优化的AES图像加密MATLAB代码。

第4章在第3章的基础上,即以基于AES的图像密码系统(AES-S和AES-D系统)为例,从图像加密/解密速度、密钥空间、信息熵、统计特性(包括相关性分析与直方图分析)和敏感性分析(包括密钥敏感性分析、明文敏感性分析和密文敏感性分析)等方面讨论图像密码系统的性能评价方法,并在本书使用的计算机配置下给出“优秀最低速度标准”和“合格最低速度标准”的定义方法及其数值,以衡量图像密码系统的加密/解密速度。

第5章研究了一种典型的明文关联的图像密码系统(PRIC),其由两个明文无关的扩散模块和一个明文关联的置乱模块组成,采用了“扩散—置乱—扩散”的系统结构。通过设计PRIC系统的MATLAB程序和C#程序,详细分析了PRIC的安全性能,并得出PRIC是一款优秀的图像密码系统的结论。

第6章研究了一种加密算法与解密算法共享的新型图像密码系统EADASIC。在EADASIC系统中,加密算法(含密码发生器)与解密算法(含密码发生器)完全相同,因此,EADASIC系统输入为明文图像和密钥时,输出为密文图像;而输入为密文图像和密钥时,输出为还原后的明文图像。在详细介绍EADASIC系统结构和算法的基础上,设计了其MATLAB程序和C#程序,并详细分析了其安全性能。仿真结果表明,EADASIC系统(含密码发生器)的执行速度高于“优秀最低速度标准”,而EADASIC系统(不含密码发生器)的执行速度超过了30Mb/s。EADASIC系统是一种高速图像密码系统。

第7章介绍了一种重要的新型图像密码系统,即融合了公钥和私钥的新型图像密码系统PKPKCIC,现有的图像密码系统大都隶属于对称密码系统,即通信双方共享相同的私钥(即私密钥),加密处理和解密处理均由私钥出发生成密码矩阵,然后进行加密和解密处理。一般地,通信双方约定的私钥将在一定时间内持续使用,这使得已知/选择明文或已知/选择密文攻击成为可能。融合公钥与私钥的新型图像密码系统中,每次加密使用不同的公钥,公钥与密文一起通过公共信道发送到接收方,公钥借助私钥生成密码矩阵,密文图像对公钥极其敏感,从而可以挫败各种被动攻击,或者说,使得各种密码分析方法的效率与穷举密钥方法相当。在详细介绍PKPKCIC系统算法的基础上,设计了其实现的MATLAB程序和C#程序,详细分析了其安全性能(包括公钥敏感性分析),证实了PKPKCIC系统是一种优秀的图像密码系统。

本书是《混沌数字图像加密》(清华大学出版社,2016)的姊妹篇。在《混沌数字图像加密》中详细阐述了分级密钥图像密码算法、明文关联图像密码算法、明文关联置乱加密算法、加密与解密共享密码算法等,且算法均基于MATLAB语言实现。本书第5章基于《混沌数字图像加密》第5.3节的图像密码算法,并基于C#语言进行了算法实现。本书第6章和第7章是全新的图像密码算法。值得一提的是,本书使用的具体的混沌系统只是代表,可以选用任何能产生优秀伪随机序列的混沌系统替代本书中算法使用的混沌系统(密码发生器算法需要做相应的调整)。此外,书中的MATLAB程序、C语言工程和C#程序都是完整的代码呈现,本书使用巧妙的方法组织各个程序,使其成为一个层层独立可运行又逐层关联叠加完整的工程。

需要强调的是:全书仿真使用的计算机配置为Intel Core i7-4720HQ四核处理器(主频为2.60GHz)、32GB DDR3L 1600MHz内存、128GB SSD固态硬盘、Windows 10(64位)操作系统,使用的软件包括Eclipse C/C++(MinGW编译器)、Visual Studio 2017(社区版)、MATLAB R2016a(版本号:9.0.0.341360,64位)、Mathematica 11、Word 2017、Visio 2017和福昕PDF阅读器等。书中的算法均由MATLAB和C#语言实现,针对DES密码算法设计了C语言的实现代码,由于篇幅所限,书中的C#项目仅包含算法的加密与解密处理部分(算法性能分析可参考MATLAB代码)。感谢这些优秀的数学软件、程序设计软件和文档编辑软件。数学家C.Moler的Experiments with MATLAB和程序设计大师P.Deitel、H.Deitel父子的Visual C#2012 How to Program对作者也有很大的帮助。

本著作由国家自然科学基金(编号:61762043,61562035,61702238)、江西省自然科学基金(编号:20161BAB202058)和江西省教育厅科学技术研究项目(编号:GJJ160426)资助出版,特此真挚鸣谢。

特别感谢江西财经大学罗良清教授、江西财经大学钟元生教授、南昌大学周南润教授、华东交通大学汤鹏志教授、江西财经大学党建武教授、广东海洋大学叶国栋教授、湘潭大学李澄清教授,以及我的两位授业恩师洪时中教授与陈天麒教授,对我科研工作的指导和对本书出版的大力支持。我的两位授业恩师虽已退休多年,仍然时刻关注着科技发展和学术动态,是我从事科研工作的巨大精神支柱。感谢我的爱人贾晓天老师在烦琐的资料整理上为我节约了大量时间;感谢同事廖汉程博士、胡冬萍博士、唐颖军博士和吴文华副教授等在科研工作上的共识、讨论与支持;感谢清华大学出版社赵凯编辑的细致工作。

本书在回顾图像密码技术研究领域时引用了大量同行专家、学者的文献,这些参考文献均为该研究领域中颇有影响力且备受关注的研究成果,但是限于篇幅,相信仍有大量重要的文献资料被疏漏(特别是中文文献资料),敬请同行专家、学者谅解。

由于作者水平和能力有限,且该研究领域飞速发展,书中难免有不妥之处,恳请同行专家、学者和读者朋友批评指正。张勇 于江西财经大学枫林园2019年1月第1章绪论

通信研究的根本问题在于如何以近似的或准确的方式在时空的某[1]一点再现来自另一点的信息,这里的“信息”是指从通信双方已知的某个消息集合中选取的有价值或有意义的消息及其组合。例如,以汉语进行网络通信(例如借助于“微信”聊天工具),就是从汉字集合中选取了要表达的思想内容的所需汉字组合,而在进行通信前,不能预知对方将使用哪些汉字组合。Shannon指出,密码学和保密通信系统是通信理论的一个有趣的应用,同时,他指出真正意义上的保密通信系统在于信息加密,即通信信道是公有的和公用的,通信内容是透明的,甚至加密/解密算法也是公开的,只有密钥是私有的和受保[2]护的。本书研究的图像密码系统就是Shannon意义上的保密系统,可抽象地理解为从明文空间到密文空间的可逆变换,且明文空间与密文空间是相同的,均取为图像的有效像素值的集合。1.1 图像加密的研究进展

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

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

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

1998年,Baptista提出借助混沌系统的遍历性加密字符的算法[4],这里使用了一维Logistic映射,即x=bx(1-x),将状态空间n+1nn的取值域等分为256个区间,每个区间对应一个字符,对应关系作为密钥。此外,控制参数b和初始值x也作为密钥。明文由字符组成,0密文由表示迭代次数的整数组成。例如,从x开始迭代Logistic映射,0当迭代的状态值落入第一个明文所在的小区间时,其迭代次数为第一个密文;以此时的迭代值作为新的初值,继续迭代到状态值落入第二个明文所在的小区间时,新的迭代次数为第二个密文;依此类推(参考文献[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)。这两个指标是作为明文敏感性测试指标提出来的,现在也广泛用于测试密钥敏感性和密文敏感性。[8]

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

2006年,Pareek等提出使用80位长的“外部”密钥,而不是直[10]接使用混沌系统初值和参数作为密钥,进行图像加密的算法;[11]Pisarchik等尝试借助单向耦合映像格子进行图像加密的算法;Li等展示了选择明文攻击、选择密文攻击和已知明文攻击方法的典型应用

[12]方法;Gao等在Logistic映射基础上提出了一种新的混沌映射,并证[13]实了新映射可以产生随机特性更好的密码序列。

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

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

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

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

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

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

2012年,Zhu等提出了明文关联的密码序列生成方法,并改进了Tent映射,使其状态空间由(0,1)缩小为(q,1-q),q为小的正小数。例如,q=0.1;Akhshani等引入了量子Logistic映射进行图像

[46][47]加密;Kanso等提出了基于三维猫映射进行彩色图像加密的算法;[48]Wang等提出了魔方置乱和动态查找表方法扩散的图像加密算法;[49]El-Latif等提出了基于多项式混沌的图像像素位位置扰乱的算法;[50]Abdullah等引入基因交叉算法进行图像加密;Fu等使用Chirikov标准映射和Chebyshev映射进行图像置乱和扩散,扩散中同时使用了异[51]或运算以及求和取模运算;Ye等提出基于离散Arnold映射和行列循[52]环偏移的图像加密算法;Mirzaei等提出将图像分成4幅子图像进行[53]并行加密的算法。[54]

2013年,Song等构造了一种耦合映射格子并用于图像加密;[55]Zhang等结合超混沌和DNA编码序列进行图像加密;Zhou等组合Logistic映射、Sine映射和Tent映射成为一个参数可控系统作为密码发

[56]生器;El-Latif等借助量子混沌系统产生密码序列,并使用了提升小[57]波变换进行变换域置乱;Yang等进行了量子Fourier变换下的图像[58]加密预研工作;Ping等提出了使用二维元胞自动机的图像加密算法[59][60];Behnia等借助Jacobian椭圆混沌映射生成密码序列;Zhang等[61]2提出了一种明文关联的扩散算法;Tong分析了f(x)=0.5-4x的[62]混沌特性并用其产生密码序列;Zhou等设计了基于量子交换电路[63]的量子图像扰乱算法;Nandeesh等提供了多种扫描方式下的位位[64]置扰乱技术。

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

[75][76]处理;Wu等模拟水波纹实现了图像置乱与扩散算法。

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

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

[102][103]算法;Li等提出了基于混合元胞自动机的图像加密算法;Liang[104]等提出了仿射变换的量子实现版本,并将其用于量子图像加密;[105]Yang等提出了基于一维量子元胞自动机的量子图像加密算法;Liu[106]等提出了基于DNA编码S盒的图像加密算法;Ye等提出了基于[107]SHA3的块图像加密算法。

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

2010年至今,仍有大量图像密码系统方面的研究工作聚焦于混沌密码发生器的研究,可见密码序列在图像密码系统中的重要地位,现有的研究思路集中在发掘新型混沌系统上,这方面的未来研究工作可能需要深入考虑计算机的有限字长效应;一些学者在研究S盒构造方法及其非线性特性,这是一个重要的研究方向,S盒和查找表是实时的图像密码系统必不可少的组成构件,这方面的工作可能需要基于有限域进行深入研究;一些学者提出了基于DNA序列的图像密码系[100]统,这些工作正如Rostami等学者指出的,实质上是一种模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#语言作为研究工具,在图像密码系统的新型系统结构设计、新型密码发生器、新型加密算法设计、新型性能评价指标和图像加密应用技术等方面开展深入的研究,培养优秀的信息安全专业研究生,用更安全、更快速的图像密码系统服务于大众通信和国家安全。1.2 准备工作

全书仿真使用的计算机配置为Intel Core i7-4720HQ四核处理器(主频为2.60GHz)、32GB DDR3L 1600MHz内存、128GB SSD固态硬盘(+1TB机械硬盘)、Windows 10(64位)操作系统,使用的软件包括Eclipse C/C++(MinGW编译器)、Visual Studio 2017(社区版)、MATLAB R2016a(版本号:9.0.0.341360,64位)、Mathematica 11、Word 2017、Visio 2017和福昕PDF阅读器等。由于篇幅限制,书中给出的算法程序主要是MATLAB代码和C#代码以及部分C代码。1.2.1 常用的灰度图像

书中使用的图像来自USC-SIPI图像库(http://sipi.usc.edu/database/)。不失一般性,仿真实验仅使用了USC-SIPI中的4个灰度图像,即Lena、Baboon、Pepper和Plane,以及全黑图像和全白图像,这些图像的大小均为256×256像素,如图1-1所示。1.2.2 MATLAB R2016a数学软件

仿真使用了MATLAB R2016a数学软件(在实际应用中,发现版本R2016a比R2015a 和R2017a的运算速度都快一些),版本号为9.0.0.341360。除了Simulink和GUI工作方式外,MATLAB主要有命令行方式和程序代码方式。本书主要使用程序代码工作方式,即编写.m文件形式的函数和程序代码。图1-1 仿真实验使用的图像

下述程序绘制了图1-1(a)~(d)所示的图像直方图,如图1-2(a)~(d)所示。图1-2(e)、(f)分别为全黑图像直方图和全白图像直方图。图1-2 图1-1中各图像的直方图【程序1-1】 绘制图像直方图函数myDrawHistogram.m。【程序1-2】 绘制图像直方图程序pc001.m。

程序1-1为自定义的MATLAB函数myDrawHistogram,函数以function关键字开头(第1行),函数名作为文件名,输入和输出参数均为矩阵或向量,以end关键字结尾(第21行)。第2行将输入图像x转化为double类型数据,然后按列排列成一个列向量p;第4行将图像的直方图保存在y中,并绘制直方图;第12~16行设置直方图的坐标和样式;第18~20行为函数myDrawHistogram可调用的内部函数。“%%”表示该行为分隔线,“%”表示该行为注释。

程序1-2中,第2行的clear表示清除工作区的变量,clc表示清除命令窗口显示的命令,close all表示关闭图形输出窗口;第4~7行依次读入Lena、Baboon、Pepper和Plane图像;第9~12行依次调用myDrawHistogram函数绘制Lena、Baboon、Pepper和Plane的直方图,figure(1)表示创建标号为1的图形输出窗口。

由图1-2可知,这些图像的直方图具有明显的波动特征。一般地,由图像的直方图还原出原始图像是非常困难的,而当图像具有平坦的直方图时,还原操作几乎是不可能的。1.2.3 Eclipse C集成开发环境

Eclipse C/C++集成开发环境是目前C/C++程序设计的最佳开发平台,可以免费从官方网址(https://www.eclipse.org/)上下载安装包,接着,还要从网址(http://www.mingw.org/)上下载MinGW编译连接器安装包。然后,先安装Eclipse C/C++集成开发环境,再安装MinGW编译连接器。下面给出本书使用的C工程框架,后续算法只在该C工程框架基础上修改algr.c、algr.h和main.c文件即可。

启动Eclipse C/C++集成开发环境,选择菜单命令File|New|C Project,在弹出的对话框中输入工程名myCPFrame,选择MinGW GCC作为Toolchains,如图1-3所示。在图1-3中单击Finish按钮进入Eclipse工作窗口。图1-3 Eclipse新建工程对话框

在Eclipse工作窗口中,通过菜单命令File|New|Source File和菜单命令File|New| Header File可分别创建源代码文件和头文件。myCPFrame工程包含的文件见表1-1。表1-1 myCPFrame工程包含的文件【程序1-3】 includes.h头文件。其中,第5~9行包括了需要的系统头文件,第10~12行包括了用户自定义的头文件。【程序1-4】 zlxdatatype.h头文件。其中,第5~6行依次宏定义了8位无符号整型Int08U和32位无符号整型Int32U。【程序1-5】 main.c文件。其中,第4~5行依次宏定义图像的行数和列数;第8~10行依次定义保存明文图像、密文图像和解密后的图像的二组数组P、C和R。注意,这类变量必须定义为全局变量(作为局部变量时将导致C语言系统堆栈溢出!);第11行定义密钥K,实际密码算法中,应根据具体的算法要求变更K的定义形式,并初始化K。第13~30行为主函数main,第15行读入Lena图像数据到内存变量P;第18行调用加密函数zyEnc将P加密为C;第17、19行记录第18行的运行时间,第20行显示运行时间,单位为秒;第21行将密文图像C写入硬盘文件MyCipher.txt。第25行调用解密函数zyDec将C还原为R;第28行将解密的图像R写入硬盘文件MyRecover.txt。

在MATLAB中查看MyCipher.txt和MyRecover.txt文件,如程序1-6所示。【程序1-6】 MATLAB下查看C程序输出的图像数据文件。其中,第2行从文件MyCipher.txt中读入图像数据;第3行在标号为1的图形输出窗口显示密文图像C。第5~6行的工作原理与第2~3行相似,用于显示解密后的图像。【程序1-7】 imReadWrite.h头文件。其中,第6~7行依次声明了读图像函数imReadFile和写图像函数imWriteFile,函数中4个参数的含义依次为图像文件名imFileName、图像数据指针Arr、图像行数M和图像列数N。【程序1-8】 imReadWrite.c文件。其中,第4~19行为读图像数据文件函数,从图像文件imFileName中读出M行N列的图像数据,存放在二维数组Arr中。注意:这个函数要求图像数据文件中,元素间用一个空格间隔,行间用一个回车符分隔。第21~38行为写图像数据文件函数,将M行N列的二维数组Arr中的图像数据写入到文件imFileName。注意:第31行中,两个单引号间有一个空格。【程序1-9】 algr.h头文件。其中,第6~7行依次声明了加密函数zyEnc和解密函数zyDec,4个形参的含义依次为明文图像P或还原后的图像R、密文图像C、密钥K、图像行数M和图像列数N,这里密钥K的数据类型需根据具体的密码算法要求进行调整。【程序1-10】 algr.c文件。其中,zyEnc和zyDec分别为加密函数和解密函数,这里给出了一些测试代码,并没有实现具体的任务,需要结合具体的密码算法修改这两个函数。

在基于zyCPFrame工程框架进行图像加密/解密设计时,结合具体的密码算法修改main.c、algr.h和algr.c文件中相应的代码即可,因此,在后续的C工程密码算法实例中,将只给出main.c、algr.h和algr.c文件的内容。1.2.4 Visual Studio 2017集成开发环境

Visual Studio 2017社区版是微软公司最新的程序设计平台,注册之后可长期免费使用。打开Visual Studio后,进入菜单“文件|新建|项目”,弹出如图1-4所示的界面。图1-4 Visual Studio新建项目视图

在图1-4中,输入项目名称MyCSFrame,选择项目类型“Windows窗体应用(.NET Framework)”,单击“确定”按钮进入Visual Studio工作平台。项目MyCSFrame工作界面如图1-5所示。图1-5 项目MyCSFrame工作界面

图1-5中,项目MyCSFrame工作界面包含的控件及其部分属性见表1-2。表1-2 项目MyCSFrame工作界面中包含的控件及其部分属性续表

按图1-5和表1-2设计项目工作窗体,然后向项目中添加类MyImageData.cs和MyOneTimePad.cs,得到如图1-6所示的项目文件列表(称为解决方案资源管理器)。其中,MainForm.cs是由默认创建的Form1.cs更名得到的。图1-6 解决方案资源管理器

项目MyCSFrame实现的功能为:在cmbBoxSelectPlain(见表1-2)组合选择框中选择一幅明文图像名,共有6幅图像Lena、Baboon、Pepper、Plane、All-black和All-white可选;然后,单击Show按钮(图1-5)将显示选中的明文图像。在cmbBoxSelectMethod(见表1-2)组合选择框中选择一种图像加密算法,共有3种方法OneTimePad、TDES和AES可选;然后,单击Encrypt按钮(图1-5)将显示加密后的图像,并在txtEncTime(见表1-2)中显示加密所需的时间。接着,单击Decrypt按钮(图1-5)将显示解密后的图像,并在txtDecTime(见表1-2)中显示解密所需的时间。

项目MyCSFrame仅实现了OneTimePad加密算法,这里的OneTimePad加密算法类似于一次一密算法,需要提供两个双精度浮点数作为密钥,这两个双精度浮点数分别用作分段线性映射的初始值和控制参数。将分段线性映射循环迭代得到的状态值序列转化为8比特的伪随机字节数据流,与明文图像直接异或得到密文图像。项目MyCSFrame的运行结果如图1-7所示。在图1-7中,选择了Lena图像,密钥为0.65和0.541。图1-7 项目MyCSFrame的运行结果

下面给出项目MyCSFrame的代码。本书后续章节的密码算法只需要在项目MyCSFrame基础上添加新的密码算法类,并将新密码算法名添加到cmbBoxSelectMethod(见表1-2)组合选择框的Items属性中,然后修改文件MainForm.cs中的方法btnEncrypt_ Click和btnDecrypt_Click,添加相应的加密与解密方法的调用代码即可。因此,后续章节中,只需要给出新的密码算法类的代码。【程序1-11】 MainForm.cs文件。

在程序1-11中,第14~19行的方法MainForm_Load在窗体MainForm装入时(程序主界面显示前)被调用,第16~17行设置Encrypt和Decrypt命令按钮不可用,第18行调用方法KeyReadOnly将Secret Keys区域中的16个文本框设为只读属性。

第39行创建MyImageData类的实例myImageData;第40行创建MyOneTimePad类的实例myOneTimePad。

第41~52行为Show命令按钮的单击事件,当组合框cmbBoxSelectPlain为非空时,即选择了某个明文(第43行为真),第45~46行从硬盘中读入该图像,该图像存放在工程编译链接得到的可执行程序文件所在目录下的myImages子目录下,共有6幅明文图像,即Lena.tif、Baboon.tif、Pepper.tif、Plane.tif、All-black.tif和All-white.tif。第47行在picBoxPlain图像框中显示选中的图像。第50行使得Encrypt命令按钮可用。

第53~62行为组合框cmbBoxSelectMethod选择不同加密算法时触发的方法。如果选取了OneTimePad(第57行为真),则Secret Keys区域中的前2个文本框可以输入文本,如图1-7所示,依次输入了0.65和0.541,分别用作分段线性映射的初始值和控制参数。

第63~93行为Encrypt命令按钮的单击事件。如果当前选中的加密算法为OneTimePad(第65行为真),则第70~71行从文本框txtKey01和txtKey02中读取分段线性映射的初始值x0和参数p,当x0和p合法(第72行为真)时,第74行从对象myImageData中读取明文数据(myImageData对象中保存了明文、密文和解密后的图像),第75~76、79~80行统计第77~78行语句的运行时间,第77行调用动态方法MyRandomGen产生密码流,第78行调用方法MyEncrypt实现加密处理,第81行在文本框txtEncTime中显示加密耗费的时间,如图1-7所示,第82行将密文图像保存到对象myImageData中,第83~84行在picBoxCipher图像框中显示密文图像,第85行使Decrypt命令按钮可用。

第94~122行为Decrypt命令按钮的单击事件。其中,第107行生成解密用的密码流,第108行调用方法MyDecrypt进行解密处理,第111行在文本框txtDecTime中显示解密耗费的时间,第112行将解密后的图像保存到myImageData对象中,第113~114行在picBoxRecovered图像框中显示还原后的图像。【程序1-12】 MyImageData.cs文件。

程序1-12所示的MyImageData.cs文件中定义了类MyImageData,该类中定义了2个私有数据成员行数height和列数width(第8~9行),分别用于保存图像的行数和列数;第13~26的属性Height用于存取height,第27~40行的属性Width用于存取width。第10~12行依次定义

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载