基于RSA算法的数字签名的实现毕业论文.doc

上传人:hw****26 文档编号:4141220 上传时间:2019-09-29 格式:DOC 页数:43 大小:648.95KB
下载 相关 举报
基于RSA算法的数字签名的实现毕业论文.doc_第1页
第1页 / 共43页
基于RSA算法的数字签名的实现毕业论文.doc_第2页
第2页 / 共43页
基于RSA算法的数字签名的实现毕业论文.doc_第3页
第3页 / 共43页
基于RSA算法的数字签名的实现毕业论文.doc_第4页
第4页 / 共43页
基于RSA算法的数字签名的实现毕业论文.doc_第5页
第5页 / 共43页
点击查看更多>>
资源描述

1、 基于 RSA 算法的数字签名的实现 毕业设计(论文)原创性声明 本人郑重声明:所提交的毕业设计(论文) ,是本人在导师指导下,独立进行研究工 作所取得的成果。除文中已注明引用的内容外,本毕业设计(论文)不包含任何其他个 人或集体已经发表或撰写过的作品成果。对本研究做出过重要贡献的个人和集体,均已 在文中以明确方式标明并表示了谢意。 论文作者签名: 日期: 年 月 日 摘 要 随着 Internet 的发展,电子商务已经逐渐成为人们进行商务活动的新模式,越来越多 的人通过 Internet 进行商务活动。电子商务的发展前景十分诱人,而其安全问题也变得越 来越突出,如何建立一个安全、便捷的电子商

2、务应用环境,对信息提供足够的保护,已 经成为商家和用户都十分关心的话题。 系统综合运用了 RSA 算法原理,散列函数以及 C#和.NET 编程技术,实现了基于 RSA 算法的数字签名系统。经过测试表明,系统运行可靠稳定,实现了保证信息完整性、 鉴别发送者的身份真实性与不可否认性目标。 本文基于数字签名技术在电子商务中的应用,对公钥密码体制中的广泛流行的 RSA 算法做了深入的研究并主要阐述了利用 C#语言实现基于 RSA 算法的数字签名方法。从两 大基本模块签名系统和认证系统着手,对数字签名进行了详细的说明和分析。 关键词:数字签名;公钥密码体制;RSA;电子商务;加解密 ABSTRACT W

3、ith the development of Internet,E-commerce has gradually become a new model of business activities,more and more people take up business affairs through the Internet. Prospects for the development of e-commerce is very tempting,and the security issues are becoming increasingly prominent. Many techno

4、logies have been adopted in the system, such as algorithm RSA, hash function, C# and .NET programming technology. And the Digital Signature system is based on algorithm RSA. The tests of application show that this system is reliable and achieves the design object of the integrity of information, ide

5、ntification of the senders identity and the authenticity of the undeniable Based on digital signature technology in the application of e-commerce,we conduct a study about the algorithm RSA which is very popular in the public-key cryptosystem,and we mainly explain the implementation of the Digital Si

6、gnature based on algorithm RSA in C#. From the two basic systems - the signature system and the authentication system, we did the detailed description and analysis of digital signature. Key words: digital signature; public-key cryptosystem; RSA; Eletronic Commerce; encryption and decryption 目 录 第一章

7、概述 .1 1.1 课题背景 1 1.2 数字签名及其应用 1 1.2.1 数字签名概述 1 1.2.2 数字签名的应 用 2 1.3 课题内容 .3 第二章 数字签名软件 的技术支撑 4 2.1 RSA 加密算法 4 2.1.1 公钥和私钥的产生 .4 2.1.2 加密消息 .5 2.1.3 解密消息 .5 2.1.4 安全 .5 2.1.5 实现细节 .6 2.2 数字签名原理 .7 2.3 散列函数 .7 2.3.1 散列函数的性质 8 2.3.2 散列函数的应用 .8 2.3.3 MD5 算法 .10 2.3.4 SHA-1 算法 11 2.4 C#和.NET .11 第三章 系统的分

8、析与设计 .13 3.1 需求分析 13 3.2 总体设计 .13 3.3 功能模块的划分 .15 3.4 各功能模块的介绍 .16 第四章 系统的实现 .18 4.1 RSA 加密算法的实现 18 4.1.1 公私密钥的生成 .19 4.1.2 使用私钥加密 .20 4.1.3 使用公钥解密 .21 4.1.4 其他 .21 4.2 散列函数 .21 4.3 数字签名的实现 .22 4.3.1 设计思想 .22 4.3.2 系统 实现 .24 4.4 本章小结 .33 结束语 .34 致 谢 .35 南京邮电大学 2011 届本科生毕业设计(论文) 0 第一章 概述 1.1 课题背景 随着

