APP下载

双混沌和广义Gray码相融合的图像加密算法

2018-08-20谢国波

计算机工程与应用 2018年16期
关键词:明文加密算法密文

谢国波,朱 柳

XIE Guobo,ZHU Liu

广东工业大学 计算机学院,广州 510003

School of Computer,Guangdong University of Technology,Guangzhou 510003,China

1 引言

随着互联网技术的飞速发展,人们的日常工作以及生活学习开始越来越依赖于网络。大量信息开始以数字形式进行传播和存储。其中,图片信息因其直观、生动形象的表现形式,受到了人们的喜爱与推广。与此同时,由于互联网的开放环境,网络上传输的一些涉及个人隐私、他人利益、甚至国防军事等的数字图像信息必须采取相关密码学算法可靠加密处理后再进行传播。数字信息传播的安全问题一直受到信息安全或者相关领域学者们的广泛关注,是一个值得深入并长期研究的课题。

图像信息由于自身数据相关性高、数据冗余度强、数据量大等特点,传统的针对文本信息的密码学算法,比如非对称加密算法(RSA)、数据加密标准(DES)、国际数据加密算法等,并不完全适合图像加密。而研究结果表明,混沌[1-2]因其初值敏感性、无周期性、伪随机性、混沌序列的遍历性等密码学特性,使其大量被应用于图像加密中[3-6]。目前基于混沌图像加密算法普遍都采用像素位置的置乱或像素值替换或者两者综合。一些具有代表性的方法,如基于一次一密、位排列、DNA规则、数学模型等的混沌图像加密算法也同时被学者研究公开。

文献[7]提出的混沌图像加密算法基于感知模型,但是由于其密文的不均匀分布,导致该算法不足以抵抗统计攻击。文献[8]提出的图像加密算法基于比特和高维混沌系统,虽然该方法满足抵抗统计特征攻击的要求,但是该算法加密所需代价大,效率也相应降低。文献[9]提出的混沌图像算法采用一次一密钥,该算法虽然形式简单并且具有较高效率,但是不足以抵抗选择明文(密文)攻击。文献[10]提出的混沌图像加密算法基于DNA序列,然而该算法的加密后像素点相关性较强,存在较大的方差。文献[11-12]中邹建成、宋莉莉等人对广义Gray码及其在数字图像加密中的应用进行了分析阐述,证明了广义Gray码在图像加密算法中的应用前景。

本文提出了双混沌和广义Gray码相融合的图像加密算法,通过该算法进行加密的密文图像不仅与明文紧密关联,也起到了良好的置乱扩散效果。实验结果表明,本算法具有良好的统计性能、足够大的密钥空间、明文(密文)敏感等优良性能。

2 算法原理

本文加密算法的整体原理如图1(a)所示。

图1 加密/解密流程

2.1 混沌系统及广义Gray码

2.1.1 Kent混沌映射

Kent映射是一个性能很好的混沌系统,其映射关系为:

式(1)中,S为混沌系统的控制参数。当x∈(0,1),S∈(0,1)时,式(1)具有一个正的Lyapunov指数,此时Kent映射将处于混沌状态,由此初始条件x0在Kent映射中产生的序列具有很好的自相关性、互相关性和平衡性等伪随机性能。同时,Kent映射对初始条件极为敏感,即使初始条件发生极其微小的变化,其产生的随机序列也将会完全不同。利用这一特性,Kent映射被良好地运用在混沌图像加密中。

2.1.2 Logistic混沌映射

Logistic映射是一个经典的一维离散混沌动力系统,它的诞生来源于人口统计,其具体规律可用如下数学公式(2)定义:

其中,μ为系统非线性强度的参数,取值范围为0≤μ≤4;k为混沌系统的迭代次数;xk为Logistic混沌系统的初始值,取值范围为0<xk<1。当3.569≤μ≤4,该系统映射处于混沌状态,此时对初值的微小改变都会导致系统产生完全不同的非收敛、非周期性的序列。

2.1.3 广义Gray码

(1)对于任意的非负整数u,其二进制码记为u=(upup-1…u0)q,令

其中i=1,2,…,p,则可得到一个二进制表示的整数g(u)=(gpgp-1…g0)q。

上述变换称为Gray变换g(u)称为u的Gray码,其中运算“⊕”为模2加法。

(2)对于非负整数u,其q进制码记为u=(upup-1…u0)q,定义如下变换:

其中,q≥2为正整数;aij为整数,i,j=1,2,…,p-1。当系数矩阵的行列式|(aij)|与q互为素数时候,则该变换符合u的广义Gray变换,g(u)=(gpgp-1…g0)q称为广义Gray码。

