改进型Logistic混沌映射及其在图像加密与隐藏中的应用
2022-10-29刘公致王光义靳培培
刘公致 吴 琼 王光义 靳培培
(杭州电子科技大学电子信息学院 杭州 310018)
1 引言
随着计算机网络的快速发展,信息安全越来越受到人们的重视。图像加密作为一种信息保护的手段,通过加密可以最大限度地确保图像信息不会被窃密者容易的获取,从而确保信息的安全性。
将混沌系统应用到图像加密领域已经有很多的实例,大致分为两种类型:一是直接使用已有的经典混沌映射或者将经典混沌映射与其他算法结合,比如脱氧核糖核酸(DeoxyriboNucleic Acid, DNA)突变原理与Chen系统结合的算法[1];二是在原有的经典混沌映射基础上进行改进,将改进后的混沌映射应用到图像加密。
混沌图像加密的基础是混沌映射序列的优劣。针对已有经典Logistic混沌映射存在的问题,诸如映射范围小、非满映射、混沌参数范围小等,对于Logistic映射的改进方式大致分为两个方向,一种是将Logistic映射作分段处理,根据变量xn划分分段区间,获得了更多的映射区域[2]。另一种是对于生成的数值做复杂化处理。文献[3]将参数和变量相结合,来确定区间范围,扩大了分形参数范围。文献[4]提出将 Sine 映射和 Logistic 映射通过指数运算复合得到一个新型混沌系统—正弦函数Logistic(Sine-Exponent-Logistic, SEL)混沌系统,但这大大增加了系统的复杂性,运算量也增加。文献[5]也将Logistic映射和Sine映射耦合,将1维映射扩展到2维用于图像加密以获得更快的速度和性能。如果对Logistic映射加入取模函数,对改进映射所生成的序列进一步作了比特重新安排的处理,其遍历性、初值敏感性、伪随机性比未作处理前的序列更优越[6]。也可利用两个现有的混沌映射作为种子映射,余弦变换作为框架,生成一种新的混沌映射,并应用到图像加密算法中[7]。文献[8]提出了一种结合缠绕 Logistic 映射和动态 DNA 编码与运算的彩色图像加密算法。还有一些基于离散混沌和超混沌的图像加密算法[9,10]。一般高维混沌系统的改进方法是在原有的混沌系统基础上,加入非线性或线性控制器的方法来构造的。比如文献[11],采用在Lorenz系统的基础上改进提出的4维超混沌系统应用于图像加密。文献[12]在Cai构建的3维混沌系统的基础上加入两个新的控制器构造出一个5维的超混沌系统,应用于图像加密。
本文在对Logistic映射加以改进,提出一种性能良好的新型混沌映射,将该映射应用于图像加密,具有参数取值范围广、计算量相对较小等特点。并且将加密后的图像隐藏于与密文无关的载体图像中,以达到保护原图像的目的。
2 改进型混沌映射
Logistic混沌映射的表达式为
(3)迭代值的分布得到了很大的改善。
Lyapunov 指数是指在相空间中相互靠近的两条轨线随着时间的推移,按指数分离或聚合的平均变化速率。最大Lyapunov指数定义为
改进的Logistic映射的分叉图,Lyapunov指数图和直方图如图1所示。
Logistic映射分叉图只有µ取值在(3.5699456, 4]范围才达到混沌状态,并且留有许多周期窗口。从图1可以看出,改进的Logistic映射在α=5、参数µ在[–50, 50]范围时,在[0, 5]范围内都是满映射状态,并且混沌序列的值分布比较均匀。为了方便讨论,下文中参数α取值默认是1。
另外,若把初值xn-1看作yn,取α=1时,式(2)还可以改写成2维形式
表1为Logistic映射与改进后的Logistic映射的主要性能对比,可以明显看出改进后的Logistic映射在各方面都有明显的提升。
表1 Logistic映射与改进的Logistic映射比较
3 混沌系统应用于图像加密
整个加密算法分为3部分,一是利用改进的Logistic生成的随机序列对明文图像进行异或加密,二是对预加密的密文图像做置乱和扩散处理,三是把密文图像隐藏到另一载体图像之中,对其进行伪装。具体算法描述如下:
该算法的框图如图2所示的加密流程图。
3.1 图像预加密
首先是密钥取值。下文将会用到图像隐藏方法,为了方便从载图中提取出密文序列,本文将明文图像的行数值和列数值隐藏在密钥当中。为尽可能提高安全性,需要对明文图像的行数值和列数值作一定的处理,处理后的行数值和列数值分别作为混沌序列的两个初值密钥。有两种处理方法:
方法1,将明文图像的行数值或列数值转换成二进制数,然后再进一步转换成对应的格雷码形式,然后再将其转换成十进制数。
方法2,将明文图像的行数值或列数值转换成二进制数,假设其二进制形式为[p8, p7, p6, p5,p4, p3, p2, p1],其中p1是最低位。将该二进制数的倒数第4位和倒数第3位之间插值1,即在p4与p3之间插值1,再将该数值循环左移4位。插值的目的是防止循环左移后二进制的第1位是0,最后造成无法还原原数值。把最后生成的二进制数再转换成十进制数。注意,在解密时要将生成的二进制数的第1位数字1去除,再做位移处理。
为了方便,对方法1编号为1,方法2编号为2,并将其记录在参数µ中。为此可将µ分为整数和小数两个部分,把两种方法分别记录在整数部分的个位和小数部分的第1位,参数µ的其他位取值和µ的取值位数根据需要确定。
选取规格为500×500的Lena图作为明文图像,其行数值用方法1处理、列数值用方法2处理后得到的转换值分别为270和830,将其作为式(2)混沌映射的初值,即xn-1=270,xn=830。参数µ取小数点前后各两位,根据其取值方法得µ=11.23。对明文图像的预加密可分为以下3个步骤:
在Matlab中,利用式(6)对明文图像进行预加密仿真,得到预加密图像。
3.2 图像的置乱和扩散处理
置乱过程如下:
3.3 加密效果分析
分别从图像的相邻像素点相关性,直方图分析,密钥和明文敏感性测试,信息熵分析和复杂度几个方面分析图像的加密效果。
相邻像素点相关性。明文图像在水平、垂直、对角方向上的相邻像素相关性都较强。理论上,密文图像在各个方向上的相关性应该很弱,加密系统的加密效果才是理想的。加密前后图像的水平、垂直和对角方向的相邻像素点的散点图如图3所示。
通过对加密前后的图像3个方向上相邻像素散点图比较可以看出,在加密后,图像各方向相邻像素的相关性很弱,说明加密效果较好。也可以通过式(10)和式(11)计算图像的相关系数来观察相关性
其中,x和y代表两个相邻像素的值,N是图像中像素的总数,E是x或者y的期望,D是方差,c ov是协方差,r就是相关性。分别在图像的垂直方向、水平方向和对角方向随机选取1000个相邻像素点,通过式(10)、式(11)计算相关系数,计算结果如表2所示。由表2看出,密文图像的相关系数接近于0,说明加密后的相邻像素点的相关性很低。
表2 明文/密文图像在3个方向上的相关系数
利用图像的直方图,可以直观地看出一幅图像的像素值分布特征。直方图如图4所示,可见密文图像的直方图近似均匀分布。
密钥敏感性测试。对于密钥的细微变化,同一明文图像在密钥改变前后生成的密文也有很大不同。通常采用像素变化率(the Number of Pixels Change Rate, NPCR)和归一化平均变化程度(the Unified Average Changing Intensity, UACI)来衡量密文随明文像素值微小改变而变化的程度,其计算公式为
其中,M和N分别代表图像的长和宽,E和E′分别表示同一位置变化前后的像素值,D的值表示比较两个数值是否相同,当E(i,j)=E′(i,j)时,D(i,j)=0,否则D(i,j)=1。给定混沌映射初值是xn-1=270,xn=830和µ=11.23。分3次分别改变3 个变量的值为xn-1=270.001,xn=830.001和µ=11.231。每次只改变1项,其他变量值不变,对同一图像加密,分别比较数值改变前后的NPCR和UACI值,得到表3。从表3可以看出,计算出的数值接近理想数值99.6%和33.4%,说明该算法具有很好的密钥敏感性。
表3 密钥敏感性分析(%)
明文敏感性测试。攻击者通过观察明文微小变化引起解密的变化,找到图像明文与图像密文的相关性。如果原图像的微小变化能引起密文的很大变化,差分攻击的影响会减小。分3次分别只改变明文图像中的一个像素点的数值,然后用相同的密钥产生随机序列对改变后的明文图像进行加密,分别比较像素点数值改变前后NPCR和UACI的值。随机选取3个像素点:像素点1,坐标2行150列,将其数值改变成30;像素点2,坐标251行401列,将其数值改变成1;像素点3,坐标432行23列,将其数值改变成200。分别计算NPCR和UACI值,并对3次的数值取平均值,得到表4。由表4可以看出,得到的数值接近理想值,说明该算法具有较好的明文敏感性,能够很好抵御差分攻击。
表4 明文敏感性分析(%)
信息熵分析。信息熵是用来反映图像的随机性或不确定性的一个标准。如果一幅图像随机性越强,那么它的信息熵越接近数学理论值。信息熵的计算公式如式(14)所示
其中,p(Si)为信号Si的概率。n表示每个信号的二进制位数。因此,从理论上来讲,对于8位二进制表示的灰度图像,理想情况下密文图像的信息熵应该等于8,值越接近8则说明密文随机性越好。经过计算,该算法加密后的图像的信息熵为 7.9485,接近理想值。
时间复杂度分析。本文中的图像加密步骤主要包括图像预加密、图像置乱、预加密图像再加密和图像隐藏。设定图像规格是M×N。图像预加密部分生成混沌序列并且与明文图像做异或处理,所以其时间复杂度是O(2×M×N)。图像置乱部分也需要生成混沌序列,并置乱处理,则其算法复杂度是O(2×M×N)。预加密图像再加密只需做异或处理,所以其时间复杂度是O(M×N)。图像隐藏需要生成混沌序列并且密文图像与载图像素点为1:2的比例存放,则其算法复杂度是O(3×M×N)。综上所述,整个加密算法总的时间复杂度是O(8×M×N)。将本算法的复杂度与已有加密算法进行比较,得到表5。可以看出,本算法的时间复杂度略低于其他算法。由于本算法相较于其他算法又额外添加了图像隐藏部分,同样复杂度情况下,本算法性能更优。
表5 不同算法时间复杂度比较
4 密文图像的隐藏
经过加密的图像虽然能够很好地保护图像信息,但是加密的图像以乱码的形式展示出来,很容易引起他人的注意与怀疑。所以,为了尽可能地降低加密图像被破译的风险,需要对加密后的图像做隐藏处理。比较流行的图像隐藏方式是将密文图像隐藏在不带任何重要信息的载图中[17]。
最低有效位算法(Least Significant Bit, LSB)是一种典型的空域算法[18]。其算法原理是:将密文信息隐藏在数字图像二进制形式像素值的最后一位。只改变二进制形式像素值的最低位,整幅图像没有明显变化。这样,可把密文信息分拆开,嵌入到载体图像二进制形式像素值最低位。由文献[19]可知,从密文隐藏之后所得图像的大小以及载体图像像素点的利用率两方面考虑,最合适的隐藏方法就是将密文图像隐藏到载体图像8位二进制形式像素值的后4位。
具体图像隐藏步骤如下:像素位置嵌入密文数值,注意,只选取P31×mn中1~2MN的位置,选取一轮之后再从头继续选取,并不断判断该位置是否已经选取过,若选取过,则跳转到下一个位置,以此循环,直到所有密文数据全部放入到载图中,得到隐藏密文的图像P 3。
选取规格为3000×4000的图像作为载图,在Matlab中仿真,隐藏处理后最终得到的图像如图6所示。
5 图像解密
图像解密是整个加密过程的逆过程。首先根据密钥确定密文图像的行数值和列数值,进而从载图中提取出密文数据,然后根据生成的随机序列对密文数据排序得到最初密文数据如图7(b),再将密文通过加密的反过程,最终解密得到明文图像如图7(c)。
6 结束语
本文提出改进型的混沌映射,该映射具有双初值和双参数,混沌映射均为满映射,并且其映射范围可任意调控。将该映射应用于图像加密,使之具有广泛的密钥空间。该加密算法结合提出的混沌映射,使用了两次异或处理,加密时间短,能很好地抵御明文攻击。通过信息熵、相关性等分析后,实验数据表明加密算法具有很好的加密效果。最后又将该映射应用到加密图像的置乱隐藏中,整个隐藏过程并没有明文图像的数据丢失,并且隐藏前后载图大小不变,使得加密后的图像在获得了隐蔽性的同时,又进一步增加了图像的安全性。该隐藏算法的局限性在于只能将密文图像隐藏在自身大小两倍或者更大的图像中,适合应用在对于图像存储空间要求低的领域中。