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

更新时间:2024-04-22 05:14:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于RSA算法的数字签名的实现

毕业设计(论文)原创性声明

本人郑重声明:所提交的毕业设计(论文),是本人在导师指导下,独立进行研究工作所取得的成果。除文中已注明引用的内容外,本毕业设计(论文)不包含任何其他个人或集体已经发表或撰写过的作品成果。对本研究做出过重要贡献的个人和集体,均已在文中以明确方式标明并表示了谢意。

论文作者签名:

日期: 年 月 日

摘 要

随着Internet的发展,电子商务已经逐渐成为人们进行商务活动的新模式,越来越多的人通过Internet进行商务活动。电子商务的发展前景十分诱人,而其安全问题也变得越来越突出,如何建立一个安全、便捷的电子商务应用环境,对信息提供足够的保护,已经成为商家和用户都十分关心的话题。

系统综合运用了RSA算法原理,散列函数以及C#和.NET编程技术,实现了基于RSA算法的数字签名系统。经过测试表明,系统运行可靠稳定,实现了保证信息完整性、鉴别发送者的身份真实性与不可否认性目标。

本文基于数字签名技术在电子商务中的应用,对公钥密码体制中的广泛流行的RSA算法做了深入的研究并主要阐述了利用C#语言实现基于RSA算法的数字签名方法。从两大基本模块——签名系统和认证系统着手,对数字签名进行了详细的说明和分析。 关键词:数字签名;公钥密码体制;RSA;电子商务;加解密

ABSTRACT

With 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 technologies 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, identification of the sender's 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 Signature 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

目 录

第一章 概述 ........................................................................................... 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

第三章 系统的分析与设计 ................................................................... 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届本科生毕业设计(论文)

第一章 概述

1.1课题背景

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

众所周知,在Internet上的电子商务交易过程中,最核心和最关键的问题就是交易的安全性。电子商务主要的安全要素包括:

(1) 有效性,保证电子形式的贸易信息的有效性是开展电子商务的前提; (2) 机密性,电子商务建立在一个较为开放的网络环境上,维护商业机密是其全面推广应用的重要保障;

(3) 完整性,由于数据输入时的意外差错或欺诈行为,可能导致贸易各方信息的差异。此外,数据传输过程中信息的丢失、信息重复或信息传送的次序差异也会导致贸易各方信息的不同。贸易各方信息的完整性将影响到贸易各方的交易和经营策略,保持贸易各方信息的完整性是EC(Eletronic Commerce 电子商务)应用的基础;

(4) 可靠性/不可抵赖性/鉴别,在无纸化的EC方式下,通过手写签名和印章进行贸易方的鉴别是不可能的。因此,要在交易信息的传输过程中为参与交易的个人、企业或国家提供可靠的标识;

(5) 审查能力,根据机密性和完整性的要求,应对数据审查的结果进行记录。 所以为了保证电子商务的健康快速发展,上述的安全性必须得到满足。然而,随着网络的复杂性,网络安全面临着诸多的威胁,如破坏信息的完整性、冒充、抵赖等。这对电子商务的发展也带了许多不安全的因素。因此,必须有一个保密完善的机制运用在电子商务中,才可能保证电子商务的安全。而数字签名便是一个在电子商务交易中维护交易安全的工具。

1.2数字签名及其应用 1.2.1数字签名概述

数字签名是在公钥加密系统的基础上建立起来的,这里首先讲述一下公钥密码的原理:

1

南京邮电大学2011届本科生毕业设计(论文)

公钥密码算法使用两个密钥,使用其中一个密钥(称为加密密钥)用于加密,另外一个密钥(称为解密密钥)用于解密。公钥密码算法具有如下特征:

(1)加密密钥与解密密钥是本质上不同的,也就是说如果仅仅知道密码算法和加密密钥,而要确定解密密钥,在计算上不可行的;

(2)大多数公钥密码算法的加密密钥与解密密钥具有互换的性质。如RSA算法,密钥对中的一个用于加密,另外一个就用于解密。

数字签名过程一般对于数据摘要信息进行处理,所谓数据摘要就是散列函数对消息处理产生的散列值,也称其为消息的散列值。摘要信息在数字签名中应用过程可以概述为:首先使用某种散列算法,对要发送的数据进行处理,生成数据摘要信息;然后采用公钥密码算法,用私钥加密数据摘要信息。加密后的数据摘要信息就相当于用户的签名,类似于现实生活中的签名和印章。接收方可以对接收到的签名结果进行验证,以判断签名的有效性。

数字签名在具体实施时,首先发送方对信息施以数学变换,所得到的信息与源信息唯一地对应;在接收方进行逆变换,得到原始信息。只要数学变换方法优良,变换后的信息在传输中就具有很强的安全性,很难被破译、篡改。这个发送方的变换过程就是签名,通常是一种加密措施;对应的逆变换过程就是对签名的认证,通常是一种解密措施。

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

由上述介绍可知,一个签名体制一般包括两个部分:一个是发送方的签名部分,对消息M签名,可以记作S=Sig(K,M),签字算法使用的密钥是秘密的,即是签字者的私钥。二是接受方的认证部分,对签名S的验证可以记作Ver(M,S,K)={真,假},认证算法使用的密钥是发送方(即签名者)的公钥。

1.2.2数字签名的应用

数字签名机制作为保障网络信息安全的手段之一,可以解决伪造、抵赖、冒充和篡改问题。

数学签名的目的之一,就是在网络环境中代替传统的手工签字与印章,那么数字签名可以抵御那些网络攻击?

(1)防冒充(伪造)。其他人不能伪造对消息的签名,因为私有密钥只有签名者自己知道,所以其他人不可能构造出正确的签名结果数据。显然自己的私有密钥是一定要保存

2

南京邮电大学2011届本科生毕业设计(论文)

好的。

(2)可鉴别身份。由于传统的手工签字一般是双方直接见面的,身份自可一清二楚;在网络环境中,接收方必须能够鉴别发送方所宣传的身份。即接收方使用发送方的公开密钥对签名报文对签名报文进行解密运算,如其结果为明文,则签名有效,证明对方身份是真实的。

