DES加密算法分析(毕业学术论文设计).docx

上传人:聆听****声音 文档编号:704540 上传时间:2023-04-29 格式:DOCX 页数:32 大小:273.36KB
下载 相关 举报
DES加密算法分析(毕业学术论文设计).docx_第1页
第1页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第2页
第2页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第3页
第3页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第4页
第4页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第5页
第5页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第6页
第6页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第7页
第7页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第8页
第8页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第9页
第9页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第10页
第10页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第11页
第11页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第12页
第12页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第13页
第13页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第14页
第14页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第15页
第15页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第16页
第16页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第17页
第17页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第18页
第18页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第19页
第19页 / 共32页
DES加密算法分析(毕业学术论文设计).docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DES加密算法分析(毕业学术论文设计).docx

《DES加密算法分析(毕业学术论文设计).docx》由会员分享,可在线阅读,更多相关《DES加密算法分析(毕业学术论文设计).docx(32页珍藏版)》请在冰点文库上搜索。

DES加密算法分析(毕业学术论文设计).docx

信息安全概论论文

论文题目DES加密算法分析

班 级0307401

学 号030740121

姓 名

时 间2010年11月20日

摘要

DES数据加密算法是使用最广的分组加密算法,它作为最著名的保密密钥或对称密钥加密算法,在计算机密码学及计算机数据通信的发展过程中起了重要作用。

本次学年论文是主要是学习介绍DES对称密钥数据加密算法,并用c++实现。

DES算法具有较高的安全性,为我们进行一般的计算机数据传输活动提供了安全保障。

关键词:

加密与解密,DES算法,S-盒

II

目录

摘要 II

目录 III

第一章引言 1

第二章 概述 2

2.1加密与解密 2

2.2单钥密码系统 2

2.3分组密码的总体结构 4

2.4分组密码的安全性 4

第三章 DES算法简介 5

3.1简介 5

3.2DES加密标准 6

3.2.1初始置换IP 7

3.2.2IP-1是IP的逆置换 7

3.2.3DES算法的迭代过程 8

3.2.4子密钥的生成 12

3.3DES算法的解密过程 13

第四章 DES算法用C++语言实现 14

4.1设置密钥函数des_setkey() 14

4.2f函数和S函数f_func()和s_func() 14

4.3DES算法的运行函数des_run() 16

4.4DES算法的主函数voidmain() 18

4.5DES的加密过程和举例 19

4.6DES算法的分析 20

参考文献 22

结束语 23

附录1 DES算法用C++实现的源代码 24

第一章引言

密码学是伴随着战争发展起来的一门科学,其历史可以追溯到古代,并且还有过辉煌的经历。

但成为一门学科则是近20年来受计算机科学蓬勃发展的刺激结果。

今天在计算机被广泛应用的信息时代,信息本身就是时间,就是财富。

如何保护信息的安全(即密码学的应用)已不再局限于军事、政治和外交,而是扩大到商务、金融和社会的各个领域。

特别是在网络化的今天,大量敏感信息(如考试成绩、个人简历、体检结果、实验数据等)常常要通过互联网进行交换。

(现代电子商务也是以互联网为基础的。

)由于互联网的开放性,任何人都可以自由地接入互联网,使得有些不诚实者就有可能采用各种非法手段进行破坏。

因此人们十分关心在网络上交换信息的安全性。

普遍认为密码学方法是解决信息安全保护的一个最有效和可行的方法。

有效是指密码能做到使信息不被非法窃取,不被篡改或破坏,可行是说它需要付出的代价是可以接受的。

密码是形成一门新的学科是在20世纪70年代。

它的理论基础之一应该首推1949年

Shannon的一篇文章“保密系统的通信理论”,该文章用信息论的观点对信息保密问题作了全面的阐述。

这篇文章过了30年后才显示出它的价值。

1976年,Diffie和Hellman发表了论文《密码学的新方向》,提出了公钥密码体制的新思想,这一思想引发了科技界对研究密码学的极大兴趣,大量密码学论文开始公开发表,改变了过去只是少数人关起门来研究密码学的状况。

