基于Rijndael的图像加密系统的研究与设计

2010-01-29 02:26珂,殷
苏州市职业大学学报 2010年1期
关键词:实值二进制解密

陈 珂,殷 凡

(苏州市职业大学 计算机工程系,江苏 苏州 215104)

美国国家标准技术研究所(NIST)选择Rijndael算法作为美国政府加密标准AES(the Advanced Encryption Standard)的加密算法,Rijndael算法由比利时计算机科学家Vincent Rijmen和Joan Daemen开发,它以其优秀的性能和抗攻击能力,成为新一代的加密标准AES.该算法易于实现,性能稳定,密钥灵活性强,安全性高,可以有效抵抗强力攻击、差分和线性密码分析,具有良好的安全性和高运行效率.但是,该算法目前主要用于一维数据流的加密,对图像的加密还存在局限性[1-3].

本文针对数字图像数据量大、冗余度高、像素间相关性强的特点,基于Rijndael算法原理并结合混沌序列伪随机数的特性应用到图像置乱中,主要利用Logistic映射生成的密钥流作为Rijndael的密钥,以增强抗破译性,同时有Rijndael的安全性作保证,使得加密后的图像抗攻击性得到进一步地提高.

1 伪随机数序列

混沌序列是一种性能优良的伪随机序列[4],具有对初始条件和微小扰动的高度敏感性、非周期性和类似噪声等特性.Logistic 映射是非常简单但得到广泛应用的动力系统,它的一种定义形式如下:

式中:0≤λ≤4称为系统参数,当3.57<λ≤4时,Logistic映射工作处于混沌状态.对映射方程(1)进行若干次迭代,产生基本实值混沌随机序列{Xn,n=0,1,2,…,0<Xn<1}.

定义一个域值函数f(),将Logistic映射经过若干次迭代后生成的实值混沌随机序列{Xn}转化为二进制混沌随机序列{Sn},Sn= f(Xn),按如下方法进行分析:

(1) 对实值混沌随机序列{Xn}中的每个实值Xn都截取前L位二进制数,舍弃后面的所有位,满足1< L≤p.则Xn表示为由L位二进制数组成的整数.

(2) 取{Xn}第κ位bκ(bκ的取值为0或1)二进制数组成一个新的序列{Sn}.

Logistic映射的结构简单,只需对映射方程(1)进行若干次迭代,就可以产生基本实值混沌序列,用函数f()对其进行转换后,得到的二进制混沌随机数序列{Sn}可用作密钥.

2 基于Rijndael算法的图像置乱算法

本文将Rijndael算法中的密钥异或操作、S-盒变换[5]、行置换和列置换应用到数字图像上,所用的种子密钥由伪随机数发生器来生成,轮密钥由密钥扩展方案得到.并对行列置换操作进行改进,结合混沌随机数序列的图像加密技术,采用基于混沌序列的行列置换,以便增强其安全性.

2.1 算法思想

本文算法思想是利用Rijndael算法中的密钥异或变换来实现图像像素的灰度值或RGB值的变换;利用S-盒变换来完成图像像素的替代;采用基于混沌随机数序列的行移位变换和列混合变换来完成图像像素的置换.

2.2 算法步骤

设一幅数字图像的大小为M×N,可用矩阵A=(aij)M×N表示,其中aij(i=0,1,…,M-1,j=0,1,…,N-1)表示图像在第i行第j列像素处的灰度值,aij∈{0,1,…,255}.将图像分成(M/4)×(N/4)块,如果图像矩阵的行值M或列值N不是4的倍数,不足的位用0值来填充,以确保分块.

设置伪随机数发生器的迭代初值X0、系统参数λ、参数L和参数K,得到二进制数Kt(t=0,1,…,(M×N ×8)-1)作为种子密钥进行密钥扩展,密钥用w[][N*8]存放.

