根据JPEG文件格式及压缩、解压过程,我们提出了一种基于Logistic映射的混沌序列密码对JPEG图像文件加密方法。这种加密方法通过定义JPEG应用段APP3采标记加密算法,对实际JPEG图像文件进行加密和解密。

一、混沌系统的特征

混沌是指确定的非线性系统在一定条件下所呈现的不确定的随机现象。这种系统对初值变化非常敏感,即初始状态只有微小差别的两个同构混沌系统在较短的时间后就会产生两组完全不同的、互不相关的混沌序列值,并具有天然的随机性和类白噪声的特性。因此,利用混沌系统对初始条件敏感的特性,提供数量众多、非相关、类随机而又确定可再生的混沌序列作为加密序列,对各种数据文件加密是加密技术的一个研究热点。本文采用一种典型的Logistic混沌映射做为序列密码。

零均值Logistic混沌映射的表达式为:

基于混沌映射的JPEG图像文件加密方法

由上式可知该映射具有以下特性:

概率密度函数为:

基于混沌映射的JPEG图像文件加密方法

ρ(x)不依赖于初始值,该混沌系统具有遍历性。

利用概率密度函数可以进一步得到如下的相关特性:

基于混沌映射的JPEG图像文件加密方法

混沌映射对初值极为敏感,初始值稍微不同,就会迅速变成完全不同的状态,如图1所示。

基于混沌映射的JPEG图像文件加密方法

其中,实线的初始值为X10=0.35,虚线的初始值为X20=0.35001。由图1可知:虽然初始值仅差了0.00001.但经过大约18次迭代后,两条曲线开始分散,完全独立,没有相关性。根据Logistic的以上特性,将初始值作为加密的密码,根据初始值形成的混沌序列与JPEG图像文件的数据进行运算掩盖,可达到很好的PEG图像文件加密效果。

二、利用混沌序列对JPEG图像文件加密

1、混沌序列给JPEG图像文件加密的方法

加密的基本要求:首先,保证JPEG图像文件格式不变,即JPEG图像文件所有定义标示不能改变,能够识别出文件是JPEG图像文件;其次,加密后的图像文件能够很好地伪装,其他的图像浏览程序虽然能够根据JPEG解压算法读取文件内容,但不能解压还原成原始图像;最后,保证加密后的JPEG图像文件能够被解密程序自动识别。

JPEG图像文件是一种象素格式文件,JPEG文件标识主要由SOI文件标识段、DQT量化表标识段、SOF图像帧起始段、DHT哈夫曼编码表标识段、sos扫描起始段、EncodeData压缩数据、EOI文件结束标志等几部分组成。另外,JPEG图像文件在文件头保留APPn (Reserved For Application Use,n为1-15)标记段给Application使用。目前JFIF定义了APPO(标识为OXFF OXEO),EXIF定义了APPI(标识为OXFFOXEI)和APP2(标识为OXFF OXE2)。本文根据JPEG图像文件格式要求,增加了APP3(标识为OXFF OXE3)来标记JPEG文件已经被加密,使得解密程序能够自动识别JPEG图像文件是否加密。

JPEG图像压缩,解压过程如图2、图3所示。

基于混沌映射的JPEG图像文件加密方法

根据JPEG文件的格式及其压缩、解压过程,本文选择在JPEG图像压缩过程中对已经过量化后的图像数据进行加密,因此不需要还原压缩图像数据就可以直接加密,处理简单方便,只需将压缩的数据经过哈夫曼编码还原的量化数据与Logistic混沌序列进行掩盖加密运算。

设F(xn)是由公式(1)迭代产生出的Logistic序列,而序列的初始值墨是由输入的加密密钥经过转换得来的,Y(n),U(n),V(n)分别为JPEG图像压缩过程中,被量化后的YUV格式的各分量值的图像数据Y(n),U(n),V(n)分别是经过加密后的YUV格式的各分量值的图像数据,设n为数据点数,为自然数,加密过程为:

基于混沌映射的JPEG图像文件加密方法

再经过哈夫曼编码写入文件,以达到伪装的效果,同时可以保证JPEG图像文件格式不变。

2、混沌序列给JPEG图像文件加密的流程

在加密之前,先来定义加密标识APP3。根据JPEG图像文件头预留给Applicaljon使用的标记段的定义,本文将APP3定义如下:

基于混沌映射的JPEG图像文件加密方法

考虑到更高的安全性,本文在定义APP3时,对不同的JPEG图像文件使用不同的混沌序列对文件加密,使得破密者无法通过对比的手段来判断加密所使用的算法,以增加破密的难度。因此,在APP3上定义的Chaos Arilhmetjc标记来表示使用何种混沌序列,而使用的混沌序列只有与加密程序对应的解密程序才能识别,从而提高了安全性能,本文定义OOOIH代表使用Logistic混沌加密。当使用同一种混沌序列进行加密,而加密掩盖算法不一样时,可以通过改变Version的值来实现,本文定义了Logistic混沌序列加密的Version为OIOOH,代表使用简单的异或加密掩盖算法,这也是提高安全性能的手段。同肘,本文在APP3上定义了保留字段Reserved,主要考虑方便将来扩充应用。

加密流程如图4所示:

基于混沌映射的JPEG图像文件加密方法

三、JPEG图像文件的混沌解密方法

1、JPEG图像文件的混沌解密方法

根据加密的方法,首先读取JPEG图像文件头的定义,查找是否有加密标识APP3,若没有APP3定义,说明不是加密文件,无需解密;若有说明JPEG图像文件是经过混沌加密的,则按照JPEG格式读取经过加密后压缩的数据做哈夫曼编码还原,还原后的量化数据与Logistic混沌序列进行解密运算。

设F'(xn)是由公式(1)迭代产生出的LogisLic序列,而Logistic序列的初始值赫是由输入的解密密钥经过转换得来的;Y'(n),U'(n),V'(n)分别是经过加密后的YUV格式的各分量值的图像数据;Y(n),U(n),V(n)分别是解密后的YUV格式的各分量值的图像数据,设q为数据点数,为自然数,解密过程如下:

基于混沌映射的JPEG图像文件加密方法

然后根据JPEG解压过程反量化,反离散余弦变换(IDCT),还原成图像数据,并将图像显示在计算机上,若需要对加密的JPEG文件解密还原,则重新进行JPEG图像压缩后写回文件,同时将APP3标识段删除。

2、JPEG图像文件的混沌解密方法流程

加密是针对JPEG压缩过程中量化后的数据进行的,因此解密也在解压过程想要的反量化前将数据解密,解密过程如图5所示。

基于混沌映射的JPEG图像文件加密方法

四、实验结果及分析

为了验证对JPEG图像文件加密的可行性,本文采用C++编程实现了LogisLic混沌序列对JPEG图像文件进行加密和解密试验。

图6给出了利用本文加密算法对JPEG图像文件加密、解密后的结果,以及解密错误后的结果。

基于混沌映射的JPEG图像文件加密方法

以上4个JPEG图像文件均能用Windows操作系统自带的图片,从图6(b)所示加密后的图片来看,虽能袱图像浏览工具正确解压但已经面目全非,达到了加密和伪装的效果。

由于混沌系统对初始值和参数的敏感性,所以只要有非常微小差别的两个同构混沌系统在较短的时间后就会产生两组完全不同的、互不相关的混沌序列值,因此初始值不正确,如图6 (d)所示,是无法解密出原图像的。本文使用6个字符作为密码,每个字符占一个字节,转换成混沌序列的初始值,理论上可以产生2的48次方个密钥,考虑可以直接从键盘输入的可见字符作为密钥的组合为95的6次方种,如此庞大的数据,密码的分析者和攻击者要话费的分析量和攻击量是很大的。同时,本文定义APP3的Chaos Arithmetic可设定不同的混沌序列算法,Ver sion可以定义不同的加密掩盖算法,它们的定义段的宽度(4个字节可以产生2的32次方种组合,而组合算法只有解密程序才能对应,所以破译者无法知道混沌序列加密算法,也无法根据截取密文来重构产生序列密码的混沌系统的动力学模型、初始状态等,大大增加了破密的难度。

加密后的JPEG文件依然按照JPEG文件格式存储,使用通用的图像浏览工具仍然可以根据JPEG解压方法解压显示,但并非是原始图像。实验结果表明利用构造混沌序列的方法对JPEG图像文件加密是有效的,具有加密算法简单、速度快、效果好和安全性高等特点。

小知识之哈夫曼编码

哈夫曼编码(Huffman Coding)是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫作Huffman编码。