9、Internet 和计算机网络技术的蓬勃发展,连通全世界的电子信息通道已经形成, 应用 Internet 网开展电子商务业务也开始具备实用的条件,电子商务获得长足发展的时机 已经成熟。专家认为,作为 21 世纪重要经济增长点的电子商务,其作用不亚于 200 年前 的工业革命。随着世界经济一体化的发展,资金流动越来越快,市场变化也越来越快, 各国间经济依存关系更加紧密,发展电子商务的重要性也日益突出。而且凭借其在增加 贸易机会、降低贸易成本、简化贸易流程、提高贸易效率等方面的优势,电子商务也越 来越得到全球各个国家的重视和支持。 众所周知,在 Internet 上的电子商务交易过程中,最核心和最

10、关键的问题就是交易的 安全性。电子商务主要的安全要素包括: (1) 有效性,保证电子形式的贸易信息的有效性是开展电子商务的前提; (2) 机密性,电子商务建立在一个较为开放的网络环境上,维护商业机密是其全 面推广应用的重要保障; (3) 完整性,由于数据输入时的意外差错或欺诈行为,可能导致贸易各方信息的 差异。此外,数据传输过程中信息的丢失、信息重复或信息传送的次序差异也会导致贸 易各方信息的不同。贸易各方信息的完整性将影响到贸易各方的交易和经营策略,保持 贸易各方信息的完整性是 EC(Eletronic Commerce 电子商务)应用的基础; (4) 可靠性/不可抵赖性/鉴别,在无纸化的

11、EC 方式下,通过手写签名和印章进行 贸易方的鉴别是不可能的。因此,要在交易信息的传输过程中为参与交易的个人、企业 或国家提供可靠的标识; (5) 审查能力,根据机密性和完整性的要求,应对数据审查的结果进行记录。 所以为了保证电子商务的健康快速发展,上述的安全性必须得到满足。然而,随着网 络的复杂性,网络安全面临着诸多的威胁,如破坏信息的完整性、冒充、抵赖等。这对 电子商务的发展也带了许多不安全的因素。因此,必须有一个保密完善的机制运用在电 子商务中,才可能保证电子商务的安全。而数字签名便是一个在电子商务交易中维护交 易安全的工具。 1.2 数字签名及其应用 1.2.1 数字签名概述 数字签名

12、是在公钥加密系统的基础上建立起来的,这里首先讲述一下公钥密码的原理: 南京邮电大学 2011 届本科生毕业设计(论文) 1 公钥密码算法使用两个密钥,使用其中一个密钥(称为加密密钥)用于加密,另外一个 密钥(称为解密密钥)用于解密。公钥密码算法具有如下特征: (1)加密密钥与解密密钥是本质上不同的,也就是说如果仅仅知道密码算法和加密 密钥,而要确定解密密钥,在计算上不可行的; (2)大多数公钥密码算法的加密密钥与解密密钥具有互换的性质。如 RSA 算法,密 钥对中的一个用于加密,另外一个就用于解密。 数字签名过程一般对于数据摘要信息进行处理,所谓数据摘要就是散列函数对消息 处理产生的散列值,也

13、称其为消息的散列值。摘要信息在数字签名中应用过程可以概述 为:首先使用某种散列算法,对要发送的数据进行处理,生成数据摘要信息;然后采用 公钥密码算法,用私钥加密数据摘要信息。加密后的数据摘要信息就相当于用户的签名, 类似于现实生活中的签名和印章。接收方可以对接收到的签名结果进行验证,以判断签 名的有效性。 数字签名在具体实施时,首先发送方对信息施以数学变换,所得到的信息与源信息 唯一地对应;在接收方进行逆变换,得到原始信息。只要数学变换方法优良,变换后的 信息在传输中就具有很强的安全性,很难被破译、篡改。这个发送方的变换过程就是签 名,通常是一种加密措施;对应的逆变换过程就是对签名的认证,通常

