c java rsa签名算法,基于RSA的数字签名算法及其快速实现

摘要:在基于RSA的数字签名算法中,直接决定实现效率的是大数模幂运算。对基于二进制的Montgomery算法进行了改进,并将其应用于大数的模幂运算中。改进后的算法在保证算法快速实现的同时,又节省了算法运算空间。

关键词:数字签名;RSA;Montgomery算法;模乘

中图分类号:TP312文献标识码:A文章编号:1009-3044(2009)31-0000-00

The Introduction and Fast Implementation of Digital Signature Algorithm Based on RSA

LIU Xue-qing, LI Mei, SONG Chao, ZHU Yan-qin

(School of Computer Science & Technology, Soochow University, Suzhou 215006, China)

Abstract: The efficiency of digital signature algorithm based on RSA depends on the modular exponentiation of large integer. We improved the binary Montgomery algorithm and use it in the modular exponentiation of large integer. On the foundation of fast speed,the improved way can also save operation space.

Key words: digital signature; RSA; Montgomery algorithm; modular multiplication

随着网络技术的发展,各种网络通信服务应运而生。在享受便捷网络通信服务的同时,各种安全问题也在困扰着人们。由于不是面对面的接触以及没有书面合同的支持,如何确认对方的身份就显得尤为重要。

在网络中传输的消息可以通过数字摘要技术来确保其在传输的过程中未被修改。但仅仅做到这一步仍存在危险性。假设用户A向B发送消息M,数字摘要算法采用SHA-1,A对M进行SHA-1运算,将M和摘要值S一起发送给B,但消息在途中被C截取(并且C知道此次会话AB双方摘要算法选择的是SHA-1),C将消息m及其SHA-1摘要值s一起发送给B,这样在B端显然能够通过SHA-1的检验,B 就误以为接受到了来自A的消息。解决上述问题的一个好方法就是使用数字签名技术。数字签名技术类似于纸张上的签名或者印章,是不可伪造的。其标准定义为:“附加在数据单元上的一些数据,或是对数据单元所作的密码交换,这种数据和变换允许数据单元的接受者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造。”

1 基于RSA数字签名算法简介

在各类数字签名算法中,基于RSA的数字签名算法是应用相当普遍的一种。其原理简单,理论基础是数论的欧拉定理,它的安全性依赖于大数的因数分解的困难性。其签名产生和签名认证过程为:

1) 取两个大素数p,q;

2) 计算n=pq, φ(n)=(p-1)(q-1);

3) 随机选择整数e,并且满足e和φ(n)互质;

4) 计算d,使得d*e1 mod φ(n);

5) 对消息M进行数字摘要运算,得到摘要值S;

6) 对摘要值S生成签名:V=Sd mod n;

7) 接收方验证签名:计算s=Ve mod n,并对消息M用同一数字摘要算法进行摘要运算,得到摘要值S。若S=s则通过签名认证。

在上述过程中,计算得到n,d后应将p,q, φ(n)销毁,将(n,e)公布作为RSA的公钥,将d保密作为RSA的私钥。

2 RSA算法的快速实现

在上述基于RSA的数字签名算法中,直接决定效率的是大数模幂运算,也就是形如Md mod n的运算。因此,以下将重点讨论大数模幂运算的快速实现算法。我们将大数用数组来表示,数组的类型定义为64位无符号整型,数组的长度可以根据具体的需求去设置相应的值,这里只要能满足1024位大数的运算就可以了。

2.1 Montgomery算法在RSA算法中的应用

模幂运算可以转换为一系列的模乘运算,因此高效的实现大数间的模乘对签名算法的效率意义重大。为此,我们考虑采用Montgomery算法。Montgomery算法给出了满足0

(T+MN)/RTR-1 mod N

其中,N和R是互素的两个整数,且满足RR-1-NN’=1(N’=-N-1 mod R),M=TN’mod R。

由于0

