任何文字都有一个符号表,传统密码方法中,许多是以符号表的置换来达到掩盖明文信息的,典型的如:移位密码、单表置换密码等幽,单表置换密码采用明、密字母“一一对应”的方式实现对明文的加密,因此明文的很多特性都没有被掩盖,如自然语言的字母使用频率,双字母、三字母组合规律等都会反应到密文中,破译者只要积累了足够长度的密文,利用统计、分析方法,就可以实现密文的破解。

为了弥补单表密码明、密文字母“一一对应”的缺陷,人们想到“一多对应”的方式,即一个明文字母可以由多个密文字母来替代。按照这种思路构建的密码体制被称为多表密码体制,维吉尼亚密码(V一genre)就是其典型代表之一,多表密码增加了破译的难度,提高了保密性,但由于仍然是以单个字母为基础的代换,还是会被密码分析者利用各种统计方法一一破译。在经典单表密码、多表密码的基础上,提出了一种新的多表密码体系,但是该方法在实际应用中的加密效率和强度还存在很多不足,本研究在深入研究单表置换密码的基础上,结合字节交换和循环移位思想,提出了一种基于动态循环代替表的加密算法。

一、加密算法的描述

1、密钥管理问题的解决

现代密码技术分为对称加密体制和非对称加密体制两类,对称加密体制中通信双方需要采用一种安全的方式来保证密钥的共享,非对称加密体制通信双方各有一对密钥,不需要密钥的交互。一般来说,非对称加密体制对数据的处理效率没有对称加密体制效率高,但是密钥却更易于管理。因此,在实际应用中,可以考虑引入非对称加密体制进行双方密钥协商,然后利用协商的密钥采用对称加密体制进行数据的加密解密,这样就可以最大程度地发挥两类密码体制的优势。

椭圆曲线密码学(ECC)是基于椭圆曲线数学的一种公钥密码方法,其数学基础是利用椭圆曲线上的有理点构成Aebel加法群上椭圆曲线离散对数的计算。ECC作为一种典型的非对称加密体制,其应用非常广泛,特别是在处理短消息时,对带宽的要求非常低,因此,在该加密算法的设计过程中,引入了ECC密码技术进行密钥协商,解决算法使用过程中的密钥管理问题。

2、加密算法描述

设待加密的明文字符序列M=(m1,m2,…),密钥为K,生成的密文字符序列为C=c1,c2,…)。基于动态循环代替表的加密算法数据处理过程如图1所示。

基于动态循环代替表的加密算法

基于动态循环代替表的加密算法分为三个阶段:会话密钥的协商阶段;初始代替表的生成;数据处理阶段,三个阶段的处理过程可用下面的步骤进行描述。

Step1协商会话密钥K,由A选取加密密钥K,利用B的公钥对K采用ECC加密技术进行加密。当B收到这个加密后的信息时,用自己的私钥进行解密,就得到了双方此次通信的共享密钥,然后返回给A一个OK信息,至此会话密钥的协商阶段完成。

Step2生成初始代替表:

1)A调用设计的散列函数对加密密钥K进行HASH变换,生成一个4字节的无符号整数seed,srand是Windows操作系统随机数发生器的初始化函数,在此将seed作为该初始化函数的初始化种子,生成一组256个字符OXOO - OXFF)的伪随机排列,记为置乱表t1。

2)A调用MD5函数对加密密钥K进行HASH变换,生成一个32字节的消息摘要,利用128级的线性反馈移位寄存器LFSR)对其进行运算选位,生成一组256个字符(OXOO -OXFF)的伪随机排列,记为置乱表t2。线性反馈移位寄存器具有良好的随机特性,是一种研究得非常成熟的序列生成方法,己被广泛地应用于密码技术、保密通信技术等方面。

3)以置乱表t1,和t2形成一张初始代替表T,至此,初始代替表的生成阶段完成,初始代替表生成器如图2所示。

基于动态循环代替表的加密算法

Step3数据处置阶段,为了提高加密、解密速度,以每次读取两个字节进行数据处理。

动态循环代替表的运算规则如下:

1)读取两个明文字节m1和m2,在表t1中分别查找m1和m2的位置,并通过动态循环代替表T查找其在表t2中的置换字符C1和C2,则C1和C2即为明文字符m1和m2的相应密文。