14、是一种解密措施。 数字签名与传统签字或印章有根本不同,数字签名的基础是公钥密码学,通过数学 的手段来达到传统签字的功能。简单地说,在公钥密码体制中,仅仅签名者自己掌握私 钥,而其对应的公钥是公开的,那么签名者用自己的私钥变换数据(加密) ,其他人就可 以利用签名者的公钥来逆变换数据(解密) ,因为利用其他任何公钥都无法正确逆变换出 该私钥变换后的数据,从而就可以鉴别该数据是谁进行的变换处理,亦即是谁的签名。 数字签名具有许多传统签名所不具备的优点,如签名因消息而异,同一个人对不同的消 息,其签名结果两者是一个混合的不可分割的整体等。所以,数字签名比传统签名更具 可靠性。 由上述介绍可知,一个签

15、名体制一般包括两个部分:一个是发送方的签名部分,对 消息 M 签名,可以记作 S=Sig(K,M) ,签字算法使用的密钥是秘密的,即是签字者的 私钥。二是接受方的认证部分,对签名 S 的验证可以记作 Ver(M,S,K)=真,假, 认证算法使用的密钥是发送方(即签名者)的公钥。 1.2.2 数字签名的应用 数字签名机制作为保障网络信息安全的手段之一,可以解决伪造、抵赖、冒充和篡 改问题。 数学签名的目的之一,就是在网络环境中代替传统的手工签字与印章,那么数字签 名可以抵御那些网络攻击? 南京邮电大学 2011 届本科生毕业设计(论文) 2 (1)防冒充(伪造) 。其他人不能伪造对消息的签名,因

16、为私有密钥只有签名者自 己知道,所以其他人不可能构造出正确的签名结果数据。显然自己的私有密钥是一定要 保存好的。 (2)可鉴别身份。由于传统的手工签字一般是双方直接见面的,身份自可一清二楚; 在网络环境中,接收方必须能够鉴别发送方所宣传的身份。即接收方使用发送方的公开 密钥对签名报文对签名报文进行解密运算,如其结果为明文,则签名有效,证明对方身 份是真实的。 (3)防篡改(防破坏信息的完整性) 。传统的手工签字,假如要签署一本 200 页的 合同,是仅仅在合同末尾签名呢?还是对每一页都签名?不然,对方会不会偷换其中几 页?这些都是问题所在。而数字签名,签名与原有文件已经形成了一个混合的整体数据

17、, 不可能篡改,从而保证了数据的完整性。 (4)防抵赖。前面讲了,数字签名可以鉴别身份,不可能冒充伪造,那么,只要保 存好签名的报文,就好似保存了手工签署的合同文本,也就是保留了证据,签名者就无 法抵赖。以上是签名者不能抵赖,那如果接收方确已收到对方的签名报文,却抵赖没有 收到呢?要防接收方的抵赖,在数字签名体制中,要求接收方返回一个自己签名的表示 收到的报文,给对方或者是第三者,或者引入第三方机制。如此操作,双方都不可抵赖。 (5)机密性。有了机密性保证,截收攻击也就失效了。手工签字的文件是不具备保 密性的,文件一旦丢失,文件信息就极可能泄露。数字签名可以加密要签名的信息,一 串密文是不可理

18、解的。 综上所述,对于之前提到的电子商务的安全性因素,数字签名都可以得到保证。利用数 字签名,电子商务可以安全地完成企业之间、企业与消费者之间在网上的商业交换活动。 网上证券也能安全地完成股票交易、网上银行证券转账业务等。数字签名为这些业务提 供了身份鉴别、防抵赖、防篡改等保证,是网上业务可以顺利安全地进行。 1.3 课题内容 数字签名是当前网络安全领域的研究热点。特别是在电子商务、电子银行、电子政 务等应用领域,数字签名是其关键技术之一,在社会生活的各个领域也有极其广阔的应 用前景。密码技术是信息安全的核心技术。公钥密码在信息安全中担负起密钥协商、数 字签名、消息认证等重要角色,已成为最核心

19、的密码。要求在了解了数字签名技术的基本 功能、原理的基础上,设计并实现基于 RSA 的数字签名算法。 利用 RSA 算法实现数字签名软件,要求软件可用性强,且操作简便。它应具有的功 能如 (1)对文件所生成的签名进行认证,即提供身份认证; (2)防止签名方的抵赖,保证签名的不可否认性; 南京邮电大学 2011 届本科生毕业设计(论文) 3 (3)防止签名文件的篡改,即保证数据的完整性。 本文将从 RSA 算法和数字签名的原理开始,详细叙述 RSA 数字签名的完整过程,以 及软件的对改系统的具体实现。分别是系统的技术支撑,系统的分析与设计以及系统实 现。 南京邮电大学 2011 届本科生毕业设计