(3)防篡改(防破坏信息的完整性)。传统的手工签字,假如要签署一本200页的合同,是仅仅在合同末尾签名呢?还是对每一页都签名?不然,对方会不会偷换其中几页?这些都是问题所在。而数字签名,签名与原有文件已经形成了一个混合的整体数据,不可能篡改,从而保证了数据的完整性。

(4)防抵赖。前面讲了,数字签名可以鉴别身份,不可能冒充伪造,那么,只要保存好签名的报文,就好似保存了手工签署的合同文本,也就是保留了证据,签名者就无法抵赖。以上是签名者不能抵赖,那如果接收方确已收到对方的签名报文,却抵赖没有收到呢?要防接收方的抵赖,在数字签名体制中,要求接收方返回一个自己签名的表示收到的报文,给对方或者是第三者,或者引入第三方机制。如此操作,双方都不可抵赖。

(5)机密性。有了机密性保证,截收攻击也就失效了。手工签字的文件是不具备保密性的,文件一旦丢失,文件信息就极可能泄露。数字签名可以加密要签名的信息,一串密文是不可理解的。

综上所述,对于之前提到的电子商务的安全性因素,数字签名都可以得到保证。利用数字签名,电子商务可以安全地完成企业之间、企业与消费者之间在网上的商业交换活动。网上证券也能安全地完成股票交易、网上银行证券转账业务等。数字签名为这些业务提供了身份鉴别、防抵赖、防篡改等保证,是网上业务可以顺利安全地进行。

1.3 课题内容

数字签名是当前网络安全领域的研究热点。特别是在电子商务、电子银行、电子政务等应用领域,数字签名是其关键技术之一,在社会生活的各个领域也有极其广阔的应用前景。密码技术是信息安全的核心技术。公钥密码在信息安全中担负起密钥协商、数字签名、消息认证等重要角色,已成为最核心的密码。要求在了解了数字签名技术的基本功能、原理的基础上,设计并实现基于RSA的数字签名算法。

利用RSA算法实现数字签名软件,要求软件可用性强,且操作简便。它应具有的功能如

(1)对文件所生成的签名进行认证,即提供身份认证; (2)防止签名方的抵赖,保证签名的不可否认性;

(3)防止签名文件的篡改,即保证数据的完整性。

本文将从RSA算法和数字签名的原理开始,详细叙述RSA数字签名的完整过程,以及软件的对改系统的具体实现。分别是系统的技术支撑,系统的分析与设计以及系统实现。

3

南京邮电大学2011届本科生毕业设计(论文)

第二章 数字签名软件的技术支撑

本章主要介绍系统开发过程中所需要的软件开发技术和算法原理。主要RSA算法原理,数字签名原理,C# 编程技术,以及Visual Studio中的.NET平台。

2.1 RSA加密算法

RSA加密算法是一种非对称加密算法。在公钥加密标准和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。

1973年,在英国政府通讯总部工作的数学家克利福德·柯克斯(Clifford Cocks)在一个内部文件中提出了一个相应的算法,但他的发现被列入机密,一直到1997年才被发表。对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。假如有人找到一种快速因数分解的 算法的话,那么用RSA加密的信息的可靠性就肯定会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA钥匙才可能被强力方式解破。到 2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。但在分布式计算技术和量子计算机理论日趋成熟的今天,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) 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1) (4) 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1)) (5) 将p和q的记录销毁。

(N,e)是公钥,(N,d)是私钥。(N,d)是秘密的。Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。

4

南京邮电大学2011届本科生毕业设计(论文)

2.1.2 加密消息

假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。他使用起先与Alice约好的格式将m转换为一个小于N的整数n,比如他可以将每一个字转换为这个字的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和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的方法,但今天还没有找到比它更简单的方法。(至少没有公开的方法。)因此今天一般认为只要N足够大,那么黑客就没有办法了。假如N的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999年,数百台电脑合作分解了一个512位长的N。今天对N的要求是它至少要1024位长。1994年彼得·秀尔(Peter Shor)证明一台量子计算机可以在多项式时间内进行因数分

5

南京邮电大学2011届本科生毕业设计(论文)

解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔的算法可以淘汰RSA和相关的衍生算法(即依赖于分解大整数困难性的加密算法)。假如有人能够找到一种有效的分解大整数的算法的话,或者假如量子计算机可行的话,那么在解密和制造更长的钥匙之间就会展开一场竞争。但从原理上来说RSA在这种情况下是不可靠的。

2.1.5 实现细节

1.密钥生成

首先要使用概率算法来验证随机产生的大的整数是否质数,这样的算法比较快而且可以消除掉大多数非质数。假如有一个数通过了这个测试的话,那么要使用一个精确的测试来保证它的确是一个质数。

除此之外这样找到的p和q还要满足一定的要求,首先它们不能太靠近,此外p-1或q-1的因子不能太小,否则的话N也可以被很快地分解。

此外寻找质数的算法不能给攻击者任何信息,这些质数是怎样找到的,尤其产生随机数的软件必须非常好。要求是随机和不可预测。这两个要求并不相同。一个随机过程可能可以产生一个不相关的数的系列,但假如有人能够预测出(或部分地预测出)这个系列的话,那么它就已经不可靠了。比如有一些非常好的随机数算法,但它们都已经被发表,因此它们不能被使用,因为假如一个攻击者可以猜出p和q一半的位的话,那么他们就已经可以轻而易举地推算出另一半。

此外密钥d必须足够大,1990年有人证明假如p大于q而小于2q(这是一个很经常的情况)而d < N1/4/3,那么从N and e可以很有效地推算出d。此外e = 2永远不应该被使用。

2.速度

比起DES和其它对称算法来说,RSA要慢得多。实际上Bob一般使用一种对称算法来加密他的信息,然后用RSA来加密他的比较短的对称密码,然后将用RSA加密的对称密码和用对称算法加密的消息送给Alice。这样一来对随机数的要求就更高了,尤其对产生对称密码的要求非常高,因为否则的话可以越过RSA来直接攻击对称密码。

3.密钥分配

和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡一个从中取代的攻击。假设蛋蛋交给阿庆一个公钥,并使阿 庆相信这是小Q的公钥,并且她可以截下小Q和阿庆之间的信息传递,那么她可以将她自己的公钥传给阿庆,阿庆以为这是小Q的公钥。可以将所有阿庆传递给小Q 的消息截下来,将这个消息用她自己的密钥解密,读这个消息,然后将这个消息再用小Q的公钥加密后传给小Q。理论上小Q和阿庆都不会发现蛋蛋在偷听他们的消 息。今天人们一般用数字认证来防止这样的攻击。

