APP下载

基于Henon映射和Lorenz系统的图像加密新算法

2017-12-11汪彦付媛媛

电脑知识与技术 2017年31期

汪彦 付媛媛

摘要:為了克服图像加密算法存在的密钥空间不大等安全缺陷问题,提出一种基于双混沌系统的图像加密新算法。该算法利用Lorenz系统和Henon映射分别产生混沌序列,根据后者产生的混沌序列元素的取值,在前者产生的混沌序列中分别挑选出用于置乱加密的密钥序列和用于替代加密的密钥序列。实验结果表明,该算法具有密钥空间大、对密钥非常敏感等加密性能。

关键词:图像加密;Henon映射;Lorenz系统;混沌系统

中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2017)31-0244-03

图像作为人类获取信息的重要来源,历来受到人们的重视。而在信息技术飞速发展的网络时代,各种各样的图像在复杂的网络环境中传输和存储,它们的安全性是迫切需要妥善解决的重要问题。而其中一些图像,往往与私人的隐私相关联,或者与国家安全等重要信息息息相关,这些图像的安全性就更加受到关注[1]。

对图像加密是一种可行的安全技术。结合混沌理论对图像进行加密,受到了研究者们的深入研究。为了克服以往一些算法密钥空间不大、安全性不高等弊端,本文提出一种基于Henon映射和Lorenz系统的图像加密算法,并通过实验验证了算法的性能。

1 混沌系统

混沌是在确定性的非线性系统中存在的貌似混乱无序、毫无规律的现象。混沌系统实质上是确定性的非线性系统,融内在的规律性与外在的随机性于一体[2]。混沌系统具有初值敏感性、有界性、随机性、确定性等特性,这些特性使其在密码学领域得到了广泛的应用。

本文选取Henon混沌系统和Lorenz混沌系统构建图像加密算法,下面简要介绍这两种混沌系统。

1.1 Henon映射

Henon映射[3]是一个二维二次非线性动力系统,其迭代方程如式(1)所示。

[uk+1=1-suk2+vkvk+1=tuk ] (1)