在RSA算法中我们经常要处理的是形如AB mod N(A,BN保证T

如果我们直接去求M和(A B +MN)/R,那么我们就需要存储大数的乘积,这在那些对空间有严格限制的场合是行不通的。文献4对此作了适当的改进,改进的算法是基于二进制的。

2.2 基于任意进制的Montgomery改进算法

2.2.1 算法设计

基于二进制的算法虽然避免了保存大数的乘积,但由于参加运算的大数位数多,所以必然存在大量的循环,直接影响到最终算法的效率。我们在原来二进制算法的基础上,对算法加以了改进,改进后的算法是基于任意进制的。具体算法如下:

输入:N=(Nn-1Nn-2…N0)b, A=(An-1An-2…A0)b, B=(Bn-1Bn-2…B0)b, N’=-N-1 mod b,R=bn,b;

输出:D=A BR-1 mod N,设D= (dn-1dn-2…d0)b.

S1. D=0,i=0;

S2.预计算2B,3B,…,15B和2N,3N, …,15N;

S3. 若i

S4. Mi=(d0+AiB0)N’mod b;

D=(D+Ai +MiN)/b;

i=i+1,转S3;

S5. 若D≥N,则D=D-N;

S6. 返回D为最终结果.

2.2.2 实现技巧

当采用16进制即b=16实现上述算法时, R= bn显然大于N。在步骤S4中 AiB 和MiN都是大数的乘法运算,分析发现Ai和Mi取值范围为0~15,可以将步骤S2中预计算的结果2B,3B,…,15B和2N,3N, …,15N保存在两个大数数组中,即BigB[16]={0,B,2B,…,15B},BigN[16]={0,N,2N, …,15N}。这样在计算AiB和MiN时就将大数的乘法运算转换为对数组BigB[Ai]和BigN[Mi]的取值运算。

此外,在步骤S4中,存在模16和除以16的运算,模运算和除法运算在计算机上实现时开销大,这里我们可以用与操作和移位操作来代替模运算和除法运算,用一个数和0x0F相与来代替模16运算,而一个数除以16可以通过将这个数右移4位来实现。

2.2.3 性能分析

上述算法没有像传统的Montgomery算法那样直接去求出M和(A B +MN)/R,这样就避免了保存大数的乘积,节省了运算的空间,同时它又避免了基于二进制的Montgomery算法过多的循环。当遇到大数乘法AiB和MiN时,通过预计算2B,3B,…,15B和2N,3N, …,15N的值,避免了大数间的直接相乘,并且用与和移位这两个易于实现且开销小的操作取代了模操作和除法操作。这样,在很大程度上提高了运算效率。改进后的算法虽然还是存在一定数量的循环,但由于没有大数除法运算和直接的模运算,所以在保证速度的基础上又节省了运算空间。

3 结束语

本文介绍了基于RSA的数字签名算法及其相关实现。在实现基于RSA的数字签名算法时,对原有的Montgomery算法进行了改进,改进的算法可以基于任意进制,避免了基于二进制Montgomery算法的过多循环次数以及存储两个大数间乘积的空间需求,在节省运算空间的同时也保证了速度上的高效。

参考文献:

[1] St Denis T,Johnson S.程序员密码学[M].沈晓斌,译.北京:机械工业出版社,2007.

[2] 卢开澄.计算机密码学[M].3版.北京:清华大学出版社,2004.

[3] Stallin W.Cryptography and Network Security,Fourth Edition[M].北京:电子工业出版社,2006.

[4] Walter C D.Montgomery exponentiation needs no final subtractions[J].E-lectronic Letters,1999,35(21):1831-1832.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、数字签名原理 用RSA算法数字签名,总的来说,就是签名者用私钥参数d加密,也就是签名;验证者用签字者的公钥参数e解密来完成认证。 下面简要描述数字签名和认证的过程。 (1)、生成密钥 为用户随机生成一对密钥:公钥(e,n)和私钥(d,n). (2)、签名过程 a) 计算消息的散列值H(M). b) 用私钥(d,n)加密散列值:s=(H(M)) mod n,签名结果就是s. c) 发送消息和签名(M,s). (3)、认证过程 a) 取得发送方的公钥(e,n). b) 解密签名s:h=s mod n. c) 计算消息的散列值H(M). d) 比较,如果h=H(M),表示签名有效;否则,签名无效。 根据上面的过程,我们可以得到RSA数字签名的框图如图2-1: 图 2-1 RSA数字签名框图 2、 假设Alice想和Bob通信,以本地两个文件夹Alice和Bob模拟两个用户,实现消息M和签名的模拟分发 (1)、Alice通过RSA算法生成一对密钥:公钥(e,n)和私钥(d,n),将公私钥分别存入pubKey.txt和priKey.txt中。 pubKey.txt中公钥如下: priKey.txt中私钥如下: (2)、将Alice中的pubKey.txt拷到Bob中,模拟公玥的分发。 (3)、将Alice中的消息info.txt做散列,将散列后的值存入hashInfo.txt中。 (4)、将Alice中的消息hashInfo.txt和签名sign.txt拷到Bob中,实现M密文状态下的签名与模拟分发、消息传递。 (5)Bob取得公钥pubKey.txt,用公钥解密签名,计算消息的散列值H(M).比较,如果h=H(M),表示签名有效;否则,签名无效。 后台运行结果如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值