6

南京邮电大学2011届本科生毕业设计(论文)

2.2 数字签名原理

用RSA算法做数字签名,总的来说,就是签名者用私钥参数d加密,也就是签名;验证者用签字者的公钥参数e解密来完成认证。

下面简要描述数字签名和认证的过程。 1、生成密钥

为用户随机生成一对密钥:公钥(e,n)和私钥(d,n). 2、签名过程

(1) 计算消息的散列值H(M).

(2) 用私钥(d,n)加密散列值:s=(H(M))d mod n,签名结果就是s. (3) 发送消息和签名(M,s). 3、认证过程

(1) 取得发送方的公钥(e,n). (2) 解密签名s:h=semod n. (3) 计算消息的散列值H(M).

(4) 比较,如果h=H(M),表示签名有效;否则,签名无效。 根据上面的过程,我们可以得到RSA数字签名的框图如图2-1:

消息 消息 连接 Hash 相等,真 比较 Hash 加密 解密 不等,假 发送方私钥(d,n) 发送方公钥(e,n) 签名过程 图 2-1 RSA数字签名框图

认证过程

2.3 散列函数

散列函数(或散列算法,英语:Hash Function)是一种从任何一种数据中创建小的数字“指纹”的方法。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常

7

南京邮电大学2011届本科生毕业设计(论文)

用来代表一个短的随机字母和数字组成的字符串。好的散列函数在输入域中很少出现散列冲突。在散列表和数据处理中,不抑制冲突来区别数据,会使得数据库记录更难找到。

2.3.1散列函数的性质

所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的 结果。但另一方面,散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的。但也可能不同,这种情况称为“散列碰撞”, 这通常是两个不同长度的散列值,刻意计算出相同的输出值。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不 同的散列值。

典型的散列函数都有无限定义域,比如任意长度的字节字符串,和有限的值域,比如固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域间的一一对应。一一对应的散列函数也称为排列。可逆性可以通过使用一系列的对于输入值的可逆“混合”运算而得到。

2.3.2 散列函数的应用

由于散列函数的应用的多样性,它们经常是专为某一应用而设计的。例如,加密散列函数假设存在一个要找到具有相同散列值的原始输入的敌人。一个设计优秀的加密散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。为加密散列为目的设计的函数,如MD5,被广泛的用作检验散列函数。这样软件下载的时候,就会对照验证代码之后才下载正确的文件部分。此代码有可能因为环境因素的变化,如机器配置或者IP地址的改变而有变动。以保证源文件的安全性。

错误监测和修复函数主要用于辨别数据被随机的过程所扰乱的事例。当散列函数被用于校验和的时候,可以用相对较短的散列值来验证任意长度的数据是否被更改过。

1.加密

一个典型的加密单向函数是“非对称”的,并且由一个高效的散列函数构成;一个典型的加密暗门函数是“对称”的,并且由一个高效的随机函数构成。

2.散列表

散列表是散列函数的一个主要应用,使用散列表能够快速的按照关键字查找数据记录。(注意:关键字不是像在加密中所使用的那样是秘密的,但它们都是用来“解锁”或者访问数据的。)例如,在英语字典中的关键字是英文单词,和它们相关的记录包含这些单词的定义。在这种情况下,散列函数必须把按照字母顺序排列的字符串映射到为散列表的内部数组所创建的索引上。

8

南京邮电大学2011届本科生毕业设计(论文)

散列表散列函数的几乎不可能/不切实际的理想是把每个关键字映射到唯一的索引上(参考完美散列),因为这样能够保证直接访问表中的每一个数据。

一个好的散列函数(包括大多数加密散列函数)具有均匀的真正随机输出,因而平均只需要一两次探测(依赖于装填因子)就能找到目标。同样重要的是,随机散列函数不太会出现非常高的冲突率。但是,少量的可以估计的冲突在实际状况下是不可避免的(参考生日悖论或鸽洞原理)。

在很多情况下,heuristic散列函数所产生的冲突比随机散列函数少的多。Heuristic函数利用了相似关键字的相似性。例如,可以设计一个heuristic函数使得像FILE0000.CHK,FILE0001.CHK,FILE0002.CHK,等等这样的文件名映射到表的连续指针上,也就是说这样的串行不会发生冲突。相比之下,对于一组好的关键字性能出色的随机散列函数,对于一组坏的关键字经常性能很差,这种坏的关键字会自然产生而不仅仅在攻击中才出现。性能不佳的散列函数表意味着查找操作会退化为费时的线性搜索。

3.错误校正

使用一个散列函数可以很直观的检测出数据在传输时发生的错误。在数据的发送方,对将要发送的数据应用散列函数,并将计算的结果同原始数据一同发送。 在数据的接收方,同样的散列函数被再一次应用到接收到的数据上,如果两次散列函数计算出来的结果不一致,那么就说明数据在传输的过程中某些地方有错误了。 这就叫做冗余校验。

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

对与像从一个已知列表中匹配一个MP3文件这样的应用,一种可能的方案是使用传统的散列函数——例如MD5,但是这种方案会对时间平移、CD读取错 误、不同的音频压缩算法或者音量调整的实现机制等情况非常敏感。使用一些类似于MD5的方法有利于迅速找到那些严格相同(从音频文件的二进制数据来看)的 音频文件,但是要找到全部相同(从音频文件的内容来看)的音频文件就需要使用其他更高级的算法了。

那些并不紧随IT工业潮流的人往往能反其道而行之,对于那些微小差异足够鲁棒的散列函数确实存在。现存的绝大多数散列算法都是不够鲁棒的,但是有少数散列算法能够达到辨别从嘈杂房间里的扬声器里播放出来的音乐的鲁棒性。有一个实际的例子是Shazam[1]服务。用户可以用电话机拨打一个特定的号码,并将电话机的话筒靠近用于播放音乐的扬声器。该项服务会分析正在播放的音乐,并将它于存储在数据库中的已知的散列值进行比较。用户就能够收到被识别的音乐的曲名(需要收取一定的费用)。