20、(论文) 4 第二章 数字签名软件的技术支撑 本章主要介绍系统开发过程中所需要的软件开发技术和算法原理。主要 RSA 算法原 理,数字签名原理,C# 编程技术,以及 Visual Studio 中的.NET 平台。 2.1 RSA 加密算法 RSA 加密算法是一种非对称加密算法。在公钥加密标准和电子商业中 RSA 被广泛使 用。RSA 是 1977 年由 罗纳德李维斯特(Ron Rivest)、 阿迪萨莫尔(Adi Shamir)和伦 纳德阿德曼 ( Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。 RSA 就是他们三人姓氏开头字母拼在一起组成的。 1973 年,

21、在英国政府通讯总部工作的数学家 克利福德柯克斯(Clifford Cocks)在一 个内部文件中提出了一个相应的算法,但他的发现被列入机密,一直到 1997 年才被发表。 对极大整数做因数分解的难度决定了 RSA 算法的可靠性。换言之,对一极大整数做因数 分解愈困难,RSA 算法愈可靠。假如有人找到一种快速因数分解的 算法的话,那么用 RSA 加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。 今天只有短的 RSA 钥匙才可能被强力方式解破。到 2008 年为止,世界上还没有任何可 靠的攻击 RSA 算法的方式。只要其钥匙的长度足够长,用 RSA 加密的信息实际上是不能

22、被解破的。但在分布式计算技术和量子计算机理论日趋成熟的今天,RSA 加密安全性受 到了挑战。 1983 年麻省理工学院在美国为 RSA 算法申请了专利。这个专利 2000 年 9 月 21 日失 效。由于该算法在申请专利前就已经被发表了,在世界上大多数其它地区这个专利权不 被承认。 2.1.1 公钥和私钥的产生 假设 Alice 想要通过一个不可靠的媒体接收 Bob 的一条私人讯息。她可以用以下的方 式来产生一个公钥和一个私钥: (1) 随意选择两个大的质数 p 和 q,p 不等于 q,计算 N=pq。 (2) 根据欧拉函数,不大于 N 且与 N 互质的整数个数为(p-1)(q-1) (3)