2.2 加密与解密原理

本文所提出的数字图像加密基于典型的“置乱-替换”结构,首先对原始图像进行分块,接着通过Kent映射进行重排列,然后再次利用Kent映射产生一维混沌序列对重排列后的图像进行全局位置置乱,接下来再采用Logistic映射和广义Gray码对位置置乱后的图像像素值进行替换完成整个加密过程。

2.2.1 图像的位置置乱

像素位置置乱的目的是通过打乱图像像素点原始位置来破坏相邻像素点之间的相关性。其具体的实施步骤如下:

首先对图像进行分块,假设待加密图像I的大小为a×b,分块的具体步骤为:

步骤1将图像I的像素矩阵按照行和列进行等长划分,设置划分的大小分别为j和k,其中:

具体的划分规则如下:

规则1当mod(a,j)=0,mod(b,k)=0时,图像I则被划分为j×k块,每块的大小为

规则2当mod(a,j)≠0,mod(b,k)=0时,图像I则被划分为两类不同的块,一类块大小为,另一类块的大小为

规则3当mod(a,j)=0,mod(b,k)≠0时,图像I则被划分为两类不同的块,一类块大小为,另一类

规则4 当mod(a,j)≠0,mod(b,k)≠0时,图像I则被划分为四类不同的块,一类块大小为一类块的大小为,一类块的大小为最后一块的大小为mod(a,j)×mod(b,k)。

步骤2对分块进行重新的组合排列。

首先将Kent映射迭代1000次以消除暂态效应,从第1001次开始记录产生长度为j×k(用规则1的分块个数进行示例说明)的混沌序列H={h1,h2,…,hj×k}。对混沌序列进行升序排列,记录排序后的各元素在原始序列H中的位置,生成新的序列利用序列H′对分块进行置乱。

假设分块为B={b1,b2,…,bj×k}。其置乱规则按照如下公式:

置乱前后如图2所示。然后对分块后图像的像素点进行全局置乱。

图2 分块前后的排列对比

步骤1对待加密的图像明文按照行(列)优先的顺序扫描,转化成为长度为a×b的一维序列I={i1,i2,…,im×n}。

步骤2对明文图像的像素值sum进行求和运算,分别运用式(7)和式(8)求出混沌系统的混沌参数S和混沌系统的迭代次数c:

步骤3结合步骤2得出的混沌参数S,对混沌系统设置一个初始值x1,将参数S和初始值x1代入到式(1)中。Kent映射迭代c次以消弱暂态效应的不良影响。接下来再迭代a×b次产生一个长度为a×b的混沌序列L={l1,l2,…,la×b}。运用排序算法对混沌序列进行升序(降序)排列L′={l′1,l′2,…,l′a×b},计算序列L中的各值在序列L′中的位置,从而生成一个记录顺序序列中各元素在原序列L中新的位置的序列w={w1,w2,…,wa×b}。

步骤4利用序列w来置乱明文图像I,置乱的依存规则为l′i=lwi,置乱后的序列记录为:

2.2.2 像素值的替换

此阶段使用Logistic映射和二进制的广义Gray码对位置置乱后的图像I′进行像素值替换。

步骤1设定混沌系统的初始值x3、x4,以及系统参数λ。将上述系统参数和初始值代入Logistic映射中,迭代1000次以消除暂态效应,从第1001次开始进行记录,生成两个长度大小为a×b的混沌序列:

M={m1,m2,…,ma×b},N={n1,n2,…,na×b}

步骤2将序列M中的各序列值代入式(9)进行转化,让其值域控制在[0,255]之间,新产生的序列更改为T={t1,t2,…,ta×b}。

步骤3对序列N中的序列值进行升序(降序)排列,生成序列N′={n′1,n′2,…,n′a×b},记录下序列N′中的值在原始序列N中的下标值,生成新的序列Y={y1,y2,…,ya×b}。

步骤4将位置置乱后的图像各像素值I={i1,i2,…,ia×b}与序列T进行异或操作,其异或公式如下:

步骤5将步骤4异或后所得的像素点的像素值按照广义Gray码的替换公式(11)和(12)进行替换。当u=(un-1un-2…u0)2时,其对应广义Gray码。

通过变换产生一个新的二进制编码:

g=(gn-1gn-2…g0)2

以上步骤即为加密的全部过程。

2.3 解密原理

解密过程即为加密过程的逆过程,依次对替换和置乱阶段进行逆向操作处理。

