随着网络信息技术的不断发展,特别是智能手机的出现和普及,图像作为主流的多媒体信息文件得以更为广泛的存储和传输。因此,数字图像的加密及安全性研究也越来越重要,而采用一种合理的加密和解密方法是数字图像安全存储和传输的基础,需要结合数字图像的特点进行方案设计。由于数字图像本质上是二维矩阵,具有较多的数据量,且相邻像素之间可能存在一定的相关性,进而产生像素冗余等现象。所以,传统的一维数据加密、文本加密等方法不能直接适用于数字图像的加密,需要结合图像自身特性,设计专门的编码加密方案。
混沌系统具有伪随机性、初值敏感性和高效性的优势,生成的混沌序列具有类噪声性和非周期性的特点,适用于图像加密的应用需求。本案例使用经典的Logistic混沌映射得到混沌序列,并给出离散余弦变换(DCT)进行图像压缩,将混沌加密和DCT压缩进行结合,构造一个图像加密压缩方案。最后,从处理前后的参数对比、抗攻击性能和秘钥敏感性等角度的分析,建立一个基于混沌编码的图像加密算法应用。
混沌现象是指发生在一个确定性系统中的貌似随机的不规则运动,具有不确定性、不可重复、不可预测的行为特点,是非线性动力系统的固有特性。混沌系统一个典型的特点是其演变过程对初始状态十分敏感,例如气候学中经典的“蝴蝶效应”现象。美国气象学家爱德华·洛伦兹(Edward N. Lorenz)为了预报天气,通过计算机模拟仿真地球天气方程式,在求解过程中为了提高预测精度,他将某个中间结果取出提高精度后再返回继续计算,结果却发现非常细微的差异却导致计算结果的大相径庭,因此得出混沌系统的初值极端不稳定的结论。于是,在一次演讲中,他提出一个著名的比喻,即“在巴西一只蝴蝶拍打一下翅膀,可能在美国得克萨斯州引起一场龙卷风!”这也是“蝴蝶效应”的由来。
Logistic映射是经典混沌系统,广泛应用于伪随机数序列生成,以典型的一维Logistic映射为例,其定义公式如下:
其中, μ 称为分支参数,{ x n }为Logistic混沌序列,相关研究指出,只有当3.56994567≤ μ ≤4时,Logistic映射才具有混沌性质。下面按照式(4-1)的定义,随机选择序列{ x n }的初值,遍历分支参数μ的取值生成模拟序列,并进行绘图,关键代码如下。
运行此段代码,将按照式(4-1)进行Logistic混沌序列的仿真生成,具体如图4-1所示。Logistic混沌序列分布在区间(0,1),其与分支参数 μ 具有明显的关联。当 μ ≤3时(红色虚线),迭代结果趋于稳定;然后随着 μ 的增加迭代结果越来越分散;当μ≥3.56994567时(绿色虚线),迭代结果不收敛,呈现出混沌状态。同时,在分支参数 μ 和初值确定的情况下,Logistic混沌序列也具有确定性,适合作为加密参数。
图4-1 Logistic混沌序列仿真图
离散余弦变换(Discrete Cosine Transform,DCT)是一种块变换方式,广泛应用于图像压缩、水印嵌入和图像加密应用。类似傅里叶变换,DCT也可将空域数据转换到频域,且具有良好的去相关性能。通过DCT,可将图像能量集中于DCT域的左上角区域,使用量化表即可快速的消除冗余信号,再通过逆DCT变换返回空域,达到图像压缩的效果。在MATLAB中,可通过dctmtx函数获取DCT域矩阵,通过blkproc进行遍历计算得到DCT结果,再经系数选择后逆变换返回空域,进而可比较处理前后的压缩效果。为了进行比较,我们选择RGB样例图进行压缩,关键代码如下所示。
运行后,可获得DCT压缩后的图像,并输出压缩前后的文件大小、压缩比和峰值信噪比PSNR的对比说明,具体效果如图4-2和图4-3所示。
压缩效果说明:原文件大小为27130字节,DCT压缩后文件大小为9621字节,压缩比为2.82,压缩后PSNR=24.71,SNR=15.59。
图4-2 DCT压缩前的RGB图像
图4-3 DCT压缩后的RGB图像
因此,采用DCT压缩具有计算简洁、压缩效果明显的特点,可有效减少图像的冗余信息,保留图像有效内容,适合进行图像编码计算。
数字图像可视作 M × N 的二维矩阵,对于 M × N ×3形式的RGB图像,可参考DCT压缩过程,将其可视为R、G、B三通道矩阵的叠加,转为 M ×(3× N )的二维矩阵,处理后再将其还原为 M × N ×3形式的RGB图像。因此,将图像矩阵经DCT压缩后可得到保留的DCT系数向量,可将其视作一维序列,可方便地进行加密和DCT还原计算。Logistic混沌序列在分支参数 μ 和初值固定的情况下具有确定性,且可生成任意长度的一维序列,可方便地进行加密计算。为了提高混沌加密的可靠性,选择两个Logistic混沌序列分别进行置乱加密和符号加密,并进行多次循环加密,具体过程如下所示。
(1)读取数字图像,如果是 M × N ×3形式的RGB则转为 M ×(3× N )的二维矩阵。
(2)生成8阶DCT矩阵,对图像矩阵按8×8的块遍历补0填充,使其能完成循环DCT计算,并设置系数选择矩阵,提取保留的DCT系数生成待加密的序列。
(3)设置第1组Logistic混沌序列的分支参数 μ 和初值,进行置乱加密得到置乱后的序列。
(4)设置第2组Logistic混沌序列的分支参数 μ 和初值,进行符号加密得到符号加密后的序列。
(5)设置循环次数,进行(3)、(4)循环计算。
(6)输出加密序列,进行存储及可视化。
总结以上步骤,混沌加密的流程图如图4-4所示。
下面以某彩色图为例,结合混沌加密的关键步骤进行编程实验,具体过程如下。
图4-4 混沌加密流程图
1.图像读取与重组
运行此段程序,可读取如图4-5所示的指定的彩色图像,这是待处理的RGB图。将其按水平方向叠加,转换为待处理的二维矩阵,重组图像如图4-6所示。
图4-5 原图像
图4-6 重组图像
2.图像矩阵按8×8的块遍历补0填充
运行此段程序,可按照8的倍数对图像矩阵的行列进行补0,此实验图的维度为256×960,满足8×8块区域遍历的条件,不需要补0。
3.DCT计算
运行以下程序,可进行块遍历方式的DCT计算,并按照设定的8×8系数模板做系数选择,保留高能量的系数,消除冗余信息。
提取待加密编码的系数,并将其转为向量形式,关键代码如下所示。
由此得到系数向量coef_vec,对应于块区域的个数以及系数保留模板的非0个数,长度为:
因此,需设置长度为57600的Logistic混沌序列进行加密。
4.Logistic混沌序列生成
为了提高加密过程的可靠性,选择双Logistic混沌序列进行加密,分别对应于置乱加密、符号加密,为此设置两个Logistic混沌序列,对应的分支参数和初值如下所示:
如上定义了两个Logistic混沌序列,为了保证计算结果的确定性,对初值设置取4位小数,参考前面叙述的Logistic混沌序列生成代码,结合序列长度的约束,对应的两个Logistic混沌序列生成代码如下所示。
运行此段程序,将得到两个Logistic混沌序列,分别通过排序获得置乱加密向量{ x n 1 },通过截断赋值获得符号加密向量{ x n 2 }。
5.循环加密
为了进一步提高加密的破解难度,选择循环加密的方式,将置乱加密和符号加密按设定的循环次数进行多轮,关键代码如下。
运行此段程序,将对系数向量进行1000次的置乱和符号加密,将最终结果更新赋值为coef_vec,并将关键参数保存到mat文件,用于解密计算。
6.逆DCT
循环加密后得到的coef_vec是一维向量,参考逆DCT的过程,可将其还原为图像矩阵,并根据设置的RGB标志将其拆分还原为RGB形式的图像矩阵,关键代码如下所示。
运行此段程序,将对系数向量块循环逆DCT还原操作,结合RGB标志将其还原为图像矩阵,效果如图4-7所示。加密图示呈现出明显的不规则加密的特点,跟原图(图4-6)相比没有直接的关联。
图4-7 加密图示效果
图像解密的过程可视作加密过程逆操作,首先设置相同分支参数和初值,可得到与加密过程相同的两个Logistic混沌序列,然后循环对加密系数向量进行符合和置乱的逆向解密,最后进行逆DCT还原得到图像矩阵,具体过程如下。
(1)加载加密后的系数向量及参数信息;
(2)根据第2组Logistic混沌序列的分支参数 μ 2 和初值 x 2 进行符号解密,得到符号解密后的序列;
(3)根据第1组Logistic混沌序列的分支参数 μ 1 和初值 x 1 进行置乱解密,得到置乱解密后的序列;
(4)根据循环次数,进行第(2)、(3)步的循环计算;
(5)输出解密序列,进行逆DCT重构。
总结以上步骤,混沌解密的流程图如图4-8所示。
图4-8 混沌解密流程图
下面以混沌加密导出的数据文件为例,结合图4-8所示的关键步骤进行编程实验,具体过程如下。
1.循环解密
根据设置Logistic混沌序列的分支参数和初值,对加密训练按照指定的循环次数进行符号解密和置乱解密,关键代码如下。
运行此段程序,可对加密序列按照设定的规则进行循环解密,得到解密后的序列。
2.矩阵重构
根据设置的块大小及模板参数,可将序列对应到每一个块区域的有效数据位置,进而将其还原为矩阵形式,关键代码如下。
运行此段程序,可对解密后的序列按照设定的块大小及位置重构成矩阵形式,用于后面的逆DCT还原。
3.逆DCT
根据设置的块大小生成DCT矩阵,设置逆DCT函数句柄,将其应用于前面生成的重构矩阵,得到逆DCT还原结果,并结合RGB图像标志进行数字图像的重构,关键代码如下。
运行此段程序,可进行逆DCT还原,根据行列数及RGB标志重构数字图像矩阵,生成的图像如图4-9所示。
图4-9 混沌解密结果图
经混沌解密可将加密序列还原成普通的空域图像,具有良好的可视化效果,下面结合原始图像对图像解密的效果进行评测,分析处理前后的相关指标数据。
为了进行效果比较,对原图和处理图进行读取,分别计算图像熵和峰值信噪比(PSNR)指标,并计算图像存储空间的变化,关键代码如下。
运行后,可得到原图与处理图的比较结果。原文件大小为27130字节,信息熵为7.180,处理后文件大小为9621字节,信息熵为7.002,压缩比为2.82,处理后PSNR=24.57,SNR=15.45。
处理后图像的峰值信噪比(PSNR)为24.57,在视觉效果上能与原图像保持一致,同时图像存储空间压缩比为2.82,进一步节约了存储空间。因此通过本案例的混沌加解密处理,可以在保持图像内容的同时,进一步起到图像压缩的效果,这也是DCT在加解密过程的有效表现之一。
1.噪声攻击
为了验证混沌加解密的稳定性,对加密序列加入高斯分布随机噪声和均匀分布随机噪声,关键代码如下。
然后按照同样的过程进行解密,查看解密效果,得到效果如图4-10和图4-11所示。
图4-10 加入高斯分布噪声的混沌解密结果图
图4-11 加入均匀分布噪声的混沌解密结果图
加入噪声后,依然能还原出有效的结果图像,虽然解密图存在一定的噪声干扰,但在视觉效果上能分辨出图像的关键信息,这也说明了此方法具有良好的抗噪性能。
2.秘钥攻击
图像混沌加密的关键参数包括Logistic混沌序列的分支参数 μ 1 、 μ 2 和初值 x 1 、 x 2 ,循环次数loop,选择某些参数进行微小的改变,来查看解密效果,如图4-12~图4-14所示。
在解密时对分支参数、初值、循环次数进行微小的改变,均会对解密结果带来明显的影响,从而无法得到准确清晰的解密图,这也说明了此方法具有较强的密钥敏感性。
图4-12 μ 1 由3.9999修改为3.99999的混沌解密结果图
图4-13 x 1 由0.7071修改为0.70711的混沌解密结果图
图4-14 loop由1000修改为999的混沌解密结果图
为了更好地集成对比不同步骤的处理效果,贯通整体的处理流程,本案例开发了一个GUI界面,集成图像加密、图像解密和性能评测等关键步骤,并显示处理过程中产生的中间结果图像。其中,集成应用的界面设计如图4-15所示。
单击“选择图像”按钮可弹出文件选择对话框,可选择待处理图像并显示到中间的显示面板;用户可设置加密参数,选择是否加噪声或加入某种噪声,然后单击“图像加密”按钮,可以分别对待加密图像进行混沌加密,并在中间的显示面板显示加密处理后的图像。为了验证处理流程的有效性,选择另外的图像进行实验,具体效果如图4-16所示。此实验图经设定的加密参数进行加密后,呈现出明显的不规则加密效果。
图4-15 界面设计
图4-16 图像加密效果图
在不修改解密参数的前提下单击“图像解密”按钮,将按照同样的混沌加密参数执行解密,具体效果如图4-17所示。在保持参数不变的情况下,图像解密操作可以获取解密后的图像并计算处理前后的PSNR和压缩比,发现处理后图像的PSNR为24.176,在视觉效果上能与原图保持一致,同时图像存储空间压缩比为3.714,进一步节约了存储空间。
下面尝试修改解密参数,并在中间的窗口显示,具体效果如图4-18所示。在修改解密参数的情况下,图像解密操作无法获得正确的解密结果,这也表明了此方法对秘钥的敏感性,微小的密钥参数修改即可在图像整体范围上影响解密效果。
下一步尝试设置增加噪声后进行解密,并在中间的窗口显示,具体效果如图4-19和图4-20所示。分别加入高斯、平均噪声后,依然能还原出有效的结果图像,且能较为清晰地表达图像的整体细节信息,这也说明了此方法具有良好的抗噪性能。
图4-17 图像解密效果图
图4-18 修改解密参数后的效果图
图4-19 增加高斯噪声后的效果图
图4-20 增加平均噪声后的效果图
读者可以尝试用其他的图像和不同的加密参数来查看处理效果,分析混沌加密过程中各个步骤的实际作用,做进一步的应用延伸。
随着大数据技术的发展,图像数据安全加密也越来越受到关注,如何用有效的加密技术将图像信息进行隐藏及还原是图像加密的关键,检验图像加密效果的标准之一就是解密后在视觉效果上与原图相比不出现较大的偏差,并且应具有一定的抗攻击性、较高的秘钥敏感性。混沌系统具有随机性、遍历性、确定性和对初始条件的敏感性,适合应用于图像加密领域。因此,本案例选择经典的Logistic混沌序列,结合图像DCT压缩得到系数序列,经置乱和符号进行多轮加密,实验表明此方法操作简单且能取得良好的加密性能。
读者可以考虑引入其他的混沌系统,例如Chen混沌系统、Lorenz混沌系统等,结合不同的图像编解码方法进行图像加密和解密,构建不同的图像加密算法。