同时为了适应计算机通信和电子商务迅速发展的需要,密码学的研究领域逐渐从消息加密扩大到数字签名、消息认证、身份识别、抗欺骗协议等新课题。

美国国家标准局(NBS)1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,并批准用于非机密单位及商业上的保密通信。

于1973年5月15日和1974年

8月27日先后两次向公众发出了征求加密算法的公告。

1977年1月,美国政府颁布:

采用IBM公司1971年设计出的一个加密算法作为非机密数据的正式数据加密标准(DES:

DataEncryptionStandard)。

DES广泛应用于商用数据加密,算法完全公开,这在密码学史上是一个创举。

在密码学的发展过程中,DES算法起了非常重要的作用。

本次学年论文介绍的就是分组加密技术中最典型的加密算法——DES算法。

0

第二章 概述

2.1加密与解密

加密技术是基于密码学原理来实现计算机、网络乃至一切信息系统安全的理论与技术基础。

简单的说,加密的基本意思是改变信息的排列形式,使得只有合法的接受才能读懂,任何他人即使截取了该加密信息也无法使用现有的手段来解读。

解密是我们将密文转换成能够直接阅读的文字(即明文)的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。

2.2单钥密码系统

密码学中有两种重要类型的密码系统,单钥(私钥)和双钥(公钥)密码系统。

在单钥密码系统中,明文的加密和密文的解密是用同样的密钥。

直到1976年

Diffie、Hellman引入公钥(双钥)密码学之前,所有的密码都是单钥系统,因此单钥系统也称为传统密码系统。

传统密码系统广泛地用在今天的世界上,有两种单钥密码体制:

流密码和分组密码。

流密码是利用密钥k产生一个密钥流z=z0z1…,并使用如下规则对明文串

x=x0x1x2…加密:

y=y0y1y2…=Ez0(x0)Ez1(x1)Ez2(x2)…。

密钥流由密钥流发生器f产生:

zi=f(k,σi),这里σi是加密器中的记忆元件(存储器)在时刻i的状态,f是由密钥k和σi产生的函数。

而分组密码就是将明文消息序列:

m1,m2,…,mk,…

划分为等长的消息组

(m1,m2,…m),(mn+1,mn+2,…,m2n),…

各组明文分别在密钥k=(k1,k2,…,kt)的控制下,按固定的算法Ek一组一组进行加密。

加密后输出等长密文组

(y1,…,ym),(ym+1,…,y2m),…

分组密码的模型,如图2.1所示。

22

图2.1分组密码的模型

它与流密码的不同之处在于输出的每一位数字不只与相应时刻输入明文数字有关,而是与一组长为m的明文数组有关。

它们的区别就在于有无记忆性(如图2.2)。

流密码的滚动密钥z0=f(k,σ0)由函数f、密钥k和指定的初态σ0完全确定。

此后,由于输入加密器的明文可能影响加密器中内部记忆元件的存储状态,因而σi(i>0)可能依赖于k,σ0,x0,x1,…,xi-1等参数。

图2.2流密码与分组密码的区别

分组密码的优点在于其容易实现同步,因为一个密文组的传输错误不会影响其他组,丢失一个明密文组不会对其后的组的解密正确性带来影响。

分组密码又分为三类:

代替密码(Substitution)、移位密码(Transposition)和乘积密码。

随着计算技术的发展,早期的代替和移位密码已无安全可言。

一个增加密码强度的显然的方法是合并代替和移位密码,这样的密码称为乘积密码。

如果密文是由明文运用轮函数多次而得,这样的乘积密码又称为迭代分组密码。

DES和今天的大多数分组密码都是迭代分组密码。

目前著名的对称分组密码系统算法有DES、IDEA、Blowfish、RC4、RC5、FEAL等。

2.3分组密码的总体结构

分组密码采用两种类型的总体结构:

SP网络与Feistel网络,它们的主要区别在于:

SP结构每轮改变整个数据分组,而Feistel密码每轮只改变输入分组的一半。