23、选择一个整数 e 与 (p-1)(q-1)互质,并且 e 小于(p-1)(q-1) (4) 用以下这个公式计算 d:d e 1 (mod (p-1)(q-1) (5) 将 p 和 q 的记录销毁。 南京邮电大学 2011 届本科生毕业设计(论文) 5 (N,e)是公钥,(N,d)是私钥。(N,d)是秘密的。Alice 将她的公钥(N,e)传给 Bob,而将她的私 钥(N,d)藏起来。 2.1.2 加密消息 假设 Bob 想给 Alice 送一个消息 m,他知道 Alice 产生的 N 和 e。他使用起先与 Alice 约好的格式将 m 转换为一个小于 N 的整数 n,比如他可以将每一个字转换为

24、这个字的 Unicode 码,然后将这些数字连在一起组成一个数字。假如他的信息非常长的话,他可以 将这个信息分为几段,然后将每一段转换为 n。用下面这个公式他可以将 n 加密为 c: 计算 c 并不复杂。 Bob 算出 c 后就可以将它传递给 Alice。 2.1.3 解密消息 Alice 得到 Bob 的消息 c 后就可以利用她的密钥 d 来解码。她可以用以下这个公式来 将 c 转换为 n: 得到 n 后,她可以将原来的信息 m 重新复原。 解码的原理是 以及 ed 1 (mod p-1)和 ed 1 (mod q-1)。由费马小定理可证明(因为 p 和 q 是质数) 和 这说明(因为 p

25、和 q 是 不同 的质数,所以 p 和 q 互质) 2.1.4 安全 假设偷听者乙获得了甲的公钥 N 和 e 以及丙的加密消息 c,但她无法直接获得甲的密 钥 d。要获得 d,最简单的方法是将 N 分解为 p 和 q,这样她可以得到同余方程 d e 1 (mod (p-1)(q-1)并解出 d,然后代入解密公式 导出 n(破密)。但至今为止还没有人找到一个多项式时间的算法来分解一个大的整数的 因子,同时也还没有人能够证明这种算法不存在(见因数分解)。至今为止也没有人能 够证明对 N 进行因数分解是唯一的从 c 导出 n 的方法,但今天还没有找到比它更简单的 方法。(至少没有公开的方法。)因此今

26、天一般认为只要 N 足够大,那么黑客就没有办 法了。假如 N 的长度小于或等于 256 位,那么用一台个人电脑在几个小时内就可以分解 南京邮电大学 2011 届本科生毕业设计(论文) 6 它的因子了。 1999 年,数百台电脑合作分解了一个 512 位长的 N。今天对 N 的要求是它 至少要 1024 位长。 1994 年 彼得秀尔(Peter Shor)证明一台 量子计算机可以在多项式时 间内进行因数分解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔 的算法可以淘汰 RSA 和相关的衍生算法(即依赖于分解大整数困难性的加密算法)。假 如有人能够找到一种有效的分解大整数的算法的话

27、,或者假如量子计算机可行的话,那 么在解密和制造更长的钥匙之间就会展开一场竞争。但从原理上来说 RSA 在这种情况下 是不可靠的。 2.1.5 实现细节 1.密钥生成 首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可 以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测 试来保证它的确是一个质数。 除此之外这样找到的 p 和 q 还要满足一定的要求,首先它们不能太靠近,此外 p-1 或 q-1 的因子不能太小,否则的话 N 也可以被很快地分解。 此外寻找质数的算法不能给攻击者任何信息,这些质数是怎样找到的,尤其产生随机 数的软件必须非常好。要求

28、是随机和不可预测。这两个要求并不相同。一个随机过程可 能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系 列的话,那么它就已经不可靠了。比如有一些非常好的随机数算法,但它们都已经被发 表,因此它们不能被使用,因为假如一个攻击者可以猜出 p 和 q 一半的位的话,那么他 们就已经可以轻而易举地推算出另一半。 此外密钥 d 必须足够大, 1990 年有人证明假如 p 大于 q 而小于 2q(这是一个很经常 的情况)而 d N1/4/3,那么从 N and e 可以很有效地推算出 d。此外 e = 2 永远不应该被使 用。 2.速度 比起 DES 和其它对称算法来说,RSA

29、 要慢得多。实际上 Bob 一般使用一种对称算法 来加密他的信息,然后用 RSA 来加密他的比较短的对称密码,然后将用 RSA 加密的对称 密码和用对称算法加密的消息送给 Alice。这样一来对随机数的要求就更高了,尤其对产 生对称密码的要求非常高,因为否则的话可以越过 RSA 来直接攻击对称密码。 3.密钥分配 和其它加密过程一样,对 RSA 来说分配公钥的过程是非常重要的。分配公钥的过程 必须能够抵挡一个从中取代的攻击。假设蛋蛋交给阿庆一个公钥,并使阿 庆相信这是小 Q 的公钥,并且她可以截下小 Q 和阿庆之间的信息传递,那么她可以将她自己的公钥传 给阿庆,阿庆以为这是小 Q 的公钥。可以

30、将所有阿庆传递给小 Q 的消息截下来,将这个 消息用她自己的密钥解密,读这个消息,然后将这个消息再用小 Q 的公钥加密后传给小 南京邮电大学 2011 届本科生毕业设计(论文) 7 Q。理论上小 Q 和阿庆都不会发现蛋蛋在偷听他们的消 息。今天人们一般用数字认证来 防止这样的攻击。 2.2 数字签名原理 用 RSA 算法做数字签名,总的来说,就是签名者用私钥参数 d 加密,也就是签名; 验证者用签字者的公钥参数 e 解密来完成认证。 下面简要描述数字签名和认证的过程。 1、生成密钥 为用户随机生成一对密钥:公钥(e,n)和私钥(d,n). 2、签名过程 (1) 计算消息的散列值 H(M). (

31、2) 用私钥(d,n) 加密散列值:s=(H(M) mod n,签名结果就是 s.d (3) 发送消息和签名(M,s). 3、认证过程 (1) 取得发送方的公钥(e,n). (2) 解密签名 s:h=s mod n.e (3) 计算消息的散列值 H(M). (4) 比较,如果 h=H(M),表示签名有效;否则,签名无效。 根据上面的过程,我们可以得到 RSA 数字签名的框图如图 2-1: Hash 连接 消息 Hash 解密 比较 加密 相等, 真 不等, 假 发送方私钥(d,n) 发送方公钥(e,n) 签名过程 认证过程 图 2-1 RSA 数字签名框图 消息 南京邮电大学 2011 届本科

32、生毕业设计(论文) 8 2.3 散列函数 散列函数(或散列算法,英语:Hash Function)是一种从任何一种数据中创建小的数 字“指纹”的方法。该函数 将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常 用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散 列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。 2.3.1 散列函数的性质 所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数) , 那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的 结果。 但另一方面,散列函数的输入和输出不是唯

33、一对应关系的,如果两个散列值相同,两个 输入值很可能是相同的。但也可能不同,这种情况称为“散列碰撞” , 这通常是两个不同 长度的散列值,刻意计算出相同的输出值。输入一些数据计算出散列值,然后部分改变 输入值,一个具有强混淆特性的散列函数会产生一个完全不 同的散列值。 典型的散列函数都有无限定义域,比如任意长度的字节字符串,和有限的值域,比如 固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域 间的一一对应。一一对应的散列函数也称为排列。可逆性可以通过使用一系列的对于输 入值的可逆“ 混合” 运算而得到。 2.3.2 散列函数的应用 由于散列函数的应用的多样性,它们经

34、常是专为某一应用而设计的。例如,加密散列 函数假设存在一个要找到具有相同散列值的原始输入的敌人。一个设计优秀的加密散列 函数是一个“ 单向” 操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入, 也就是说很难伪造。为加密散列为目的设计的函数,如 MD5,被广泛的用作检验散列函 数。这样软件下载的时候,就会对照验证代码之后才下载正确的文件部分。此代码有可 能因为环境因素的变化,如机器配置或者 IP 地址的改变而有变动。以保证源文件的安全 性。 错误监测和修复函数主要用于辨别数据被随机的过程所扰乱的事例。当散列函数被用 于校验和的时候,可以用相对较短的散列值来验证任意长度的数据是否被更改

35、过。 1.加密 一个典型的加密单向函数是“非对称” 的,并且由一个高效的散列函数构成;一个典型 的加密暗门函数是“ 对称”的,并且由一个高效的随机函数构成。 2.散列表 南京邮电大学 2011 届本科生毕业设计(论文) 9 散列表是散列函数的一个主要应用,使用散列表能够快速的按照 关键字 查找数据记录。 (注意:关键字不是像在加密中所使用的那样是秘密的,但它们都是用来“解锁” 或者访问 数据的。)例如,在英语字典中的关键字是英文单词,和它们相关的记录包含这些单词 的定义。在这种情况下,散列函数必须把按照字母顺序排列的字符串映射到为散列表的 内部数组所创建的索引上。 散列表散列函数的几乎不可能/

36、不切实际的理想是把每个关键字映射到唯一的索引上 (参考完美散列),因为这样能够保证直接访问表中的每一个数据。 一个好的散列函数(包括大多数加密散列函数)具有均匀的真正随机输出,因而平均 只需要一两次探测(依赖于装填因子)就能找到目标。同样重要的是,随机散列函数不 太会出现非常高的冲突率。但是,少量的可以估计的冲突在实际状况下是不可避免的 (参考生日悖论或鸽洞原理)。 在很多情况下,heuristic 散列函数所产生的冲突比随机散列函数少的多。Heuristic 函 数利用了相似关键字的相似性。例如,可以设计一个 heuristic 函数使得像 FILE0000.CHK,FILE0001.CHK

37、,FILE0002.CHK ,等等这样的文件名映射到表的连续指 针上,也就是说这样的串行不会发生冲突。相比之下,对于一组好的关键字性能出色的 随机散列函数,对于一组坏的关键字经常性能很差,这种坏的关键字会自然产生而不仅 仅在攻击中才出现。性能不佳的散列函数表意味着查找操作会退化为费时的线性搜索。 3.错误校正 使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方, 对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。 在数据的接收 方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结 果不一致,那么就说明数据在传输的过程中某些地方有错误了

38、。 这就叫做冗余校验。 对于错误校正,假设相似扰动的分布接近最小(a distribution of likely perturbations is assumed at least approximately)。 对于一个信息串的微扰可以被分为两类,大的(不可能 的)错误和小的(可能的)错误。我们对于第二类错误重新定义如下,假如给定 H(x) 和 x+s,那么只要 s 足够小,我们就能有效的计算出 x。那样的散列函数被称作错误校正编 码。这些错误校正编码有两个重要的分类:循环冗余校验和里德所罗门码。 4.语音识别 对与像从一个已知列表中匹配一个 MP3 文件这样的应用,一种可能的方案是使用传

39、 统的散列函数例如 MD5,但是这种方案会对时间平移、CD 读取错 误、不同的音频 压缩算法或者音量调整的实现机制等情况非常敏感。使用一些类似于 MD5 的方法有利于 迅速找到那些严格相同(从音频文件的二进制数据来看)的 音频文件,但是要找到全部 相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。 那些并不紧随 IT 工业潮流的人往往能反其道而行之,对于那些微小差异足够鲁棒的 散列函数确实存在。现存的绝大多数散列算法都是不够鲁棒的,但是有少数散列算法能 够达到辨别从嘈杂房间里的扬声器里播放出来的音乐的鲁棒性。有一个实际的例子是 南京邮电大学 2011 届本科生毕业设计(论文)

40、 10 Shazam1服务。用户可以用电话机拨打一个特定的号码,并将电话机的话筒靠近用于播 放音乐的扬声器。该项服务会分析正在播放的音乐,并将它于存储在数据库中的已知的 散列值进行比较。用户就能够收到被识别的音乐的曲名(需要收取一定的费用)。 2.3.3 MD5 算法 MD5 即 Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一 致。是计算机广泛使用的散列算法之一(又译摘要算法、哈希算法),主流编程语言普 遍已有 MD5 实现。将数据(如汉字)运算为另一固定长度值,是散列算法的基础原理, MD5 的前身有 MD2、MD3 和 MD4。 1992

41、 年 8 月 Ronald L. Rivest 在向 IETF 提交了一份重要文件,描述了这种算法的原理, 由于这种算法的公开性和安全性,在 90 年代被广泛使用在各种程序语言中,用以确保资 料传递无误等。MD5 由 MD4、MD3、MD2 改进而来,一度主要增强算法复杂度和不可 逆性。 MD5 一度被广泛应用于安全领域。但是由于 MD5 的弱点被不断发现以及计算机能力 不断的提升,现在已经可以构造两个具有相同 MD5 的信息,使本算法不再适合当前的安 全环境。目前,MD5 计算广泛应用于错误检查。例如在一些 BitTorrent 下载中,软件通 过计算 MD5 和检验下载到的碎片的完整性。

42、MD5 较老,散列长度通常为 128 位,随着计算机运算能力提高,找到“碰撞” 是可能 的。因此,在安全要求高的场合不使用 MD5。 2004 年,王小云证明 MD5 数字签名算法可以产生碰撞。2007 年,Marc Stevens,Arjen K. Lenstra 和 Benne de Weger 进一步指出通过伪造软件签名,可重复性攻 击 MD5 算法。研究者使用前缀碰撞法(chosen-prefix collision),使程序前端包含恶意程 序,利用后面的空间添上垃圾代码凑出同样的 MD5 Hash 值。2008 年,荷兰埃因霍芬技 术大学科学家成功把 2 个可执行文件进行了 MD5

43、碰撞,使得这两个运行结果不同的程序 被计算出同一个 MD5。2008 年 12 月一组科研人员通过 MD5 碰撞成功生成了伪造的 SSL 证书,这使得在 https 协议中服务器可以伪造一些根 CA 的签名。 算法如下: MD5 是输入不定长度信息,输出固定长度 128-bits 的算法。经过程序流程,生成四个 32 位数据,最后联合起来成为一个 128-bits 散列。基本方式为,求余、取余、调整长度、 与链接变量进行循环运算。得出结果。 是 XOR,AND,OR ,NOT 的符号。 南京邮电大学 2011 届本科生毕业设计(论文) 11 2.3.4 SHA-1 算法 安全散列算法(Secu

44、re Hash Algorithm)能计算出一个数字消息所对应到的,长度固 定的字符串(又称消息摘要)。且若输入的消息不同,它们对应到不同字符串的机率很 高;而 SHA 是 FIPS 所认证的五种安全散列算法。 这些算法之所以称作“ 安全”是基于以 下两点(根据官方标准的描述):“1)由消息摘要反推原输入消息,从计算理论上来说是 很困难的。2)想要找到两组不同 的消息对应到相同的消息摘要,从计算理论上来说也 是很困难的。任何对输入消息的变动,都有很高的机率导致其产生的消息摘要迥异。” SHA 家族的五个算法,分别是 SHA-1、SHA-224、SHA-256 、SHA-384 ,和 SHA-

