APP下载

基于流密码的改进DES的研究

2019-09-13刘海峰曹语默梁星亮

计算机应用与软件 2019年9期
关键词:穷举明文加密算法

刘海峰 曹语默 梁星亮

1(陕西科技大学文理学院 陕西 西安 710021)2(陕西科技大学电气与信息工程学院 陕西 西安 710021)

0 引 言

数据加密标准也称为数据加密算法,是近20年来广泛使用的加密算法。后来,人们发现DES在强大攻击下太脆弱,因此使DES的应用有所下降[1]。二重DES是在DES的基础上研究出来的,其密钥长度是DES密钥长度的2倍。然而,当二重DES遇到中间相遇攻击时,有效密钥长度将减少为56位。DES易受穷举搜索攻击,二重DES易受中间相遇攻击。徐鹏等[2]提出了一种抗差分功耗攻击的DES算法,采用掩码技术增强了算法安全性;闫喜亮[3]提出将DES应用到芯片加密中,提高了电路中的安全性;谢志强等[4]提出基于前缀码的DES算法改进研究;周建钦等[5]提出DES加密算法的密钥扩展;邱伟星等[6]提出一种DES密钥延长方法。这些对DES加密算法的研究在一定程度上增强了DES的安全性,但都没有改变DES子密钥的生成方式。序列密码是密码学的一个很重要的分支,通常也称为流密码,它可以利用密钥流生成器生成一段伪随机序列,该序列即可作为密钥对明文进行加密。1949年,香农证明了只有一次一密的密码体制是绝对安全的,是牢不可破的[7]。因为密文与明文统计独立,所以即使拥有无限计算能力都无法猜测出信息比特[8]。文献[9]将RC4算法应用于移动设备上的多媒体文件的加密。本文提出基于流密码的改进DES算法,提高了算法的安全性,使得算法更难破译。

1 DES算法[10-11]

1.1 传统DES加密算法

(1) 初始IP置换。IP置换主要是将64位明文按照IP置换表按位进行重新排序,将新的64位数据分为、两部分,每部分的长度均为32位。

(2) E扩展置换。扩展置换主要是将部分的32位的输入进行处理加工,最后得到一组48位的输出。通过将第32、1、4、5、8、9、12、13、16、17、20、21、24、25、28、29共16位分别放置在两个位置,从而将32位的数据扩展为48位,具体如表1所示。

表1 扩展置换表

(3) S盒代替。将经过移位处理后的48位密钥与扩展分组进行“异或”运算得到48位新的数据,将其作为S盒的输入进行替代运算得到处理之后的数据。替代运算是将处理后的48位数据进行分组运算,将数据分成8组分别输入到8个S盒内,这样就可以得到8组4位的输出结果,即32位输出数据。

(4) P盒置换。P盒置换主要是对S盒输出的数据进行置换处理。通过将32位中的每一位进行映射,最终得到输出结果。置换运算表中的第一行第一列为16,则将S盒输出的第16位放置在第一位上,以此类推,实现置换处理,置换运算表如表2所示。

表2 置换运算表

(5) 置换。置换是初始置换的逆过程,当DES执行到第16轮时,直接将L0、R0进行结合,将合并的结果直接作为置换的输入即可得到密文。

1.2 传统DES子密钥生成算法

(1) 由于DES的密钥存在奇偶校验位,首先将密钥的第8、16、24、32、40、48、56、64位去除,使得密钥长度只有56位,然后根据选择置换将这56位分成两块C0和D0。

(2) 将C0和D0进行循环左移变化。变换后生成C1和D1,然后合并C1和D1,并通过选择置换PC-2即可得到子密钥K1(48位)。

(3) 同理,循环左移变换C1和D1可以得到C2和D2,然后合并C2和D2,采用选择置换PC-2处理合并结果得到密钥K2(48位)。

(4) 以此类推,得到K16(48位)。

1.3 算法评价

DES加密算法对于相同的明文,只要密钥不变,加密结果就会相同,这使得攻击者根据截获的明文密文对,即可分析出密钥。同时DES密钥长度只有64位(实际只有56位),并且之间存在较强的依赖性,攻击者可以通过穷举搜索的方法对DES的密钥进行破译[12-13]。

2 RC4算法

2.1 算法简介

RC4算法[14]属于流密码(序列密码)之一,主要作用是利用初始密钥经过一些置换操作来扩展密钥,生成伪随机序列。RC4算法的密钥长度范围在1~256字节之间,对于长度相同的密钥也可以产生不同长度的密钥流序列,然后通过将明文或密文与密钥流进行“异或”运算来实现加解密运算。RC4算法的优点是算法易于理解,运算速度非常快。同时,在软件和硬件中都很容易实现该算法。它广泛应用在一些协议和标准里,如WEP、WPA、SSL等。

(1) 初始化S和T首先初始化状态数组S,数组S中元素的值被按升序从0到255排列,即S[0]=0,S[1]=1,…,S[255]=255。然后建立一个数组T,该数组是包含256个元素且每个元素均以字节形式存储的数组。使用初始密钥K来对数组T进行赋值,如果密钥K的长度恰好为256个字节,则直接将K赋给T。如果密钥K的长度不足256,假设密钥长度为n,则将K的值分配给T的前n个元素,然后依次用K的值分配给T剩下的元素,直到T的所有元素均已分配到对应的值。

(2) 初始排列S设置下标变量i和j,并将i和j的值均初始化为0,将下标变量i从1~255循环,对于每一个i的取值,计算j=(j+S[i]+T[i])mod 256,然后交换S[i]和S[j]。

2.2 算法分析