AES和DES分别是这两种结构的代表。

Feistel网络(又称Feistel结构)可把任何轮函数转化为一个置换,它是由HorstFeistel在设计Lucifer分组密码时发明的,并因DES的使用而流行,“加解密相似”是Feistel型密码的实现优点。

SP网络(又称SP结构)是Feistel网络的一种推广,其结构清晰,S一般称为混淆层,主要起混淆作用,P一般称为扩散层,只要起扩散作用。

SP网络可以更快速的扩散,不过SP网络的加解密通常不相似。

2.4分组密码的安全性

安全性是分组密码最重要的设计原则,它要求即使攻击者知道分组密码的内部结构,仍不能破译该密码,这也意味着,不存在针对该密码的某种攻击方法,其工作量小于穷密钥搜索。

但是随着密码分析技术的发展,使得对于具有更多轮的分组密码的破译成为可能。

第三章 DES算法简介

3.1简介

DES是DataEncryptionStandard(数据加密标准)的缩写。

它是由IBM公司在

1971年设计出的一个加密算法,美国国家标准局(NBS)于1977年公布把它作为非机要部门使用的数据加密标准[5]。

DES自从公布以来,已成为金融界及其他各种行业最广泛应用的对称密钥密码系统。

DES是分组密码的典型代表,也是第一个被公布出来的标准算法。

原来规定DES算法的使用期为10年,可能是DES尚未受到严重威胁,更主要是新的数据加密标准研制工作尚未完成,或意见尚未统一,所以当时的美国政府宣布延长它的使用期。

因而DES超期服役到

2000年。

近三十年来,尽管计算机硬件及破解密码技术的发展日新月异,若撇开DES的密钥太短,易于被使用穷举密钥搜寻法找到密钥的攻击法不谈,直到进入20世纪90年代以后,以色列的密码学家Shamir等人提出一种“差分分析法”,以后日本人也提出了类似的方法,这才称得上对它有了攻击的方法。

严格地说Shamir的“差分分析法”也只是理论上的价值。

至少到目前为止是这样,比如后来的“线形逼迫法”,它是一种已知明文攻击,需要243≈4.398×1012个明、密文对,在这样苛刻的要求下,还要付出很大的代价才能解出一个密钥。

不管是差分攻击还是线性攻击法,对于DES的安全性也仅仅只做到了“质疑”的地步,并未从根本上破解DES。

也就是说,若是能用类似Triple-DES或是

DESX的方式加长密钥长度,仍不失为一个安全的密码系统。

早在DES提出不久,就有人提出造一专用的装置来对付DES,其基本思想无非是借用硬件设备来实现对所有的密钥进行遍历搜索。

由于电子技术的突飞猛进,专门设备的造价大大降低,速度有质的飞跃,对DES形成了实际的威胁。

DES确实辉煌过,它的弱点在于专家们一开始就指出的,即密钥太短。

美国政府已经征集评估和判定出了新的数据加密标准AES以取代DES对现代分组密码理论的发展和应用起了奠基性的作用,它的基本理论和设计思想仍有重要参考价值。

3.2DES加密标准

现如今,依靠Internet的分布式计算能力,用穷举密钥搜索攻击方法破译已成为可能。

数据加密标准DES已经达到它的信任终点。

但是作为一种Feistel加密算法的例子仍然有讨论的价值。

DES是对二元数字分组加密的分组密码算法,分组长度为64比特。

每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第

8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。

DES算法完全公开,其保密性完全依赖密钥。

它的缺点就在于密钥太短。

设明文串m=m1m2…m64;密钥串k=k1k2…k64。

在后面的介绍中可以看到k8,k16,k24,k32,k40,k48,k56,k64实际上是不起作用的。

DES的加密过程可表示为:

DES(m)=IP-1T16·T15…T2·T1·IP(m).

下面是完全16轮DES算法框图:

图3.1完全16轮DES算法

3.2.1初始置换IP

初始置换是将输入的64位明文分为8个数组,每一组包括8位,按1至64编号。