上式中,[k=0,1,2,3,…,n],[n]是一个非负整数。当[0.54

1.2 Lorenz系统

Lorenz系统是美国科学家洛伦兹在1963年所发现的一个三维动力学系统,其动力学方程可用一组微分方程组表示,具体如式(2)所示[4]。

[dxdt=a(y-x)dydt=cx-zx-ydzdt=xy-bz ] (2)

上式中,参数[a、b、c]可为任意正实数,而当取a=10,b=8/3,c=28时,系统呈现最佳混沌状态。式(2)中的Lorenz方程组可用式(3)所示的差分方程组来近似表示[5]:

[xk+1=xk+a(y-x)dtyk+1=yk+(cx-zx-y)dtzk+1=zk+(xy-bz)dt] (3)

对于上式,给定初始值[x0、y0、z0],并设置[dt]的取值,可采用迭代的方法求出一个迭代序列,该序列就是Lorenz系统的一个数值解。

2 基于Henon映射和Lorenz系统的图像加密算法

2.1 图像加密过程

本文提出的图像加密算法通过对原始明文图像像素点位置的置乱和像素点灰度值的替代而达到加密的目的,其基本过程为:首先,分别利用Henon映射和Lorenz系统生成两个混沌序列流;其次,根据Henon混沌序列的取值,在Lorenz混沌序列中挑选元素构成初始置乱序列流和初始替代序列流,并将这两个序列流进一步改造为置乱序列流和替代序列流;然后,根据原始明文图像和置乱序列流得到全局置乱图;最后,根据全局置乱图和替代序列流进行像素值的修改,从而得到最终的密文图像。

下面,分别对置乱加密和替代加密两个过程加以详细介绍。

2.1.1 图像置乱加密

像素位置的置乱的目的是为了消除或者降低图像中各邻接像素点之间的相关性,其方法就是按照某种方法将明文图像中的各像素的位置进行更改。本文提出的图像像素的置乱加密算法可分如下九个步骤进行。

Step1:将原始明文图像的像素灰度矩阵[Am×n](该矩阵是二维的)以行优先的方式,拉伸成一维序列[p={p1,p2,p3,…,pm×n}]。

Step2:给定密钥1,即式(1)的初始值[u0]、[v0]和参数[s]、[t],按照式(1)预迭代Henon混沌映射[K1]次,将结果弃用,用以消除暂态效应的不良影响。继续迭代式(1) [m×n]次,得到长度为[m×n]的混沌序列流[R={R1,R2,R3,…,Rm×n}],该序列流的元素均是二维向量,即[Ri=(ui,vi)]。

Step3:给定密钥2,即式(3)中的初值[x0]、[y0]、[z0]和参数[a、b、c],按照式(3)预迭代Lorenz混沌映射[K2]次,将结果弃用,用以消除暂态效应的不良影响。继续迭代式(2) [m×n]次,得到长度为[m×n]的混沌序列流[L={L1,L2,L3,…,Lm×n}],该序列流的元素均是三维向量,即[Li=(xi,yi,zi)]。

Step4:以混沌序列流[R]为基础,构造一个只包含0、1和2的整数序列流[R'={R'1,R'2,R'3,…,R'm×n}],[R'i(i=1,2,3,…,m×n)]的值由式(4)、式(5)和式(6)按顺序依次计算确定。

[H=mod(fix(ui×10),10)+mod(fix(ui×1000),10) +mod(fix(ui×100000),10) ] (4)

[H=H+mod(fix(vi×100),10)+mod(fix(vi×10000),10) +mod(fix(vi×1000000),10) ] (5)

[R'i=mod(H,3)] (6)

式中:[mod]表示整取求余;[fix]表示截尾取整。[ui]、[vi]分别表示向量[Ri]的两个分量。那么,[H]表示[ui]的小数点后的第一位、第三位、第五位的数位上的数字与[vi]的小数点后的第二位、第四位、第六位的数位上的数字的和值。

Step5:构造两个初始为空的序列流[Q]和[W],按照一定的规则选取混沌序列流[L]中的元素分别依次放入序列流[Q]和[W]中,直到[Q]和[W]的长度均为[m×n]为止。序列流[Q]将进一步改造得到用于像素位置置乱加密的序列流[Q'],序列流[W]则将进一步改造得到用于图像像素替代加密的序列流[W']。

具体选取规则:从头到尾依次扫描序列[L]和[R'],若[R'i=0],则将对应的[Li]的分量[xi]放入序列[Q]中,将[Li]的分量[yi]放入序列[W]中;若[R'i=1],则将对应的[Li]的分量[yi]放入序列[Q]中,将[Li]的分量[zi]放入序列[W]中;若[R'i=2],则将对应的[Li]的分量[zi]放入序列[Q]中,将[Li]的分量[xi]放入序列[W]中。据此将得到两个长度为[m×n]的序列[Q]和[W],即[Q={Q1,Q2,Q3,…,Qm×n}],[W={W1,W2,W3,…,Wm×n}]。

Step6:将由原始明文图像得到的一维像素灰度值序列[p={p1,p2,p3,…,pm×n}]按照由小到大的顺序排序,得到像素值递增序列[p'={p'1,p'2,p'3,…,p'm×n}]。

Step7:利用序列[Q]和[p'],计算得到用于置乱加密的序列[Q'={Q'1,Q'2,Q'3,…,Q'm×n}],其中元素[Q'i(i=1,2,3…,m×n)]由式(7)确定。

[Q'i=p'i×Qi] (7)

Step8:将序列[Q']按照从小到大的顺序排列,产生一个新的有序序列,并构造用于依次记录该新有序序列中各元素在序列[Q']中位置的新序列[T={T1,T2,T3,…,Tm×n}]。

Step9:利用序列[T]对序列[p={p1,p2,p3,…,pm×n}]进行置乱,得到置乱的像素值序列[B={B1,B2,B3,…,Bm×n}],其中元素[Bi]由式(8)确定。

[Bi=PTi,i=1,2,3,…,m×n] (8)

2.1.2 图像替代加密

图像替代加密阶段主要完成对置乱图像像素灰度值的修改,进一步增强算法的安全性。本文提出的图像像素替代加密的算法分为如下五个操作步骤。

Step1:根据图像置乱加密阶段Step5得到的序列[W={W1,W2,W3,…,Wm×n}],按照式(9)产生替代加密序列[W'={W'1,W'2,W'3,…,W'm×n}]。

[W'i=mod(mod(abs(fix((wi-fix(wi))*10000)),1000),256)] (9)

式中:[mod]表示整取求余;[fix]表示截尾取整;abs表示求绝对值。

Step2: 设序列[C={C1,C2,C3,…,Cm×n}]就是最终密文图像的像素序列,可按式(10)生成这一序列。

[Ci=Bi⊕W'i,i=1Bi⊕W'i⊕Ci-1,i=2,3,4,…,m×n] (10)

式中:[⊕]表示对参与运算的两个整数进行按位异或运算。在按照上式计算[C]时,一定要根据下标按递增的顺序依次计算。

Step3:将一维像素序列[C]转换为二维的[m×n]的矩阵,即为最终密文图像。

2.2 图像解密原理

图像解密过程与加密过程互为逆过程。针对上文提出的图像加密算法,对应的图像解密过程包括图像替代解密和图像置乱解密这两个过程,并且替代解密应在置乱解密之前进行,详细过程不再赘述。

3 实验仿真结果

在本文算法的仿真实验过程中,以8位的灰度图像作为实验对象,图像分辨率为[256×256]。 Henon混沌映射的初值和参数设置为:[u0=0.06],[v0=0.15],[s=1.4],[t=0.3]。Lorenzo混沌映射的初值和参数设置为:[x0=1.2],[y0=1.3],[z0=1.6],[a=10],[b=8/3],[c=28],[dt=0.005]。Henon混沌映射和Lorenz混沌映射均丢弃前1200次迭代计算的结果,即[K1=K2=1200]。仿真实验所用原始图像(即明文图像)和对应的加密图像(即密文图像)如图1所示。从图1(b)可直观得知,密文图像和原始图像之间已看不出任何联系。

4 加密算法性能分析

4.1 直方图分析

原始图像和加密图像的灰度直方图分别如图2(a)和图2(b)所示。该图直观展示原始图像的像素灰度分布呈现极度不均衡的状态,而加密图像的灰度分布式比较均匀的。这说明,图像的灰度统计特性被加密算法大幅度改动,加密前后图像之间的关联被减少甚至消除。

4.2 密钥空间分析

本文所提出的加密算法将Henon映射和Lorenz系统结合起来, [u0],[v0],[x0],[y0],[z0]共同构成算法的密钥。这5个参数都是双精度实数,如果双精度实数采用64比特表示,则算法的密钥空间为[264×264×264×264×264=2320]。同时,若将[K1]、[K2]和[s]、[t]、[a]、[b]、[c]等也视为密钥的组成部分,密钥空间则会进一步扩大。可见,本文提出的加密算法足以抵抗穷举攻击。

4.3 密钥敏感性分析

密钥敏感性是指对于同一明文,若分别采用两个仅有极小区别的密钥,生成的密文之间区别很大;同时,針对同一密文,使用两个仅有极小区别的密钥解密,得到的解密结果之间区别很大[6]。下面通过解密实验来分析本文算法是否具有密钥敏感性。

首先,利用密钥参数[u0=0.06],[v0=0.15],[s=1.4],[t=0.3],[x0=1.2],[y0=1.3],[z0=1.6],同时,其余参数分别为[a=10],[b=8/3],[c=28],[dt=0.005],[K1=K2=1200],进行解密实验,图5(a)即为实验所得解密图像,该图像与图3(a)完全相同。这就意味着利用正确密钥可将加密图像还原为原始图像。接下来,先后仅将[u0],[v0],[x0],[y0],[z0]中的一个参数增大[10-10],其它参数维持正确值,图3(b)、(c)、(d)、(e)、(f)即为所得错误解密图像。结合图3可知,只要稍微调整密钥的取值,所得解密图像与原始图像截然不同,无法从中识别有意义的信息。

(a)正确的解密图像;(b) [u0=0.06+10-10]的解密图;

(c) [v0=0.15+10-10]的解密图;(d) [x0=1.2+10-10]的解密图;

(e) [y0=1.3+10-10]的解密图;(f) [z0=1.6+10-10]的解密图

图像灰度值的均方误差[7]能以量化的形式描述解密图像和原始图像的差别,适用于加密算法密钥敏感性深入分析。设[P={pi,j}]和[P'={p'i,j}](其中,[i=1,2,3,…,m],[j=1,2,3,…,n])分别表示原始图像和解密图像的灰度矩阵,那么均方误差差[Ep,p']可由(11)式定义。

[Ep,p'=1m×ni=1mj=1n((pi,j-p'i,j))2 ] (11)

对于实验涉及的原始图像和各种解密图像,采用(11)式计算它们之间的均方差值,结果记录在表1中。表1和图3表明,本文提出的加密算法具有密钥敏感性。

5 结论

本文提出了一种新的基于双混沌系统的图像加密算法。该算法的特点在于:分别利用Henon混沌映射和Lorenz混沌系统生成两个混沌序列,将前者者生成的混沌序列进一步改造成一个只含0、1、3的序列,根据该序列中元素的值,选择Lorenz混沌序列中元素的一些分量分别作为图像像素置乱的序列流,选择另一些分量作为图像像素灰度值替代加密的序列流。该算法将两个混沌系统有机结合起来,增加了攻击者的破译难度,仿真实验结果证明,算法安全性能良好。

参考文献:

[1] 牛秀龄,陈浩.基于混沌置乱和小波变换的彩色图像加密方法[J].电脑知识与技术,2016,12(11):225-226.

[2] 王可.基于混沌系统的图像加密算法研究[D].合肥:安徽大学电子信息工程学院,2017:6-8.

[3] 黄东梅,耿霞,魏立斐,等.基于Henon映射的加密遥感图像的安全检索方案[J].软件学报, 2016, 27(7):1729?1740.

[4] 肖潇,胡春强,邓邵江.一种基于混沌的图像hash算法[J].计算机应用研究,2011,28(5):1904?1905.

[5] 晋建秀,郑宜峰,李叙琼.基于分块信息熵方差的图像置乱程度评估[J].华南理工大学学报:自然科学版,2013,41(3):8?14.

[6] 邓晓衡,廖春龙,朱从旭,等.像素位置与比特双重置乱的图像混沌加密算法[J].通信学报,2014,35(3):216-222.

[7] 涂立,张弛,贾丽媛.基于二维广义Logistic映射的圖像加密算法[J].控制工程,2014,21(2):279?282.