资源描述:
《rsa算法和rsa数字签名算法的实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、RSA算法和RSA数字签名算法的实现摘要:RSA算法是一种公钥密码算法.实现RSA算法包括生成RSA密钥,用RSA加密规则和解密规则处理数据.RSA数字签名算法利用RSA算法实现数字签名.本文详述了RSA算法的基本原理,RSA加密算法的实现以及如何利用RSA实现数字签名.关键字:RSA算法,数字签名,公开密钥,私人密钥,加密,解密一引言随着网络技术的飞速发展,信息安全性已成为亟待解决的问题.公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制在网络通信中出现的问题.另外,随着电子商务的发展,网
2、络上资金的电子交换日益频繁,如何防止信息的伪造和欺骗也成为非常重要的问题.数字签名可以起到身份认证,核准数据完整性的作用.目前关于数字签名的研究主要集中基于公钥密码体制的数字签名.公钥密码体制的特点是:为每个用户产生一对密钥(PK和SK);PK公开,SK保密;从PK推出SK是很困难的;A,B双方通信时,A通过任何途径取得B的公钥,用B的公钥加密信息.加密后的信息可通过任何不安全信道发送.B收到密文信息后,用自己私钥解密恢复出明文.公钥密码体制已成为确保信息的安全性的关键技术.RSA公钥密码体制到目前为止还是一种认可为安全的体制.本文详述了RSA算法和用RSA算法
3、实现数字签名的理论,以及它们在实际应用中的实现.二RSA算法和RSA数字签名算法的理论描述1RSA算法RSA算法的理论基础是一种特殊的可逆模幂运算.设n是两个不同奇素数p和q的积,即:n=pq,(n)=(p-1)(q-1).定义密钥空间k={(n,p,q,d,e)
4、n=pq,p和q是素数,de1mod(n),e为随机整数},对每一个k=(n,p,q,d,e),定义加密变换为Ek(x)=xbmodn,xZn;解密变换为Dk(x)=yamodn,yZn,Zn为整数集合.公开n和b,保密p,q和a.为证明加密变换Ek和解密变换Dk满足Dk(Ek(x))=x,这里不加证
5、明的引用下面两个定理:定理1(Euler)对任意的a(Zn*,有a((n)(1modn,其中Zn*={x(Zn
6、gcd(x,n)=1},((·)表示Euler函数.定理2设p和q是两个不同的素数,n=pq,((n)=(p-1)(q-1),对任意的x(Zn及任意的非负整数k,有xk((n)+1(xmodn.现在来证明RSA算法的加密变换和解密变换的正确性.证明:对于加密变换Ek和解密变换Dk.因为ab1mod(n),所以可设ab=t(n)+1,t是整数且t1.对于任意的xZn,有Dk(Ek(x))Dk(xb)(xb)axt(n)+1xmodn.因此解密过程是正确的
7、.2RSA数字签名算法RSA数字签名算法的过程为:A对明文m用解密变换作:sDk(m)=mdmodn,其中d,n为A的私人密钥,只有A才知道它;B收到A的签名后,用A的公钥和加密变换得到明文,因:Ek(s)=Ek(Dk(m))=(md)emodn,又de1mod(n)即de=l(n)+1,根据欧拉定理m(n)=1modn,所以Ek(s)=ml(n)+1=[m(n)]em=mmodn.若明文m和签名s一起送给用户B,B可以确信信息确实是A发送的.同时A也不能否认送给这个信息,因为除了A本人外,其他任何人都无法由明文m产生s.因此RSA数字签名方案是可行的.但是RS
8、A数字签名算法存在着因计算方法本身同构造成签名易被伪造和计算时间长的弱点,因此实际对文件签名前,需要对消息做MD5变换.MD5函数是一种单向散列函数,它将任意长度的消息压缩成128位的消息摘要.应用MD5的单向性(即给定散列值,计算消息很难)和抗碰撞性(即给定消息M,要找到另一消息M'并满足两者的散列值很难),可以实现信息的完整性检验.另外该函数的设计不基于任何假设和密码体制而直接构造,执行的速度快,是一种被广泛认可的单向散列算法.三RSA算法的实现RSA算法的实现分为:生成密钥,加密,解密.1数据结构RSA密码系统的安全性依赖于大数分解的难度,一般建议用户选择
9、的素数p和q至少为100位,则n=pq是至少为200位的十进制数.因此实现RSA算法有必要定义大数的数据结构.typedefstruct{unsignedlongintbn[MAX_LENGTH];unsignedintsize;}BigNum密钥生成,加密和解密涉及到一些大数的基本运算.定义大数的基本运算库,包括加,减,乘,除,取模运算等,其中最重要的模乘运算和模幂运算.模幂算法是加密解密的核心算法.计算模幂的一种有效算法是"平方-乘"方法,通过对指数的二进制化来实现.Proceduremodmultbegintypedefstruct{unsignedint
10、bits;/*公钥n的位