IP的置换规则如下表:

表3.1IP置换规则

58

50

42

34

26

18

10

2

60

52

44

36

28

20

12

4

62

54

46

38

30

22

14

6

64

56

48

40

32

24

16

8

57

49

41

33

25

17

9

1

59

51

43

35

27

19

11

3

61

53

45

37

29

21

13

5

63

55

47

39

31

23

15

7

即将输入的第58位换到第1位,第50位换到第2位……,依次类推,最后一位是原来的第7位。

3.2.2IP-1是IP的逆置换

由于第1位经过初始置换后,已处于第40位。

逆置换就是再将第40位换回到第1位。

逆置换规则如下表所示:

表3.2IP-1置换

40

8

48

16

56

24

64

32

39

7

47

15

55

23

63

31

38

6

46

14

54

22

62

30

37

5

45

13

53

21

61

29

36

4

44

12

52

20

60

28

35

3

43

11

51

19

59

27

34

2

42

10

50

18

58

26

33

1

41

9

49

17

57

25

初始置换IP及其逆置换IP-1并没有密码学意义,因为置换前后的一一对应关系是已知的。

它们的作用在于打乱原来输入明文的ASCⅡ码字划分的关系,并将原来明文的第位

m8,m16,m24,m32,m40,m48,m56,m64位(校验位)变成IP的输出的一个字节。

3.2.3DES算法的迭代过程

图3.2DES算法的迭代过程图

图中Li-1和Ri-1分别是第i-1次迭代结果的左右两部分,各32比特。

即Li=Ri-1,Ri=Li-1 f(Ri-1,ki)。

其中轮密钥Ki为48比特,函数F(R,K)的计算过程如图1.5所示。

轮输入的右半部分R为32比特,R首先被扩展成48比特,扩展过程由表3定义,其中将

R的16个比特各重复一次。

扩展后的48比特再与子密钥Ki异或,然后再通过一个S盒,产生32比特的输出。

该输出再经过一个由表4定义的置换,产生的结果即为函数F(R,K)的输出。

表3.3扩展E

32

1

2

3

4

5

4

5

6

7

8

9

8

9

10

11

12

13

12

13

14

15

16

17

16

17

18

19

20

21

20

21

22

23

24

25

24

25

26

27

28

29

28

29

30

31

32

1

ki是由64比特的初始密钥(亦称种子密钥)导出的第i轮子密钥,ki是48比特

DES算法的关键是f(Ri-1,ki)的功能,其中的重点又在S-盒(Substitution

Boxes)上。

F函数的输出是32比特。

图3.3F函数计算过程图

将R经过一个扩展运算E变为48位,记为E(R)。

计算E(R)ÅK=B,对B施行代换S,此代换由8个代换盒组成,即S-盒。

每个S-盒有6个输入,4个输出,将B依次分为8组,每组6位,记B=B1B2B3B4B5B6B7B8其中Bj作为第j个S-盒的输入,其输出为Cj,C= C1C2C3C4C5C6C7C8就是代换S的输出,所以代换S是一个48位输入,32位输出的选择压缩运算,将结果C再实行一个置换P(表4),即得F(R,K)。

其中,扩展运算E与置换P主要作用是增加算法的扩散效果。

S-盒是DES算法中唯一的非线性部件,当然也就是整个算法的安全性所在。

它的设计原则与过程一直因为种种不为人知的因素所限,而未被公布出来。

S-盒如下表:

表3.4 S-盒函数

S

1

14

4

13

1

2

15

11

8

3

10

6

12

5

9

0

7

0

15

7

4

14

2

13

1

10

6

12

11

9

5

3

8

4

1

14

8

13

6

2

11

15

12

9

7

3

10

5

0

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13

S

2

15

1

8

14

6

11

3

4

9

7

2

13

12

0

5

10

3

13

4

7

15

2

8

14

12

0

1

10

6

9

11

5

0

14

7

11

10

4

13

1

5

8

12

6

9

3

2

15

13

8

10

1

3

15

4

2

11

6

7

12

0

5

14

9