45、512,由美国国家安全局(NSA)所设计,并由美国国家标准与技术研究院 (NIST)发布; 是美国的政府标准。后四者有时并称为 SHA-2。SHA-1 在许多安全协议中广为使用,包 括 TLS 和 SSL、PGP、SSH 、S/MIME 和 IPsec,曾被视为是 MD5(更早之前被广为使用 的散列函数)的后继者。但 SHA-1 的安全性如今被密码学家严重质疑;虽然至今尚未出 现对 SHA-2 有效的攻击,它的算法跟 SHA-1 基本上仍然相似;因此有些人开始发展其他 替代的散列算法。缘于最近对 SHA-1 的种种攻击发表,“美国国家标准与技术研究院 (NIST)开始设法经由公开竞争管道(类似

46、高级加密标准 AES 的发展经过),发展一个 或多个新的散列算法。” 2.4 C#和.NET C#是一个语言,.net 是一个平台,上面支持用 C#或者 VBdotNet 写代码。 另外,C# 不但可以开发基于.net 的应用程序,也可以开发基于 WinForm 的程序,这 就是区别。 若是单纯以概念来说,你可以把.net 当做一个工作平台一般,它是一个开发环境的基 底,提供你 开发 Windows、Web、Mobile、XML. 等应用程式一个共通的平台,若是要 了解深一点,则再去了解其运作的相关机制那是有助于你利用它来 开发.C#和.NET 主要 是应用在网际网路.。 C#(读做 C-sh