RC4算法简洁易于软件实现,加密速度快,安全性比较高,密钥长度可变。关于分析RC4的攻击方法有许多公开发表的文献,但没有哪种方法对于攻击足够长度密钥(如128位)的RC4有效[15]。

3 基于RC4的改进DES算法步骤

针对RC4算法具有密钥长度可变的特点,提出一种新的基于RC4算法的改进DES加密算法,具体步骤如下:

(1) 用户随机生成一个n字节的密钥(1

(2) 初始化S和T。S中元素的值被按升序从0到255排列,即S[0]=0,S[1]=1,…,S[255]=255。设置向量T,运用初始密钥K将T的所有元素赋值。

(3) 初始化下标变量i和j值为0,将下标变量i的循环范围是从1~255,每取一个i的值,计算j=(j+S[i]+T[i])mod 256,然后将S[i]和S[j]互换。

(4) 初始化下标变量i、j和r值为0。由于每组DES加密算法需要进行16轮加密,每轮加密需要长度为48位的子密钥(即长度为6字节的子密钥),所以每组加密需要16×6=96字节长度的子密钥。假设DES算法的明文分组的组数为m,则m组明文共需要长度为96m字节的子密钥。将r从1到96m进行循环赋值,对于每一个r值,i=(i+1)mod 256;j=(j+S[i])mod 256;然后交换S[i]和S[j],同时将下标变量t赋值为(S[i]+S[j])mod 256;并将S[t]值赋值给K[r],得到96m个字节的密钥流。

(5) 将96m个字节的密钥每96个字节分为一组,即可得到m组DES加密的子密钥。将96个字节每6个字节(6字节即48位)分为一组,即可得到每组DES加密过程中16轮加密所用到的子密钥。

(6) 由于解密的需要,将随机选取的RC4算法的密钥K利用接收方的公钥进行RSA加密,并与密文一起传送给接收方[16]。

(7) 解密时,接收方利用RSA私钥对随机选取的RC4算法的密钥K进行解密,根据所选取的密钥通过RC4算法求出DES子密钥,然后执行DES的逆过程即可得到明文。

4 改进算法示例

随机选取密钥字节数n=8,并随机生成对应字节的密钥K=70399AEC769284DA,运用RC4算法生成DES加密算法所需子密钥,每一组DES加密所需子密钥的长度为768位,即96个字节。选取一组明文进行加密,该明文满足前64位与后64位相同。以明文m=computercomputer为例,首先将明文用ASCII码表示为:

m=01100011 01101111 01101101 01110000

01110101 01110100 01100101 01110010

01100011 01101111 01101101 01110000

01110101 01110100 01100101 01110010

或用十六进制表示为:

m=63 6F 6D 70 75 74 65 72

63 6F 6D 70 75 74 65 72

由此可得,需将明文分成两组进行加密。下面运用RC4算法生成DES加密的子密钥,初始密钥K=70399AEC769284DA依次经过RC4算法的以下操作:(1) 初始化S和T向量;(2) 按照一定的规则交换S[i]和S[j];(3) 循环赋值,最终得到192字节的DES加密的子密钥,如表3所示(表3中DES加密子密钥以16进制形式表示)。

表3 DES加密子密钥

续表3

运用表3中的DES加密子密钥对DES的每组明文分别进行加密,即可得到所对应的密文结果。解密时,执行该改进算法的逆过程即可将密文解密成明文,计算结果如表4所示。

表4 加解密结果

传统DES加密算法的子密钥之间是互相依赖的,容易受到穷举搜索等方法的攻击。本文提出的基于RC4的改进DES算法是由RC4算法产生密钥流。由于RC4算法产生的密钥流是伪随机序列,所以即使所加密的明文相同,也会产生不一样的加密结果。

5 安全性分析

传统DES加密密钥的破译需要进行256次穷举,本文提出的基于RC4的改进DES算法是通过RC4算法生成密钥流,将生成的密钥流作为DES的16轮加密密钥,从而将明文进行加密。攻击者如果想破译密钥有两种途径:(1) 对生成密钥流的RC4算法的初始密钥进行穷举;(2) 对生成的密钥流进行穷举。

RC4算法的优点在于它的初始密钥长度范围可以在1~256个字节之间变化,所以使用第一种破译办法需要进行穷举28+216+…+2256次;第二种途径的穷举次数与明文分组有关,由于每组加密都需要进行16轮,每轮需要48位的密钥,所以每组加密需要768位的密钥流,假设将明文分成G组进行加密,则使用第二种破译办法需要进行穷举的次数为2768G次。

同时,密钥的生成不是由密钥扩展而来,密钥之间没有相关性,所以即使攻击者截获到了部分明文以及对应密文,也没有办法推导出密钥流序列,算法的安全性大大增加,因此基于RC4的改进DES算法是安全的。

6 结 语

DES的算法设计很好,它的不安全性主要是子密钥的生成互相依赖,并且易受穷举搜索攻击。本文在DES的算法基础上,对DES子密钥的生成采用流密码的RC4算法,随机生成DES加密密钥,实现了一次一密,使得攻击者每次破译DES一组子密钥至少需要进行2768穷举,大大提高了DES的安全性和可靠性。

猜你喜欢

穷举明文加密算法
强调举例,提高学生数学思维的深刻性
浅谈初中代数式最值的求解技巧
奇怪的处罚
奇怪的处罚
基于小波变换和混沌映射的图像加密算法
四部委明文反对垃圾焚烧低价竞争
分布式系统中的一种特殊规格字符集分片算法
Hill加密算法的改进
数独问题的一种简单解法