rsa的加密算法原理、加密与解密

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

rsa的加密算法原理、加密与解密

摘要:rsa算法不但能用于数据加密,也能用于数字签名,还能检测素数的算法,所以它是目前最有影响力的公钥加密算法,能够抵抗到目前为止已知的所有密码攻击。其安全性依赖于大素数因数分解的困难性。文章主要介绍rsa的加密算法原理、加密与解密过程,存在的攻击,以及参数选择。

关键词:非对称密码;rsa算法;加密;素数;参数;量子算法中图分类号:tp311 文献标识码:a 文章编号:1009-3044(2013)09-2062-02

近年来,网络的发展和普及,解除了人们传统意义上的时间和空间上的束缚,真正实现了全球信息化。但与此同时,由于网络的开放性、互动性和全球性等特性,信息篡改、假冒和窃取等不安全问题也日益增多。因此,信息安全成为当今社会一个热门的话题。

在传输信息过程中,为确保信息的安全性和保密性,信息加密成为一种主要措施。加密算法的种类不胜枚举。从2012年为期5天的rsa大会中,可见rsa已经运用到社会中的各个领域,受到了全世界的关注。这主要基于rsa加密算法不仅易于理解和实现,而且安全性好。

1 rsa加密算法

1.1算法原理

文献[1]中描述rsa算法是在1977年由rivest、schamir和adleman发明的。rsa算法是一种既用于数据加密也可以数字签名

的非对称密码算法,其安全性依赖于因子分解大数问题。

rsa密码算法是利用陷门单向函数的一种可逆模指数运算,它的安全性是基于大数分解的困难性。下面给出rsa体制的算法流程:1)rsa加解密算法的初始化

第一,加解密系统随机地选取两个非公开的大素数p和q。

第二,计算出公开的模数n和非公开的欧拉函数,[n=pq],[φn=p-1q-1]。

第三,随机生成一个整数e作为加密秘钥,并使成立。

第四,计算d(私钥),使得)成立,即,为安全起见立即销毁p、q及e。

2 rsa算法存在攻击

尽管对于rsa的密码分析已经研究了三十多年,但它依然是流行和可靠的。可是,在rsa算法实现的细节上存在一些缺陷,这导致了rsa的安全性下降,从而使rsa被攻击者攻破。下面简单地概述一下目前对rsa算法攻击的几种主要方法。

2.1 数学攻击

实质上就是直接对两个素数乘积n的因式分解。这是一种最直接和最困难的的方法。一旦对n进行分解成功,就很容易得到密钥e。大整数因子分解一直是数论和密码学理论研究中的主要课题。根据目前的研究表明,目前最快的因式分解算法的复杂度为[ο2

(log2n)log2log2n]。此外,在文献[4]中,作者提出了用于分解强素数乘积构成的rsa模数n的算法,能够进一步提高了运算效率。

2.2时间攻击

依赖解密算法的运行时间。p.kocher提出,利用测定rsa解密所进行的模指数的运算时间来估计解密指数d,然后再确定d的值;可以通过将解密运算量与参数d无关来挫败时间攻击;不断强力穷举密钥。

2.3密文攻击

攻击者非法获取密文通,过对密文反复用公开密钥加密,可以使明文出现。例:如果取rsa参数(n,e)为(35,17),明文m为33,加密明文:[c=3317mod35=3];再次加密:[317mod35=33],从而得到明文。

2.4 rsa的部分明文攻击

另外,攻击者不仅对可以密文进行攻击,也可以通过获取明文消息的部分信息进行破译或恢复整个明文。这也是rsa存在的另一个安全性的重要问题。

2.5对rsa小指数的攻击

此攻击方法主要针对rsa算法实现中的细节。如果为了加快加密和验证,选较小的e,并且用这些e向多个用户加密同一个消息(n 不同),利用中国剩余定理可以联立方程求解明文。

2.6公用模攻击

如果需要多个密钥对,有一种做法:不再重新寻找p、q,而只是重新选d、e,即若干对密钥使用同一个模n。这时可以不用重新分组,也方便管理。但可能遭到公用模攻击。这样,如果同一信息用

两个不同的指数e加密,并且两个指数e是互素的,则不需要任何解密密钥便能恢复出明文。设m是明文,两个互素的加密密钥分别是[e1、e2],共同的模数为n,两个密文分别[c1=me1modn]、

[c2=me2modn]。由于[e1、e2]互素,根据扩展euclid算法可以找到a和b,使其满足[ae1+be2=1]。假设a是负数(在a、b中,肯定有一个是负数),再次使用euclid算法可以计算出c1-1故可得到[((c-11)-rc2s)≡mmodn]。

3 参数的选择

rsa体制是将安全性基于因子分解的第一个系统。虽然无法证明因子分解等于破解rsa系统,但若能分解因子n,便能破解rsa系统,所以rsa对公开的n的选择是很关键的。对于公开密钥e和解密密钥d也需要加以限制,否则会使rsa不安全。选择参数会影响rsa整个系统的安全,常用的参数选择应注意要求如下:

3.1 p,q的选择

要想提高rsa的效率和安全性,可以从p、q两个参数以下两个方面着手:素数的检测算法和对p、q的破解。

素数的检测算法。在rsa算法中,首先要产生两个大素数。但是要判断一个大整数是否为素数却一直是个难点。素数检测算法有确定性素数检测法和概率性素数检测法两类。目前,在rsa密码的应用中都使用概率性检测法来判断一个大数是否是素数。但是通过概率性监测算法的检测,还是存在伪素数的情况。

对p、q的破解。从rsa算法原理中,我们知道欧拉函数[φn]和

模数n:[φn=p-1q-1]和[n=pq]。那么根据这两个式子可以构造关于p、q的一元二次方程,即[χ2-n-φ(n)+1χ+n=0]。其中p、q 满足:

[[n=pq]p+q=n-φn+1]

解之得 p,q= [1/2n+1-φ(n)±(n+1-φ(n))2-4n]

由文献[4]提出的一种强素数的量子算法,可求得[φn],这样就可以得到p、q的值,即分解了模数n,rsa就被破解了。

总之,为了抗穷举,p、q都要大;p、q的差要大,如果p、q的差不大,可以用n开方估算p、q;p-1、q-1要有大的素因子,p、q要为强素数;p-1、q-1的公因数要小。

3.2 模数n取几个素数乘积

从rsa算法原理,我们知道模数n是由两个素数相乘得到的。那么模数n可以由多个素数相乘得到吗?答案是肯定的。euler函数[φ(n)]表示小于n并且与n互素的正整数个数。如果模数n可因式分解为[n=piai](其中,[ai>0],[ai]互不相同),则[φ(n)=piai×(1-1/pi)]即:[φ(n) =n(1-1/p1)(1-1/p2)...(1-1/pn)]。文献[1]已经证明了该推断的正确性。

无论取多个素数还是两个素数相乘,一旦计算出模数n的值,就会都被丢掉。所以这多个素数和两个素数的保密性是一样的,rsa 的加密和解密过程是相同的。那么在确定n时应尽可能的选择多个素数相乘。但是如果通过量子算法[4]来对多个素数乘积的模数n

进行分解的话,那么就不能构成一元二次方程,分解模数n的难度

相关文档
最新文档