基于Lorenz系统最优序列和K-L变换的图像加密方法
技术领域
本发明涉及一种基于Lorenz系统最优序列和K-L变换的图像加密方法。
背景技术
在现代的科技生活中,网络信息传播速度越来越快,数字图像由于其易复制和传播的特点,广泛的作为信息的载体来达到信息的传递,但是在传递图像过程中所携带的信息的安全性则更加值得关注,所以数字图像加密算法应运而生,数字图像加密的意义在于,使信息截获者不能识别图像中所传递的信息,通过数字图像加密算法,使数字图像从视觉上达到无法辨认的效果。数字图像虽然也是信息中的一种,但是其不同于数据信息,首先图像数据量一般较大,而且像素之间相关性较强,以及图像数据具有二维分布等特点,这使得图像加密算法的选择上会与数据加密不同,这些年学者们提出了很多对于数字图像的加密算法,这些算法的基本思想基本可以分为两类,那就是图像像素的置乱以及图像像素的置换。
图像置乱是一种在早期的图像加密算法中使用较多的加密算法,其加密原理就是将图像看成是一个二维矩阵,通过置乱算法改变图像像素的位置,使其杂乱无章已到达视觉上无法辨认原图的加密效果,典型的方法有Arnold变换算法、幻方变换算法、以及一些其他置乱算法等等,这些方法是一种比较容易实现的图像加密算法,对于数据量较大的图像来说,在运算速度上有明显的优势,同时加密结果无冗余度。
单纯的使用图像像素置乱来加密图像的缺点也比较突出,由于其只是改变了图像的像素位置,并没有改变图像像素值,所以加密结果并没有改变图像的统计特性,加密后的图像直方图与原始图像相同,其加密结果虽然达到了视觉上的无法辨认,但是不能抵抗统计攻击,加密效果不是很好,相对来说安全性不高。
由于图像置乱加密有着诸多缺点,根据图像特点研究者提出了新的图像加密算法,即图像的置换算法。之前提到的图像置乱算法中是在空间域上对图像进行的加密运算,而图像像素置换加密算法是通过改变图像像素的值来达到加密的效果,置换算法是将图像转换成可运算的值,在用其他算法产生的加密数据与图像数据运算以达到图像数据的根本改变,普遍的加密算法包括序列图像加密以及分组图像加密。
图像置换算法在速度上没有图像置乱操作的速度快,尤其当图像置换法采用分组加密方式时,在图像加密速度上有明显缺陷。分组加密方式是将图像数据以固定的分组长度,进行分组迭代加密运算,经过多次分组最终达到整幅图像的加密结果,如典型的AES和DES算法。
发明内容
针对图像置乱算法与图像置换算法的缺点,提出一种基于Lorenz系统最优序列和K-L变换的图像加密方法,在算法安全性与算法速度二者间达到了很好的平衡。
本发明所采用的技术如下:一种基于Lorenz系统最优序列和K-L变换的图像加密方法,步骤如下:
(一)Lorenz系统最优序列的产生
选取欧拉法对Lorenz混沌系统进行离散化并获得实值序列,然后进行量化,步骤如下:
(1)将实值序列值去掉负号,即都取正值;
(2)将实值序列值的小数点向后移动5位;
(3)将所有实值序列值去掉小数部分,即取整;
(4)将整数部分除以10取余数,即获得最初实值序列小数点后第5位数,其值在[0,9]范围内,其表达式如式(2),其中x(n)是离散化的Lorenz混沌序列值,X(n)是处理后的实值序列值,X(n)∈[0,9],将所得到的X(n)序列在经过一步阈值量化,即得到量化后的伪随机序列;
(5)采用阈值量化方法,取所有值的期望为阈值,比较数值大小,大于这个阈值就取1,小于等于这个阈值就取0,其表达式如式(3),其中
是X(n)序列的数学期望,即平均值,Lorenz混沌序列经过处理后近似为5,即
Q
0-1是最终获得伪随机二值序列,根据公式(2)和(3)分别对Lorenz混沌系统生成的X,Y,Z三个方向的序列分别量化,分别得到三个方向的伪随机二值序列,
选出Lorenz-X序列为Lorenz系统最优序列;
(二)加密图像的预处理
彩色图像是由三原色矩阵组成,分为R,G,B三个颜色分量,每个颜色分量矩阵是由像素矩阵值组成,分别表示为Rn×m(x,y),Gn×m(x,y),Bn×m(x,y)三个整数矩阵,其中n表示矩阵的行数,m表示矩阵的列数,n×m就是图像的像素值个数,其值的范围也是在0-255之间,彩色图像先转换成三个颜色分量的矩阵Rn×m(x,y),Gn×m(x,y),Bn×m(x,y);
(三)三色像素矩阵的K-L变换
K-L变换的公式如下式所示:
Y=AX (4)
其中X表示图像的像素矩阵,而A则是X矩阵的协方差矩阵的特征向量矩阵的转置矩阵,X矩阵的协方差矩阵是一个实对称矩阵,实对称矩阵的不同特征值对应的特征向量正交,其中如果A为正交矩阵,则有ATA=I,再根据式(4),带入得ATY=ATAX=X,获得了K-L变换的反变换,如下式所示:
X=ATY (5)
根据上述K-L变换的原理,对应一幅图像给出K-L变换的具体过程,图像矩阵为Xm×n,由于K-L变换对应的是方阵,所以这里令m=n,不够项补0,图像矩阵表示为
将每一列都设为一组向量,则矩阵Xm×n表示成Xm×m=[X1,X2,…,Xm],其协方差矩阵表示为:
其中cij为像素矩阵中对应每个元素的协方差,表示为:
再令λ和F为协方差矩阵C的特征值和对应的特征向量,那么有:
|C-λI|=0 (10)
CF=λF (11)
由上式(10)和(11)得到m个特征向量的特征值分别为λ1,λ2,λ3,…λm,通过所得的特征值分别求出对应的特征向量的为下式:
Fi=[fi1,fi2,fi3,…fim],(i=1,2,…,m) (12)
通过转置后的特征向量所构成的矩阵就是K-L变换矩阵A,其式为:
将A矩阵与图像X矩阵相乘的过程就是K-L变换,经过此变换就能够降低图像的相关性以及达到图像置乱的效果;由上述步骤,即分别得到三个颜色分量的矩阵Rn×m(x,y),Gn×m(x,y),Bn×m(x,y)的K-L变换,将其分别表示为RK-L(x,y),GK-L(x,y),BK-L(x,y);
(四)加密图像的获得
将图像的矩阵按一行接一行的顺序转换成一条整数值序列,分别表示为R(i),G(i),B(i),其中i∈(0,n×m),由于像素值的范围是在0-255之间,所以每一位的像素值又转换成8位的二进制数,便获得了基于图像的二进制序列R(j),G(j),B(j),其中j∈(0,n×m×8),再与先前经过离散与量化产生的Lorenz混沌二值X序列,以L(j)表示,按位进行异或处理,分别对R,G,B三个颜色分量做同样处理,最后得到的是三个颜色分量加密后的序列值,并按8位组成一个十进制数,还原为图像序列值及图像像素矩阵,最后可以得到加密后的彩色图像,而图像解密的过程就是加密的逆过程,即将加密后的图像在与混沌序列做一次异或运算处理再做K-L反变换,就能还原出之前的原始图像,
实现加密的公式如下式所示:
其中i∈(0,n×m),j∈(0,n×m×8),E(j)是加密后的图像二进制序列,
表示异或操作,将E(j)按每8比特转换成十进制整数序列,再转化成n×m阶的矩阵,将三个颜色方向矩阵合并成彩色加密图像。
本发明的有益效果及优点:
1.本发明的加密算法简单并且易于实现,解决了图像置换算法速度较慢的问题,同时又避免了图像置乱算法的安全性不足的问题,在算法安全性和算法速度二者间达到了很好的平衡;
2.引进了K-L变换这一方法,进一步提高了图像像素相关性的指标,使最终获得的图像加密算法安全性进一步提高。
附图说明
图1为Lorenz最优序列和K-L变换加密算法流程图;
图2为交叉编译开发过程图;
图3嵌入式图像加密系统架构图;
图4为图像加解密流程图;
图5为Lorenz最优序列和K-L变换算法加解密图像结果对比图;
图6为原始图像的像素相关性对比图;
图7为改进算法加密图像的像素相关性对比图;
具体实施方式
下面举例对本发明做进一步解释:
实施例1
一种基于Lorenz系统最优序列和K-L变换的图像加密方法,步骤如下:
一、图像加密算法的步骤:
(一)Lorenz系统最优序列的产生
三维的Lorenz混沌系统方程的系统模型是三元一阶非线性微分方程,其系统方程为:
其中a,b,c是在一定变化区域内限制的实参数,x,y,z是方程的变量。
Lorenz混沌系统是连续的混沌系统,所以想通过Lorenz混沌系统来获得加密图像时所使用的混沌序列,首先我们要将混沌系统离散化,在考虑到硬件的实现、算法的复杂程度、运算的速度以及资源占用等因素后,选取欧拉法(Euler)对Lorenz混沌系统进行离散化并获得实值序列。
然后进行量化,步骤如下:
(1)将实值序列值去掉负号,即都取正值;
(2)将实值序列值的小数点向后移动5位;
(3)将所有实值序列值去掉小数部分,即取整;
(4)将整数部分除以10取余数,即获得最初实值序列小数点后第5位数,其值在[0,9]范围内,其表达式如式(2),其中x(n)是离散化的Lorenz混沌序列值,X(n)是处理后的实值序列值,X(n)∈[0,9],将所得到的X(n)序列在经过一步阈值量化,即得到量化后的伪随机序列;
(5)采用阈值量化方法,取所有值的期望为阈值,比较数值大小,大于这个阈值就取1,小于等于这个阈值就取0,其表达式如式(3),其中
是X(n)序列的数学期望,即平均值,Lorenz混沌序列经过处理后近似为5,即
Q
0-1是最终获得伪随机二值序列,根据公式(2)和(3)分别对Lorenz混沌系统生成的X,Y,Z三个方向的序列分别量化,分别得到三个方向的伪随机二值序列,
通过自相关测试,NIST的15项测试,以及BSPD局部周期测试法,分别对X,Y,Z三个方向的序列进行了测试,经过测试结果的分析,得出Lorenz混沌系统中的X序列的性质是最优的,即选出Lorenz-X序列为Lorenz系统最优序列,为接下来的图像加密中的序列选择做好准备。
(二)加密图像的预处理
在使用图像加密算法之前要对图像进行处理,彩色图像是由三原色矩阵组成,分为R,G,B三个颜色分量,每个颜色分量矩阵是由像素矩阵值组成,分别表示为Rn×m(x,y),Gn×m(x,y),Bn×m(x,y)三个整数矩阵,其中n表示矩阵的行数,m表示矩阵的列数,n×m就是图像的像素值个数,其值的范围也是在0-255之间。我们这里以彩色图像加密为例,彩色图像先转换成三个颜色分量的矩阵Rn×m(x,y),Gn×m(x,y),Bn×m(x,y)。
(三)三色像素矩阵的K-L变换
K-L变换(Karhunen-Loeve Transform),也称为霍特林变换,这是一种对于离散信号变换成不相关系数的方法,这里我们引入K-L变换,对于数字图像先通过这种处理,达到图像置乱的效果,进而保证像素相关性的有效降低,此种方法在后续硬件实现中也比较容易实现。K-L变换是一种基于统计的特殊正交线性变换。K-L变换的公式如式(4)所示:
Y=AX (4)
其中X表示图像的像素矩阵,而A则是X矩阵的协方差矩阵的特征向量矩阵的转置矩阵。X矩阵的协方差矩阵是一个实对称矩阵,实对称矩阵的不同特征值对应的特征向量正交。其中如果A为正交矩阵的话,则有ATA=I,再根据式(4),带入可得ATY=ATAX=X,这样便获得了K-L变换的反变换,如式(5)所示:
X=ATY (5)
根据上述K-L变换的原理,对应一幅图像给出K-L变换的具体过程,设图像矩阵为Xm×n,由于K-L变换对应的是方阵,所以这里令m=n,不够项补0。这时图像矩阵可以表示为
将每一列都设为一组向量,则矩阵Xm×n可以表示成Xm×m=[X1,X2,…,Xm],其协方差矩阵表示为:
其中cij为像素矩阵中对应每个元素的协方差,表示为:
再令λ和F为协方差矩阵C的特征值和对应的特征向量,那么有:
|C-λI|=0 (10)
CF=λF (11)
由上式(10)和(11)可知m个特征向量的特征值分别为λ1,λ2,λ3,…λm,通过所得的特征值分别求出对应的特征向量的为下式:
Fi=[fi1,fi2,fi3,…fim],(i=1,2,…,m) (12)
通过转置后的特征向量所构成的矩阵就是K-L变换矩阵A,其式为:
将A矩阵与图像X矩阵相乘的过程就是K-L变换,经过此变换就能够降低图像的相关性以及达到图像置乱的效果。由上述方法,即可分别得到三个颜色分量的矩阵Rn×m(x,y),Gn×m(x,y),Bn×m(x,y)的K-L变换,将其分别表示为RK-L(x,y),GK-L(x,y),BK-L(x,y)。
(四)加密图像的获得
由于是采用序列密码加密算法,那么我们将图像的矩阵按一行接一行的顺序转换成一条整数值序列,分别表示为R(i),G(i),B(i),其中i∈(0,n×m)。由于像素值的范围是在0-255之间,所以每一位的像素值又可以转换成8位的二进制数,此时便获得了基于图像的二进制序列R(j),G(j),B(j),其中j∈(0,n×m×8)。再与先前经过离散与量化产生的Lorenz混沌二值X序列(这里以L(j)表示)按位进行异或处理,分别对R,G,B三个颜色分量做同样处理,最后得到的是三个颜色分量加密后的序列值,并按8位组成一个十进制数,还原为图像序列值及图像像素矩阵,最后可以得到加密后的彩色图像。而图像解密的过程就是加密的逆过程,即将加密后的图像与混沌序列做一次异或运算处理再做K-L反变换,就能还原出之前的原始图像。实现加密的公式如下式所示:
其中i∈(0,n×m),j∈(0,n×m×8),E(j)是加密后的图像二进制序列,⊕表示异或操作,将E(j)按每8比特转换成十进制整数序列,再转化成n×m阶的矩阵,将三个颜色方向矩阵合并成彩色加密图像。
实施例2
本实施例1在硬件中实现的过程
(1)在PC端的Linux系统中建立起交叉编译的环境,其过程就是在PC端,也称为宿主机,在其中进行应用程序的编写与编译,再将可执行的程序进行交叉编译后移植到目标机,也就是嵌入式开发板中可以运行的二进制文件,将二进制文件烧入到嵌入式开发板中。所以交叉编译环境的搭建是实现嵌入式程序的基础。其具体的开发模式如图2所示。
(2)在Linux系统中裁剪好内核和根文件系统,在经过交叉编译完成后移植到嵌入式开发板中,实现最基本的嵌入式开发环境。
(3)在实现嵌入式ARM平台的图像加密之前,所有的程序设计要在PC端的Linux系统中实现,所以要在Linux系统中先搭建好实现图像界面的QT以及OpenCV图像处理库。在这里进行程序的设计、编译以及仿真,完成后再通过二进制文件加载到嵌入式开发板中。QT是奇趣(Trolltech)公司开发的一种跨平台的图形用户界面工具包,依靠于C++语言开发的。利用QT进行界面程序编写,本实施例选用了适用于嵌入式Linux系统的Qt/Embedded版本。OpenCV库,这是一个开源的程序库,适用于Windows、Linux、Android和Mac OS系统上运行计算机视觉应用程序,可以实现图像处理。OpenCV库含有丰富的图像处理函数,可以方便的装载、显示和存储图像,可以轻松的实现图像像素的运算和处理,高效的实现图像处理的其他功能,其中最重要的是可以方便实现图像矩阵运算,这非常适用于本实施例图像的处理以及图像加密算法中对于图像的运算。将QT与OpenCV库相结合,实现本文中基于Lorenz混沌系统的图像加密在嵌入式ARM平台的显示实现。如图3所示,整个图像加密系统的架构图;如图4所示,整个加解密系统的程序图。
(4)在Linux系统中完成了程序的编写以及仿真,接下来要把程序移植到嵌入式ARM开发板当中。移植过程是tslib移植、Qt/Embedded移植和嵌入式Opencv库的移植,其中tslib是触摸屏校正程序,这是一个开源触摸屏支持库。接下来就是将实现图像加密的程序移植到嵌入式开发板中,之前已经编译好的程序放到根文件系统的usr/bin目录下,在etc/profile中最下面加入以下语句:
if[-f"$TSLIB_CALIBFILE"];then
Imageencryption-qws&
else
ts_calibrate
Imageencryption-qws&
fi
这些语句是设置图像加密程序是开机自动运行的第一个应用程序,也就是经过触摸屏校正程序之后,就将进入到图像加密界面。操作完以上步骤,才真正的完成了基于嵌入式ARM平台的图像加密显示实现。
实施例3
选取一幅256×256大小的彩色图像,进行加密处理,加密之后用同样的方法得到解密的结果,加密与解密结果如图5所示:
根据加密结果可以直观看到加密图像对于原始图像已经无法辨认,并分布比较均匀,解密之后的图像与原始图像完全一致,而对于我们要改进的像素相关性,接下来给出直观的数据分析以及仿真图分析,同样是针对图像的R,G,B三个颜色分量的水平、垂直以及对角线三个分量分别分析,数据分析结果如下表所示:
表1相邻像素相关性系数值
根据计算结果表中的显示,经过K-L变换改进的加密算法相较于之前单纯的混沌序列加密算法,在像素相关性方面有很大的改进,计算值接近于0,达到理想的加密效果。根据加密结果分别给出的像素相关性原始图像和改进算法加密后分布仿真结果如图6和7所示:
根据像素相关性的仿真图直观分析,可以看到原始图像的像素相关性非常大,而经过改进算法的图像加密结果,其像素相关性非常小,几乎分布均匀,即与像素相关性计算值相对应。
对改进算法的加密结果进行均方误差MSE以及峰值信噪比PSNR分析,相对明文敏感性分析,将分析结果与之前的Lorenz-X序列加密结果进行对比,对比结果如表2和表3所示:
表2改进算法加密图像的MSE和PSNR值
表3改进算法加密图像的NPRC和UACI值
经过分析发现,经过改进的算法加密后的图像,在MSE值和PSNR值较之前的Loenz-X序列的加密结果只有微小的改变,基本保持在理想值,在NPRC和UACI均值的比较结果中,改进算法也比较接近理想值,没有较大的改变,从这两方面分析可以看出,改进后的算法在保持了原有理想的加密效果下,可以改进像素相关性方面的不足。最终得到了本文提出的基于Lorenz系统最优序列和K-L变换的图像加密算法,在算法安全性与算法速度二者间达到了很好的平衡。
根据实验结果显示,实现了在嵌入式ARM平台上的图像加密与解密,图像加解密结果也和之前在Linux系统中的仿真结果一致,在嵌入式设备上图像加密和解密的效果良好,保证了嵌入式硬件设备上图像信息传输的安全性。