9

南京邮电大学2011届本科生毕业设计(论文)

2.3.3 MD5算法

MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的散列算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是散列算法的基础原理,MD5的前身有MD2、MD3和MD4。

1992年8月Ronald L. Rivest在向IETF提交了一份重要文件,描述了这种算法的原理,由于这种算法的公开性和安全性,在90年代被广泛使用在各种程序语言中,用以确保资料传递无误等。MD5由MD4、MD3、MD2改进而来,一度主要增强算法复杂度和不可逆性。

MD5一度被广泛应用于安全领域。但是由于MD5的弱点被不断发现以及计算机能力不断的提升,现在已经可以构造两个具有相同MD5的信息,使本算法不再适合当前的安全环境。目前,MD5计算广泛应用于错误检查。例如在一些BitTorrent下载中,软件通过计算MD5和检验下载到的碎片的完整性。

MD5较老,散列长度通常为128位,随着计算机运算能力提高,找到“碰撞”是可能的。因此,在安全要求高的场合不使用MD5。

2004年,王小云证明MD5数字签名算法可以产生碰撞。2007年,Marc Stevens,Arjen K. Lenstra和Benne de Weger进一步指出通过伪造软件签名,可重复性攻击MD5算法。研究者使用前缀碰撞法(chosen-prefix collision),使程序前端包含恶意程序,利用后面的空间添上垃圾代码凑出同样的MD5 Hash值。2008年,荷兰埃因霍芬技术大学科学家成功把2个可执行文件进行了MD5碰撞,使得这两个运行结果不同的程序被计算出同一个MD5。2008年12月一组科研人员通过MD5碰撞成功生成了伪造的SSL证书,这使得在https协议中服务器可以伪造一些根CA的签名。 算法如下:

MD5是输入不定长度信息,输出固定长度128-bits的算法。经过程序流程,生成四个32位数据,最后联合起来成为一个128-bits散列。基本方式为,求余、取余、调整长度、与链接变量进行循环运算。得出结果。

是 XOR,AND,OR ,NOT 的符号。

10

南京邮电大学2011届本科生毕业设计(论文)

2.3.4 SHA-1算法

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

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

2.4 C#和.NET

C#是一个语言,.net是一个平台,上面支持用C#或者VBdotNet写代码。

另外,C#不但可以开发基于.net的应用程序,也可以开发基于WinForm的程序,这就是区别。

若是单纯以概念来说,你可以把.net当做一个工作平台一般,它是一个开发环境的基底,提供你 开发Windows、Web、Mobile、XML...等应用程式一个共通的平台,若是要了解深一点,则再去了解其运作的相关机制那是有助于你利用它来 开发.C#和.NET主要是应用在网际网路.。

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

.NET 是 Microsoft 的 XML Web 服务平台。不论操作系统或编程语言有何差别,XML Web 服务能使应用程序在 Internet 上传输和共享数据。

Microsoft? .NET 平台包含广泛的产品系列,它们都是基于 XML 和 Internet 行业标

11

南京邮电大学2011届本科生毕业设计(论文)

准构建,提供从开发、管理、使用到体验 XML Web 服务的每一方面。XML Web 服务将成为您今天正在使用的 Microsoft 的应用程序、工具和服务器的一部分 — 并且将要打造出全新的产品以满足您所有业务需求。

更具体地说,Microsoft 正在五个方面创建 .NET 平台,即工具、服务器、XML Web 服务、客户端和 .NET 体验。

12

南京邮电大学2011届本科生毕业设计(论文)

第三章 系统的分析与设计

本章首先提出对该数字签名系统具有什么样的需求,然后通过系统分析,得出需要实现的功能,并设计整个系统的结构。最后按照不同的功能将系统划分为三个子系统:加密子

系统,解密子系统,验证子系统。

3.1需求分析

对于使用电子商务的人们来说,网络信息安全越来越被他们的关注。网络信息安全包括两个方面:一是信息的完整性,数据不能被任何第三方破坏和修改。二是要保证信息的同一性,接受方要确认信息的来源。对于数字签名系统的的具体要求表现在:

1.功能的全面性:对文件所生成的签名进行认证,即提供身份认证;防止签名方的抵赖,保证签名的不可否认性;防止签名文件的篡改,即保证数据的完整性。

2. 运行的健壮性:软件在运行中不能出现程序崩溃、死循环的状况,对于用户在界面所作的任何操作都要实时、准确的反应出来,对于一些错误应该有完善的诊断机制,入时停止出错的操作,并且尽量避免程序出现BUG。

3.操作性强:软件的使用者多是普通用户,他们应用计算机的能力不是很强,因此一定要简便好用,图形界面通俗易懂,操作方便简单。

4.安全性:保证程序在运行过程中不会对用户的计算机资源造成破坏,不应有恶意的代码。由于此程序的特殊性,还因考虑到算法的设计,防止信息被他人轻易窃取。 按照以上对系统的需求分析,系统设计将实现以下几方面的功能:

1.加密解密过程中所采集到的所有数据要及时有效的在界面中表现出来。如RSA算法中公私密钥的生成及保存,文件的摘要过程与结果,加密的过程与结果,解密的过程与结果,以及解密后的对比验证。

2.运行过程中响应客户在界面所做的任何动作,并作出相应的回应,对一些错误的操作能够及时的判断,并采取相应的措施或给出正确操作的提示。

3.在界面的分布上,做到简单明了,各个按键的说明与其所对应的功能一致,界面位置合理,用户能一目了然,并且便于操作。 4.采用的RSA算法保证了数据的安全性。

3.2 总体设计

为了实现完整的数字签名过程,下面是我们为系统设计的实际应用模型视图,分两个模块,一个是生成公私钥阶段,一个是数字签名及验证阶段。

13

南京邮电大学2011届本科生毕业设计(论文)

A. 生成公私钥阶段:

此阶段的任务是,由Boss向此文件系统提出申请,要求分配一个高强度的RSA算法的配套公钥和私钥,并保存至主机。私钥由Boss自己保存,不得外露给任何人。而公钥则对外公开,可通过各种广播途径传播给单位的每个员工。模型如图3-1所示。

传输公钥

公钥

申请密钥

Boss

员工

公钥+私钥

