图1 Tent映射分岔图及其李雅普诺夫指数
2 混沌加密隐藏算法
2.1 密钥设置
已知明文图像PM×N的i行j列处图像像素为pij。提取明文图像PM×N的k个特征点值用来计算系统加密密钥。
[s1,s2,…,sk]=f(PM×N)
(2)
2.2 置乱算法
2.3 混乱算法
2.4 解密算法
2.5 密文图像隐藏
3 图像加密实验验证
使用MATLAB软件对选取的像素为512×512,8位深度的数字明文灰度图像Lina.jpg按照加密算法设定的加密步骤进行加密、解密测试。
图2 明文图像直方图
3.1 图像特征点值选取
本文密钥选取图像像素均值,对应像素均值向下取整所得像素值的像素点数以及直方图的局部峰值点和局部谷值点,如图2标记点所示。sk为选取的像素值,sk+1为对应的像素数,k∈1,3,5,…。
(3)
式中,max(·)表示取数列的最大值。
3.2 图像压缩与加密
密文隐藏过程公开图像需要获得两倍于明文图像的列数,所以为了得到与明文图像相同分辨率的密文图像,需要将明文图像进行压缩采样,采样后明文图像列数减少一半。奇数行取pi,2j-1,偶数行取pi,2j。与文献[8]解密时对获取的解密图像进行双线性插值得到与明文图像相同行列数的图像。
3.3 图像解密
MATLAB仿真的加解密效果如图3所示,对比图3(a)与图3(b),密文图像像素杂乱无章,图像信息被掩盖。对比图3(a)与3(d)可以看出图像解密后图像信息恢复较完整,损失较少。图3(e)是使用错误的密钥对密文解密结果,图像像素为随机分布,且不能辨别任何细节。对比图3(c)与3(f)可以看出隐藏密文对载体图像影响微小。
图3 对Lina图加解密对比及隐藏后载体图像对比
4 加密性能分析
4.1 密钥空间
实验验证本文算法时,算法的置乱和混乱步骤的数值计算精度全部为10-16,可得密钥空间理论值大于10106,可以有效抵御密文攻击[8]。加密过程的置乱操作初值X1=0.877 567 458 719 291,控制参数a=1.531 372 549 019 608,将参数X1,a的最低位小数增加或减小1,解密后得到类似图3(e)所示的错误解密图像。
4.2 NPCR和UACI分析
图像像素改变率(Number of Changing Pixel Rate,NPCR)和归一化平均变化强度(Unified Averaged Changed Intensity,UACI)是评价抗差分攻击能力的重要指标,考察明文图像某像素点灰度值的轻微变化引起整个密文图像发生改变的情况[9]。明文图像为PM×N,则M,N为图像的行数与列数,C1为PM×N加密所得密文图像,对改变PM×N中某一点的像素值(像素值加1或减1)所得图像加密后得到新的加密图像C2。图像的NPCR的计算公式为
(4)
UACI的计算公式为
(5)
对不同分辨率的Lina图像进行NPCR和UACI测试,结果如表1所示。
表1 NPCR和UACI测试结果
表1中的测试结果表明:明文图像稍微变化会引起密文图像的剧烈变化,但与NPCR和UACI测试结果的理想值有差距,虽然不能认为明文图像稍微变化加密后密文是随机相关的[10],但测试结果也表明加密算法有较强的抵御差分攻击的能力。
4.3 混沌加密相邻像素相关性分析
对图像所有像素值3个方向的相邻像素相关系数进行计算求得图像像素相关系数σxy,在图像中选取水平方向相邻像素对(Pi,j,Pi,j+1),竖直方向相邻像素对(Pi,j,Pi+1,j),对角线方向相邻像素对(Pi,j,Pi+1,j+1)。式(5)中xi,yi分别表示像素对的前后2个值。
(6)
表2 图像相关系数分析
计算加密前后图像三方向的σxy系数并与其它文献加密算法对比,所得结果如表2所示。
加密后密文图像的相邻像素σxy系数与原图相邻像素相关性差别很大,由高度相关性(σxy→1)变为几乎不相关(σxy→0)[14]。与表2中文献[11]、文献[12]和文献[13]的相应结果对比,部分方向上取得了更低的相关性(σxy→1)系数。
4.4 信息熵分析
熵是用来描述事物的复杂性,信源的信息熵是度量信息随机性的一个重要参考指标。计算公式如下:
(7)
式中,p(Si)为信号Si的概率,n为表示每个信号的二进制位数。因此,从理论上来讲,对于8位二进制表示的灰度图像,理想情况下密文图像的信息熵应该等于8,H(S)值越接近8则说明密文随机性越好。本文加密后密文的信息熵为7.938,接近理想值。
4.5 加密速度分析
表3 不同分辨率灰度图像加密耗时对比
加密运算速度影响加密效率,因此加密算法应该具有快速的执行速率,良好的并行运算能力。实验对不同分辨率的灰度图像进行加密耗时测试,测试使用在core(TM)1.8 GHz处理器,16 GB内存上运行的Windows10系统上安装的MATLAB2018A。测试结果如表3所示。
由表3可以看出:运行时间与图像像素数成线性关系,加密算法的消耗时间是可预期的。
5 结束语
本文提出一种基于Tent映射的图像加密算法,改进了加密过程的混乱步骤。算法未将密钥通过运算变换到区间[0,255]内,保留了密钥的高精度数据,从而增大密钥空间。加密过程中密钥仅对数据进行排序,不与数据进行异或运算,有效避免了使用特殊图像来获取等效密钥。但是,加密时对明文图像进行了裁剪,图像信息有部分损失。如果将明文图像加密隐藏到2幅载体图像中则可以无损地复原图像,下一步将继续改进。