利用RSA算法实现数字签名毕业论文_第1页
利用RSA算法实现数字签名毕业论文_第2页
利用RSA算法实现数字签名毕业论文_第3页
利用RSA算法实现数字签名毕业论文_第4页
利用RSA算法实现数字签名毕业论文_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要绪论1.1研究背景当今社会是信息化社会,电子计算机和通信网络己经广泛的应用于社会的各个领域,以此为基础建立起来的各种信息系统,给人们的生活、工作带来了巨大变革。大型信息系统将众多的计算机和只能化设备连在一个四通八达的通信网络中,共享丰富的数据库信息和计算机资源,储存大量的数据文件,完成异地之间的数据交换与通信。信息系统的应用,加速了社会自动化的进程,减轻了日常繁杂的重复劳动,同时也提高了生产率,创造了经济效益。信息时代虽然给我们带来了无限商机与方便,但同时也充斥着隐患与危险。由于网络很容易受到攻击,导致机密信息的泄漏,引起重大损失。由于信息技术已经成为综合国力的一个重要组成部分,因此信息安全己成为保证国民经济信息化建设健康有序发展的保障。当今网络社会技术众多,目前在电子商务、电子政务、电子邮件系统、电子银行等方面必备的关键技术就是数字签名。数字签名又称为数字签字,电子签章等。“数字签名”用来保证信息传输过程中信息的完整和提供信息发送者的身份认证和不可抵赖性,数字签名技术的实现基础是公开密钥加密技术,是用某人的私钥加密的消息摘要用于确认消息的来源和内容。为保证数据在网络传递中的安全性和完整性从技术上,主要考虑一下情况:(1)如果需要使用一种方法验证数据在传输过程中是否被修改,可以使用哈希值。(2)如果需要证明实体知道机密但不来回发送机密,或者想使用简单的哈希值以防止在传输过程中被截获,可以使用加密的哈希值。(3)如果要隐藏通过不安全的媒介发送的数据或者永久保留数据,可以使用加密(4)如果要验证声称是公钥所有者的人员的身份,可以使用证书。(5)如果双方事先共享密钥,可以使用对称加密以提高速度。(6)如果想通过不安全的媒介安全的交换数据可以使用非对称加密(7)如果要进行身份验证和实现不可否认性,可以使用数字签名(8)如果为了防范穷举搜素而进行的攻击,可以使用加密技术产生的随机数[1]RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也十分流行。随着越来越多的商业应用和标准化工作,RSA已经成为最具代表性的公钥加密技术。VISA、MasterCard、IBM、Microsoft等公司协力制定的安全电子交易标准(SecureElectronicTransactions,SET)就采用了标准RSA算法,这使得RSA在我们的生活中几乎无处不在。网上交易加密连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动电话和存储卡的验证功能芯片等,大多数使用RSA技术。1.2研究现状实现数字签名的算法有很多,目前数字签名采用较多的是公钥加密技术,如DSA(DigitalSignatureAlgorithm),x.509,POP(PrettyGoodPrivacy)。1994年美国标准与技术协会公布了数字签名标准(DSS)而使公钥加密技术广泛应用。RSA已经成为最具代表性的公钥加密技术。VISA、MasterCard、IBM、Microsoft等公司协力制定的安全电子交易标准(SecureElectronicTransactions,SET)就采用了标准RSA算法,这使得RSA在我们的生活中几乎无处不在。网上交易加密连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动电话和存储卡的验证功能芯片等,大多数使用RSA技术。(1)研究主要成果RSA作为最重要的公开密钥算法,在各领域的应用数不胜数。RSA在硬件方面,以技术成熟的IC应用于各种消费类电子产品。RSA在软件方面的应用,主要集中在Internet上。加密连接、数字签名和数字证书的核心算法广泛使用RSA。RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。RSA目前是最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA的缺点主要有:(1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。(2)分组长度太大,为保证安全性,n至少也要600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级。(2)发展趋势当今社会是信息化社会,电子计算机和通信网络己经广泛的应用于社会的各个领域,以此为基础建立起来的各种信息系统,给人们的生活、工作带来了巨大变革。信息系统的应用,加速了社会自动化的进程,减轻了日常繁杂的重复劳动,同时也提高了生产率,创造了经济效益。信息安全技术在信息化迅速发展的今天己进入了高速发展的新时期,形成了密码技术、可信计算技术、电磁辐射泄露防护技术、系统入侵检测技术和计算机病毒检测消除技术等多个安全防护技术门类。(3)存在问题目前普遍采用的数字签名算法,都是基于下面三个数学难题的基础之上:(1)整数的因式分解(IntegerFactorization)问题,如RSA算法。(2)离散对数(DiscreteLogarithm)问题,如ElGamal,DSA,Schnorr等算法;(3)椭圆曲线(EllipticCurve)问题,如ECDSA算法。[2]2密码学基本概念密码学包括两个方面:密码编码学和密码分析学。密码编码学就是研究对数据进行变换的原理、手段和方法的技术和科学。密码分析学是为了取得秘密的消息,而对密码系统及其流动数据进行分析,是对密码原理、手段和方法进行分析、攻击的技术和科学。密码学的理论基础是数学,其基本思想是隐藏、伪装信息,使未经授权者不能得到消息的真正含义。伪装(变换)之前的信息是原始信息,成为明文;伪装之后的消息,看起来是一串无意义的乱码,称为密文。把明文伪装成密文的过程称为(encryption),该过程使用的数学变换就是加密算法。把密文还原成明文的过程称为解密(decryption),该过程使用的数学变换,通常是加密时数学变换的逆变换,就是解密算法。加密与解密通常需要参数控制,我们把该参数称为密钥,有时也称为密码。加密时使用的为加密密码(加密密钥),解密时使用的为解密密码(解密密钥)。[3]加密密钥与解密密钥可能相同也可能不同。相同时称为对称型或单钥的,不相同时称为非对成型或双钥的。那么一个密码系统或称其为密码体制,是由明文空间、密文空间、密钥空间、加密算法与解密算法五个部分组成。明文、密文、密钥空间分别表示全体明文、全体密文、全体密钥的集合;加密与解密算法通常是一些公式、法则或程序,规定了明文与密文之间的数学变换规则。下面用字母分别表示这个概念,密钥K=<Ke,Kd>,Ke表示加密密钥,Kd表示解密密钥,设明文M,密文C,加密算法E,解密算法D。把明文加密为密文:C=E(M,Ke)密文解密为明文:M=D(C,Kd)=D(E(M,Ke),Kd)。上述的讲解可用下图明文明文明文空间加密密钥密钥空间解密密钥明文明文空间明文明文空间加密算法解密算法Interner(不安全信道)传输的内容密码分析攻击者目的:求明文与密码图2-1加密过程与密码分析2.1公钥密码基本概念公钥密码与以前所有的密码方法都大相径庭:一是以前的密码算法都基于代换与置换操作,而公钥密码使用数学数进行变换;二是公钥密码体制使用非对称的方式,使用两个密钥(加密密钥与解密密钥),而传统密码算法仅仅使用一个密钥。公钥密码体制的提出首先是为了解决利用传统密码体制进行密钥分发时遇到的问题,数字签名也是其重要应用之一。[3]从1976年起,学者们提出了许多种公钥加密方法,它们的安全性都是基于复杂的数学难题。根据所基于的数学难题来分类,有以下三类系统目前被认为是安全和有效的:(1)基于大整数因子分解的:RSA和Rabin-Williams。(2)基于离散对数问题的:DSA和EIGamal。(3)基于椭圆曲线离散对数问题的:椭圆曲线密码系统。公开密钥加密算法与对称密钥加密算法相比来说,安全性能更好,密钥管理、分配都容易实现,其中有些加密算法还能应用在数字签名上,但是它们相对于对称密钥加密算法运行速度要慢得多,所以不能加密大量的数据。2.1.1公钥密码原理公开密钥密码常用的、成熟的公钥算法是RSA。它与传统的对称密钥算法有本质的区别,对称密钥算法常用的是DES算法,加/解密时用的是同一个密钥。而公钥算法利用的是非对称的密钥,即利用两个足够大的质数与被加密原文相乘生产的积来加/解密。这两个质数无论是用哪一个与被加密的原文相乘(模乘),即对原文件加密,均可由另一个质数再相乘来进行解密。但是,若想用这个乘积来求出另一个质数,就要进行对大数分解质因子,分解一个大数的质因子是十分困难的,若选用的质数足够大,这种求解几乎是不可能的。公、密钥对的用法是,当发方向收方通信时发方用收方的公钥对原文进行加密,收方收到发方的密文后,用自己的私钥进行解密,其中他人是无法解密的,因为他人不拥有自己的私钥,这就是用公钥加密,私钥解密用于通信;而用私钥加密文件公钥解密则是用于签名,即发方向收方签发文件时,发方用自己的私钥加密文件传送给收方,收方用发方的公钥进行解密。但是,在实际应用操作中发出的文件签名并非是对原文本身进行加密,而是要对原文进行所谓的“哈希”(Hash)运算,即对原文作数字摘要。该密码算法也称单向散列运算,其运算结果称为哈希值,或称数字摘要,也有人将其称为“数字指纹”。哈希值有固定的长度,运算是不可逆的,不同的明文其哈希值是不同的,而同样的明文其哈希值是相同并且是唯一的,原文的任何改动,其哈希值就要发生变化。数字签名是用私钥对数字摘要进行加密,用公钥进行解密和验证[4]公钥密码算法使用两个密钥,其中一个用于加密(加密密钥),另外一个用于解密(解密密钥)。公钥密码算法具有如下特征:加密密钥与解密密钥时本质上不通的,也就是说如果仅仅知道密码算法和加密密钥,而要确定解密密钥,在计算上是不可行的;大多数公钥密码算法的加密密钥与解密密钥具有互换的性质。如RSA算法,密钥对中的一个用于加密,另一个用于解密。2.1.2公钥密码的理论基础公钥密码体制的安全性主要取决于构造公钥算法所依赖的数学问题,通常要求加密函数具有单向性,即求逆很困难。因此,公钥密码的理论基础是陷门单向函数。1单向函数(1)对于所有属于f定义域的任一x,可以很容易算出f(x)=y.(2)对于几乎所有属于f值域的任一y,则在计算上不可能求出x,使得y=f(x).2单向陷门函数设f是一个函数,t是与f有关的一个参数,对于任一给定的x。计算y,使得y=f(x)是容易的。如果当不知道参数t是,计算的f逆函数是难解的,但但知道参数t时,计算f的逆函数是容易的,则称f是一个单向陷门函数,参数称为陷门。[5]2.2对称加密体制对称加密算法,又称私钥加密算法,就是加密密钥能够从解密密钥中推出来,反过来也成立,在大多数对称算法中,加密解密密钥是相同的。对称算法的加密和解密表示为:(2-1)对称加密算法的典型代表有:DES,AES,3DES,RC2,RC4,RCS,RC6,IDEA等。以DES为代表的对称密钥加密算法的设计原则主要基于信息论的混乱和扩散。混乱指的是密钥和明文及密文之间的依赖关系应该尽量复杂,以破坏分组间的统计规律,通常依靠多轮迭代来实现;扩散则应使密钥和明文的每一位影响密文中尽可能多的位数,这样可以防止逐段破译,并通过S盒的非线性变换来实现。实际上,所有的对称密钥加密算法都采用Feistel网、S盒及多次迭代等思想。对称加密有速度上的优点,用软件实现,对称密钥比非对称密钥快100-1000倍。然而,如果一个消息想以密文的形式传到接收者,我们应该找到一个方法安全传输密钥。对称加密系统用键长来衡量加密强度,40比特的键长被认为比较脆弱,128比特比较健壮。对称加密算法的缺点则是密钥分发困难,密钥管理难,无法实现数字签名。对称加密算法的优点是保密强度高,加解密速度快,适合加密大量数据。攻击者如果对加密后的数据进行破译,唯一的办法就是对每个可能的密钥执行穷搜索。而采用这种加密技术,即使使用最快的计算机执行这种搜索,耗费的时间也是相当的长。如果使用较大的密钥,破译将会更加的困难。[6]3数字签名的基本概念和理论3.1数字签名概念数字签名是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签字由公钥密码发展而来,它在网络安全,包括身份认证、数据完整性、不可否认性以及匿名性等方面有着重要应用。特别是在大型网络安全通信中的密钥分配、认证以及电子商务系统中都有重要的作用,数字签名的安全性日益受到高度重视。数字签名是指用户用自己的私钥对原始数据的哈希摘要进行加密所得的数据。信息接收方使用信息发送方的公钥对附在原始信息后的数字签名进行解密后获得哈希摘要,并通过与自己用收到的原始数据产生的哈希摘要对照,便可确信原始数据信息是否被篡改。这样就保证了消息来源的真实性和数据传输的完整性。[7]3.2数字签名理论数字签名的实现通常采用非对称密码与对称密码体系。不同的是,非对称密码体系的加密和解密过程分别通过两个不同的密钥来实现,其中一个密钥以公开,称为公开密钥,简称公钥,另一个有用户自己秘密保管,称为保密密钥,简称私钥。只有相应的公钥能够对用私钥加密的信息进行解密,反之亦然。以现在的计算机运算能力,从一把密钥推算出另一把密钥是不大可能的。所以,数字签名具有很大的安全性,这是它的一个优点。数字签名的基本方式主要是:信息发送方首先通过运行散列函数生成一个欲发送报文的信息摘要,然后用其私钥对这个信息摘要进行加密以形成发送方的数列签名,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。接收方在收到信息后首先运行和发送相同的散列函数生成接收报文的信息摘要,然后再用发送方的公钥进行解密,产生原始报文的信息摘要,通过比较两个信息摘要是否相同就可以确认发送方和报文的准确性。当然,上述过程只是对报文进行了签名,对其传送的报文本身并未保密。为了同时实现数字签名和秘密通信,发送者可以用接收方的公钥对发送的信息进行加密,这样,只有接收方才能通过自己的私钥对报文进行接么,其它人即使获得报文并知道发送者的身份,由于没有接收方的密钥也无法理解报文。3.3数字签名过程为了实现网络环境下的身份鉴别、数据完整性认证和抗否认的功能,数字签名应满足以下要求:(1)签名者发出签名的消息后,就不能再否认自己所签发的消息;(2)接收者能够确认或证实签名者的签名,但不能否认;(3)任何人都不能伪造签名;(4)第三方可以确认收发双方之间的消息传送,但不能伪造这一过程,这样,当通信的双方关于签名的真伪发生争执时,可由第三方来解决双方的争执。[8]对于一个典型的数字签名体系而言,它必须包含2个重要的组成部分:即签名算法(SignatureAlgorithm)和验证算法(VerificationAlgorithm)。为了满足上述4点要求,数字签名体系必须满足2条基本假设:(1)签名密钥是安全的,只有其拥有者才能使用。(2)使用签名密钥是产生数字签名的唯一途径。3.3.1.发送方签名过程 (1)为保证签名的速度,A先将原文进行单向HASH运算生成定长的消息摘要A用户A原文用户A原文消息摘要单向哈希值运算(2)利用自己的私钥加密消息摘要得到数字签名A,并将数字签名附在原消息后面用户A用户A原文数字签名A用户B用户A用户A原文数字签名A用户B图3-2加密摘要(3)通讯时用户A将自己的名文一起通过网络送给通讯对方即用户B数字签名A数字签名A消息摘要AA的私钥实现签名图3-3发送原文和摘要3.3.2.接收方验证过程接收方B接收到发送方A的签名消息后,对A的签名消息进行验证的过程如下:(1)将消息中的原消息与数字签名分离出来用户B分离用户B分离数字签名A原文原文数字签名A图3-4分离明文和数字签名(2)使用A的公钥解密数字签名得到摘要解密解密消息摘要A数字签名AA的私钥A的摘要图3-5得到摘要(3)利用与发送方A相同的散列函数重新计算原消息的摘要用户B用户B原文消息摘要B单向哈希值运算图3-6接受方计算摘要(4)比较解密后获得的消息摘要A与重新计算产生的消息摘要B,若相等则说明消息在传输过程中没有被篡改,否则消息不可靠。验证失败验证失败验证成功相等吗消息摘要B消息摘要A图3-7验证数字签名3.3.3数字签名过程A的私钥A的私钥加密后的摘要加密后的摘要散列函数消息散列函数摘要加密后的摘要消息解密后的摘要解密算法摘要加密算法消息A的私钥图3-8数字签名流程图4数字签名常见的算法及其数字签名数字签名的方法有很多,现在主要应用的数字签名主要有:RSA,DSA以及椭圆曲线数字签名。4.1DSA数字签名算法.DSA是SChnorr和ELGAmal签名算法的变种,被美NIST作为DSS是一种公开密钥算法,它不能用作加密,只能用作数字签名。DSA使用公开公钥,为接受者验证数据的完整性和数据发送者的身份。它也用作于由第三方去确定签名和所签收数据的真实性。信息交流中,接受方希望收到的信息未被篡改,还希望收到的信息确实是自己认定的发送方所发,那么接受方和发送方就可以约定,共同使用DSA来实现。4.1.1DSA数字签名实现的三个步骤(1)参数与密钥生成(2)签名的算法(3)签名的验证算法1.初始过程(1)系统参数:大素数p,q且q为p-1的因子,并满足2^511<p<2^1024,2^159<q<2^160,以确保在Zp中求解离散对数的困难性;g∈Zp,且满足g=h^(p-1)/qmodp,其中h是一整数,1<h<p-1且h^(p-1)/qmodp>1。p,q,g作为系统参数,供所有用户使用,在系统内公开。(2)用户私钥:用户选取一个私钥x,1<x<q,保密。(3)用户公钥:用户的公钥y,y=g^xmodp,公开。2.签名过程对待签消息m,设0<m<p。签名过程如下:(1)生成一随机整数k,k∈Zp*;(2)计算r=(g^kmodp)modq;(3)计算s=k^-1*(h(m)+x*r)modq。则(r,s)为签名人对m的签名。3.验证过程(1)首先检查r和s是否属于[0,q],若不是,则(r,s)不是签名;(2)计算t=s^-1modq,r’=(g^h(m)tmodq(y^r*tmodq)modp)modq;(3)比较r’=r是否成立?若成立,则(r,s)为合法签名,则(r,s)为签名人对m的签名4.1.2DSA的安全性DSA的安全性主要依赖于整数有限域离散对数难题。其安全性与RSA相比差不多,DSA的一个重要特点是两个素数公开,这样,当使用别人的P和Q是,即使不知道私钥,你也能确认他们是否是随机产生的,还是做了手脚的。RSA算法是做不到的。素数P必须足够大,且p-1至少包含一个大素数因子以抵抗Pohlig&hellman算法的攻击。M一般都应采用信息HASH的值。DSA安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。DSA的一个主要特点是两个素数公开,这样,当使用别人的p和g,即使不知道私钥,你也能确认他们是随机产生的。[9]4.2椭圆曲线代理签名体制4.2.1椭圆曲线数字签名ECDSA椭圆曲线签名算法ECDSA是基于椭圆曲线密码体制(ECC)的数字签名算法。DSA是美国国家标准局制定的数字签名算法,他是建立在有限域乘法群上的。对于有限域上的椭圆曲线密码系统,数字签名标准建议采用椭圆曲线数字签名算法ECDSA,下面给出该算法的过程。假设一组椭圆曲线的参数组为(q,FR,a,b,G,n,h)。其中q是域的阶,FR指示域中元素的表示方法,a,b是两个系数,G是基点,G的阶为n,余因子h=#E(Fq)/n,他是一个小的素数。1ECDSA密钥对生成过程(1)选择一个随机数d,d∈(1,n-1)。(2)计算Q,Q=d*G。(3)那么公钥为Q,私钥为整数d。2ECDSA签名过程假设待签名的消息为,m;(1)选择一个随机数k,k∈(1,n-1)。(2)计算k*G=(x1,y1)。(3)计算r=x1modn;如果r=O,则返回到步骤(1)。(4)计算s=k^-1(e+d*r)modn,如果s=O,则返回到步骤(1)。(5)对消息的签名为(r,s),最后签名者把消息m和签名(r,s)发送给接收者。3ECDSA密钥对验证过程获得发送者的公钥Q开始验证:(1)检查r,s,要求r,s∈(1,n-1)。(2)计算e=SHA1(m)。(3)计算w=s-1modn。(4)计算u1=e*wmodn;u2=r*wmodn。(5)计算X=u1G+u2Q。(6)如果X=O,表示签名无效;否则,X=(x1,y1),计算v=x1modn。(7)如果v=r,表示签名无效;否则表示签名有效。[10]4.2.2椭圆曲线数字签名的安全性ECDSA在安全性方面的目标是能抵抗选择明文(密文)攻击。而攻击A的攻击者的目标是在截获A的签名后,可以生成对任何消息的合法签名。尽管ECDSA的理论模型很坚固,但是人们仍研究很多措施以提高ECDSA的安全性。在ECDLP不可破解及哈希函数足够强的前提下,DSA和ECDSA的一些变形已被证明可以抵抗现有的任何选择明文(密文)攻击。在椭圆曲线所在群是一般群并且哈希函数能够抗碰撞攻击的前提下,ECDSA本身的安全性已经得到证明。ECDSA可能面临的攻击:1.对ECDLP的攻击。2.对哈希函数的攻击。3.其他攻击。ECDMA的优点(1)安全性能高(2)计算机量小和计算机速度快(3)存储空间占有量小(4)带宽要求低。5RSA算法及其数字签名5.1RSA简述RSA加密体制是一种公开的密码体制。RSA公匙密码体制是又R.L.Rivest,A.Shamir和L.Adelman于1978年提出的。由于RSA算法很完善,即可用于数据加密,又可用于数字签名,安全性良好,易于实现和理解,所以已经成为一种应用极广的公匙密码算法,目前,RSA在许多场合有广泛的应用。RSA公钥密码算法是迄今为止在理论上最为成熟、完善的公钥密码体制。从提出到现在已经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。它是第一个既能用于数据加密也能用于数字签名和密钥分配与管理的算法。它易于理解和操作,也很流行。因为它既可用于加密,又可用于签名,并为用户的公开密钥签发公钥证书、发放证书、管理证书等,提高了服务质量,所以,RSA公开密钥密码在当今的信息交换过程中已得到广泛的应用和实践,RSA公钥密码体制在世界许多地方已经成为事实上的标准。该算法的加密密钥和加密算法分开,使得密钥分配更为方便。而且它特别符合计算机网络环境。对于网上的大量用户,可以将加密密钥用电话簿的方式印出。如果某用户想与另一用户进行保密通信,只需从公钥簿上查出对方的加密密钥,用它对所传送的信息加密发出即可。对方收到信息后,用仅为自己所知的解密密钥将信息解密,了解明文的内容。[11]由此可看出,RSA算法解决了大量网络用户密钥管理的难题,这是公钥密码系统相对于对称密码系统最突出的优点。RSA是一个基于数论的非对称密码体制,是一种分组密码体制,是一种基于因子分解的指数函数作为单向陷门函数的公钥体制算法。它基础是数论的欧拉定理,素数检测,它的安全性是基于大数分解,后者在数学上是一个困难问题。RSA的安全性基于复杂性理论中的计算安全性,依赖于大整数分解这一NP难题。可靠性与所用密钥的长度有很大关系,假如有人找到一种很快的分解因子的算法,即从一个公钥中通过因数分解得到私钥,那么用RSA加密的信息的可靠性肯定会极度下降。但由于其工作量巨大,按目前计算机的处理能力是不可能实现的。实践证明,在当前的技术和方法下,密钥不小于1024bit的RSA算法仍然是安全的。这充分说明RSA系统具有良好的保密性能。因此,尽管先后出现了很多新的公钥体制算法,但RSA仍然在不同应用领域占据了重要的位置。随着计算机运算速度的提高以及因子分解算法的突破,RSA的密钥长度将越来越大,其软硬件实现速度将成为制约其使用的重要因素。5.2RSA加密的可行性虽然RSA加密运算的速度十分慢,但是在PC性能越来越好的今天,对于几千字节的数据进行一次几百位密钥的RSA加密,所消耗的时间应该是可以接受的。下面结合大数运算程序的调试,从理论上简单的分析消耗时间。在一台普通配置的PC机上对一个整数进行幂模运算,因为公开密钥的e通常取的较小,所以指数取一个小整数,比如C353,模一个70字节长的整数(140位十六进制,大数单元以线性组方式实现,对应到RSA算法中,这相当于约560bit的n),调试一个函数测试,按初等数论中的知识对程序进行算法优化,最终在一台配置为AMDAthron2800+,外频333MHZ,物理内存512MB的PC上测试需要约45毫秒时间。如果按这种速度,逐字节对1KB的数据进行同样的运算,所消耗的时间理论上为45毫秒的1024倍即约45秒。这个时间并不是非常长[12]。其实从一个简单的角度来说,既然RSA用于数字签名可行,那就完全可以用于同样大小的普通文件。对于较大的文件,如果分成与数字签名同样大小的段(这里假设数字签名较短,不分段一次计算加密完成),分开的各段逐一进行加密运算,那所需要的时间也只是按文件大小线性的增长。通常数字签名为几十字节,加密运算并不需要很长的等待,这就说明对于几百字节或一两K字节大小的文件来说,如果进行RSA加密,并不会是非常漫长的工作。当然,如果文件更大,加密就显得十分漫长了。比如按前面叙述的45毫秒大数运算程序推理,加密1M字节大小的文件需要约1天的时间。所以,要在普通PC用几百位以上的长密钥RSA加密文件,文件不能过大,一般可以接受的上限是几KB。如果要在较短时间内加密大文件,需要缩短密钥长度以减小运算量,这将带来安全性隐患。[13]5.3RSA算法的介绍RSA系统由以下几部分组成:(1)随机选取的在素数P和Q,还有N,其中N=P*Q,P和Q保密,N公开。(2)任取Φ(n)=(P-1)*(Q-1),其中(n)表示比n小的素数的个数,任取2<=e<=(n),且(e,(n))=1,e为加密密钥,公开。(3)计算d,使e*d=1(mod(n)),称d为e对模(n)的逆,其中d为解密秘钥,保密。在RSA系统中,设m为明文,且明文块的数值大于n,c为密文,则其加密和解密算法如为:加密算法C=E(m)=m^e(modn)解密算法m=D(c)=c^d(modn)在RSA系统中(e,n)构成加密秘钥,即公钥,(d,n)构成解密秘钥,即私钥。5.3.1RSA中素数的选取在RSA中,因N=P*Q,若P,Q被知道,即能将N因子分解,则由Φ(n)=(P-1)*(Q-1)可以算出。由于e是公开密钥,且解密秘钥D关于E满足D*E=1(modΦ(n))则D也不难求得,这样RSA系统便被完全攻破。RSA中的素数都是上面位的十进制数,怎样才能选择好的P和Q,怎样才能生成这样的数,并且判断它是否为素数,这是一个RSA系统关键的问题。针对素数P和Q的选择,1978年Rivest等人在正式发表的RSA公开密钥的论文中,就建议对素数P和Q的选择应当满足:(1)P、Q要足够在,在长度上应相差几位,且二者之差与P、Q位数相近;(2)P-1与Q-1的最大公约数GCD(P-1,Q-1)就尽量小;(3)P-1与Q-1均应至少含有一个大的素数因子。并把满足这些条件的素数称为安全素数。5.3.2RSA用到的公式和定理(1)数和互为素数任何大于1的整数a能被因式分解为如下唯一形式:a=p1p2…pl(p1,p2,…,pl为素数)(2)模运算①{[a(modn)]×[b(modn)]}modn≡(a×b)(modn)②如果(a×b)=(a×c)(modn),a与n互素,则b=c(modn)(3)费马定理若p是素数,a与p互素,则a^(p-1)=1modp(4)欧拉定理欧拉函数φ(n)表示不大于n且与n互素的正整数的个数。当n是素数,φ(n)=n-1。n=p*q,p,q均为素数时,则φ(n)=φ(n)φ(n)=(p-1)(q-1)。对于互素的a和n,有a^φ(n)=1(modn)5.3.3RSA安全性的分析在公布RSA算法之后,在使用RSA密码体制和分析RSA算法发现了一系列的算法本身脆弱性及其存在的问题。(1)RSA公钥密码体制在加密或解密中涉及大量的数值计算,其加密和解密的运算时间比较长,以致于实际使用RSA密码体制无法应用到软件产品,必须用超大规模集成电路的硬件产品。(2)虽然提高N位数会大大提高RSA密码体制的安全性,但其计算量呈指数增长,以致使其实现的难度增大,实用性降低。(3)RSA公钥密码体制的算法完整性(指密钥控制加密或解密变换的唯一性)和安全性(指密码算法除密钥本身外,不应该存在其它可破译密码体制的可能性)沿有等进一步完善。(4)RSA算法面临着数学方法的进步和计算机技术飞跃发展带来的破译密码能力日趋增强的严重挑战。RSA公开密钥密码算法在信息交换过程中使用比较广泛,安全性比较高。以当前的计算机水平,如选择1024位长的密钥(相当于300位十进制数字)就认为是无法攻破的。5.3.4RSA的攻击RSA算法的安全性就是基于大整数的因子分解困难之上的,到目前其还是安全的,要分析RSA算法的安全性,我们从攻击RSA的角度来审视。总的来分,RSA算法攻击可以区分为三类:(1)蛮力攻击:它通过实验所用的可能私钥,来达到目的。(2)数字攻击:使用数学技巧,类似于分解N来达到目的。(3)时间攻击:通过观察解密算法运行的时间来达到目的。其中抵抗蛮力攻击的方法,与其它加密系统是一致的,使用大的密钥空间,是穷举无能无力,因此E和D的位数越长则越安全,但是加解密速度会越慢,所以E和d位数的长度应与实际应用系统有综合的权衡。(1)RSA的选择密文攻击RSA在选择密文攻击面前很脆弱。所谓密码分析者并不知道解密的密钥,但是给出任意的消息,密码分析者可以将其加密,再解密。或者说,密码分析者能获得解密服务。设攻击者为A,密文接受者为T,公钥对为(e,n),私钥为d,T收到的密文为c,c对应的明文为m。现在A想知道m=c^dmodn,但是他不想分解n。于是T找了一个随机数r,r<n。他进行如下计算:x=r^emodn(对r用T的公钥加密,得到临时密文x),y=(x*c)modn(将临时密文x与密文c相乘)t=r^(-1)modn。A利用了RSA加密和解密过程的特点,即:如果x=r^emodn,那么r=x^dmodn现在A要做的是使T用d对t签名:u=t^dmodn。A需要获得u,然后计算m=(t*u)modn计算结果是这样推导的:t*umodn=[r^(-1)*y^d]modn=[r^(-1)*x^d*c^d]modn=c^dmodn=m[14](2)RSA的公共模数攻击若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那么该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:C1=P^e1modnC2=P^e2modn密码分析者知道n、e1、e2、C1和C2,就能得到P。因为e1和e2互质,故用Euclidean算法能找到r和s,满足:r*e1+s*e2=1假设r为负数,需再用Euclidean算法计算C1^(-1),则(C1^(-1))^(-r)*C2^s=Pmodn。5.3.5RSA的缺点(1)RSA产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密(2)安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NPC问题。目前,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,目前人们正在积极寻找攻击RSA的方法,如选择密文攻击,一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:XM)d=Xd*Mdmodn前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-WayHashFunction对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ(n)等等攻击.(3)速度太慢,由于RSA的分组长度太大,为保证安全性,n至少也要600bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(SecureElectronicTransaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。为了速度问题,目前人们广泛使用单,公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快,人们用它来加密较长的文件,然后用RSA来给文件密钥加密,极好的解决了单钥密码的密钥分发问题。[15]5.3.6RSA的优点 (1)数学表达式简单。(2)RSA的安全性基于大数分解的困难性。(3)RSA公钥密码体制具有一些传统密码体制不能实现的一些功能,如认证,鉴别和数字签名等,特别适合于现代密码通信。5.4RSA数字签名5.4.1RSA数字签名的过程首先产生密钥,过程如下:(1)随机产生两个等长度为K/2位的素数P和Q(2)然后计算公钥publicKey=P*Q;(publicKey是k位的长度)(3)随机产生一个加密密钥keyE,2<=keyE<=Φ(n)-1其GCD(keyE,Φ(n))=1;注意这是保证解密密钥keyE*keyDmodΦ(n)=1有解的充要条件,Φ(n)称为n的欧拉函数,值为:Φ(n)=(P-1)*(Q-1)(4)求解解密密钥keyD=keyE-1mod(n),keyE-1为解密密钥keyD的逆元,此公式原方程为(keyE*keyDmod(n)=1)由此公钥,加密密钥,解密密钥全部产生。其次对明文加密或对密文进行解密,过程如下;(1)加密:C=Mkey^EmodpublicKey;其中M表示明文,C表示密文。(2)解密:M=Ckey^DmodpublicKey.;其中M表示明文,C表示密文。(2)验证签名算法(RSA解密、对消息摘要计算和比较)验证签名算法包括两步:RSA解密得签名者的消息摘要,验证者对原消息计算摘要,比较两个消息摘要。验证签名的过程输入为消息,签名者的公钥,签名;输出为验证的结果,即是否是正确的签名。1RSA解密:签名实际是加密的消息摘要,用以上所述的RSA解密方法采用签名者的公钥对这个加密的消息摘要解密,解密的结果应为128位的消息摘要。2消息摘要计算和比较:验证者对消息用MD5算法重新计算,得到验证者自己的消息摘要。验证者比较解密得到的消息摘要和自己的消息摘要,如果两者相同,则验证成功,可以确认消息的完整性及签名确实为签名者的;否则,验证失败,确认签名被冒充或是被篡改。5.4.3散列函数的原理散列函数H(M),就是把任意长度的消息M,通过函数H,将其变换为一个固定长度的散列值h:h=H(M)。消息M的散列值h,就像该消息的数字指纹,可以用来保证数据的完整性,我们在前面称其为数据摘要。散列函数是公开的,一般不涉及保密密钥。少量有密钥的散列函数,可以作为计算消息的认证码等其他用途,因其有密钥而具有一定的身份鉴别功能。在信息安全领域中应用的Hash算法,还需要满足其他关键特性:第一当然是单向性(one-way),从预映射,能够简单迅速的得到散列值,而在计算上不可能构造一个预映射,使其散列结果等于某个特定的散列值,即构造相应的M=H-1(h)不可行。这样,散列值就能在统计上唯一的表征输入值,因此,密码学上的Hash又被称为"消息摘要(messagedigest)",就是要求能方便的将"消息"进行"摘要",但在"摘要"中无法得到比"摘要"本身更多的关于"消息"的信息。第二是抗冲突性(collision-resistant),即在统计上无法产生2个散列值相同的预映射。给定M,计算上无法找到M',满足H(M)=H(M'),此谓弱抗冲突性;计算上也难以寻找一对任意的M和M',使满足H(M)=H(M'),此谓强抗冲突性。要求"强抗冲突性"主要是为了防范所谓"生日攻击(birthdayattack)",在一10人的团体中,你能找到和你生日相同的人的概率是2.4%,而在同一团体中,有2人生日相同的概率是11.7%。类似的,当预映射的空间很大的情况下,算法必须有足够的强度来保证不能轻易找到"相同生日"的人。第三是映射分布均匀性和差分分布均匀性,散列结果中,为0的bit和为1的bit,其总数应该大致相等;输入中一个bit的变化,散列结果中将有一半以上的bit改变,这又叫做"雪崩效应(avalancheeffect)";要实现使散列结果中出现1bit的变化,则输入中至少有一半以上的bit必须发生变化。其实质是必须使输入中每一个bit的信息,尽量均匀的反映到输出的每一个bit上去;输出中的每一个bit,都是输入中尽可能多bit的信息一起作用的结果[14]。目前我们指的散列函数都是单向散列函数h=H(M),即函数H是单向函数。它有弱单向散列函数和强单向散列函数之分。单向散列函数是建立在压缩函数(compressionfunction)的想法之上的:给一个输入n位长消息,得到一个较短的散列值。单向散列函数的性质:(1)函数H适用于任何大小的数据分组;(2)函数H产生一定长度输出;(3)对于任何数据M,计算H(M)是容易实现的;(4)对于任何给定的散列值h,要计算出M使H(M)=h,这在计算上是不可行的;(5)对于任意给定的数据x,要计算出另外一个数据Y,使H(x)=H(y),这在计算上是不可行的;(6)要寻找任何一对数据(x,y),使H(x)=H(y),这在计算上也是不可行的;其中前面3个性质是散列函数应用于报文(数据)鉴别的基本要求;性质4是单向函数性质;性质5也可称其为弱抗冲突(weakcollisionresistance),就是在给定x之后,考察与本特定的x相冲突的情况:性质6也可称其为强抗冲突(strongcollisionresistance),是考察任意两个元素x,y相冲突的情况。5.4.4MD5算法的简介MD5消息摘要算法是单向散列函数,MD5不基于任何假设和密码体制,它采用了直接构造的办法,速度很快,非常实用。MD5算法的典型应用是对一段信息产生信息摘要,以防止被篡改。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变,只要你对这个文件重新计算MD5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的"抵赖",这就是所谓的数字签名应用。MD5算法以任意长度的消息作为输入,产生一个128比特消息散列值(或称消息摘要)作为输出。具体的算法步骤如下:步骤1:附加填充比特,对消息进行填充,使消息的长度(比特数)与448模512同余,即恰好为一个比512比特的倍数仅小64位的数。步骤2:附加消息长度值,将用64比特表示的初始消息(填充前)的长度(比特数)附加在步骤1的结果后。步骤3:初始化MD缓存,MD5算法使用了一个4个字(128比特,MD4中每个字32比特)的缓存来计算消息摘要,它们主要用来存放MD5的中间及最终结果。缓存可以看成是4个32比特的寄存器(A,B,C,D)。步骤4:以512比特(16个字)分组处理消息,这一步是MD5算法的主循环,以512比特作为分组[15]6RSA数字签名设计与实现6.1开发环境的介绍6.1.1C#语言概述在过去的几十年里,C和C++在商业软件的开发领域中得到广泛的运用,他们为程序员提供了十分灵活的操作,但是器效率还是不容乐观的,其开发时间相对来说较长。因此,许多程序员在寻求一种新的语言,希望其功能和效率能够很好的结合。C#就是这么一种语言,它是一种面向对象的编程语言。它可是使得程序员能够快速的编写基于.NET平台的应用程序。正是由于其面向对象的卓越设计,使得它成为许多程序员的钟爱的选择,在构架各类组件的时候。无论是高级的商业对象还是系统级的应用程序,在使用C#语言结构,这些组件可以方便的转化为XML网络服务,从而使它们可以一定的操作系统上通过网络调用C#。6.1.2C#语言特点(1)简洁的语法C#的代码在.NET框架提供的“可操纵”环境下运行,不允许直接地内存操作。它所带来的最大的特色是没有了指针。与此相关的是,那些在C++中被疯狂使用的操作符(例如:“::”、“->”和“.,”)已经不再出现。C#只支持一个“.”,对于我们来说,现在需要理解的一切仅仅是名字的嵌套而已。每种C#操作符在.NET类库中都有了新名字。语法中的冗余是C++中的常见的问题,C#对此进行了简化,只保留了常见的形式,而别的冗余形式从它的语法结构中被清除了出去。(2)精心地面向对象设计C#具有面向对象的语言所应有的一切特性:封装、继承与多态性,。通过精心地面向对象设计,从高级商业对象到系统级应用,C#建造广泛组件的绝对选择。在C#的类型系统中,每种类型都可以看作一个对象。C#提供了一个叫做装箱(boxing)与拆箱(unboxing)的机制来完成这种操作,而不给使用者带来麻烦。C#只允许单继承,即一个类不会有多个基类,从而避免了类型定义的混乱。(3)与Web的紧密结合.NET中新的应用程序开发模型意味着越来越多的解决方案需要与Web标准相统一。由于有了Web服务框架的帮助,对程序员来说,网络服务看起来就象是C#的本地对象。程序员们能够利用他们已有的面向对象的知识与技巧开发Web服务。仅需要使用简单的C#语言结构,C#组件将能够方便地为Web服务,并允许它们通过Internet被运行在任何操作系统上的任何语言所调用。(4)完整的安全性与错误处理语言的安全性与错误处理能力,是衡量一种语言是否优秀的重要依据。C#的先进设计思想可以消除软件开发中的许多常见错误,并提供了包括类型安全在内的完整的安全性能。为了减少开发中的错误,C#会帮助开发者通过更少的代码完成相同的功能,这不但减轻了编程人员的工作量,同时更有效地避免了错误的发生。(5)版本处理技术C#提供内置的版本支持来减少开发费用,使用C#将会使开发人员更加轻易地开发和维护各种商业用户。(6)灵活性和兼容性在简化语法的同时,C#并没有失去灵活性。尽管它不是一种无限制语言,比如:它不能用来开发硬件驱动程序,在默认的状态下没有指针等等。6.2.NET类的介绍常见的加密和编码算法都已经存在.NET中得到了实现,为编码人员提供了极大的便利性,实现这些算法的命名空间是System.Security.Cryptography,它的命名空间提供加密服务,包括安全的数据编码和解码,以及许多其它的操作,例如散列法,和消息身份验证。(1)哈希值哈希函数将任意长度的二进制字符串映射为固定长度的小二进制字符串。哈希值是一段数据唯一且紧凑的数值表示形式,若散列一段明文,就是更改其中的一个标点符号,随后的哈希值都将产生不同的值。因此,要找到散列为同一个数值的两个不同输入,在计算上是几乎不可能的。所以数据的哈希值可以检验数据的完整性。在.NET所选择的类为:HashAlgorithm:所有加密哈希算法实现均必须从中派生的基类。(2)公钥加密公钥加密使用一个对未授权的用户保密的私钥和一个公开的公钥。用公钥加密的数据只能是用私钥解密,而用私钥签名的数据只能用公钥去验证。公钥可以被任何人使用;该密钥用于加密要发送到私钥持有者的数据。在.NET所选择的类为:RSACryptoServiceProvider:使用加密服务提供程序(CSP)提供的RSA算法的实现执行不对称加密和解密。RSAPKCS1SignatureFormatter:类创建数字签名。RSAPKCS1SignatureDeformatter:类来验证该签名。6.3RSA数字签名所需实现的功能在本软件中需要实现的功能有以下几个:(1)生成RSA密钥(2)利用MD5算法计算出消息摘要MD;(3)数字签名的实现;(4)验证数字签名:6.4本软件的总体要求和设计本软件的总体要求有:(1)按要求生成非对称密钥——公钥和私钥;(2)对所要加密的明文信息生成所需要的消息摘要MD;(3)在本设计中用产生的私钥d根据RSA算法的加密原理对所生成的消息摘要进行加密运算,得到数字签名;(4)得到对应的消息摘要,比较两个消息摘要,验证数字签名者的身份;(5)图形界面简介,操作简单,易懂。本软件的总体设计都是基于C#的开发环境,采用的是VisualStudio2010的运行环境。6.5主要实现代码及软件运行结果(1)产生公钥和私钥publicvoidbutton_creatKey_Click(objectsender,EventArgse){try{RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();textBox_publicKey.Text=rsa.ToXmlString(false);textBox_privateKey.Text=rsa.ToXmlString(true);}catch(System.Exceptionex){MessageBox.Show("密钥创建"+ex.ToString());}}图6-1随机产生一个公钥,一个私钥,密钥是XML可扩展标记语言形式,XML是一套定义语义表激动额规则,这些标记将文档分成许多部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的,与移动额,结构化的标记语言的语句语法。他是一种以简单文本格式存储数据的方式,这意味着他可以被任何计算机读取,此返回的是字符串。(2)产生摘要privatevoidbutton_getHash_Click(objectsender,EventArgse){try{byte[]fileSource=Encoding.UTF8.GetBytes(sendFileString);HashAlgorithmMD5=HashAlgorithm.Create("MD5");byte[]hashData=MD5.ComputeHash(fileSource);textBox_getHash.Text=BitConverter.ToString(hashData);}catch(System.Exceptionex){MessageBox.Show("获取哈希值"+ex.ToString());}}图6-2(3)数字签名的验证privatevoidbutton_ensureSign_Click(objectsender,EventArgse){try{RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();rsa.FromXmlString(textBox_privateKey.Text);RSAPKCS1SignatureDeformatterrsadDeformatter=newRSAPKCS1SignatureDeformatter(rsa);rsadDeformatter.SetHashAlgorithm("MD5");string[]strSplit=textBox_receiveHash.Text.Split('-');byte[]receiveByteHash=newbyte[strSplit.Length];for(inti=0;i<strSplit.Length;i++)receiveByteHash[i]=byte.Parse(strSplit[i],System.Globalization.NumberStyles.AllowHexSpecifier);string[]strSignedSplit=textBox_signHash.Text.Split('-');byte[]signedByteHash=newbyte[strSignedSplit.Length];for(inti=0;i<strSignedSplit.Length;i++)signedByteHash[i]=byte.Parse(strSignedSplit[i],System.Globalization.NumberStyles.AllowHexSpecifier);if(rsadDeformatter.VerifySignature(receiveByteHash,signedByteHash)){MessageBox.Show("数字签名验证成功!");}else{MessageBox.Show("数字签名验证失败!");}}catch(Exceptionex){throwex;}}图6-3数字签名验证另一个实体的标识并保护数据的完整性。即,当使用公钥系统对消息进行数字签名,发送方先向该消息应用哈希函数以创建消息的摘要。然后,发送方使用发送的私钥加密消息摘要以创建发送方的个人签名,因为此私钥唯一的标识该发送方,在收到消息和签名后,接受方使用发送方的额公钥解密该签名,以恢复消息摘要,并使用发送方所用的统一哈希算法对该消息进行哈希运算。如果接收方计算的消息摘要与从发送方接受的消息摘要完全匹配,则接收方可以确定该消息来自发送方。(4)整个界面图图6-4结论信息时代虽然给我们带来了无限商机与方便,但同时也充斥着隐患与危险。由于网络很容易受到攻击,导致机密信息的泄漏,引起重大损失。由于信息技术己经成为综合国力的一个重要组成部分,因此信息安全已成为保证国民经济信息化建设健康有序发展的保障。本文详细讨论了RSA简述了DSA和椭圆曲线数字签名的基本原理,基本实现及如何利用RSA算法实现数字签名。RSA算法是一种安全技术,但是绝不是无条件的安全性,这是由他的理论基础决定的。因此,在实现RSA算法的过程中,每一步都要尽量从安全性考虑。而该设计中他的安全性则依赖于素数的选择。RSA数字签名提供了一个安全的确认发送方身份的方法,即数字签名的真实性得到了保证,防止了第三方的冒充和篡改,肯定了数字签名的真实性。随着计算机性能和密码分析水平的不断提高,数字签名技术今后可能的研究与发展方向为:(1)高效、强安全的数字签名研究。寻找基于新的计算困难问题上的单向函数是数学家、密码学家不断努力的重要目标,也是数字签名算法的基础。设计短密钥、短签名、强安全和抗攻击的数字签名是数字签名技术研究的一个重点。(2)新型安全体制下的数字签名技术研究。近几年,量子密码、DNA密码、混沌理论等新型的安全体制的理论研究十分活跃。在此基础上的数字签名技术是一个值得研究的新问题。(3)网络应用刺激着数字签名技术研究。电子投票、电子拍卖、电子政务、移动安全计算等各种应用都离不开数字签名技术。利用数字签名技术设计安全的应用协议是未来数字签名应用和理论所不能回避的问题。致谢致谢在河北工程大学科信学院将近四年的学习过程中,在贾东立老师的悉心指导下,我的论文终于得已完成。感谢贾老师,他和蔼可亲,细心有责任,从他身上我首先学到的是做任何事情都要往前赶着做。贾老师严谨的治学态度,更是值得我在以后的工作学习中不断学习并且受益终身的。在完成论文的过程中,贾老师给予了我极大的帮助和细心的指导,让我受益匪浅。在此,谨向贾老师致以深深的敬意和衷心的感谢。感谢我亲爱的父母家人,他们给予我的永远都是微笑和鼓励,在我最困难的时候,是他们的支持,让我选择坚强与坚持。他们给了我最无私的爱,鼓励我选择飞翔,即使我无法陪在他们的身边。我唯有继续的努力,来报答他们的恩情。感谢这四年与我一起度过的同学们,感谢我的舍友,他们给了我莫大的支持和鼓励,愿与他们结下的深厚友谊天长地久。感谢我的辅导员刘艳丽老师,她在我的生活和学习上都给予了深深的关怀和鼓励。在此,我向各位老师,朋友和同学给予的关心和帮助致以诚挚的谢意!参考文献参考文献[1]赵泽茂.数字签名理论.北京:科学出版社,2007[2]卢开澄.计算机密码学.北京:清华大学出版社,1998[3]冯登国.密码分析学.北京:清华大学出版社,2000[4]SalommaA.公钥密码学.北京:国防工业出版社,1998[5]张先红.数字签名原理及技术.北京:机械工业出版社,2004[6]李艺.《网络安全课程PPT讲义》[7]胡道元,闵京华《网络安全》.清华大学出版社2005[8]冯登国,裴定一《密码学导引》.科学出版社,1999[9]卓光辉,祁明,周浩华.《数字签名技术的研究和进展》,2000[10]曹珍富.《公钥密码学》.黑龙江教育出版社,1993年[11]李继国,曹珍富,李建中,张亦辰.数字签名的现状,2003[12]KoblitzN.Ellipticcurvecryptosystems.MathematicsofComputation,1987[13]B.Preneel.CryptographicHashFunctions.MathematicsofComputation,1990[14]吴克力.数字签名理论与算法研究:[博士学位论文]南京理工大学,2000[15]白国强.椭圆曲线密码及其算法研究:[博士学位论文].西安:西安电子科技大,2000附录1基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论