47、arp)编程语言是由微软公司的 Anders Hejlsberg 和 Scott Willamette 领 导的开发小组专门为.NET 平台设计的语言,它可以使程序员移植到.NET 上。这种移植对 于广大的程序员来说是比较容易的,因为 C#从 C,C+和 Java 发展而来,它采用了这三 种语言最优秀的特点,并加入了它自己的特性。C#是事件的驱动的,完全面向对象的可 视化编程语言,我们可以使用集成开发环境来编写 C#程序。使用 IDE,程序员可以方便 的建立,运行,测试和调试 C#程序,这就将开发一个可用程序的时间减少到不用 IDE 开 发时所用时间的一小部分。使用 IDE 迅速建立一个应用程

48、序的过程称为快速反映开发。 .NET 是 Microsoft 的 XML Web 服务平台。不论操作系统或编程语言有何差别, XML Web 服务能使应用程序在 Internet 上传输和共享数据。 南京邮电大学 2011 届本科生毕业设计(论文) 12 Microsoft .NET 平台包含广泛的产品系列,它们都是基于 XML 和 Internet 行业标 准构建,提供从开发、管理、使用到体验 XML Web 服务的每一方面。XML Web 服务 将成为您今天正在使用的 Microsoft 的应用程序、工具和服务器的一部分 并且将要打 造出全新的产品以满足您所有业务需求。 更具体地说,Mic