第一步:按顺序取出w[][N*8]中的M行密钥,按字节与待加密图像中的像素aij(i=0,1,…,M-1,j=0,1,…,N-1)中的RGB三个分量异或得到新的像素bij((i=0,1,…,M-1,j=0,1,…,N-1).可以用下面的C++代码来描述:

第二步:利用查表进行S-盒变换.将bij中的RGB三个分量分别作替换操作,即前4位作为S-盒列坐标,后4位作为S-盒行坐标,用S-盒行列坐标处的值替换bij中的RGB三个分量得到新的像素值cij((i=0,1,…,M-1,j=0,1,…,N-1).可以用下面的C++代码来描述:

第三步:设置迭代初值X0'、系统参数λ'、参数L'和参数κ'(从第二次执行,只修改参数κ'的值为κ'=(κ'+1)%L',X0'、λ'和L'的值不变),用伪随机数发生器生成一个整数值混沌序列PPt(t=0,1,…,M-1,M,…,M+N-1),作为图像像素进行横向和纵向移动的位数.将图像的每行像素cij依次循环左移PPt(t=0,1,…,M-1)个位置变换到该行的另一位置.可以用下面的C++代码来描述:

第四步:将图像的每列像素cij依次向下循环移动PPt(t= M,…,M+N-1)个位置变换到该列的另一位置.列混合变换的方法与行移位变换的类似,这里不再赘述.

3 原型系统的实现

本系统使用Visual C++作为开发语言.下面以BMP格式图像加密为例来部分介绍该系统的运行过程:用户点击图像加密界面中的“浏览”,选择待加密的文件,输入随机数发生器的初始条件,如图1所示,将用于随机数发生器初始条件输入的对话框定义为一个Initializtion类,只要系统中需要输入随机数发生器的初始条件,就创建一个该类的对象来获取输入的初始条件值.将用于显示图像文件的对话框定义为一个Displaydlg类,当系统完成了图像文件的加解密操作后,需要查看图像文件的加密或解密效果时,可以创建一个该类的对象,用于显示加密图、解密图和原始图像,图2为加密后原始图像的效果显示.

图1 加密过程初始条件的输入

图2 加密图像的效果显示

在图像解密时,系统通过创建一个Initializtion类对象来获取用户输入的随机数发生器初始条件值,传递给RandomNumber类对象,生成密钥随机数序列和整数值随机数序列,采用本算法中的解密算法对加密后的图像进行解密操作.

4 算法安全性分析

将logistic系统生成的实数值混沌序列转换为二进制混沌序列的量化过程是不可逆的,这个特点对安全性非常有利,因为密码分析者无法根据截取的密文重构产生密钥序列的logistic系统的动力学模型.另外,把参数L和κ一起作为初始条件,即把(X0,λ,L,κ)作为初始条件,则攻击密钥序列成功的概率比只把X0和λ作为密钥时攻击成功的概率更小.这就增加了穷举密钥攻击搜索分析来进行解密的计算复杂度,从而保证了图像信息的保密性.

5 结 论

提出了一种基于Rijndael和混沌序列的图像置乱加密算法,它充分利用logistic序列具有的形式简单,对初始条件和参数的敏感依赖性等特性,结合Rijndael算法中的密钥异或操作和S-盒变换对图像进行加密.通过增加作为初始条件的参数量,从而增加了穷举密钥攻击搜索分析来进行解密的难度,保证了图像信息的保密性.有Rijndael的安全性作保证,使得加密后的图像抗攻击性得到进一步地提高,同时本文的置乱算法使得加密后的图像达到了较为理想的置乱程度[6].

[1] ZHANG HAN,WANG XIUFENG,LI ZHAOHUI,et al.A new image encryption algorithm based on chaos system:Robotics,Intelligent Systerms and Signal Processing,Changsha,October 8-13,2003[C].New York:IEEE Press,c2003.

[2] JOAN D,VINCENT R.The design of rijndael: AES-the advanced encryption standard[M].New York:Springer,2002.

[3] 卢正鼎,廖振松.Rijndael算法的研究[J].计算机工程与科学,2005,27(6):72-74.

[4] 彭 飞,丘水生,龙敏生.一种基于混合混沌动力系统的图像加密算法[J].计算机应用,2005,25(3):543-556.

[5] 张玉安,冯登国.RIJNDAEL算法S盒的等价生成[J].计算机学报,2004,27(12):1593-1600.

[6] 陈 珂.基于Rijndael的彩色图像加密算法的研究[J].计算机工程与设计,2007,28(20):4908-4910.

猜你喜欢
实值二进制解密
多粒度实值形式概念分析
用二进制解一道高中数学联赛数论题
炫词解密
解密“一包三改”
n维模糊数值函数Henstock-Stieltjes积分原函数的可导性与导函数的可积性
炫词解密
有趣的进度
二进制在竞赛题中的应用
实值多变量维数约简:综述
双正交周期插值小波函数的实值对称性