RSA算法和RSA数字签名算法的实现.docx
- 文档编号:135555
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:9
- 大小:132.72KB
RSA算法和RSA数字签名算法的实现.docx
《RSA算法和RSA数字签名算法的实现.docx》由会员分享,可在线阅读,更多相关《RSA算法和RSA数字签名算法的实现.docx(9页珍藏版)》请在冰豆网上搜索。
基于verilog的RSA实现和RSA数字签名
题目:
基于verilo”的RSA实现和RSA数字签名
学院:
专业:
姓名:
学号:
摘要:
RSA算法是一种公钥密码算法.实现RSA算法包括生成RSA密钥,用RSA加密规则和解密规则处理数据.RSA数字签名算法利用RSA算法实现数字签名.本文详述了RSA算法的基本原理,RSA加密算法的实现以及如何利用RSA实现数字签名.
关键字:
RSA算法,数字签名,公开密钥.私人密钥,加密.解密
一、引言
随着网络技术的飞速发展,信息安全性已成为亟待解决的问题.公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制任网络通信中出现的问题.另外,随着电子商务的发展,网络上资金的电子交换日益频繁,如何防止信息的伪造和欺骗也成为非常重要的问题.数字签名可以起到身份认证,核准数据完整性的作用.目前关于数字签名的研究主要集中基于公钥密码体制的数字签名.
公钥密码体制的特点是:
为每个用户产生一对密钥(PK和SK);PK公开,SK保密;从PK推出SK是很困难的;A,B双方通信时,A通过任何途径取得B的公钥,用B的公钥加密信息.加密后的信息可通过任何不安全信道发送.B收到密文信息后,用自己私钥解密恢复出明文.
公钥密码体制己成为确保信息的安全性的关键技术.RSA公钥密码体制到日前为止还是一种认可为安全的体制.本文详述了RSA算法和用RSA算法实现数字签名的理论,以及它们在实际应用中的实现.
二、RSA算法和RSA数字签名算法的理论描述
1RSA算法
RSA算法的理论基础是-・种特殊的可逆模昇运算.
设n是两个不同奇素数p和q的积,即:
n=pqr(n)=(pT)(q-1).
定义密钥空间k={(n,p,q,d,e)In二pq,p和q是素数,delmod(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,这里不加证明的引用下面两个定理:
定理1(Euler)对任意的a(Zn*,有a((n)(1modn,其中Zn*={x(Zn|gcd(x,n)=!
},((•)表示Euler函数.
定理2设p和q是两个不同的素数,n=pq,((n)=(p-l)(qT),对任意的
x(Zn及任意的非负整数k,有xk((n)+l(xmodn.
现在来证明RSA算法的加密变换和解密变换的正确性.
证明:
对于加密变换Ek和解密变换Dk.因为ablmod(n),所以可设ab=t(n)+l,t是整数且tl.对于任意的xZn,有Dk(Ek(x))Dk(xb)(xb)axt(n)+lxmodn.因此解密过程是正确的.
2RSA数字签名算法
RSA数字签名算法的过程为:
A对明文m用解密变换作:
sDk(m)=mdmodn,其中d,n为A的私人密钥,只有A才知道它:
B收到A的签名后,用A的公钥和加密变换得到明文,因:
Ek(s)=Ek(Dk(m))=(md)emodn,又delmod(n)即de=l(n)+lt根据欧拉定理in(n)=1modn,所以Ek(s)=ml(n)+l=[m(n)]em=mmodn.若明文m和签名s一起送给用户B,B可以确信信息确实是A发送的.同时A也不能否认送给这个信息,因为除/A本人外,其他任何人都无法由明文m产生s.因此RSA数字签名方案是可行的.
但是RSA数字签名算法存在着因计算方法本身同构造成签名易被伪造和计算时间长的弱点,因此实际对文件签名前,需要对消息做MD5变换.
MD5函数是一种单向散列函数,它将任意长度的消息压缩成128位的消息摘要.应用MD5的单向性(即给定散列值,计算消息很难)和抗碰撞性(即给定消息虬要找到另一消息M'并满足两者的散列值很难),可以实现信息的完整性检验.另外该函数的设计不基亍任何假设和密码体制而直接构造,执行的速度快,是一种被广泛认可的单向散列算法-
三、RSA算法的实现
RSA算法的实现分为:
生成密钥,加密,解密
1密钥的生成:
私钥的产生:
本实验鉴于运算速度,和存储器的选择。
采用由小到大选择一与(P-1)*(Q-1)互质的。
值。
公钥的产生:
通过e*d=lmod(n)算出d的值,d即为公钥的值。
2生成RSA密钥需完成下列步骤:
(1)选择。
的值为3至65536;
(2)随机生成大素数p,直到gcd(e,p-l)=l;
其中gcd(a,b)表示a,b取最大公约数
(3)随机生成不同于p的大素数q,直到
gcd(e,q-l)=l;
(4)计算n=pq,(n)=(pT)(qT);
(5)计算d,满足del(mod(n));
(6)计算dmod(p-1),dmod(qT);
(7)计算qTmodp:
(8)将n,e放入RSA公钥;将n,e,dmod(p-1),dmod(qT)qTmodp放入RSA私钥.
2.1随机数的产生
随机数不仅用于密钥生成,也用作公钥加密时的填充字符.它必须具有足够的随机性,以防止破译者掌握随机数的规律性后重现密钥的配制过程或者探测到加密块中的明文.因为在计算机上不可能产生真正的随机数,实际采用周期大于2256位的伪随机序列发生器.
实现过程为:
通过PRBS算法,实现PRBS随机码。
通过•定时间随机选出•个素数。
2.2素数的产生
对随机数作素性检测,若通过则为素数;否则增加一个步长后再做素性检测,直到找出素数.素性检测采用Fermat测试.这个算法的理论依据是费尔马小定理:
如果m是一个素数,且a不是m的倍数,那么根据费尔马小定理有:
anrl=l(modm).实际应用时:
am-1=1(modm)ain=a(modm)a=ain(modm),因此对于整数m,只需计算am(modm),再将结果与a比较,如果两者相同,则m为素数.选取竺2,则a一定不会是任何素数的倍数.
3加密过程
加密规则为:
Ek(x)=xbmodn.xZn
加密过程的输入为:
明文数据D,模数n,加密指数e(公钥加密)或解密指数d(私钥加密).输出为密文.I)的长度不超过[log2n]T1,以确保转换为PKCS格式时,填充串的数目不为0.
格式化明文.采用PKCS格式:
EB=00:
|BT||PS||00I)其中BT表示块的类型,PS为填充串,D为明文数据.开头为0确保EB长度大于k.对公钥加密BT=02,对私钥解密BT=01.当BT二02时,PS为非0随机数;当BT=01,PS值为FF.
明文由字符型数据转换成整型数据.
RSA计算.为整数加密块x作模幕运算:
y=x“cmodn,0<=y为密文,公钥加密时,c为公钥加密指数e;私钥加密时,c为私钥加密指数d.
密文由整型数据转换成字符型数据.
4解密过程
解密规则为Dk(x)=ycmodn,yZn,Zn为整数集合,x为密文.
解密过程的输入为:
密文ED;模数n;加密指数e(公钥解密)或解密指数d(私钥解密),结果为明文.
(1)密文整型化.
(2)RSA计算.对密文做模羸运算:
x=y"modn,0<=x ⑶此时明文为整型数据,转换为ASCII型数据,得到PKCS格式的明文. (4)从PKCS格式明文中分离出原明文.从PKCS格式分离明文的过程也是检查数据完整性的过程.若出现以下问题则解密失畋: 不能清楚的分割;填充字符少于64位或与BT所注明的类型不匹配;BT与实际操作类型不符. 五、RSA数字签名算法的实现 RSA数字签名算法,包括签名算法和验证签名算法.首先用MD5算法对信息作散列计算.签名的过程需用户的私钥,验证过程需用户的公钥.A用签名算法将字符串形式的消息处理成签名;B用验证签名算法验证签名是否是A对消息的签名,确认是A发送的消息;消息没有被攥改过;A一定发送过消息. 1签名算法 签名算法包括三步: 消息摘要计算,RSA加密. 消息摘要计算.消息在签名前首先通过MD5计算,生成128位的消息摘要digest. 对摘要作RSA计算.用加密算法,采用签名者的私钥加密消息摘要,得到加密后的字符串.加密算法中使用的加密块为01类型. 2验证签名算法 验证签名算法包括两步: RSA解密得签名者的消息摘要,验证者对原消息计算摘要,比较两个消息摘要•验证签名的过程输入为消息,签名者的公钥,签名;输出为验证的结果,即是否是正确的签名. RSA解密.签名实际是加密的字符串•用3.5所述的解密算法,采用签名者的 公钥对这个加密的字符串解密.解密的结果应为128位的消息摘要.在解密过程中,若出现得到的加密块的类型不是01,则解密失败.签名不正确. 消息摘要计算和比较.验证者对消息用MD5算法重新计算,得到验证者自己的消息摘要•验证者比较解密得到的消息摘要和白己的消息摘要,如果两者相同,则验证成功,可以确认消息的完整性及签名确实为签名者的;否则,验证失败. 六、RSA算法的时间复杂性: RSA算法的时间复杂性取决于它所设计的几个基本运算的时间复杂性. 密钥生成过程时间主要是生成随机素数的时间及计算公钥和私钥的模乘法的时间.生成随机素数的时间在于完成对随机大数的Fermat测试的时间,Fermat测试的时间复杂度为0((log2n)3),n所测试的整数.模乘法的计算方法采取先计算两个数的乘积,再取模n,时间复杂性为0((log2n)2). RSA加密解密计算的时间主要是模幕运算的时间,即形式为xcmodn的函数的运算时间.模蒂算法采取平方乘算法,设1是c的长度,则计算xcmodn至多需要21次模乘法,因为l[log2n]+l,所以模皋运算能在时间0((log2n)3)内完成.因此,RSA的加密和解密均可在多项式时间内完成. 七、RSA实现verilog程序: //输入十进制必须每位都要转换为二进制输入。 〃**************************************************************** moduleRSA (inputLl5: 0]input_number,〃输入分别用四位格雷码表示个十进 制数字. outputreg[15: 0]output_code//输出分别用四位格雷码表示一个十进制 数字. ); reg[15: 0]indec: //输入的卜进制寄存器。 reg[47: 0]out_dec;〃输出结果. reg[7: 0]P,Q; reg[7: 0]reger; reg[7: 0lrusltnubl,rusltnub2; reg[31: 0]n; reg[31: 0'n_tem;//n_tem~(P-l)*(q-l)reg[15: OJe; reg[15: 0'd; integeri,j,x,intnub; initial begin e=3; d=l; n=3013; n_tem='bO; reger=8'blOl11001; encl always begin if(reger[0]! =0) ruslt_nubl=reger; else begin reger[0]=reger[7j*reger[6]; reger={reger[6: 0J,reger[7]); end if(reger[0]! =,bO&®er[7]bl) rusltnub2=reger; else begin reger[0]=reger[7J"reger[6]; reger=(reger[6: 0],reger[7]J: end if((ruslt_nubl>ruslt_nub2)rusltnubl%ruslt_nub2! =0)begin P=ruslt_nubl; Q=r
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RSA 算法 数字签名 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)