`
kidiaoer
  • 浏览: 822634 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

RSA加密算法

阅读更多
RSA加密算法简介
1978年就出现了这种算法,它是第一个既能用于数据加密
也能用于数字签名的算法。它易于理解和操作,也很流行。算
法的名字以发明者的名字命名:Ron Rivest, AdiShamir 和
Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。

   RSA的安全性依赖于大数分解。公钥和私钥都是两个大素数
( 大于 100个十进制位)的函数。据猜测,从一个密钥和密文
推断出明文的难度等同于分解两个大素数的积。  

 密钥对的产生:选择两个大素数,p 和q 。计算:  
n = p * q
然后随机选择加密密钥e,要求 e 和 ( p - 1 ) * ( q - 1 )
互质。最后,利用Euclid 算法计算解密密钥d, 满足  

      e * d = 1 ( mod ( p - 1 ) * ( q - 1 ) )

其中n和d也要互质。数e和
n是公钥,d是私钥。两个素数p和q不再需要,应该丢弃,不要让任
何人知道。 加密信息 m(二进制表示)时,首先把m分成等长数据
块 m1 ,m2,..., mi ,块长s,其中 2^s <= n, s 尽可能的大。对
应的密文是:

ci = mi^e ( mod n ) ( a )

解密时作如下计算:

mi = ci^d ( mod n ) ( b )

RSA 可用于数字签名,方案是用 ( a ) 式签名, ( b )
式验证。具体操作时考虑到安全性和 m信息量较大等因素,一般是先
作 HASH 运算。

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

RSA的速度:
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上100倍,无论
是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据
加密。  

RSA的选择密文攻击:
RSA在选择密文攻击面前很脆弱。一般攻击者是将某一信息作一下伪装
(Blind),让拥有私钥的实体签署。然后,经过计算就可得到它所想要的信
息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保
留了输入的乘法结构:

( XM )^d = X^d *M^d mod n

前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征
--每个人都能使用公钥。但从算法上无法解决这一问题,主要措施有
两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体
任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不
对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction
对文档作HASH处理,或同时使用不同的签名算法。在中提到了几种不
同类型的攻击方法。   

RSA的公共模数攻击。
若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险
的。最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互
质,那末该信息无需私钥就可得到恢复。设P为信息明文,两个加密密钥
为e1和e2,公共模数是n,则:

C1 = P^e1 mod 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算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各
种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难
度与大数分解难度等价。即RSA的重大缺陷是无法从理论上把握它的保密性
能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。

RSA的缺点主要有:
A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次
一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits
以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;
且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
目前,SET(Secure Electronic Transaction)协议中要求CA采用2048比特长
的密钥,其他实体使用1024比特的密钥。 

分享到:
评论

相关推荐

    RSA加密算法实验报告.pdf

    "RSA加密算法实验报告.pdf" 本实验报告主要介绍了RSA加密算法的实现和原理,包括密钥对的产生、加密和解密过程、数字签名等。下面是该实验报告的详细知识点总结: 一、RSA加密算法的原理 RSA加密算法是基于大数...

    RSA加密算法的C语言实现

    RSA加密算法是公钥密码学领域的一个里程碑,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是一种非对称加密算法,即加密和解密使用不同的密钥,极大地提高了安全性。在C语言中实现RSA...

    rsa.zip_QT RSA加密算法_Qt rsa加密_qt rsa加密步骤_rsa_rsa算法 qt

    RSA加密算法是公钥密码学中的一个重要组成部分,它在信息安全领域有着广泛的应用,例如数字签名、数据加密等。Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的库支持来创建桌面和移动应用。在本...

    C#中关于RSA加密算法(案例代码) c#经典案例.pdf

    C#中RSA加密算法详解 在C#程序中,RSA加密算法是一种广泛使用的公钥加密算法。 RSA加密算法于1977年由Ron Rivest、Adi Shamir和Len Adleman在美国麻省理工学院开发的。RSA取名来自开发他们三者的名字。RSA是目前最...

    RSA加密算法c++实现

    RSA加密算法的实现,使用c++语言编程,使用dev c++平台编码,文件为cpp格式。经过反复测试代码正确,可搭配RSA讲解教程一起使用,讲解教程点击我的个人主页即可查看,希望能够对你有帮助,谢谢。

    RSA加密算法.ppt

    RSA加密算法.ppt

    C++实现RSA加密算法

    RSA加密算法是一种非对称加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是现代密码学的基础之一,广泛应用于网络安全,如数据传输加密、数字签名等场景。在这个案例中,我们将...

    C#实现RSA加密算法

    标题提到的"C#实现RSA加密算法"着重讲述了如何在C#中利用大整数类BigInteger和RSACryptoServiceProvider类来完成私钥加密公钥解密的过程。以下是对这个话题的详细解释: 1. **RSA算法基础**: RSA算法由Rivest、...

    rsa加密算法的实现

    RSA加密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其三位发明者的名字首字母命名。它在信息安全领域有着广泛的应用,如数字签名、数据加密以及网络安全传输等。在C语言...

    RSA加密算法流程图源代码

    RSA加密算法是公钥密码学领域的一个里程碑,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是一种非对称加密算法,即加密和解密使用不同的密钥,极大地提高了安全性。在网络安全、数据...

    RSA加密算法源码

    RSA加密算法是公钥密码学领域的一个里程碑,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年共同提出,因此得名RSA。它是一种非对称加密算法,即加密和解密使用的是两把不同的密钥,一把是公开的公钥,另一把是...

    Delphi RSA加密算法实例.rar

    RSA加密算法是公钥密码学中的一个重要组成部分,它在信息安全领域有着广泛的应用,例如数字签名、数据加密等。本实例是基于Delphi编程环境实现的一个无第三方控件依赖的RSA加密程序,它提供了生成随机数、创建密钥对...

    rsa加密算法(Delphi实现).zip

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏...

    RSA.rar_RSA加密文件_RSA加密解密和_rsa加密算法_对称 加密文件_对称加密

    RSA算法是一种广泛应用于网络安全的公钥加密技术,...总之,RSA加密算法是现代密码学的基础,理解和掌握它的原理和应用对于IT专业人员来说至关重要。通过实践,可以更好地了解其在实际场景中的运用,提升信息安全能力。

    RSA加密算法解析加实例分析

    RSA加密算法的特点在于它使用一对密钥:公钥和私钥。公钥负责加密数据,可以对外公开,而私钥用于解密数据,需要保密。这一对密钥中,公钥包含两个参数:N和E,而私钥包含参数N和D。N是一个大整数,它是两个质数p和q...

    基于python+django的基于RSA加密算法软件的研究设计的实现.zip

    基于python+django的基于RSA加密算法软件的研究设计的实现.zip基于python+django的基于RSA加密算法软件的研究设计的实现.zip 运行步骤 需要先安装Python的相关依赖:pymysql,Django ,requests ,pycryptodomex,...

    用实例讲解RSA加密算法(精)

    RSA 加密算法详解 RSA 加密算法是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA 以它的三个发明者 Ron Rivest, Adi Shamir, Leonard Adleman 的名字首字母命名,这个算法经受住了多年深入...

    java rsa加密算法实现

    在Java中实现RSA加密算法,主要涉及以下几个核心概念和步骤: 1. **RSA原理**:RSA算法基于数论中的大数因子分解难题,由两个大素数P和Q相乘得到N,然后计算N的欧拉函数φ(N) = (P-1) * (Q-1),选取一个与φ(N)互质...

    RSA 加密算法的C++原代码实现

    ### RSA加密算法的C++实现解析 #### 一、引言 RSA算法是现代密码学中的一个重要组成部分,它是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman三位学者在1977年提出。由于其强大的安全性,RSA被...

Global site tag (gtag.js) - Google Analytics