首先,将密文图像V按照行(列)优先进行展开生成一维序列,将序列中的各个点的像素值按照广义Gray的生成规则进行运算得到序列V′,再对序列V′按照公式进行异或,得到位置置乱后的序列。最后对置乱后的序列进行反置乱即可得到明文序列P,将得到的一维序列转化为二维矩阵即为加密前的明文图像I。

3 实验结果及性能分析

3.1 算法仿真

本文仿真过程采用的图像为经典的lena灰度图像,其大小为256×256。其中加密系统的初始密钥有Kent映射的初始值x1=0.3467832426,x2=0.5467832426和Logistic混沌映射的初始值x3=0.2467832426,x4=0.4467832426。其中Kent映射的控制参数由明文图像自身决定,Logistic映射的控制参数自行进行设定,本次仿真实验将其设置为λ=3.9467832426。其加密前后的效果图对比如图3。

图3 明文与密文图像

3.2 算法的统计特性分析

3.2.1 直方图分析

直方图即为图像的灰度值分布图,它所展示的是图像像素值的分布情况。

图4的灰度直方图中展示的分别为原始图像和加密后图像的直方图。从图4(a)中可以明显发现,加密前的直方图分布起伏较大且不均匀分布,而运用本文算法进行加密后的直方图图4(b)则呈现均匀分布。

为了进一步确定算法密文直方图均匀性,采用式(13)计算并分析。其中z是密文图像各灰度级别下的像素统计值,(zi,zj)分别是灰度值为i和j的像素统计值。采用不同密钥对图像进行加密处理,然后对产生的密文计算方差。计算所得的方差值越小,则表示生成的密文直方图越均匀,所产生的直方图在直观上越平滑。

表1 密文直方图的方差

图4 灰度直方图

本文选取原始密钥(x1,S,x2,k,μ)作为初始密钥key1,通过改变原始密钥中的某一个参数值来分别产生多张密文。实验过程中另外引入256×256的Cameraman图像与Lena图像进行对照。与文献[5]相比,结果如表1所示。通过对以上不同的密文图像的实验分析,发现加密后的密文平均各灰度级的像素数目在70,方差在5000上下,而其明文图像的方差值则为密文的10倍以上。

3.2.2 相邻像素相关性分析

对加密前后的图像分别选取2200组的相邻像素点来进行分析,公式如下:

其中,rx,y为相邻像素点的相关系数;x和y分别代表相邻像素点像素值。将选取的2200组明文和密文的像素点运用关系图表示出来。原始图像图5(a)显示出来的像素点表明水平相邻点的像素值比较接近。密文图像图5(b)显示出来的像素点表明水平相邻点的像素值差异明显。运用公式分别对明文图像和密文图像的水平、垂直、对角所有点的像素值相关性进行计算,并且与文献[13-15]进行比较,其具体结果如表2所示。

图5 明文/密文的相关性

表2 密文图像相关性系数

对比加密前后相关性系数,加密后的图像的像素点相关性接近于0,相邻元素之间基本没有相关性。而明文图像的相关性接近于1,说明该算法很好地抵抗了统计分析,具有良好的加密效果。

3.3 经典攻击分析

经典的攻击方法有已知明文攻击、唯密文攻击、选择明文(密文)攻击[16-17]。

明文攻击是指在获得明文的情况下破解算法的概率。唯密文攻击是指仅知道密文的情况下破解算法。而选择明文(密文)攻击所指的是攻击者通过选择一组标定的明文(密文),通过对该加密系统的使用来同步获取对照的密文(明文),对密文进行分析获取中间密钥,通过获得的中间密钥从而完成对明文的解密。

目前混沌加密算法普遍采用的是基于位置置乱和像素替换的加密过程。由于Logistic映射参数空间有限,而且在计算机有限精度下容易出现动力学退化,因而会被破解,而针对该过程所常用的攻击方法就是选择明文和选择密文攻击。这里最常见的攻击思路为选择一个与密文图像相同大小的像素值全部为0的图像进行破解得到中间密钥。然后选取该图像的某个像素点进行标记,通过对标记像素点的追踪记录,获取该像素点的初始位置,破解明文图像。

