RSA 加密算法

引用:http://baike.baidu.com/view/7520.htm

RSA公钥加密算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的。RSA取名来自开发他们三者的名字。RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。

 

目录

什么是RSA
一、RSA深入解释
二、RSA 的安全性
三、RSA的速度
四、RSA的选择密文攻击
五、RSA的公共模数攻击
六、RSA 加密算法的缺点
展开
什么是RSA
一、RSA深入解释
二、RSA 的安全性
三、RSA的速度
四、RSA的选择密文攻击
五、RSA的公共模数攻击
六、RSA 加密算法的缺点
展开
 
  

 

 

编辑本段什么是RSA

  RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
 
  在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然秘密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA 密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。
 
  RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA是被研究得最广泛的公钥算法,从提出到现在的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
 

编辑本段一、RSA深入解释

  RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。
 
  RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600bits以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048bits长的密钥,其他实体使用1024比特的密钥。C)RSA密钥长度随着保密级别提高,增加很快。下表列出了对同一安全级别所对应的密钥长度。
 
  
保密级别 对称密钥长度(bit) RSA密钥长度(bit) ECC密钥长度(bit) 保密年限
80 80 1024 160 2010
112 112 2048 224 2030
128 128 3072 256 2040
192 192 7680 384 2080
256 256 15360 512 2120
 这种算法1978年就出现了,它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和Leonard Adleman。早在1973年,英国国家通信总局的数学家Clifford Cocks就发现了类似的算法。但是他的发现被列为绝密,直到1998年才公诸于世。
 
  RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
 
  RSA的算法涉及三个参数,n、e1、e2。
 
  其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。   e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。   (n,e1),(n,e2)就是密钥对。其中 (n,e1)为公钥,(n,e2)为私钥。[1]
 
 
  RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;
 
  e1和e2可以互换使用,即:
 
  A=B^e2 mod n;B=A^e1 mod n;
 

编辑本段二、RSA 的安全性

  RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,因为没有证明破解 RSA就一定需要作大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法。目前, RSA 的一些变种算法已被证明等价于大数分解。不管怎样,分解n是最显然的攻击方法。现在,人们已能分解多个十进制位的大素数。因此,模数n 必须选大一些,因具体适用情况而定。
 

编辑本段三、RSA的速度

  由于进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。RSA的速度比对应同样安全级别的对称密码算法要慢1000倍左右。
 

编辑本段四、RSA的选择密文攻击

  RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装( Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:
 
  ( XM )^d = X^d *M^d mod n
 
  前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction 对文档作HASH处理,或同时使用不同的签名算法。
 

编辑本段五、RSA的公共模数攻击

  若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那么该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:
 
  C1 = P^e1mod n
 
  C2 = P^e2 mod n
 
  密码分析者知道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 = P mod n
 
  另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对e和d,一是有利于攻击者分解模数,一是有利于攻击者计算出其它成对的e’和d’,而无需分解模数。解决办法只有一个,那就是不要共享模数n。
 
  RSA的小指数攻击。 有一种提高 RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有
 
  所提高。但这样作是不安全的,对付办法就是e和d都取较大的值。
 

编辑本段六、RSA 加密算法的缺点

  1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
 
  2)安全性, RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NPC问题。目前,人们已能分解140多个十进制位的大素数,这就要求使用更长的密钥,速度更慢;另外,目前人们正在积极寻找攻击RSA的方法,如选择密文攻击,一般攻击者是将某一信息作一下伪装(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:
 
  ( XM )d = Xd *Md mod n
 
  前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way Hash Function对文档作HASH处理,或同时使用不同的签名算法。除了利用公共模数,人们还尝试一些利用解密指数或φ(n)等等攻击.
 
  3)速度太慢,由于RSA 的分组长度太大,为保证安全性,n 至少也要 600 bitx以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长的密钥,其他实体使用1024比特的密钥。为了速度问题,目前人们广泛使用单,公钥密码结合使用的方法,优缺点互补:单钥密码加密速度快,人们用它来加密较长的文件,然后用RSA来给文件密钥加密,极好的解决了单钥密码的密钥分发问题。
 

编辑本段七、已公开的攻击方法

  针对RSA最流行的攻击一般是基于大数因数分解。1999年,RSA-155(512 bits)被成功分解,花了五个月时间(约8000 MIPS 年)和224 CPU hours 在一台有3.2G中央内存的Cray C916计算机上完成 。
 
  2002年,RSA-158也被成功因数分解。
 
  2009年12月12日,编号为 RSA-768 (768 bits, 232 digits)数也被成功分解。
 
  北京时间2月15日上午消息,据《纽约时报》周二报道,欧美数学家和密码学家偶然发现,目前被全世界广泛应用的公钥加密算法RSA存在漏洞。
 
  他们发现,在700万个实验样本中有2.7万个公钥并不是按理论随机产生的。也就是说,或许有人可以找出产生公钥的秘密质数。
 
  该研究项目是由美国独立密码学家James P.Hughes和荷兰数学家Arjen K. Lenstra牵头的。他们的报告称:“我们发现绝大多数公钥都是按理论产生的,但是每一千个公钥中会有两个存在安全隐患。”
 
  报告称,为防止有人利用该漏洞,有问题的公钥已从公众访问的数据库中移除。为确保系统的安全性,网站需要在终端做出改变。
 

编辑本段八、RSA的数论知识

RSA用到的公式和定理:

  一、数和互为素数
 
  任何大于1的整数a能被因式分解为如下唯一形式:
 
  a=p1p2…pl(p1,p2,…,pl为素数)
 
  二、模运算
 
  ①{[a(modn)]×[b(mod n)]}modn≡(a×b)(mod n)
 
  ②如果(a×b)=(a×c)(mod n),a与n互素,则
 
  b=c(mod n)
 
  三、费马定理
 
  若p是素数,a与p互素,则
 
  a^(p-1)=1 mod p
 
  四、欧拉定理
 
  欧拉函数φ(n)表示不大于n且与n互素的正整数的个数。
 
  当n是素数, φ(n)=n-1。n=pq,p,q均为素数时,则φ(n)= φ(p)φ(q)=(p-1)(q-1)。
 
  对于互素的a和n,有a^φ(n)=1(mod n)
 
 
 
参考资料
扩展阅读:
开放分类:
网络IT计算机算法加密
posted @ 2012-07-26 15:14  镇水古月  阅读(870)  评论(0编辑  收藏  举报