DES的设计思路.docx
- 文档编号:12837756
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:16
- 大小:173.28KB
DES的设计思路.docx
《DES的设计思路.docx》由会员分享,可在线阅读,更多相关《DES的设计思路.docx(16页珍藏版)》请在冰豆网上搜索。
DES的设计思路
DES算法的研究
孙东波
新疆师范大学数理信息学院数学04-3班
摘要:
本文以简洁通俗的语言介绍了DES的可逆正确性的原因,以及由此所引起的DES的
各个部分的讨论,并找出了几个置换的数学表达式。
详细的讨论了DES的设计思想,并简
要介绍了基于DES的Blowfish算法。
关键词:
可逆正确性;
数学表达式;Blowfish算法;
DESalgorithmresearch
SunDongbo
XinjiangNormalUniversityInstituteofMathematicsofmathematicalinformationclasses04-3Abstract:
ThesimplecommonIanguageontheDESofthecorrectnessofthereasonsforthe
irreversible,andtheresultingcausedbyDESinvariouspartsofthediscussion,andfindafewreplacementofthemathematicalexpression.ThedetaileddiscussionDESdesignconcept,andintroducedbrieflybasedontheDESBlowfishalgorithm.
Keywords:
reversiblecorrectness;mathematicalexpression;Blowfishalgorithm;
DES算法的研究
DES简介:
1973年美国国家标准局(nationalbureauofstandards,NBS认识到建立
数据加密标准的迫切性,开始征集联邦数据加密标准。
1975年3月17日NBS公布了IBM公司提供的密码算法,经过两年多的公开讨论之后,1977年1月15日NBS宣布批准其作为联邦信息处理标准46号(即FIPS-46),同年7月15日开始生效。
这一算法被命名为数据加密标准(dataencryptionstandard,DES),供商业和非国防性政府部门使用。
本文主要讨论以下内容:
1、DES的加密为什么是同样的过程,即其可逆正确性的原因。
2、以SDES为例说明函数F中的几个问题。
3、DES中有关置换函数的规律。
4、DES的设计思想。
5、在DES基础上的blowfish算法。
由于DES算法规模过大,故先用SDES来讨论,之后再推广到DES中去。
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
00
01
10
11
00
01
00
11
10
00
00
01
10
11
01
11
10
01
00
01
10
00
01
11
10
00
10
01
11
10
11
10
01
00
11
11
01
00
10
11
10
01
00
11
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
10
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
38
6
46
14
54
22
62
30
64
56
48
40
32
24
16
8
37
5
45
13
53
21
61
29
57
49
41
33
25
17
9
1
36
4
44
12
52
20
60
28
59
51
43
35
27
19
11
3
35
3
43
11
51
19
59
27
61
53
45
37
29
21
13
5
34
2
42
10
50
18
58
26
63
55
47
39
31
23
15
7
33
1
41
9
49
17
57
25
排成一个8$的方阵,列不动,把该列中双号元素提上,单号元素压下既成该
主密钥K
PC-1
IP矩阵。
C0
D0
LS1
LS1
C1
D1
PC-2―K1
LS2
LS2
C2
D2
PC-2
K2
LS16
LS16
C2
C2
PC-2
K16
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以及循环左移的位数如下表所示:
循环序号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
左移位数
1
1
2
2
2
2
2
2
1
2
2
2
2
2
2
1
PC-1,PC-2表
选择置换PC-1
选择置换PC-2
57
49
41
33
25
仃
9
14
17
11
24
1
5
1
r58
50
42
p4
26
18
3
P281
15
6
:
21
10:
10
12
59
51
35|
27
23
119
12
4
126
81
19
11
3
60
52
44
36
16
7
27
20
13
2
63
55
47
39
31
23
15
41
52
31
37
47
55
7
:
62
54
46
:
38
30:
22
30
r40:
51
45
:
33
48:
14
16
61
53
(45
371
29
44
491
39
56
134
531
21
13
5
28
20
12
4
46
42
50
36
29
32
循环位表:
我们看循环左移的这个表,会发现这个表咼度对称且所有左移位数之和为
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
32
1
2
3
4
5
16
7
20
21
4
5
6
7
r8
9:
29
12
28
17
8
9
10
11
P12
13n
1
15
23
26
12
13
14
15
16
17
5
18
31
10
16
17
18
19
20
21
2
8
24
14
20
21
22
23
r24
251
32
27
3
9
24
25
26
27
28
29
19
13
30
6
28
29
30
31
32
1
22
11
4
25
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年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DES 设计 思路