用混沌迭代映射进行加密的算法,就是将一个一维迭代序列的混沌吸引子区间分成若干个等长的小区域,每一个区域对应于一个不同的字符。对明文字符进行加密的时候,首先进行迭代,直到迭代后所得的值处于该字符所对应的区域时,记录下迭代次数作为密文。由于其实现简单而且密文为整数,非常适于计算机通讯和网络传输,从而受到了众多研究者的关注。
一、基于混沌迭代映射的加密算法介绍
由于文件都是以二进制的比特流的方式存储,不失一般性,假定文件都是以ASCII编码的方式保存,考虑简单帐篷映射(Tent map)所描述的动力系统为:
控制参数r确定后,帐篷映射混沌吸引子的上界为r/2,下界为r(1-r/2)。在混沌吸引子区域[r(1-r/2),r/2]中选定一个区域[Xmin,Xmax](该区域也可包含整个吸引子),将其等分为N等分,得到N个等长的子区域S(i)=(Xmin+iε,Xmin+(i+1)ε)(0≤i≤N-1),子区域的长度为ε=(Xmax-Xmin)/N。引入一条与各子区域对应的序列P(i)(1≤i≤N-1),序列P(i)是由元素0和1组成的随机序列且0元素和1元素的个数相等,子区域S(i)和序列P(i)之间的元素一一对应。
以方程(1)的参数r以及子区域S(i)和序列P(i)之间的映射关系作为密钥。方程(1)的初始值X0为一随机数,用于代表当前的加密进程,X0对密码分析者是完全公开的。以要加密的明文为“HUST……”为例,其ASCII码为“01001000010101010101001101010100…”。在每一次加密进程中,我们采取如下加密方式:
(1)首先产生一随机数X0∈(0,1),用以代表当前的加密进程。
(2)在方程(1)中根据初始值X0和密钥r,开始迭代。
(3)去掉最初的N0次过渡态。对于明文的第一个比特“0”,方程(1)继续迭代,当迭代结果进入到子区域S(i),且该子区域所对应的序列P(i)=0,记录下当前的迭代次数C1作为密文,总的迭代次数为N0+C1。对于明文的第一个比特“1”,方程(1)继续迭代,当迭代结果进入到其中某一子区域S(i),该子区域所对应的序列P(i)=1,记录下当前的迭代次数C2作为密文,总的迭代次数为N0+C1+C2。同上,对所有的明文消息进行加密,得到密文序列C1,C2,…,CN。
解密过程与加密过程类似,接收方通过随机数X0以及密钥r,利用方程(1)进行迭代,即可得到相应的明文。
二、仿真结果与分析
假定要加密的明文为“HUST”,仿真结果如图1所示。
横坐标表示要加密的明文,纵坐标表示加密的密文。混沌吸引子区域[r(1-r/2),r/2]中选定的区域[Xmin,Xmax]为[0.2,0.8]。图1为我们对密钥r作微小改变后的加密结果(10-14),随机数X0=0.20070918091856,密钥r的取值见图1右上角。
由仿真结果可见,密文对密钥非常敏感(10-14),这对算法的安全性是至关重要的一个方面。同时,由于在我们的算法中采取动态加密的技术,即使是同一明文在不同的加密进程中,得到的是完全不同的密文,密文对代表加密进程的随机数x0的变化同样非常敏感,从而有效地防止了采用的通过已知明文攻击方式。在加密效率方面,由于我们采取了直接对明文的ASCII码进行加密,从而使加密速度大为提高。
事实上,由混沌序列的遍历性可知,对每一个明文字符,在我们所采取的算法中混沌序列的迭代次数是(2/256)×8。
文中以一维Tent映射为例进行了仿真,该算法同样适用于高维的混沌系统,利用高维混沌吸引子所具有的丰富的密钥空间将更进一步增强加密算法的安全性,具有很强的一般性。
小知识之ASCII
ASCII是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语和其他西欧语言。它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。