S

3

10

0

9

14

6

3

15

5

1

13

12

7

11

4

2

8

13

7

0

9

3

4

6

10

2

8

5

14

12

11

15

1

13

6

4

9

8

15

3

0

11

1

2

12

5

10

14

7

1

10

13

0

6

9

8

7

4

15

14

3

11

5

2

12

S

4

7

13

14

3

0

6

9

10

1

2

8

5

11

12

4

15

13

8

11

5

6

15

0

3

4

7

2

12

1

10

14

9

10

6

9

0

12

11

7

13

15

1

3

14

5

2

8

4

3

15

0

6

10

1

13

8

9

4

5

11

12

7

2

14

S

5

2

12

4

1

7

10

11

6

8

5

3

15

13

0

14

9

14

11

2

12

4

7

13

1

5

0

15

10

3

9

8

6

4

5

1

11

10

13

7

8

15

9

12

5

6

3

0

14

11

8

12

7

1

14

2

13

6

15

0

9

10

4

5

3

S

6

12

1

10

15

9

2

6

8

0

13

3

4

14

7

5

11

10

15

4

2

7

12

9

5

6

1

13

14

0

11

3

8

9

14

15

5

2

8

12

3

7

0

4

10

1

13

11

6

4

3

2

12

9

5

15

10

11

14

1

7

6

0

8

13

S

7

4

11

2

14

15

0

8

13

3

12

9

7

5

10

6

1

13

0

11

7

4

9

1

10

14

3

5

12

2

15

8

6

1

4

11

13

12

3

7

14

10

15

6

8

0

5

9

2

6

11

13

8

1

4

10

7

9

5

0

15

14

2

3

12

S

8

13

2

8

4

6

15

11

1

10

9

3

14

5

0

12

7

1

15

13

8

10

3

7

4

12

5

6

11

0

14

9

2

7

11

4

1

9

12

14

2

0

6

10

13

15

3

5

8

2

1

14

7

4

10

8

13

15

12

9

0

3

5

6

11

S-盒的置换规则为:

取{0,1,…,15}上的4个置换,即它的4个排列排成4行,得一4*16矩阵。

若给

定该S盒的6个输入为b0b1b2b3b4b5,在Si表中找出b0b5行,b1b2b3b4列的元素,以4位二进制表示该元素,此为S-盒Si的输出。

例3.1 S2的输入为101011,

b1=1,b6=1,b1b6=(11)2=3

(b2b3b4b5)2=(0101)2=5

查S2表可知第3行第5列的输出是15,15的二进制表示为1111。

则S2的输出为1111。

8个S-盒的代换方式都是一样的。

S盒输出的32比特经P置换,P置换的功能是将32位的输入,按以下顺序置换,然后输入仍为32比特。

P置换的顺序如表3.5:

表3.5置换P

16

7

20

21

29

12

28

17

1

15

23

26

5

18

31

10

2

8

24

14

32

27

3

9

19

13

30

6

22

11

4

25

3.2.4子密钥的生成

初始密钥

D0(28bit)

C0(28bit)

PC-1

LS1

LS1

D1

PC-2

K1

D16

C16

LS16

LS16

LS2

LS2

PC-2

K16

图3.4DES子密钥生成流程图

C1

图3.4给出了子密钥产生的流程图。

首先对初始密钥经过置换PC-1(表2.6[7]),将初始密钥的8个奇偶校验位剔除掉,而留下真正的56比特初始密钥。

表3.6密钥置换PC-1

57

49

41

33

25

17

9

1

58

50

42

34

26

18

10

2

59

51

43

35

27

19

11

3

60

52

44

36

63

55

47

39

31

23

15

7

62

54

46

38

30

22

14

6

61

53

45

37

29

21

13

5

28

20

12

4

然后将此56位分为C0,D0两部分,各28比特,C0,D0如下:

C0=k57k49……k44k36

D0=k63k55……k12k4

然后分别进行一个循环左移函数LS1,得到C1,D1,将C1(28位),D1(28位)连成56比特数据,再经

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2