DES加密算法的研究与实现 毕业论文设计

上传人:无*** 文档编号:146484175 上传时间:2022-08-31 格式:DOC 页数:57 大小:759.02KB
返回 下载 相关 举报
DES加密算法的研究与实现 毕业论文设计_第1页
第1页 / 共57页
DES加密算法的研究与实现 毕业论文设计_第2页
第2页 / 共57页
DES加密算法的研究与实现 毕业论文设计_第3页
第3页 / 共57页
点击查看更多>>
资源描述
毕 业 设 计 论 文题 目: DES加密算法的研究与实现 学 院: 计算机科学与工程学院 专 业: 计算机科学与技术 姓 名: 学 号: 指导老师: 完成时间: 56摘 要随着信息技术的发展,计算机应用渗透到社会生活的各个领域,人们对信息化的依赖程度越来越高,随之而来的安全性问题成为人们关注的热点。数据加密技术作为信息安全中的重要武器,发挥着越来越大的作用。DES (Date Encryption Standard)算法从成为加密标准到现在,已经成功在应用在了很多领域并且经历了长期的考验。实践证明,DES算法对于大部分的应用来说,还是足够安全的。本论文首先介绍C语言基本知识及其实用软件Visual C+6.0,然后介绍DES加密算法原理;接着介绍DES加密模块的三大底层模块的原理与设计;最后介绍了顶层模块的调用与设计,测试文件的编写,从整体上完成了对DES加密模块的实现。本文通过C语言来实现DES加密模块的设计与验证。本设计采用自顶而下的模块化设计方法将DES加密模块划分为四大模块,其中包括三个底层模块 :密钥产生模块、S部件代换模块(S1、S2、S3、S4、S5、S6、S7、S8)、DES的一轮变换模块,还含有一个顶层调用模块,整体的调用三个底层模块用来实现DES加密模块的功能。此外还对DES的安全性进行评估以及简要的验证了三重DES加密算法的加密和解密过程。关键词:DES;加密;解密;C语言Abstract With the development of information technology, the application of computer has came into any field. Peoples dependence on information technology is becoming more. Followed by the issue of security has also become a hot spot of concern to the people . Encryption technology, as an important weapon of information security, is playing an increasingly important role. DES (Date Encryption Standard) encryption algorithm from becoming the standard to the present , has been successfully used in a lot in the area and has experienced long-term test. Practice has proved that, DES algorithm for most of the application adequate is security.This paper introduces C language and its utility software Visual C+6.0, and introduces the DES algorithm, and then introduces the DES encryption module the three underlying modules principles and design. Finally, it introduces the top-level module and its design as well as the test documentation, and achieves the whole DES encryption module Through the C language , this paper achieves DES encryption module design and simulation. The design uses a top-down modular design method to DES encryption module, it is divided into 4 modules,which contains three bottom modules: key generation module, S module and one transformation module of DES, and it also contains a top-level module which calls the bottom of the overall three modules for the function of DES encryption module. In addition , the security of DES evaluation and briefly proved three DES encryption algorithm for encryption and decryption process.Key Words: DES;cryption; encryption;C language前言密码学是伴随着战争发展起来的一门科学,其历史可以追溯到古代,并且还有过辉煌的经历。但成为一门学科则是近20年来受计算机科学蓬勃发展的刺激结果。今天在计算机被广泛应用的信息时代,信息本身就是时间,就是财富。如何保护信息的安全(即密码学的应用)已不再局限于军事、政治和外交,而是扩大到商务、金融和社会的各个领域。特别是在网络化的今天,大量敏感信息(如考试成绩、个人简历、体检结果、实验数据等)常常要通过互联网进行交换。(现代电子商务也是以互联网为基础的。)由于互联网的开放性,任何人都可以自由地接入互联网,使得有些不诚实者就有可能采用各种非法手段进行破坏。因此人们十分关心在网络上交换信息的安全性。普遍认为密码学方法是解决信息安全保护的一个最有效和可行的方法。有效是指密码能做到使信息不被非法窃取,不被篡改或破坏,可行是说它需要付出的代价是可以接受的。密码是形成一门新的学科是在20世纪70年代。它的理论基础之一应该首推1949年Shannon的一篇文章“保密系统的通信理论”,该文章用信息论的观点对信息保密问题作了全面的阐述。这篇文章过了30年后才显示出它的价值。1976年,Diffie和Hellman发表了论文密码学的新方向,提出了公钥密码体制的新思想,这一思想引发了科技界对研究密码学的极大兴趣,大量密码学论文开始公开发表,改变了过去只是少数人关起门来研究密码学的状况。同时为了适应计算机通信和电子商务迅速发展的需要,密码学的研究领域逐渐从消息加密扩大到数字签名、消息认证、身份识别、抗欺骗协议等新课题。 美国国家标准局(NBS)1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准,并批准用于非机密单位及商业上的保密通信。于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。1977年1月,美国政府颁布:采用IBM公司1971年设计出的一个加密算法作为非机密数据的正式数据加密标准(DES : Data Encryption Standard)。DES广泛应用于商用数据加密,算法完全公开,这在密码学史上是一个创举。在密码学的发展过程中,DES算法起了非常重要的作用。本次学年论文介绍的就是分组加密技术中最典型的加密算法DES算法。目 录第一章 绪论11.1 信息安全的现状11.2 单钥密码系统21.3 分组密码的总体结构和安全性31.4 DES加密技术研究的意义41.5 设计语言及验证工具41.5.1 C语言的简要介绍41.5.2 使用的验证工具的介绍6第二章 DES加密算法的原理分析92.1 DES加密算法的描述92.2 DES加密标准102.2.1 初始置换IP112.2.2 IP-1是IP的逆置换122.2.3 DES算法的迭代过程122.2.4 子密钥的生成152.3 DES算法的解密过程16第三章 DES加密算法的安全性评估173.1 DES弱密钥和补密钥特性173.2 DES的密钥的长度和迭代次数183.3 DES加密算法S-盒的设计183.4 DES加密算法的应用误区193.5 DES加密算法安全性统计20第四章 DES加密算法的实现及验证224.1 DES加密算法的实现224.1.1 通过DES算法实现对字符的加密224.1.2 通过DES算法实现对文件的加密234.2 子密钥函数的生成函数DES_MakeSubKeys()234.3 DES算法的加密函数DES_Encrypt()244.4 DES算法加密函数DES_Decrypt()254.5 DES算法的主函数void main()264.6 DES的加密过程和举例284.7 DES算法的分析29结 论32致 谢33参考文献34附录A C语言源代码35河南城建学院本科毕业设计(论文) 绪论第一章 绪论1.1 信息安全的现状美国著名未来学家阿尔温托夫勒说:“电脑网络的建立和普及将彻底改变人类生存及生活的模式,控制与掌握网络的人就是未来命运的主宰。谁掌握了信息,控制了网络,谁就拥有整个世界。”的确,网络的国际化、社会化、开放化、个人化诱发出无限的商机,电子商务的迅速崛起,使网络成为国际竞争的新战场。各种信息的传播越来越便捷。在当今的信息时代,大量敏感信息如法庭记录、资金转移、私人财产、个人隐私等常常通过公共通信设施或者计算机网络来进行交换,而这些信息的秘密性和真实性是人们迫切需要的。然而,由于安全技术本身的缺陷,使得信息传播的脆弱性大大增加,一旦信息传播的途径与方式受到攻击,轻则对个人的工作、生活产生重大影响。严重时甚至会危害国家安全,使整个社会陷入危机。所以,构筑安全的电子信息环境,愈来愈受到国际社会的高度关注。加密技术是基于密码学原理来实现计算机、网络乃至一切信息系统安全的理论与技术基础。简单的说,加密的基本意思是改变信息的排列形式,使得只有合法的接受才能读懂,任何他人即使截取了该加密信息也无法使用现有的手段来解读。解密是我们将密文转换成能够直接阅读的文字(即明文)的过程称为解密,它是加密的反向处理,但解密者必须利用相同类型的加密设备和密钥对密文进行解密。不安全的信息还不如没有信息。一个不设防的信息传播方式,一旦遭到恶意攻击,将意味着一场灾难。对于信息的传播,需要居安思危、未雨绸缪,克服脆弱、克制威胁,防患于未然。信息安全是对付威胁、克服脆弱性、保护各种信息资源的所有措施的总和,涉及政策、法律、管理、教育和技术等方面的内容。信息安全是一项系统工程,针对来自不同方面的安全威胁,需要采取不同的安全对策。从法律、制度、管理和技术上采取综合措施,以便相互补充,达到较好的安全效果。管理是所有安全领域的重要组成部分,而技术措施是最直接的屏障,目前常用而有效的信息安全技术对策有如下几种:加密、数字签名、鉴别、访问控制、防火墙、安全审计、数据备份与恢复等等。在这些对策中,加密无疑是所有信息保护措施中最古老,最基本的方法。加密的主要目的是防止信息的非授权泄漏。加密方法多种多样,在信息网络中一般是利用信息变换规则把可靠的信息变成不可懂的信息。既可对传输信息加密,也可对存储信息加密,把计算机数据变成一堆杂乱无章的数据,攻击者即使得到加密的信息,也不过是一串毫无意义的字符。加密可以有效的对抗截收、非法访问等威胁。现代密码算法不仅可以实现加密,还可以实现数字签名,鉴别等功能,有效地对抗截收、非法访问、破坏信息的完整性、冒充、抵赖、重演等威胁。因此,加密技术是网络信息安全的核心技术。社会信息化步伐的不断加快,极大地推动了信息安全技术的核心技术现代密码学的发展。现代密码学的应用已经涵盖了军事、政治、外交、金融、商业等众多领域,其商用价值和社会价值得到了充分的肯定。为密码理论与技术的应用提供了广阔的前景。1.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产生的函数。而分组密码就是将明文消息序列:m,m,m,划分为等长的消息组(m,m,m),(m,m,m),(y,y),(y,y),各组明文分别在密钥k=(k1,k2,kt)的控制下,按固定的算法E一组一组进行加密。加密后输出等长密文组分组密码的模型,如图1.1所示。图1.1 分组密码的模型它与流密码的不同之处在于输出的每一位数字不只与相应时刻输入明文数字有关,而是与一组长为m的明文数组有关。它们的区别就在于有无记忆性(如图1.2)。流密码的滚动密钥z0=f(k,0)由函数f、密钥k和指定的初态0完全确定。此后,由于输入加密器的明文可能影响加密器中内部记忆元件的存储状态,因而i(i0)可能依赖于k,0,x0,x1,xi-1等参数。图 图 1.2 流密码和与分组密码的区别分组密码的优点在于其容易实现同步,因为一个密文组的传输错误不会影响其他组,丢失一个密文组不会对其后的组的解密正确性带来影响。分组密码又分为三类:代替密码(Substitution)、移位密码(Transposition)和乘积密码。随着计算技术的发展,早期的代替和移位密码已无安全可言。一个增加密码强度的显然的方法是合并代替和移位密码,这样的密码称为乘积密码。如果密文是由明文运用轮函数多次而得,这样的乘积密码又称为迭代分组密码。DES和今天的大多数分组密码都是迭代分组密码。目前著名的对称分组密码系统算法有DES、IDEA、Blowfish、RC4、RC5、FEAL等。1.3 分组密码的总体结构和安全性分组密码采用两种类型的总体结构:SP网络与Feistel网络,它们的主要区别在于:SP结构每轮改变整个数据分组,而Feistel密码每轮只改变输入分组的一半。AES和DES分别是这两种结构的代表。Feistel网络(又称Feistel结构)可把任何轮函数转化为一个置换,它是由Horst Feistel在设计Lucifer分组密码时发明的,并因DES的使用而流行,“加解密相似”是Feistel型密码的实现优点。SP网络(又称SP结构)是Feistel网络的一种推广,其结构清晰,S一般称为混淆层,主要起混淆作用,P一般称为扩散层,只要起扩散作用。SP网络可以更快速的扩散,不过SP网络的加解密通常不相似。安全性是分组密码最重要的设计原则,它要求即使攻击者知道分组密码的内部结构,仍不能破译该密码,这也意味着,不存在针对该密码的某种攻击方法,其工作量小于穷密钥搜索。但是随着密码分析技术的发展,使得对于具有更多轮的分组密码的破译成为可能。1.4 DES加密技术研究的意义DES于1977年1月15日正式被批准作为美国联邦信息处理标准,同年7月15日开始生效。虽然在1994年1月的评估后,美国已经决定1998年12月以后就不再使用DES ,然而DES算法和其各种改进算法目前仍在世界上被广泛的应用者,如3-DES等。因此对DES的安全性分析仍然十分重要。数据加密标准DES,作为ANSI的数据加密算法(Data Encryption Algorithm, DEA)和ISO的DEA-1,成为一个世界范围内的标准己经20多年了。尽管它带有过去时代的特征,但它很好地抗住了多年的密码分析,除可能的最强有力的敌手外,对其他的攻击仍然是安全的。同时,对DES的研究极大地推动了密码理论的发展和应用,对于掌握分组密码的基本理论、设计思想和实际应用仍然有着重要的参考价值。但随着密码分析技术和计算能力的提高,1994年,美国决定不再使用DES算法,目前DES算法已被更为安全的加解密算法取代。虽然这样,但是目前还无法将DES加密算法彻底破解掉,而且DES算法的加解密算法非常快,仍是目前使用最为普遍的对称密码算法。在国内,随着三金工程尤其是金卡工程的启动,DES算法在POS、ATM、磁卡及智能卡、加油站、高速公路收费站等领域被广泛应用,以此来实现关键数据的保密,如信用卡人的PIN码加密伟输,IC卡与POS机之间的双向认证、金融交易数据包的MAC校验等,均用到DES算法。1.5 设计语言及验证工具1.5.1 C语言的简要介绍C语言是1972年由美国的Dennis Ritchie设计发明的,并首次在UNIX操作系统的DEC PDP-11计算机上使用。它由早期的编程语言BCPL(Basic Combined Programming Language)发展演变而来,在1970年,AT&T贝尔实验室的Ken Thompson根据BCPL语言设计出较先进的并取名为B的语言,最后导致了C语言的问世。 而B语言之前还有A语言,取名自世界上第一位女程序员Ada(艾达)。随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准, 使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准。C语言是世界上最流行、使用最广泛的高级程序设计语言之一。在操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是用C语言编写的。C语言绘图能力强,具有可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。C语言的主要特点表现为下几点:(1) 简洁紧凑、灵活方便:C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 (2) 运算符丰富:C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。(3) 数据类型丰富:C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。(4) 表达方式灵活实用:C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。(5) 允许直接访问物理地址,对硬件进行操作:由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。(6) 生成目标代码质量高,程序执行效率高:C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编程序生成的目标代码效率低10%20%。(7) 可移植性好:C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。(8) 表达力强:C语言有丰富的数据结构和运算符。包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C+的一大区别。 C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。也就是说,对用C语言的人,要求对程序设计更熟练一些。C语言能直接访问硬件的物理地址,能进行位(bit)操作。兼有高级语言和低级语言的许多优点。它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。另外C语言具有强大的图形功能,支持多种显示器和驱动器,且计算功能、逻辑判断功能强大。常用的编译软件有Microsoft Visual C+,Borland C+,gcc(linux系统下最常用的编译器),Watcom C+ ,Borland C+, Borland C+ Builder,Borland C+ 3.1 for DOS,Watcom C+ 11.0 for DOS,GNU DJGPP C+, Lccwin32 C Compiler 3.1,Microsoft C,High C等。1.5.2 使用的验证工具的介绍Visual C+ 6.0,简称VC或者VC6.0,是微软推出的一款C+编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了 Visual C+.NET(Visual C+7.0),但它的应用有很大的局限性,只适用于Windows 2000、Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C+6.0为平台。 C+6.0由Microsoft开发, 它不仅是一个C+ 编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具,这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。Microsoft的主力软件产品。Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。虽然微软公司推出了Visual C+.NET(Visual C+7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0,所以实际中,更多的是以Visual C+6.0为平台。Visual C+6.0以拥有“语法高亮”,自动编译功能以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。其编译及创建预编译头文件(stdafx.h)、最小重建功能及累加连结(link)著称。这些特征明显缩短程序编辑、编译及连结的时间花费,在大型软件计划上尤其显著。由于C+是由C语言发展起来的,也支持C语言的编译。6.0版本是使用最多的版本,很经典。最大的缺点是对于模版的支持比较差。现在最新补丁为SP6,推荐安装,否则易出现编译时假死状态。仅支持Windows操作系统。目前发现与windows 7兼容性不好,安装成功后可能会出现无法打开cpp文件的现象。Visual C+6.0主要组成部分有:(1) Developer Studio这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“Microsoft Visual C+”,所以很多人理所当然的认为,那就是Visual C+了。其实不然,虽然Developer Studio提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道,Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等Visual Studio家族的其他同胞兄弟。所以不要把Developer Studio当成Visual C+,它充其量只是Visual C+的一个壳子而已。(2) MFC从理论上来讲,MFC也不是专用于Visual C+,Borland C+,C+Builder和Symantec C+同样可以处理MFC。同时,用Visual C+编写代码也并不意味着一定要用MFC,只要愿意,用Visual C+来编写SDK程序,或者使用STL,ATL,一样没有限制。不过,Visual C+本来就是为MFC打造的,Visual C+中的许多特征和语言扩展也是为MFC而设计的,所以用Visual C+而不用MFC就等于抛弃了Visual C+中很大的一部分功能。但是,Visual C+也不等于MFC。 (3) Platform SDK这才是Visual C+和整个Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。大致说来,Platform SDK是以Microsoft C/C+编译器为核心(不是Visual C+,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是NMAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成Visual Studio的基石。河南城建学院本科毕业设计(论文) DES加密算法的原理分析第二章 DES加密算法的原理分析2.1 DES加密算法的描述DES是Data Encryption Standard(数据加密标准)的缩写。它是由IBM公司在1971年设计出的一个加密算法,美国国家标准局(NBS)于1977年公布把它作为非机要部门使用的数据加密标准。 数据加密标准DES(Data Encryption Standard)算法是一个分组加密算法,也是一个对称算法,加密和解密使用同一个算法,利用传统的换位、异或、置换等加密方法。DES算法以64位(8 byte)为分组对数据加密,其中有8位(第8、16、24、32、40、48、56和64位)用作奇偶校验位,另外的56位为真正的密钥,保密性依赖于密钥,加密和解密过程使用同一个密钥。DES对64-位的明文进行操作。通过一个初始置换,将明文分组分成左半部分和有半部分,各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算的过程中数据和密钥结合。经过16轮后,左、右半部分合在一起经过一个末尾置换(初始置换的逆置换),这样该算法就完成了。在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩张成48位,并通过一个异或操作与48位密钥结合,通过8个S-盒将这48位代替成为新的32位数据,再将其置换一次。这四步运算就构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果即成为新的右半部分,原来的右半部分成为了新的左半部分。将该操作重复16次,便实现了DES的16轮运算。经过16轮后,左、右半部分合在一起,最后再通过一个逆初始置换(初始置换的逆置换),这样就完成DES加密算法。它是分组密码的典型代表,也是第一个被公布出来的加密标准算法。DES 加密算法的工作流程如图2.1所示。图2.1 DES算法流程2.2 DES加密标准现如今,依靠Internet的分布式计算能力,用穷举密钥搜索攻击方法破译已成为可能。数据加密标准DES已经达到它的信任终点。但是作为一种Feistel加密算法的例子仍然有讨论的价值。DES是对二元数字分组加密的分组密码算法,分组长度为64比特。每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。DES算法完全公开,其保密性完全依赖密钥。它的缺点就在于密钥太短。设明文串m=m1m2m64;密钥串k=k1k2k64。在后面的介绍中可以看到k8,k16,k24,k32,k40,k48,k56,k64实际上是不起作用的。DES的加密过程可表示为:DES(m)= IP-1T16T15T2T1IP(m).密钥经过16轮置换和64位经过16轮置换的明文一起在逆初始置换就得到了64位密文,如图2.2是完全16轮DES算法框图:图2.2 完全16轮DES算法2.2.1 初始置换IP初始置换是数据加密的第一步,将64位的明文按照图2.3 置换。把要加密的数据块分成64位的数据块,不满64位的以适当的方式填补至64位。在第一轮运算之前,先对数据块作初始置换IP(初始置换是简单的比特移位),即设有一个比特的信息块m=m1m2m64,则IP(m)= m58 m50m7。初始置换是将输入的64位明文分为8个数组,每一组包括8位,按1至64编号。IP的置换规则如下图2.3所示:图2.3 初始置换即将输入的第58位换到第1位,第50位换到第2位,依次类推,最后一位是原来的第7位。2.2.2 IP-1是IP的逆置换由于第1位经过初始置换后,已处于第40位。逆置换就是再将第40位换回到第1位。逆置换规则如图2.4所示:图2.4 IP-1置换初始置换IP及其逆置换IP-1并没有密码学意义,因为置换前后的一一对应关系是已知的。它们的作用在于打乱原来输入明文的ASCII码字划分的关系,并将原来明文的第位m8,m16,m24,m32,m40,m48,m56,m64位(校验位)变成IP的输出的一个字节。2.2.3 DES算法的迭代过程 图2.5 DES算法的迭代过程图图中Li-1和Ri-1分别是第i-1次迭代结果的左右两部分,各32比特。即Li=Ri-1, Ri=Li-1 f(Ri-1,ki)。其中轮密钥Ki为48比特,函数F(R,K)的计算过程如图2.5所示。轮输入的右半部分R为32比特,R首先被扩展成48比特,扩展过程由图2.6定义的置换,其中将R的16个比特各重复一次。扩展后的48比特再与子密钥Ki异或,然后再通过一个S盒,产生32比特的输出。该输出再经过一个由图2.6定义的置换,产生的结果即为函数F(R,K)的输出。图2.6 扩展置换ki是由64比特的初始密钥(亦称种子密钥)导出的第i轮子密钥,ki是48比特DES算法的关键是f(Ri-1,ki)的功能,其中的重点又在S-盒(Substitution Boxes)上。F函数的输出是32比特。图2.7 F函数计算过程图将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(图2.7),即得F(R,K)。其中,扩展运算E与置换P主要作用是增加算法的扩散效果。S-盒是DES算法中唯一的非线性部件,当然也就是整个算法的安全性所在。它的设计原则与过程一直因为种种不为人知的因素所限,而未被公布出来。S-盒的设计如下图2.8所示: 图2.8 S-盒S-盒的置换规则为:取0,1,15上的4个置换,即它的4个排列排成4行,得一4*16矩阵。若给定该S盒的6个输入为b0 b1 b2 b3 b4 b5,在Si表中找出b0 b5行,b1 b2 b3 b4列的元素,以4位二进制表示该元素,此为S-盒Si的输出。2.2.4 子密钥的生成图2.9 子密钥产生的流程图图2.9给出了子密钥产生的流程图。首先对初始密钥经过置换PC-1(图2.4),将初始密钥的8个奇偶校验位剔除掉,而留下真正的56比特初始密钥。然后将此56位分为C0,D0两部分,各28比特,C0,D0如下:C0=k57k49k44k36D0=k63k55k12k4然后分别进行一个循环左移函数LS1,得到C1,D1,将C1(28位),D1(28位)连成56比特数据,再经过密钥置换PC-2做重排动作,从而便得到了密钥K1(48位)。依次类推,便可得到K2,K3K16。其中LS1(1i16)表示一个或两个位置的循环左移,当i=1,2,9,16时,移一个位置,当i=3,4,5,6,7,8,10,11,12,13,14,15时,移两个位置。2.3 DES算法的解密过程DES解密和加密使用相同的算法,唯一的不同是密钥的次序相反,即只需要把16个密钥的顺序倒过来。若各轮加密的密钥分别是K1,K2,K3,K16,则解密的密钥为K16,K15,K14,K1。为各轮产生的密钥的算法也是循环的。密钥向右移动,每次移动的个数为:0,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1。DES解密过程可用符号表示如下: R16L16=IP(密文) Ri-1=Li,Li-1= Rif(Ri-1,Ki),其中,i =1,2,16解密过程和加密过程的算法都大致相同,故而编写的C语言也是一样,在此省略。河南城建学院本科毕业设计(论文) DES加密算法的安全性评估第三章 DES加密算法的安全性评估3.1 DES弱密钥和补密钥特性由于算法各轮的子密钥是通过改变初始密钥这种方式得到的,因此有些初始密钥成了弱密钥。开始时,初始值被分成了两部分,每部分各自独立地移动。如果每一部分的所有位都是0和1,那么算法的任意周期的密钥都是相同的。当密钥全是1或者全是0时,或者一部分是1、一半是全0,会发生这种情况。此外,其中两种弱密钥还具有使其安全性变差的其他性质。表1以十六进制编码方式给出了四种弱密钥。(注意,每个第八位是奇偶校验位。)弱密钥(带奇偶校验位)真实密钥0101010101010101000000000000001F1F1F1F0E0E0E0E00000000000000E0E0E0E0F1F1F1F1FFFFFFFFFFFFFFFEFEFEFEFEFEFEFEFFFFFFFFFFFFFF此外,还有一些密钥对把明文加密成相同的密文。换句话说,密钥对里的一个密钥能解密钥另一个密钥加密的信息。这也是由于DES产生子密钥这种方式所决定的。这些密钥只产生2个不同的子密钥,而不是16个不同的子密钥。算法中每个这样的子密钥都使用了8次。这些子密钥叫做半弱密钥。关于密钥的虚弱性其他密钥模式也以作了调查,但是什么也没有发现。将密钥的每一位取反,也就是说将所有的0用1代替,将所有的1用0代替。假设用原来的密钥加密一个明文分组得到一个密文分组,那只用该密钥的补密钥加密将该明文分组的补便得到该密文分组的补。如果是x的补,则有如下的等式:子密钥与每一轮经扩展置换输出的右半部分异或运算,是其互补特性的直接结果。这表明,对DES的选择明文攻击仅仅需要测试其可能的个密钥的一半,个即可。这是否是DES的弱点有待讨论。因为绝大多数消息并无明文补分组,用户被告诫不要使用补密钥。3.2 DES的密钥的长度和迭代次数 IBM最初向NBS提交的方案有112位密钥。到DES成为一个标准时,被消减至56位密钥。许多密码学家力荐使用更长的密钥,他们的理由集中在穷举攻击的可能性上。1976年及1977年,Diffie和Hellman证明,一台专用于破译DES的并行计算机能在一天中重新找到密钥,但将耗资2000万美元。1981年,Diffie将这个数据增加到2天的搜索时间和5000万美元的费用。Diffie和Hellman据此指出,除了像NSA这种机构外,任何人都不可能破译DES,,但到1990年时,DES将完全是不安全的。Hellman提出了另一个反对短的密钥长度的理由:用存储空间的增大来换取时间的减少,将加速这一搜索过程。如用每个可能的密钥加密一个明文分组能得到个可能的结果,Hellman提出了计算和存储这些结果可能性。这样的话,要破译出一个未知的密钥,一个密钥分析者所要的一切即是:把明文分组插入到加密序列中,恢复所得到的密文,从而找到密钥。Hellman估计,这种破译机的费用将不会超过500万美元。同时,DES的硬件实现方法逐渐接近Diffie和Hellman的专用机所要求每秒百万次加密的速度。1984年制造出了每秒完成256000次加密的DES芯片。到1987年又研制出了每秒完成512000次的加密芯片,并且还研制出了每秒能搜索一百万个密钥的芯片,而且,在1993年,Michael Wiener 设计一个一百万美元的机器,它能在平均3.5小时内,完成对DES的穷举攻击。直到1990年,两位以色列数学家Biham和Shamir的发现了差分密钥分析技术,这个技术将密钥长度问题暂且搁置起来。在讨论这个技术前,让我先转到DES的其他一些设计准则上去。DES为什么是16轮而不是32轮?经过5轮迭代后,密文每一位基本上是所有明文和密钥位的函数,经过8轮迭代后,密文基本上是所有明文和密钥位的随机函数。那为什么算法在8轮后还不停止呢?近年来,多种降低轮数的DES已被成功地攻击。1982年3轮或四轮DES就被轻易地破解。几年后,6轮DES也被破译了。Diffie和Hellman的差分密钥分析同样地阐述了这一点:对于低16轮的任意DES的已知明文攻击要比穷举攻击有效。有趣的是只有当算法恰好有16轮时,只有穷举攻击最有效。3.3 DES加密算法S-盒的设计 除了因减少密钥长度而遭到非难外,NSA还被指责修改了S-盒的内容。当被质问S-盒的设计依据时,NSA表示,算法设计原理“敏感的”,不宜公之于众。许多密码专家担心NSA设计S-盒隐藏了“陷门”,使得只有他们才可以破译算法。自那时起,人们在分析S-盒的设计和运算上做了大量的工作。70年代中叶,Lexar公司和Bell实验室研究了S-盒的运算,尽管他们都发现了不能解释的特征,但是研究中并没有找到弱点。如果S-盒是随机选择的,但是S-盒的线性变换将具有比预期更大的普遍性。Bell实验小组说S-盒可能隐藏了陷门,Lexar的报告结论是:已经发现的DES的结构毫无疑问增强了系统抗击一定攻击的能力,同时也正是这些结构似乎削弱系统抗攻击的能力。另一方面,这个报告也提出了警告:探寻S-盒的结构问题是很复杂的事,借助人的思维能力去发现随机数的结构与实际的结构根本不相同。在DES的第二次讨论会上,NSA透漏了S-盒的几条设计准则。这些并未消除人们的猜测,争论还在继续。第四个S-盒的后三位的输出可以像第一位的输出一样,通过对某些输入位取补推出。经过尽心挑选的两个不同输入可以使S-盒产生相同的输出,如果只改变三个相邻S-盒的输入位,可使单论DES输出相同。Shamir注意到S-盒的输入项看起来具有某种不平衡,但是这种不平衡并不导致可能的攻击。3.4 DES加密算法的应用误区DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的,当然,随着科学技术的发展,当出现超高速计算机后,我们可考虑把DES密钥的长度再增长一些,以此来达到更高的保密程度。由上述DES算法介绍我们可以看到:DES算法中只用到64位密钥中的其中56位,而第8、16、24、.64位8个位并未参与DES运算,这一点,向我们提出了一个应用上的要求,即DES的安全性是基于除了8,16,24,.64位外的其余56位的组合变化256才得以保证的。因此,在实际应用中,我们应避开使用第8,16,24,.64位作为有效数据位,而使用其它的56位作为有效数据位,才能保证DES算法安全可靠地发挥作用。如果不了解这一点,把密钥Key的8,16,24,. .64位作为有效数据使用,将不能保证DES加密数据的安全性,对运用DES来达到保密作用的系统产生数据被破译的危险,这正是DES算法在应用上的误区,留下了被人攻击、被人破译的极大隐患。虽然已发表的针对DES的密码分析的研究文章多于所有其它的块密码,到目前为止,最实用的攻击方法仍然是暴力攻击。已知DES有一些次要的可能导致加密强度降低的密码学特性,同时有3种理论攻击的理论复杂性小于暴力破解,但需要不现实的已知明文或选择明文数量,并无实用价值。1. 暴力破解: 对于一切密码而言,最基本的攻击方法是暴力破解法依次尝试所有可能的密钥。密钥长度决定了可能的密钥数量,因此也决定了这种方法的可行性。对于DES,即使在它成为标准之前就有一些关于其密钥长度的适当性的问题,而且也正是它的密钥长度,而不是理论密码分析迫使它被后续算法所替代。在设计时,在与包括NSA在内的外部顾问讨论后,密钥长度被从128位减少到了56位以适应在单芯片上实现算法。EFF的价值250,000美元的DES破解器包括1,856个自定义的芯片,可以在数天内破解一个DES密钥本图显示了使用数个Deep Crack芯片搭成的DES破解器。在学术上,曾有数个DES破解器被提出。2. 快于暴力攻击的攻击方法:有三种已知方法可以以小于暴力破解的复杂性破解DES的全部16回次:微分密码分析(DC),线性密码分析(LC),以及戴维斯攻击。然而,这些攻击都是理论性的,难以用于实践;它们有时被归结于认证的弱点。微分密码分析在1980年代晚期由艾力毕汉姆和阿迪萨莫尔重新发现;1970年代IBM和NSA便发现了这种方法,但没有公开。为了破解全部16回次,微分密码分析需要247组选择明文。DES被设计为对DC具有抵抗性。有一些其它的针对削减了回次的密码版本,即少于16回次的DES版本。这些攻击显示了多少回次是安全所需的,以及完整版本拥有多少“安全余量”。微分线性密码分析于1994年为兰福德(Langford)和海尔曼所提出,是一种组合了微分和线性密码分析的方法。一种增强的微分线性密码分析版本可以利用215.8 组已知明文可以以229.2的时间复杂性破解9回次的DES。3.5 DES加密算法安全性统计基于1997年的技术统计分析的攻击结果,JALAL FEGHHI等人98年9月给出DES加密抗攻击的情况如下表所述:个人攻击小组攻击院、校网络攻击大公司军事情报机构40(bits)数周数日数小时数毫秒数微秒56数百年数十年数年数小时数秒钟64数千年数百年数十年数日数分钟80不可能不可能不可能数百年数百年128不可能不可能不可能不可能数千年上表中攻击者配有如下计算机资源的攻击能力攻击者类型所配有的计算机资源每秒处理的密钥数个人攻击1台高性能桌式计算机及其软件217-224小组攻击16台高性能桌式计算机及其软件221-224院、校网络攻击256台高性能桌式计算机及其软件225-228大公司配有价值1百万美元的硬件243军事情报机构配有价值1百万美元的硬件及先进的攻击技术255注:99年的技术比97年预计将提高200倍左右。基于现代密码学及其密码体制(有别于传统的算法或密码本),保密的关键是如何保护好密钥;而破密的关键则是如何得到密钥。因为,一个好的现代密码算法,在密钥足够长的情况下,即使是发明该算法的人,如他得不到密钥。他本人要破解用他自己发明的算法来加了密的电文也是极其困难甚至是不可能的。而在电子商务中还有一个较易计算的所谓值不值得的问题。河南城建学院本科毕业设计(论文) DES加密算法的实现及验证第四章 DES加密算法的实现及验证4.1 DES加密算法的实现 4.1.1 通过DES算法实现对字符的加密DES实现对字符的加密和加密,首先输入56位密钥(在这里只是为了方便验证只选择了8位的密钥)密钥的长度决定了该算法的安全性,待真正验证时也会改成56位的密钥。8位密钥位:12345678;然后输入要加密的内容:Hello Word ;加密后的结果如图4.1所示。图4.1
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!