2)交换动态循环代替表中t2表的c1和C2字符。

3)t1表保持不变,将t2表循环左移7个字节,得到一张新的t2表,t1表和t2表形成一张新的动态循环代替表T。

动态循环代替表流程图如图3所示,其中T(m)表示明文字符m通过查找动态循环代替表T所得的密文字符,Swap(c1,C2)表示对动态循环代替表中t2表的C1和C2字符进行交换,string_Shift(t2,7)表示将代替表的右2表循环左移7个字节。

基于动态循环代替表的加密算法

数据加密过程可以描述为:

1)读取发送的明文数据并计算其长度filelen。

2)判断明文数据长度filelen的奇偶性,如果filelen为偶数,则从发送的明文数据M中每次读取两个字节,调用动态循环代替表进行数据加密,直至加密结束。如果filelen为奇数,则对明文数据M的前filelen-1个字节,每次读取两个字节,调用动态循环代替表进行数据加密,直至对这filelen-1个字节加密结束,此时得到一张最新的动态循环代替表。对最后一个字节,通过查这张最新的动态循环代替表得到密文字符。

至此,加密过程结束。

Step4 A将加密所得的密文C发送给B。B收到数据以后按照设定的方法进行解密,就能得到消息数据M。

3、解密算法描述

整个解密过程中B在得到会话密钥K以后也要采用同样的算法来产生初始代替表,用于得到密文C后进行数据的解密,对相同的会话密钥K,B通过Windows操作系统伪随机数发生器产生的O到255的伪随机排列与A相同,即A和B产生的置乱表t1相同,同样,.对相同的会话密钥K,A和B通过128级LF-SR产生的置乱表t2也相同。因此,A和B加解密过程中使用的初始代替表相同。在解密过程中A、B通过调用动态循环代替表进行数据解密,直至解密结束。

二、加密算法分析

1、密钥管理

对于一个有n个节点的网络,需要一个共享密钥K但是当n比较大的时候,过多的节点共享一个密钥就难以保证密钥的安全性,如果是采用对称加密机制,节点间两两共享一个密钥,那么网络中就需要:

基于动态循环代替表的加密算法个密钥。当n比较大时,这个数目就非常巨大,不易管理。

而在本文引入密钥协商的基于动态循环代替表的加密算法中,由于引入了ECC密码技术进行会话密钥协商,网络本身需要管理的只有每个节点的密钥,网络中的每个节点都有一个公开密钥和一个私有密钥,公开密钥是公开的,其他节点都能查到;而私有密钥只有每个节点自己知道。网络对密钥的更新管理也只需要负责每个节点的这些密钥即可,这大大的减轻了网络中的密钥管理问题。

2、数据处理效率

基于动态循环代替表的加密算法采用对称密码体制中的代替作业方式对数据进行加密,其动态循环代替表主要操作包括字节交换和字符串的循环移位,数据处理速度快,比如,对大小为100 k的doc文件加密,平均速度只需大概0.1s,能够很好满足用户需求。

3、安全性分析

信息加密的目的是维护明文或密钥的安全,防止破译著进行密码攻击,下面采用密码分析过程中常用的穷举法和分析破译法对该加密算法进行分析,并对加密密钥的雪崩效应进行测试。

(1)穷举法

又称完全试凑法,它对截获到的密文用各种可能的密钥进行试译,直到获得有意义的明文为止,基于动态循环代替表的加密算法的代替表是分别利用设定的散列函数和MD5摘要函数对密钥K进行HASH变换,分别生成4字节和32字节的消息摘要,然后再分别通过基于操作系统的伪随机数发生器和基于128级LFSR伪随机数发生器生成的两组O到255之间的伪随机排列,作为初始代替表,因此,初始代替表由密钥K决定,密钥长度不应太短,假如使用16字节长的密钥,则密钥共有2128种可能,试图穷举密钥显然是不切实际的。

(2)分析破译法