49、rosoft 正在五个方面创建 .NET 平台,即工具、服务器、XML Web 服务、客户端和 .NET 体验。 南京邮电大学 2011 届本科生毕业设计(论文) 13 第三章 系统的分析与设计 本章首先提出对该数字签名系统具有什么样的需求,然后通过系统分析,得出需要实 现的功能,并设计整个系统的结构。最后按照不同的功能将系统划分为三个子系统:加密子 系统,解密子系统,验证子系统。 3.1 需求分析 对于使用电子商务的人们来说,网络信息安全越来越被他们的关注。网络信息安全 包括两个方面:一是信息的完整性,数据不能被任何第三方破坏和修改。二是要保证信 息的同一性,接受方要确认信息的来源。对于数字签名系统的的具体要求表现在: 1.功能的全面性:对文件所生成的签名进行认证,即提供身份认证;防止签名方的抵 赖,保证签名的不可否认性;防止签名文件的篡改,即保证数据的完整性。 2. 运行的健壮性:软件在运行中不能出现程序崩溃、死循环的状况,对于用户在界 面所作的任何操作都要实时、准确的反应出来,对于一些错误应该有完善的诊断机制, 入时停止出错的操作,并且尽量避免程序出现BUG。 3.操作性强:软件的使用者多是普通用户,他们应用计算机的能力不是很强,因此一 定要简便好用,图形界面通俗易懂,操作方便简单。 4.安

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。