DDS

图3-1 传输公钥阶段模型图

B. 数字签名及验证阶段

此阶段的任务是Boss向该系统提出签名申请,并将需要进行签名的文件和用于加密的公钥(由A这一步完成)一起添加至系统,由系统先对文件作MD5摘要之后完成对摘要的RSA加密,并将加密后的签名部分储存至Boss的文件所在的文件夹,完成数字签名。

Boss可对签名文件进行传输,传给需要的员工。

员工收到传来的文件后,需要确定是否就是Boss传来的,以及文件在传输过程中是否被篡改了。这时,就需要用到该软件提供的验证模块。验证时,员工将收到的文件和签名以及从Boss那获得的公钥一并添加至软件系统,由软件自动完成对摘要的解密、对原文件的摘要,以及两者的比对,最后得出验证结果。模型如图3-2所示。

14

南京邮电大学2011届本科生毕业设计(论文)

LAN

数字签

数字签名文件

名文件

BossBoss客户端

请求数字签名

A

B ………… Z 员工客户端

请求验证

数字签名文件

验证结果

DDS

图3-2 传输进行了数字签名的文件阶段模型图

我决定将此系统定位成单机版本。至于网络传输方面,可借助使用一些常见的传输工具,例如飞鸽传书、腾讯QQ等。

3.3 功能模块的划分

经过初步分析,我们将软件系统分成两个个子系统:加密签名系统,解密认证系统。我们在对系统进行需求分析时,采用UML的用例图、类图和使用序列图,结合数据流SD的分析方法;并采用原型法初步设计出了一个包括系统的界面以及所提供的各项功能提示的原型模型。我们整理出的系统与外界的联系如下的顶层数据流图(DFD) 图3-3所示:

15

南京邮电大学2011届本科生毕业设计(论文)

数字签名 系统 (DSS) 请求生成公私密钥 生成公私密钥 发送公钥 添加文件,请求摘要 返回摘要结果 请求对摘要加密 返回加密后的摘要 加 密 签 名 系 统 其他 网络 传输 软件 发送明文和加了密后的摘要 老板 接收公钥 接收明文和加了密后的摘要 添加公钥和加密的摘要,请求解密 返回解密结果 解 密 认 证 系 统 添加文件,请求摘要 员工 返回摘要结果 添加待验摘要文件,请求验证 返回验证结果 图3-3 系统数据流图

3.4 各功能模块的介绍

1.公私密钥生成模块

16

南京邮电大学2011届本科生毕业设计(论文)

系统随机生成一组满足RSA算法的大素数并通过相关算法计算的结果对作为加密解密的公私密钥,并保存或显示。 2.摘要模块

对本地文件用HASH函数进行摘要,以保证数据的完整性,可选算法有MD5和SHA-1。 3.加密模块

利用先前生成的RSA算法的私钥对文件的摘要进行加密,并保存,以完成数字签名。 4.解密模块

利用接收到的公钥及加密内容对加密内容进行解密,得到文件的摘要原文。 5.验证模块

将解密结果与文件摘要进行对比,如果相同则数字签名认证成功,否则则失败。

17

南京邮电大学2011届本科生毕业设计(论文)

第四章 系统的实现

本章作为论文的一个重点章节,主要对该数字签名系统各个模块功能的实现展开了详细的介绍。其中对RSA加密解密和用HASH函数进行摘要两大功能进行了详细的介绍。详细介绍这些模块的实现过程主要抓住两点:一是基本设计思想,二是相关功能函数。另外,在该章节中同时给出了一些功能模块的运行效果图。

本系统在.NET平台下用C#实现,DDS系统的类图,如图4-1:

System publicKey privateKey localFile MD5abstrction RSAencryption unverifiedAbstraction RSAdecryption Creatpubprikey() Addlocfile() MD5abstract() RSAencrypt () Clear() Done() Addpubkeyfile() Addabstract() RSAdecrypt() Verify() 图4-1 DDS系统类图

4.1 RSA加密算法的实现

RSA算法作为数字签名系统的核心部分。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。

18

南京邮电大学2011届本科生毕业设计(论文)

RSA的算法涉及三个参数,n、e1、e2。其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。(n及e1),(n及e2)就是密钥对。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;

e1和e2可以互换使用,即:

A=B^e2 mod n;B=A^e1 mod n;

RSA的C#实现,主要思想和代码如下。

4.1.1 公私密钥的生成

生成密钥模块是要提供一对密钥。而在密钥生成之前,需要生成两个素数因子p、q和模数n.有了n之后才能得到公钥e,进而通过公钥e计算得到私钥d.因此生成密钥模块的流程图如图4-2:

开始 随机产生两个大素数p、计算n=p*q 计算Φ(n)=(p-1)(q-1) 在1到φ(n)随机产生整数e gcd(e, Φ(n))=1 是 利用ed=1mod φ(n)解出正确 得到公钥(e,n)和私钥(d,n) 结束 不正确 否

图4-2 密钥生成流程图

首先是公钥的生成

public void LoadPublicFromXml(string publicPath)

19

南京邮电大学2011届本科生毕业设计(论文)

{

if (!File.Exists(publicPath)) …… try {

rsa.FromXmlString(File.ReadAllText(publicPath));

RSAParameters rsaParams = rsa.ExportParameters(false); Modulus = new BigInteger(rsaParams.Modulus); Exponent = new BigInteger(rsaParams.Exponent); …… }

……

} 利用.NET的RSA类从XML文件中读取一个密钥作为公钥,包含参数Modulus和 Exponent。类似地,私钥的生成如下:

public void LoadPrivateFromXml(string privatePath) {

if (!File.Exists(privatePath))

……

try {

rsa.FromXmlString(File.ReadAllText(privatePath)); RSAParameters rsaParams = rsa.ExportParameters(true); D = new BigInteger(rsaParams.D); // 私钥中的参数D Exponent = new BigInteger(rsaParams.Exponent); Modulus = new BigInteger(rsaParams.Modulus); …… } …… }

这样我们就得到了公钥(Exponent,Modulus)以及私钥(D,Modulus)。

4.1.2 使用私钥加密

设A为明文,B为密文,则私钥加密公式为:B=A^D mod Modulus;代码如下: public byte[] PrivateEncryption(byte[] data) {

if (!IsPrivateKeyLoaded) // 私钥是否被读取 ……

// 将明文转换成大整数

BigInteger bnData = new BigInteger(data); //公式 encData = (bnData ^ D) % Modulus

BigInteger encData = bnData.modPow(D,Modulus); return encData.getBytes();

20

南京邮电大学2011届本科生毕业设计(论文)

}

4.1.3 使用公钥解密

设A为明文,B为密文,则公钥解密公式为:A=B^ Exponent mod Modulus;代码如下: public byte[] PublicDecryption(byte[] encryptedData) {

if (!IsPublicKeyLoaded) //公钥是否被读取 ……

//将密文转换成大整数

BigInteger encData = new BigInteger(encryptedData);

//公式 bnData = (encData ^ Exponent) % Modulus

BigInteger bnData = encData.modPow(Exponent,Modulus); return bnData.getBytes(); }

4.1.4 其他

RSA加解密的算法完全相同,公钥和私钥可以互换使用,所以相应的可以也可以用公钥加密,私钥解密。但是数字签名系统不需要用到,所以此处就不再详细描述。

4.2 散列函数

数字签名系统中,不是对文件直接进行加密,而是对文件经过散列函数计算后的摘要进行加密。本系统中,加入了当今主流的MD5和SHA-1两种散列函数。 MD5代码如下

public static string GetMD5Hash(string pathName) { string strResult = \ string strHashData = \ byte[] arrbytHashValue; System.IO.FileStream oFileStream = null;

System.Security.Cryptography.MD5CryptoServiceProvider oMD5Hasher = new System.Security.Cryptography.MD5CryptoServiceProvider(); try { oFileStream = GetFileStream(pathName); arrbytHashValue = oMD5Hasher.ComputeHash(oFileStream); oFileStream.Close(); ……

21

南京邮电大学2011届本科生毕业设计(论文)

} catch(System.Exception ex) { …… } return(strResult); }

SHA-1代码如下:

public static string GetSHA1Hash(string pathName)//SHA-1 {

string strResult = \ string strHashData = \

byte[] arrbytHashValue;

System.IO.FileStream oFileStream = null;

System.Security.Cryptography.SHA1CryptoServiceProvider oSHA1Hasher = new System.Security.Cryptography.SHA1CryptoServiceProvider();

try {

oFileStream = GetFileStream(pathName);

arrbytHashValue = oSHA1Hasher.ComputeHash(oFileStream); oFileStream.Close();

……

}

catch (System.Exception ex) {

…… }

return (strResult);

}

此处的散列函数均调用.NET的散列函数类。

4.3 数字签名的实现 4.3.1 设计思想

首先设计加密和解密系统,考虑到公私钥匹配的问题,也希望加密强度尽量大,所以,我们使用了了“生成公私密钥”的功能,利用系统自动生成高强度的公私钥,以保证签名不被破解。故,发送方,即Boss只需要点击“生成公私密钥”,从而保证发送方和接收方的一对公私密钥是相互匹配的且是高强度的。

22

南京邮电大学2011届本科生毕业设计(论文)

经过简单分析,在本系统中只有老板和员工2个用例。经过上述分析后,我们设计的UML用例图如下图4-2所示: A. 老板:

老板的使用功能是:a)请求系统分配匹配的公私钥。b)对需要发送的文件进行MD5摘要。c)对摘要文件进行RSA加密。 B. 员工

员工使用的功能相对老板而言受到了限制,只能进行:a)对收到的摘要文件利用公钥解密。b)验证信息是否真正来自老板,并且在传输过程中是否遭到破坏。

分配公私密钥 对发送文件做摘要 老板

对摘要加密 对摘要解密 员工

对接收文件验证

图4-2 老板和员工的用例图

经过对用例的分析,我们整理出的系统使用序列如下图4-3、图4-4所示:

23

南京邮电大学2011届本科生毕业设计(论文)

加密 子系统 老板 请求公私密钥 返回解密结果 添加文件,请求摘要 返回摘要 请求摘要加密 返回加密结果 图4-3 老板用例操作序列图

解密 子系统 员工 验证 子系统添加公钥和加密的摘要,请求解密 返回解密结果 添加文件,请求摘要 返回摘要 添加待验摘要文件,请求验证 返回验证结果 图4-4 员工用例操作序列图

4.3.2 系统实现

下面给出系统的界面图,该系统使用Microsoft Visual Studio 2005实现,所用语言为

24

南京邮电大学2011届本科生毕业设计(论文)

C#。按照设计的思想,分成两个系统:加密签名系统和解密认证系统。通过标签页来达到界面效果。

A. 加密签名系统:

此子系统主要函数有Creatpubprikey()—生成公私钥,Addlocfile()—添加本地文件,MD5abstract()—进行MD5摘要,RSAencrypt ()—RSA私钥加密。

完成自动生成高强度的满足RSA算法的公私钥,老板通过该模块添加文件进行MD5摘要,并对摘要做RSA私钥加密,签名完成。

生成公私钥利用密码学RSA算法的公私钥生成方法来完成;添加本地文件利用打开文件对话框就可以达到预期效果;MD5摘要是一个难点,要生成128位的不可逆摘要,利用密码学Hash函数的相关知识进行函数构建;RSA的私钥加密算法也依赖于密码学的相关知识。具体界面如图4-5所示:

图 4-5 系统界面

主要代码如下:

private void buttoncreatkeys_Click(object sender,EventArgs e)//生成密钥_生成公私密钥 {

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); string privateKey = rsa.ToXmlString(true);

File.WriteAllText(Application.StartupPath + \,privateKey);

……

25

南京邮电大学2011届本科生毕业设计(论文)

}

此时生成的密钥已被保存在debug目录下,点击显示密钥可打印在屏幕上

private void buttondispkeys_Click(object sender,EventArgs e)//生成密钥_显示密钥 {

……

