信息技术和网络通信的发展,尤其是Internet的高速发展,大大加快了全球信息化的进程,同时信息安全方面的问题越来越多,这也引起人们的高度重视。不解决信息安全问题,信息化将不可能健康地发展。数据加密是保证信息安全的基本技术。它以很小的代价为信息提供了一种有效的安全保护,国内外学者对比进行了有效的研究。本文提出了一个基于多模式加密算法的文件加密保护方案来保证计算机中信息的安全。

为了保护文件的保密性和完整性,防止信息被窜改、伪造和假冒,传统的方法是对同一个文件采用单一模式的加密方案。本文提出的文件加密保护方案是对同一文件不同内容用不同加密方法的多模式加密:采用128bits(16Bytes)密钥,使用对称密码算法3DES、IDEA、AES中的一种(可选)和类似CBC(密码分组链接)的加密模式对原文件进行加密以保证数据的安全;另外使用散列算法MD5、SHA1、SHA-256中的一种(可选)对原文件生成散列值,通过校对散列值检测文件是否被更改,从而保证文件的完整性。该方案较传统的方案有更高的安全性。

1 本文涉及的加密和散列函数算法

本文主要使用了对称密码算法3DES、IDEA、AES和类似CBC(密码分组链接)的加密模式,散列算法采用了MD5、SHA1、SHA-256等对原文件生成散列值,通过校对散列值检测文件是否被更改,下面分别进行简单介绍。

1.1 加密算法

DES用56bits密钥将64bits的明文转换成64bits的密文。其中,密钥总长为64bits,另外8bits是奇偶校验位。DES的密钥存在弱密钥、半弱密钥等。实用中较多是它的改进型,即用最小密钥进行三重加密。IDEA算法基于“相异代数群上的混合运算”设计思想。其密钥长度为128bits,是DES密钥的两倍多,分组长度为64bits。一些文献讨论IDEA算法的不足,但目前尚未有进行有效攻击的方法。AES 算法其设计策略是宽轨迹策略(Wide Trail Strategy)。其使用128 、192 或256bits长度的密钥,对于128、192或256bits的加密分组进行加密(密钥跟加密分组长度无须相等共九种组合)。

1.2 密码模式

分组加密算法在加密数据时可以分为四个模式。ECB是最简单和最快的分组密码模式,当然也是最弱的。本文加密文件头使用该模式。在CBC 模式下,每一个分组加密之前必须与前一个分组的密文进行一次XOR 运算,之后再进行加密。因此,每一个区块的加密结果均会受到之前所有分组内容的影响。本文加密文件体系用该模式。

1.3 单向散列算法

本文所用的单向散列函数是消息摘要算法MD5 和安全散列算法SHA。MD5以512bits分组来处理输入的消息,且每一分组又被划分为16个32bits子分组,经过一系列的处理后算法的输出由4个32bits分组组成,将这4个32bits分组级联后将生成一个128bits的散列值。 其运算速度非常快。SHA设计思想和MD5 相似,但是比MD5 具有更长的散列值,因此更能够抵抗攻击。SHA1有160bits散列值。具备扩展转换,并且为产生更快的雪崩效应而将上一轮的输出送至下一轮。SHA-256是SHA1的改进:具有更大的数字指纹、更复杂的非线性函数和压缩函数、每一步均有唯一的加法常数等。因此,SHA-256具有更高的安全性。

2 强加密算法文件加密保护方案的实现

下面介绍该文件加密保护方案的具体实现思想。主要包括文件的加密和解密两个过程。

2.1 文件的加密过程

用户选择好要保护的文件、加密受保护文件头部信息的密码算法、加密原文件的密码算法、散列算法、加密密钥。

使用用户选择的散列算法求出原文件的散列值,然后连同原文件的长度、加密原文件的密码算法、散列算法,这四部分作为受保护文件的头部信息加密后写入受保护文件。头部信息的内容如下:前16Bytes包含了原文件的长度、加密原文件的密码算法、散列算法,接下来的16或32Bytes则是原文件的散列值。其中MD5(128bits)为16Bytes,SHA-256(256bits)为32Bytes,而SHA1(160bits)为16Bytes,剩余的32bits放到前16Bytes空闲的第13-16Bytes中。

使用用户选择的加密受保护文件头部信息的密码算法对头部信息以ECB(电子密码本)模式进行加密。在这里需要注意的是无论选择3DES、IDEA,还是AES,其密钥长度均为128bits。IDEA的密钥长度为128bits,可直接使用;AES的密钥长度和分组长度都是可选的,在本方案中它使用128bits的密钥和分组;对于3DES,它使用了文献[3]介绍的方法,先用128bits的密钥产生三个64bits的密钥,再使用DES算法加密。