但是以上破解方法针对本文所描述算法是不可行的,在像素的位置置乱阶段,无论是分块阶段还是全局置乱阶段,其Kent混沌映射的参数都是由明文图像的像素总和Sum和像素大小a、b共同决定的,而上述方法中所运用的图像像素值为全0,从而使得其产生的混沌序列也不尽相同,无法取得映射参数,因此直接导致的结果就是无法获得中间密文。另外,在像素值替换阶段才采用Logistic映射,利用预设的初始密钥x3,通过x3产生的混沌序列进行排序生成新的下标序列,利用该下标序列进行像素值之间的异或操作。在未获得准确x3的前提下,攻击者是无法确定中间密文的,因此对于选择密文攻击无效。综上所述,本文设计的图像加密算法能够很好地抵抗以上攻击方式。

3.4 抗差分攻击性能分析

3.4.1 密钥敏感性分析

密钥的敏感性指的是当密钥发生极其微小变化时,对图像的加密(解密)也会产生显著影响。在对明文图像进行加密时,将Kent映射或者Logistic映射的初始值进行微小改变,固定其他的参数和系统初始值,最终解密也无法获得正确的明文图像。实验仿真中,将初始值x1=0.3467832426变为x1=0.3467832427。图6(a)为解密后的图像。同等情况下,改变x3,图6(b)为解密图像。由上可知,该加密算法具有良好的密钥敏感性。

图6 改变密钥后的解密图像

3.4.2 明文敏感性分析

明文的敏感性指的是明文的变化对密文的影响比重,它是衡量一个算法抵抗差分攻击性能的重要指标。在常用的攻击方法中,广泛采用的是在微小改变明文的情况下来分析密文变化特征,从而找出规律破解密文。本算法由于在密钥的生成过程中引入了像素和以及图像二维矩阵的行数和列数,使得密钥与明文密不可分。

常用像素改变率(NPCR)和归一化平均改变幅度(UACI)来衡量密文对明文的敏感性。令I1和I2分别为两个明文图像加密后的密文图像,其中I1是图像I的加密图像,I2是图像I在某个像素点发生变化后的密文。设两幅密文图像在相同位置(i,j)的像素值分别为p1(i,j)和p2(i,j)。当p1(i,j)=p2(i,j)时,定义H(i,j)=0;若p1(i,j)≠p2(i,j),定义H(i,j)=1。

NPCR与UACI的计算公式分别为:

根据上述原则,在lena图像中任取一点对其像素值进行改变,例如在位置(11,29)处,将其值由47变为48,根据式(18)和(19)可以计算出NPCR=99.61%,UACI=33.46%。因此,该算法满足密文图像对明文图像微小变化的敏感性,足以抵抗攻击者的差分攻击。

3.5 密钥空间分析

足够大的密钥空间是用来评价一个算法能否抵抗穷举攻击的基本标准。在本文所描述的算法中,双混沌系统的迭代初始值以及Logistic映射的参数都可以用来作为密钥。在64 bit计算机中,每个double类型的有效位能达到16位。这样,即使攻击者采取每秒亿个密钥进行穷举攻击,所需要的时间也远远导致其不可实现性。如果再把迭代次数、分块等加入密钥中,密钥的空间将会更加巨大,所需要的时间也更长。因此,本文算法的密钥足以抵抗穷举攻击。

4 结束语

本文提出的是双混沌和广义Gray码相融合的图像加密算法,该算法采取经典的置乱-替换结构进行加密。本文算法不仅保留了“置乱-替换”算法原本的优点,同时也采取相应技巧避免受非法攻击。本文算法所具有的特点如下:

(1)在进行像素置乱过程中,不同于传统大多数算法,本文算法首先对图像进行分块处理,然后再对重排列后的图像进行全局置乱,使得算法置乱效果更好。

(2)Kent映射的系统参数由明文图像的自身特性来决定。因此不同的明文图像所采取的控制参数也不尽相同,从而生成的混沌序列也完全不同,使得算法具有抵抗选择明文(密文)能力。

(3)利用Logistic生成的混沌序列,同时采取对应的数学公式来对像素值进行扩散操作,不仅使得像素值的替换具有较好随机性,同时也一定基础上增加了系统抗攻击的能力。

(4)利用广义Gray进行二次扩散,进一步提高加密图像的安全性。

实验仿真结果表明,本文算法不仅具有良好的加密效果,而且具备较好的安全性。

猜你喜欢

明文加密算法密文
一种支持动态更新的可排名密文搜索方案
基于模糊数学的通信网络密文信息差错恢复
奇怪的处罚
一种基于密文分析的密码识别技术*
奇怪的处罚
基于小波变换和混沌映射的图像加密算法
四部委明文反对垃圾焚烧低价竞争
云存储中支持词频和用户喜好的密文模糊检索
Hill加密算法的改进
对称加密算法RC5的架构设计与电路实现