myRsa.LoadPrivateFromXml(Application.StartupPath + \ // Loading the key to .NET RSA class,to show is components in the form: RSACryptoServiceProvider localRsa = new RSACryptoServiceProvider(); localRsa.FromXmlString(File.ReadAllText(Application.StartupPath + \初始化 RSA 对象

RSAParameters rsaParams = localRsa.ExportParameters(true); textBoxPrikey.Text = GetHexString(rsaParams.D);//privateExponent textBoxPubkey.Text = GetHexString(rsaParams.Modulus);//publicExponent localRsa.Clear();// Clearing the RSA instance }

点击生成公私密钥,再点击显示密钥结果如图 4-6,此时公私密钥已经被保存。

图 4-6 生成显示密钥演示

有了密钥后,就可以对文件进行签名,即加密文件。在加密之前,需要计算出文件的散列值,所以生成签名模块的流程图如图4-7:

26

南京邮电大学2011届本科生毕业设计(论文)

开始 载入待签名文件 计算文件散列值 导入私钥 利用私钥和散列值,计算签名 保存签名 结束

图 4-7 生成签名模块流程图

界面如图4-8:

图 4-8 加密系统

主要代码如下:

private void buttonAddFile_Click(object sender,EventArgs e)//加密_添加本地文件事件

27

南京邮电大学2011届本科生毕业设计(论文)

private void buttonHash1_Click(object sender,EventArgs e)//加密_生成摘要 { ……

else if (radioButtonMD5_1.Checked) {

textHashData1.Text =

WindowsApplication1.HashAlgorithm.GetMD5Hash(OpenLocFileDialog.FileName).ToLower(); }

else if (radioButtonSHA1_1.Checked) {

textHashData1.Text =

WindowsApplication1.HashAlgorithm.GetSHA1Hash(OpenLocFileDialog.FileName).ToLower(); } …… }

private void buttonAddPrikey_Click(object sender,EventArgs e)//加密_载入私钥 {

…… try {

//Loading the private key to the custom RSA instance

myRsa.LoadPrivateFromXml(OpenPriKeyFileDialog.FileName); …… }

catch (Exception ex) { …… } }

private void buttonRSAEncry_Click(object sender,EventArgs e)//加密_RSA加密 {

28

南京邮电大学2011届本科生毕业设计(论文)

try {

byte[] message = Encoding.UTF8.GetBytes(textHashData1.Text); byte[] encMessage = null;

encMessage = myRsa.PrivateEncryption(message);//私钥加密 textRSAEncry.Text = Convert.ToBase64String(encMessage); }

catch (Exception ex) { …… } }

private void buttonDone_Click(object sender,EventArgs e)//加密_完成

测试结果如下,添加本地文件后,选择MD5摘要,载入之前保存的私钥后点击RSA加密。加密后点击完成,加密结果即被保存。如图4-9:

图4-9 加密系统演示

B. 解密认证系统:

29

南京邮电大学2011届本科生毕业设计(论文)

认证签名这部分所要做的工作是要对之前利用私钥对文件所产生的签名用公钥进行认证。简而言之,就是要验证之前所产生的签名是否合法。那么,什么样的签名是合法的,什么样的签名是不合法的,这是在实现签名认证前必须确定的问题。如果在认证过程中,发现对签名进行公钥解密后,所产生的结果和文件的散列值相同,则可以认为签名是合法的,反之,如果产生的结果和文件的散列值不同,则签名就是不合法的,即是非法签名。所以抓住了这点,就可以实现签名的认证。

流程图如图4-10:

界面如图4-11:

开始 载入已签名文件 计算文件散列值 导入签名 对签名进行解密 否,签名非法,结束 散列值与解密结果是否相同 是,签名合法,结束

图 4-10 认证签名模块流程图

30

南京邮电大学2011届本科生毕业设计(论文)

图4-11 解密认证系统

此子系统主要函数之一就是RSAdecrypt()—RSA解密。通过读出加载的公钥文件,完成对收到的摘要文件的RSA公钥解密,利用密码学RSA算法的解密原理编写。主要代码如下:

private void buttonNedTstAbstr_Click(object sender,EventArgs e)//解密_载入需要检测的加密的摘要

private void buttonAddPubkey_Click(object sender,EventArgs e)//解密_载入公钥 { {

// Loading the private key to the custom RSA instance

myRsa.LoadPublicFromXml(OpenPubKeyFileDialog.FileName); // Loading the key to .NET RSA class,to show is components in the form: RSACryptoServiceProvider localRsa = new RSACryptoServiceProvider();

//通过 XML 字符串中的密钥信息初始化 RSA 对象。

localRsa.FromXmlString(File.ReadAllText(OpenPubKeyFileDialog.FileName)); RSAParameters rsaParams = localRsa.ExportParameters(false); textPubKey.Text = GetHexString(rsaParams.Modulus);//publicExponent

31

……

南京邮电大学2011届本科生毕业设计(论文)

localRsa.Clear();// Clearing the RSA instance }

…… }

private void buttonRSADecry_Click(object sender,EventArgs e)//解密_RSA解密 { try {

byte[] decMessage = Convert.FromBase64String(textBoxTstAbstr.Text); byte[] message = null;

message = myRsa.PublicDecryption(decMessage);//公钥解密 string sMsg = Encoding.UTF8.GetString(message); textBoxRSADecry.Text = sMsg; }

…… }

private void buttonAddLocFile_Click(object sender,EventArgs e)//解密_添加本地文件

private void buttonHash2_Click(object sender,EventArgs e)//解密_hash摘要

此子系统主要函数之二是Verify()—验证。

通过对收到的原文进行摘要,与RSA公钥解密后的摘要做比对,若完全一致,则可认为:该文件就是老板传来的,且传输过程中没有被篡改。若不一致,则员工就可以反馈给老板,要求老板重传。

验证函数就是对两个文件的访问操作,逐个字符进行比对。主要代码如下: private void buttonverify_Click(object sender,EventArgs e)//解密_验证 { ……