接下来,本文使用用户选择的加密原文件的密码算法对原文件进行加密。在加密时用到了一个基于CBC模式,它可以下面的公式表示:Ci=E(PiIV);IV=IVCi;在这个加密模式中,第i个密文分组是由第i个明文分组与初始向量IV异或后再使用具体的密码算法加密得到的,然后IV与第i个密文异或得到新的IV以备对第i+1个明文分组加密时使用。最初的初始向量IV是由受保护文件头部的密码算法产生的子密钥的异或和,不同的密钥产生不同的IV,不同的密码算法产生不同的IV。在本方案中,各个密码算法先产生128bits的IV,在加密原文件时再灵活使用(在加密原文件时,若用户选择了AES算法则128bits的IV可直接使用;若选择了3DES或IDEA,则要将128bits的IV分为前后两个64bits,再将它们异或得到一个64bits的IV来使用)。

各个密码算法产生128bits初始向量IV的方法:AES产生44个子密钥,长度为32bits。将其按顺序分成四组异或得到128bits的初始向量IV,如图2所示。DES先将128bits的密钥分成两个64bits的密钥,生成64个子密钥(DES产生16个子密钥,长度为48bits,在本方案中一个48bits的子密钥被分成两个24bits的子密钥),接着将64个子密钥平均分成四组异或得到128bits的初始向量IV。IDEA产生52个子密钥,长度为16bits。在本方案中,使用前48个子密钥将其合并成24个32bits的分组,然后按顺序分成四组异或得到128bits的初始向量IV。

最后要说明的是,由于DES、IDEA的分组长度为64bits,AES为128bits,若将原文件制作为受保护文件后,受保护文件的长度是64bits的倍数而不是128bits的倍数,那么密码分析者即可确定加密原文件的密码算法不是DES就是IDEA,这样会降低破译的难度。在加密完原文件后,将检测受保护文件的长度是否为128bits的倍数,若不是128bits的倍数则再加上一些随机数据使其为128bits的倍数(是128bits的倍数必然是64bits的倍数,那么密码分析者将不能从文件长度中确定密码算法了)。

2.2 文件的解密过程

(1)软件根据用户提供的解密密钥、受保护文件的头部信息密码算法解密受保护文件的前16Bytes,获取原文件的长度、加密算法、散列算法信息;

(2)根据散列算法产生的散列值的长度读取受保护文件中相应的字节,将其解密得到原文件的散列值H1;

(3)根据解密受保护文件的前16Bytes时得到的原文件加密算法信息和原文件的长度,解密受保护文件剩余部分,将解密得到数据写入文件;

(4)对上一步得到文件用解密受保护文件的前16Bytes时得到的散列算法信息求出该文件的散列值H2;

(5)比较H1与H2,若两者相等则表示文件未被修改;若不等则表示文件已修改。

3 试验结果和该方案的特点

对该方案的实用性进行如下试验:分别对一个txt文件(49.7KB),一个MP3文件(4.95MB),一个exe文件(11.2MB)进行加密和解密试验,使用的散列算法: SHA256,文件头部用3DES加密,文件体分别用3DES、IDEA、AES进行加密,从试验结果可看出该方案的执行时间并没有大幅度的提高,但安全性有很大提高,数据如表1、2(CPU1.1GHz,256MB内存)。

其中,IV是受保护文件头部的密码算法产生的子密钥的异或和。这种加密模式保留了CBC的优点——增加了安全性,而且一旦密文遭到修改其错误将会扩散到修改点以后的全部密文,这样可以更加容易地检测到改动。这些方法较好保证了数据的完整性。在一定程度上将三种密码算法混合起来,增加了破译的难度。密文遭修改后,在解密时该错误会被扩大,可更加容易发现密文被改动。

该方案目前也存在着一些不足:密钥过长(128bits),解密时需提供受保护文件头部信息的密码算法。加密保护文件头部信息时只用了电子密码本模式(ECB),降低了安全性。密文被修改后无法正确解密恢复原文,容错性不理想。

该方案用多种模式加密算法对同一文件进行加密。它是对已有的加密方案的有效改进和整合。虽然该方案还有一些不足之处,但较传统单一模式的加密方案其能更好保证文件的安全性和完整性。

小知识之散列函数概念:

散列函数(或散列算法)是一种从任何一种数据中创建小的数字“指纹”的方法。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。