DES的设计思路Word格式.docx
《DES的设计思路Word格式.docx》由会员分享,可在线阅读,更多相关《DES的设计思路Word格式.docx(16页珍藏版)》请在冰点文库上搜索。
![DES的设计思路Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/da292ca3-4abf-4d03-8a99-7176ff9a8f54/da292ca3-4abf-4d03-8a99-7176ff9a8f541.gif)
1、可逆正确性的原因(以SDES为例)
我们知道任何算法的解密过程都必须是原算法的严格的逆才可以,但是
DES的解密过程与加密过程用相同的步骤相同的流程,唯一的区别就是在解密
时要先用K2后用K1。
为什么会出现这种现象呢?
首先请看下页的SDES的流程
图以及对照表:
由下表可以知道SDES中的解密过程是严格成立的。
因为任何数与其自身进行模2加后的结果都是0。
(主要表现在解密是函数F上)。
正由于其可逆是完全成立的,故F函数中的运算可以随意定义。
DES中的解密也和SDES中的一样,只不过是经过16轮的迭代,子密钥多几个而已,它们都因为模2加和严格
的逆而使得其加密和解密使用同一个流程。
密文
加密
解密(AL,AF为记号)逆序
对应
L0=IP(明文)
明文=IP-1(AL2,AR2)
IP-1=(IP)-1
R0=IP(明文)
AL2=AL1f(AL1,K1)
AL2=L0f(R0,K1)f(R0,K1
)=L0
L仁R0
AR2=AR1
AR2=L1=R0
R仁L0f(R0,K1)
AL1=AL0f(AR0,K2)
AL1=L1f(R1,K2)Lf(R1,K2
)=L1
R2=R1
AL1=AR0
AL1=AR0=R2;
AL1=R1
L2=L1f(R1,K2)
AR0=IP(密文)
AL0=L2;
AR0=R2
.、.、-1
密文=IP(L2,R2)
AL0=IP(密文)
-1-1
IP=(IP)
2、f函数
R0/R1
E/P扩展置换
41232341
SDES中的F函数的运算过程如上图所示。
首先是R0或R1进行扩展置换,然后再与Kn进行逐位异或运算,然后结果从中间分成两组,分别进入相应的S
盒,S盒的输入有4位,首尾合在一起构成相应的行,中间决定列,然后找出相应的正确的输出。
两组输出再进行P4置换后成为F的最终的输出结果。
S盒的查询分布由下表给出。
S盒所呈现出来的原因这里先不作讨论,放在后面DES
中的S盒的分布一起讨论。
S盒的分布
S1
00
01
10
11
S2
3、DES中的几个问题
首先看流程图:
K2
K16
逆初始置换IP
L16
R16
1
■1
DES的加密过程如上图所示,我们可以看到它与SDES相差不大,其区别就是DES比SDES多了14轮的迭代。
它与SDES一样,都有
Li=Ri-i
Ri=Li-if(Ri-i,Ki)
i=1,216的结构。
所以其解密正确性毋庸置疑。
其IP置换以及IP逆置换由下表给出,观察这两个表我们不难看出IP表的规律为:
n为任一个元素的数值,n=8X+Y,Y|「[1,8];
Y=2z+a,a[0,1]。
那么n的对应的位置为(8-x)行(z+5a洌。
直观的看就是按从上到下从右到左的顺序把1--64
初始置换IP
逆初始置换IP1
58
50
42
34
26
18
2
40
8
48
16
56
24
64
32
60:
52
44
36
28:
20
12
4
39
7
47
15
55
23
63
31
621
54
46
38
301
22
14
6
62
30
37
5
45
13
53
21
61
29
57
49
41
33
25
17
9
60
28
59
51
43
35
27
19
3
排成一个8$的方阵,列不动,把该列中双号元素提上,单号元素压下既成该
主密钥K
PC-1
IP矩阵。
C0
D0
LS1
C1
D1
PC-2―K1
LS2
C2
D2
PC-2
LS16
IP-1的规律为:
设n为任意一个元素,n=8x+y,y[1,8],x=4z+b,z[0,1],那么元素n所对应的位置是(9-y)行,(2+2b-z)列。
直观的看就是把1---64这64个数字按从下到上从左到右的顺序排成8>
8的方阵。
然后行不变,把1,2,3,4列插到5,6,7,8相应列的后面这就成了IP-1的方阵。
主密钥K生成子密钥Kn的过程如上图所示;
首先主密钥K经过PC--1置换去掉逢8的位。
这些位是奇偶校验位,它用于检查密钥K在产生和分配过程中
可能发生的错误。
并重新排列,再从中间分为两部分C0和D0,再进行循环左
移变换LSn,再进行PC-2变换取其中的48位形成子密钥Kn。
PC-1,PC-2以及循环左移的位数如下表所示:
循环序号
左移位数
PC-1,PC-2表
选择置换PC-1
选择置换PC-2
仃
r58
p4
P281
:
10:
12
35|
119
126
81
30:
r40:
48:
16
(45
371
491
134
531
循环位表:
我们看循环左移的这个表,会发现这个表咼度对称且所有左移位数之和为
28,就是说C0,D0经过16轮的循环左移之后,又回到了初始的状态。
这就意味着这16轮左移把所有可能的情况都包括了。
对于任意一个n阶的有序元素集,
最多经过n次循环左(右)移后一定能出现和原来一样的序列,所以DES最多
可以选择28轮迭代能产生最多28个不同的子密钥Kn。
这28个子密钥可以是全部循环1位的,也可以是循环移动a位的,只要a满足(a,n)=1,也就是说循环左移位数与n是互素的。
观察PC-1置换,不难发现,其有如下规律:
Co、Do分别按从左到右,
从上到下的顺序排列,并按模除8余同且从大到小排列的顺序排列出来。
Co是
模1、2、3,Do是模7、&
5;
模4按相同的从大到小的顺序排在空缺的位置上即可。
Ri-1
EP
iJJJJIi
S1S2S3S4S5S6S7S8
亍十十tw
EP置换
置换函数P
r8
9:
P12
13n
r24
251
DES中的f函数如上图所示,32位的Ri-i经EP扩展置换后变成48位的。
然后与48位的子密钥Ki进行模2力□,其结果按从左到右每6位一组进入相应的S盒。
这6位首尾放一起作为行,中间4位作为列,来查S盒表。
S盒表的结构由于太大,参见毛明著《大众密码学》的P88-P89页或陈鲁生著《现代密码学》的
P47页的表。
每个S盒的输出为4位,共有32位,进入P盒置换后,作为函数f得输出。
观察EP置换,可以发现其满足以下规律。
设科为第i行第j列元素,贝U
Aij=(4(i-1)+(j-1))mod(32)
Aij=32(i=1且j=1,或i=8,j=5)
直观的看,就是按1-32按顺序排成8>
4的矩阵,然后在该矩阵的左边盒右边各添加相邻的小一列和大一列元素而成(SDES中也有类似的情况)。
4、DES设计思想
DES是一个数据加密的方法,加密的原因就是让人难以破译,最好是不能破译。
这就要求我们把明文的统计特性隐藏在密文中,以防统计密码分析的攻击。
另外,明文分组和密钥都要具有一定的长度,以防穷举者的攻击。
总之要使明文
密文有最大限度的可能性,使密码破译者不知如何下手,只有用阶数很大的穷举方法来解密。
DES采用Feistel结构,而Feistel结构是几乎所有分组密码所常用的对称加
密算法。
Feistel结构的共性就是Li=Ri-1
Ri=Li-1+f(Ri-1,Ki)
所以由前面的讨论可知Feistel结构是可逆的。
DES是在Feistel结构的基础上加一个初始置换IP和逆初始置换IP-1在首尾。
我们可以看到他们两个也是互逆的,所以IP、IP-1也是可以自由定义的。
综上所述,DES中IP、IP-1可以自由定义,但必须是互逆的。
函数f也可以自由定义,但必须使得其输出的结果能与Ln进行相异或,确切的说,就是能
使这个程序继续下去。
F函数的一个条件就是对于相同的Rn-1和Kn再次输入f中要有相同的输出,不能变化,否则解密就不能再用这个流程了。
对f函数内的
EP扩展置换也是可以自主定义的,但条件是其扩展(缩小)后的位数要与子密钥Kn位数相同,以便继续下一步;
进入S盒后,S盒也可以自由定义,条件是尽可能的使其呈现出随机性,S盒的构造一般是用布尔函数来确定的,具体S盒
的规律和性质已超出本文的范围,这里暂不作讨论;
置换函数P也是可以自由定义条件是使运算的输出尽可能出现随机性。
我们现在用的DES中,S盒是通用
的,若第一轮到第十六轮分别用不同的S盒的话,那么解密时不仅要调整子密
钥的使用顺序,同时还要调整S盒的调用顺序,以便能达到使其逆成立。
在主密
钥生成子密钥的过程中PC-1,PC-2以及每一轮的循环左(右)移位数都可以自主定义,主要限制是要让主密钥的位数运用要尽量均衡,不能只用主密钥的一部分,而弃用其他位置的元素,这样才能给密码攻击者造成最大的困难。
我们可以看到DES中有这么多可以修改的地方,所以它被称为数据加密标准,也就是说它给我们提供了一种数据加密的流程,一种模式。
基于它的影响上
世纪后期又出现了IDEA(InternationalDataEncryptionAbgorithm国际数据加密算法)、三重DES、Blowfish、CAST128、RC2、RC5等常规加密算法。
这些算法的密码难度都比DES要高,其中以Blowfish的破译最为困难。
下面就简要的介绍下Blowfish的流程。
5、Blowfish算法
我们可以看到Blowfish的主加密过程和主解密过程和DES大同小异,Blowfish进行16轮的f函数运算,但却用了18个子密钥,又不影响其可逆解密的进行。
DES有IP和IP-1来打乱原明文的排列,而Blowfish却没有。
因为这一步产生的复杂度相对于Blowfish的子密钥、f函数、S盒而言,可谓九牛之一毛,所以可省略。
其f函数的构造如下图所示
f函数如上图所示,其中代表逐位异或,+代表模232相加。
我们发现Blowfish
所采用的4个S盒进行操作运算后,又进行了之间的运算作为输出。
这就使得雪崩效应一下增加了很多倍。
但是我们发现其S盒的输入为8位而输出却为32位。
所以它的S盒并不像DES那样简单。
事实上Blowfish的S盒的构造依靠主密钥。
下面就简要的介绍一下Blowfish由主密钥生成子密钥以及S盒的过程。
首先把主密钥放在一个K数组中K1、K2Kj(1呼<14),子密钥放在数组
P中,P1、P2P18;
有4个S盒,每个有256个32Bit的项,(8X32)的形式,
S1,0、S1,1S1,255,S2,0,S2,1,S2,255……或表示为Siji[1,4]
j[0,255]其步骤如下:
1n的小数部分初始化P数组,然后顺次初始化4个S盒。
这样小数部分的最左边32比特就成了P1,再32比特为P2,依次下去,第19个32比特成S1,0,第1042个32比特为S4,255
2对P数组和K数组进行逐位异或,需要是用K数组。
也就是说,把主密钥K数组首尾连接成一个圈,把P数组展成一列,然后K数组在P数组上滚一边,逐位异或后,其结果为刷新后的P数组。
3使用当前的P和S数组对全零的64比特分组进行加法,把P1、P2用加密的输出取代
4使用当前最新的P和S数组对第三步的输出也就是P1P2进行加密,并用所得密文取代P3P4o再用最新的P数组和S数组对最新的输出进行加密,用其结果取代下两个32比特的P数组。
5重复上面的过程,直到所有的P数组和S数组全部更新为止。
这里实际是把P,S数组的连在P数组之后,依次进行下去的,最后的结果是P和S数组都不是n的小数部分形式。
这样就产生了最终的子密钥Pi和相应的S盒。
这个过程需要加密算法执行521次,也就是说,在加密一组明文之前首先要运行521次,这对解密者来说可
谓是难于上青天。
但是Blowfish不适合密钥经常改变的应用,为了快速期间,它的P数组和S数组可以预先存放好,而不是每次使用都从密钥中导出。
到此为止,我们可以看到Blowfish设计的巧妙之处,它采用DES的主加密流程,但使用的S盒却是从主密钥中导出的,并且环环相扣,雪崩效应可谓达到了顶点,它使用两种运算逐位异或和模232加,使得密码强度大大增强,故有没有DES中的IP和IP-1的置换扰乱对它来说意义不大。
所以到现在为止Blowfish没有发现
实际可用的弱点。
参考文献:
[1]毛明著•大众密码学•北京•高等教育出版社,2005年1月
[2]williamstallings•密码编码学与网络安全:
原理与实践•第二版•杨明等译•北
京・电子工业出版社,2001年4月
[3]陈鲁生沈世镒•现代密码学•北京•科学出版社,2002年