if (textBoxRSADecry.Text == textHashData2.Text) {

MessageBox.Show(\ return; }

MessageBox.Show(\

32

南京邮电大学2011届本科生毕业设计(论文)

}

测试结果如下,将加密的摘要载入,并载入公钥进行解密,再将原文件进行摘要,将结果与解密的结果经行对比,点击验证即可验证是否匹配。如图4-12:

图4-12 解密认证演示

4.4 本章小结

本章具体讲解了RSA数字签名软件的程序实现,首先介绍了程序实现RSA算法的原理。然后按照软件的两个基本模块:生成签名、认证签名,对这两个个模块的实现细节做了详细的阐述,并在关键部分附上了程序代码。本章通过产生的一对密钥对指定的文件进行签名,并对签名进行了认证。在测试过程中,包括生成密钥,计算散列值,加密,解密,都很迅速,时间都在允许的范围内。

本系统遗憾主要在两个方面:

一、没有对算法进行改进和对比。本系统还可以加入一个算法改进模块,加密解密时可选择原RSA算法还是改进算法,然后再做一个时间统计系统,对两种算法的运算时间进行对比。不过这个改进对数论方面有较高的要求,我在今后的学习中还需努力。

二、没有通信传输系统。数字签名有一个特性就是不可抵赖性,RSA算法可以保证发送方的不可抵赖性,而接收方的不可抵赖性必须在通信系统中实现,这也是一个值得改进的地方。

33

南京邮电大学2011届本科生毕业设计(论文)

结束语

随着互联网的迅猛发展,当前信息技术的快速发展和信息交换的大量增加,尤其是在电子商务的出现,网络信息安全越来越得到人们的关注。网络信息安全包括两个方面:一是信息的完整性,数据不能被任何第三方破坏和修改。二是要保证信息的同一性,接受方要确认信息的来源。而在电子商务中,合同或者文件都是以电子形式在网络上传输,就会有一些不法分子通过网络篡改合同或文件内容以获得非法利益。这时,就可以依靠数字签名技术,保证交易的完整性、真实性和不可抵赖性。数字签名是目前电子商务、电子政务中应用技术最成熟、可操作性最强的一种电子签名的方法。

本文基于数字签名技术在电子商务中的应用,对公钥密码体制中的广泛流行的RSA算法做了深入的研究并主要阐述了利用C#语言实现基于RSA算法的数字签名方法。除此以外,本文也分析了RSA算法的效率,也对以往的加解密算法提出了一些改进性分析。

系统主要由5个模块组成,分别完成一下功能:系统随机生成一组满足RSA算法的大素数并通过相关算法计算的结果对作为加密解密的公私密钥,并保存或显示。对本地文件用HASH函数进行摘要,以保证数据的完整性,可选算法有MD5和SHA-1。利用先前生成的RSA算法的私钥对文件的摘要进行加密,并保存,以完成数字签名。利用接收到的公钥及加密内容对加密内容进行解密,得到文件的摘要原文。将解密结果与文件摘要进行对比,如果相同则数字签名认证成功,否则则失败。本系统广泛应用.NET平台提供的类,.NET 是 Microsoft XML Web services 平台。XML Web services 允许应用程序通过 Internet 进行通讯和共享数据,而不管所采用的是哪种操作系统、设备或编程语言。Microsoft .NET 平台提供创建 XML Web services 并将这些服务集成在一起之所需。对个人用户的好处是无缝的、吸引人的体验。

由于时间关系,本系统完成了数字签名的主要功能,但是还缺少文件传输模块,这样就不能实现防止接收方的抵赖,所以不是一个严格完整的数字签名系统。

当今,数字签名技术已经广泛应用于电子商务。作为我的毕业设计课题,我将大学期间学习的信息安全理论知识通过次课题进行了实践,深入了解了RSA加密算法和数字签名原理,以及对C#编程的学习。这次毕业设计过程对我来说是一次宝贵的经验,在以后研究生的学习过程中,也是一次重要的参考。

34

南京邮电大学2011届本科生毕业设计(论文)

致 谢

在大学的最后三个月里,我能将毕业设计圆满完成,不是靠我一个人的能力。首先,我要感谢我的指导老师胡素君老师,她对我的毕业设计给予了很大的支持和帮助,胡老师都认真的回答了我的每个问题,并且对我的程序改进提出了有益的建议,同时也对我进行了监督,在我研究生复试期间,也给予了理解。其次,要感谢戴庭同学对我毕业设计提供相关技术支持,尤其是C#语言方面的指导。最后也要感谢参考文献中的每一位作者,为我提供了丰厚完善的基础知识。在此致谢!

35

南京邮电大学2011届本科生毕业设计(论文)

参考文献

[1] 卢开澄.计算机密码学[M].第三版.北京:清华大学出版社,2003,12:158-279. [2] 张先红.数字签名原理及技术[M].北京:机械工业出版社,2004,1:80-87.

[3] 徐茂智,游林.信息安全与密码学[M].北京:清华大学出版社,2007,1:87-133.

[4] 龙冬阳,王常吉,吴丹.应用编码与计算机密码学[M].北京:清华大学出版社,2005,11:169-193.

[5] 唐晓东.电子商务中的信息安全[M]北京:北方交通大学出版社,2006 [6] 赵泽茂.数字签名理论[M]科学出版社 ,2007

[7] 蔡永泉.计算机网络安全[M]北京:北京航空航天大学出版社,2006

[8] 闵嗣鹤,严士健.初等数论[M].第二版.北京:人民教育出版社,1982,9:37-99.

[9] 陈兴波,王晓明.一种快速RSA算法的改进[J].计算机工程与技术,2006,27(22):42-43. [10] 周德新.实现RSA的高效算法[J].桂林电子工业学院学报.1996,16(2):20-23. [11] 陈运.一种新的快速RSA算法[J].电子科技大学学报.1995,24(2):37-39.

[12] Kocarev. L,Sterjev. M,Fekete.A,Vattay, G.. Public-key encryption with chaos[J]. Chaos.2004,1(4):43-44.

[13] Kaptein BL, Valstar ER, Stoel BC, Rozing PM, Reiber JH.A new model-based RSA method

validated using CAD models and models from reversed engineering[J]. Journal of Biomechanics. 2003,36(6):27-29.

[14] A. Cilardo,A. Mazzeo,L. Romano,G.P. Saggese. Exploring the design-space for FPGA-based

implementation of RSA[J]. Microprocessors and Microsystems.2004,28(4):23-27. [15] Saggese, GP,Romano, L.Mazzocca, N.Mazzeo.A. A tamper resistant hardware accelerator for RSA cryptographic applications[J]. Journal of systems architecture.2004,50(12):47-48.

36

本文来源:https://www.bwwdw.com/article/4zwp.html

微信扫码分享

《基于RSA算法的数字签名的实现毕业论文.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top