在多数情况下,数据加密是保证信息机密性的唯一方法。据不完全统计,到目前为止,已经公开发表的各种加密算法多达数百种。如果按照收发双方密钥是否相同来分类,可以将这些加密算法分为私钥加密算法和公钥加密算法,而分组加密算法属于私钥加密算法。粗略地讲,分组加密算法是用一个固定的变换对一个比较大的明文数组进行操作。
一、分组加密算法的发展
分组加密算法即对明文文件加密时,首先需要对明文进行分组,每组的长度都不相同,然后对每组明文文件分别加密得到等长的密文。分组加密算法的特点是加密密钥与解密密钥相同。分组加密算法主要有DES加密算法,AES加密算法。
1、DES加密算法
DES加密算法利用56比特串长度的密钥K来加密长度为64位的明文,得到长度为64位的密文。其主要流程如图:
DES加密算法由四个部分组成:
(1)初始置换函数IP:
X0 = IP(M) = L0R0;
(2)获取子密钥Ki:流程图如图所示。
其中第1、2、9、16轮是循环左移1位,其余轮是循环左移2位;
(3)计算函数F:
F函数由扩展置换(E)、异或、S盒替代和P盒置换组成,可表示为f (Ri-1 , Ki) = P(S(E(Ri-1) ⊕ Ki));
(4)末置换函数IP-1:
C = IP-1(R16L16) 16次迭代可表示为:Li := Ri-1 Ri := Li-1 ⊕ f (Ri-1 , Ki),i = 1, 2, …, 16
2、多重DES加密算法
为提高DES加密算法的安全性能,并充分利用有关DES的现有软件和硬件资源,可以使用多重DES加密算法。多重DES就是是用多个密钥利用DES对明文进行多次加密。使用多重DES可以增加密钥量,从而大大提高抵抗对密钥的穷举搜索攻击的能力。
(1) 双重DES加密算法
设K1和K2是两个长度为56为的密钥,给定明文M,则密文为 C = Ek2(Ek1(M))。其模型为:
如果对于任意两个56为的密钥K1和K2,都存在一个56位的密钥K3,使得DESK2(DESK1(M))=DESK3(M),则双重DES就等价于是用一个56位的单重DES。在这种情况下,双重DES以及任意多重DES都没有任何实际价值,因为它们不仅没有提高安全性能,反而增加了计算量。幸运的是,已经证明双重DES并不等价于是用一个56位密钥的单重DES。
(2)三重DES 加密算法
设K1,K2,K3是三个长度为56位的密钥。给定明文M,则密文为C=DESK3(DESK2-1(DESK1(M))),其模型为:
在三重DES加密算法中,如果K1=K2或K2=K3,则三重DES就退化为使用一个56位密钥的单重DES。在三重DES的中间一步采用解密形式的目的仅仅是为了可以和用三重DES对单重DES加密的数据进行解密。
3、AES加密算法
AES加密算法又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。
AES加密算法被设计为支持128/192/256 bit (/32=Nb)数据块大小,128/192/256 bit (/32=Nk)密钥长度,在10进制里,对应3.4×1038、6.2×1057、1.1×1077个密钥。
AES的迭代次数Nr,分组长度Nb,与密钥长度Nk的关系如表:
AES加密算法中,各种运算是以字节为单位来进行处理,分组长度为128位,分为16个字节,按顺序排列为4×4的矩阵。每一轮迭代都经历字节代替变换SubBytes(),行移位变换ShiftRows(),列混合变换MixColuMns(),和圈密钥加法变换AddRoundKey()。需要注意的是第一轮迭代之先进行一个AddRoundKey(),最后一轮迭代只进行SubBytes(),ShiftRows()和AddRoundKey()。
字节代替变换是一个关于字节的可逆非线性变换,包括有限域 GF(28)上的求逆运算和有限域GF(2)上的放射运算。可以通过查字节代替表来完成字节代替变换; 行移位变换对一个状态的每一行循环左移不同的位移量。第0行不移位,第一行循环左移1个字节,第二行循环左移2个字节,第三行循环左移3个字节; 列混合变换对一个状态逐列进行变换,它将一个状态的每一列视为有限域GF(28)上的一个多项式,并与固定多项式a(x)={03}x3+{01}x2+{01}x+{02}相乘后模x4+1。
圈密钥加法变换将一个圈密钥按位异或到一个状态上,圈密钥的长度为4个字节,圈密钥按顺序取自扩展密钥。扩展密钥是由原始密钥经过扩展后得到的。
二、分组加密算法的安全性
1、DES加密算法的安全性
(1)DES加密算法 的密钥长度( 56 位)可 能太小;
(2)DES 加密算法的迭代次数可能太少;
(3)S 盒中可能有不安全因素;
(4)DES 加密算法的一些关键部分不应当保密;
(5)DES加密算法的密钥中存在弱密钥,半弱密钥和互补密钥。
2、 双重DES加密算法的安全性
双重DES加密算法无法抵抗中途相遇攻击,设K1和K2是两个长度为56位的密钥,C=DESK2(DESK1(M)),则显然有DESK1(M)=DESK2-1(C)。假设明文M以及与之对应的C已知,密钥K1和K2未知。现在我们来利用中途相遇攻击的方法找到正确的K1和K2。
首先,用所有256个可能的密钥K1’对M进行加密,得到256各密文C’,将所有的(K1’, C’)按C’从小到大或从大到小的顺序排成一个表L。
然后,用每一个可能的密钥K2’对C进行解密得到C’’,在表L中查找C’’。满足C’’= C’的(K1’, C’)和(K1’, C’’)可能有很多。
因此,当C’’= C’时,再选择一个明文M’以及对应的密文C1,检验C1=DESK2’(DESK1’(M’))是否成立。
如果上式成立,则我们就接受K1’和K2’为正确的K1和K2。
3、三重DES加密算法的安全性
三重DES加密算法可抵抗中途相遇攻击,可以很好的抗穷举攻击,使用3个不同的密钥,密钥将达到168位,安全性是很好的(目前没有什么密码分析方法可以不使用穷举密钥来攻击DES)。但3重DES加密算法使用不同的3个密钥会增加你系统秘钥管理的负担,软件实现的效率低(每个分组作3次DES _ 变换,DES变换的设计初衷本来就是方便用硬件实现),只支持64位分组(对大量数据来说,分组太小了)。
4、AES 加密算法的安全性
AES加密算法对密钥的选取没有任何限制,每轮常数的不同消除了密钥的对称性,密钥扩展的非线性消除了相同密钥的可能性,加解密使用不同的变换,消除了在DES里出现的弱密钥和半弱密钥存在的可能性。能有效地抵抗密钥已知的攻击方法的攻击,目前最有效的攻击还是穷尽密钥搜索攻击。
分组加密算法的安全性主要依赖于密钥,通过某个置换来实现对明文分组的加密变换。为了保证加密算法的安全强度,对加密算法应有如下要求:
(1)分组长度足够大。当分组长度较小时,分组密码类似于古典的代替密码,它仍然保留了明文的统计信息,这种统计信息将给攻击者留下可乘之机,攻击者可以有效地穷举明文空间,得到密码变换本身。
(2)密钥量足够大。分组密码的密钥所确定密码变换只是所有置换中极小一部分。如果这一部分足够小,攻击者可以有效地穷举明文空间所确定所有的置换。这时,攻击者就可以对密文进行解密,以得到有意义的明文。
(3)密码变换足够复杂。使攻击者除了穷举法以外,找不到其他快捷的破译方法。
小知识之分组加密
分组加密是将明文消息编码表示后的数字(简称明文数字)序列,划分成长度为n的组(可看成长度为n的矢量),每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列。