破译者利用密文所用自然语言的各种统计特性,与密文中出现的字母或字母组合的统计特性进行对比,从中提取出明文与密文之间对应或变换关系,在该加密算法中,一个明文字符可以对应多个密文字符,最多可以对应256个,而同一个密文字符,也可以对应多个明文字符,对不同明文,有可能加密成相同密文。对于明文中出现相同的字符,如果不是一次读取进行处理的两个字符,则加密后的字符可能不同,因此,明文的很多特性被很好的掩盖,无法通过应用频率分析和自然语言的规则进行破译,本研究采用F值检验来测试加密效果,设数据文件中比特O出现次数为n,比特1出现次数为n1,则比特o的T值为:基于动态循环代替表的加密算法,比特1的T值为基于动态循环代替表的加密算法:整个数据文件的T值为:基于动态循环代替表的加密算法

比如用密钥ilovechina对《Gone With The Wind》一文进行加密,加密前后O、1频率分布分别如图4和图5所示。可以看出,密文O、1比特几乎各占50%,T值趋近于O,一加密效果非常好。

基于动态循环代替表的加密算法

为了更好地分析加密效果,选择RC4算法进行比较。RC4流密码技术以随机置换为基础,是一个可变密钥长度、面向字节操作的流密码技术,这里选取500个测试文件,考虑到测试的全面性,将测试文件分为10组分别为txt文件,pdf文件,doc文件,exe文件,jpg文件,rar文件,xls文件,bmp文件,mdb文件,ppt文件),每组随机选取大小不同的50个文件作为测试用例,测试结果如表1所示。

从表1看出,基于动态循环代替表的加密算法对txt文件,exe文件,rar文件的加密效果相对较好,对pdf文件,doc文件,jpg文件,xls文件的加密效果与RC4的加密效果相比略显不足,另外,使用基于动态循环代替表的加密算法加密所有文件后的的平均T值为0.8353,两者相近,可以看出,本研究提出设计的加密算法基本能够达到RC4算法的加密效果。

基于动态循环代替表的加密算法

还对密文分别进行8比特和16比特状态统频,重码分析,线性分析等多种密码分析方法,结果表明,该算法能够优秀的抵抗多种攻击,具有较好的安全性。

(3)密钥雪崩效应测试

在密码算法中,如果明文或密钥发生一个比特的变化,都会导致密文的巨大变化,基于动态循环代替表的加密算法在生成初始代替表时,要先分别利用设计的散列函数和MD5函数对密钥K进行HASH变换,因此,密钥的一个比特改变会导致初始代替表的大幅度改变,进而导致加密数据的大幅度改变,算法安全性非常高,为了检测本算法加密密钥的雪崩效应,采用正态总体均值与方差的区间估计方法密文变化率平均值的置倍度为1-α的置信区间为:

基于动态循环代替表的加密算法

这里选取200个数据进行测试,将其分为5组,每组40个,在测试中,每组采用相同的明文,测试密钥出现一个比特变化时密文的变化情况,测试结果如表2所示。

基于动态循环代替表的加密算法

从表2测试结果可以看出,每组测试数据的密文变化率之间虽然存在着一定的差异;但是当密钥出现一个比特变化时,密文的变化率都超过了99.5%,200份数据的密文平均变化率为99. 607%,并且变化率位于99.607%±1%范围的置信程度为99%,变化率的均方差小于0.10-10。因此,本算法加密密钥具有很稳定的雪崩效应。

4、加密算法缺陷分析及改进意见

该加密算法每次加密两个字符,若一次读取进行处理的两个字符相同,如AA,则本次加密结果相同。

为了解决这个问题,可以采取如下方法解决:

Step1先用本文加密算法生成一张初始代替表T。同样,设定基于操作系统伪随机数发生器产生的O到255伪随机排列为t1表,基于128级LFSR伪随机数发生器产生的O到255伪随机排列为t2表,由t1表和t2表构成初始代替表。

Step2每次加密过程中读取一个字符m,在tl表中查询其所在位置W21,通过查代替表查询密文字符c,在tl表中查询密文字符c所在位置W22。

Step3交换t2表中W21位置和W22位置的两个字符,再将t2表循环左移7个字节,形成一张新的代替表Z回到Step2,直至加密结束,该方法能够有效解决上述问题,但是却在一定程度上降低了数据加解密速度。

小知识之雪崩效应

雪崩效应就是一种不稳定的平衡状态也是加密算法的一种特征,它指明文或密钥的少量变化会引起密文的很大变化。对于Hash码,雪崩效应是指少量消息位的变化会引起信息摘要的许多位变化。