RSA公钥加密算法及其安全性讨论
RSA加密算法的安全性分析

RSA加密算法的安全性分析RSA加密算法是一种公钥加密算法,广泛应用于加密通信中。
它的安全性是众所周知的,但是随着计算机技术的发展,RSA加密算法也面临着越来越大的挑战。
本文将对RSA加密算法的安全性进行分析,并探讨其存在的漏洞。
一、RSA加密算法的原理RSA加密算法是一种非对称加密算法,它的安全性基于大质数分解问题的难度。
其原理非常简单,通过选择两个大的质数p和q,计算它们的乘积n=p*q,然后选择一个整数e,使得1<e<φ(n)且e与φ(n)互质,其中φ(n)=(p-1)*(q-1)。
然后计算出一个整数d,使得d*e≡1 mod φ(n)。
e和n组成公钥,d和n组成私钥。
对于给定的明文M,RSA加密算法的加密过程为:C=M^e mod n,其中^表示乘方运算。
对于给定的密文C,RSA加密算法的解密过程为:M=C^d mod n。
二、RSA加密算法的安全性基于大质数分解问题的难度,也就是说,要破解RSA加密算法,需要将公钥n分解成p和q的乘积。
但是,随着计算机技术的发展,大质数分解问题已经不再是一个不可逾越的难关了。
目前,在硬件和算法结合的优化下,可以破解大约100位的RSA密钥。
因此,为了确保RSA加密算法的安全性,密钥的长度必须足够长,至少要达到2048位。
另外,RSA加密算法还存在着一些已知的漏洞,例如:1. 选择恶意公钥攻击。
在这种攻击中,攻击者会伪造一个看似合法的公钥,并将其作为目标用户的公钥。
然后,攻击者就可以在不知情的情况下监视目标用户的通信,从而窃取敏感信息。
2. 计时攻击。
在这种攻击中,攻击者会通过测量加密和解密操作的时间来猜测密钥的值。
这种攻击可以在一段时间内重复进行,从而加速密钥的猜测。
3. 分组攻击。
在这种攻击中,攻击者会通过多次加密和解密相同的明文或密文来推断密钥的值。
通过比较不同的密文或明文块的加密结果,攻击者可以得出有关密钥的信息。
三、RSA加密算法的安全性提升为了提高RSA加密算法的安全性,可以采取以下措施:1. 增加密钥的长度。
RSA公钥密码算法

RSA公钥密码算法RSA公钥密码算法RSA(Rivest-Shamir-Adleman)是一种公钥密码算法,也是目前公认的最安全的加密算法之一。
它是由三位数学家Rivest、Shamir和Adleman在1977年提出的,由他们的姓氏命名。
RSA算法是第一个既能用于数据加密、又能用于数字签名的算法。
在RSA加密算法中,生成一对密钥,一个是公开的(称为公钥),一个是保密的(称为私钥)。
公钥和私钥是一对,用公钥加密的数据只能用私钥解密。
用私钥加密的数据只能用公钥解密。
而且公钥是可以公开的,它通常用于加密的数据,私钥通常用于解密的数据,用于签名的也是私钥。
RSA的安全基于大整数分解的难度。
RSA加密算法是非对称加密算法。
“非对称”指的是加密和解密使用的密钥是不同的,即一个用来加密,一个用来解密。
RSA加密算法的实现过程主要包括密钥生成、加密和解密三个部分。
密钥生成。
密钥生成包括选择两个不同的大质数p和q,计算n=p*q,然后计算欧拉函数φ(n)=(p-1)(q-1),然后获得整数e,使得1<e<φ(n)且e与φ(n)互素,e和φ(n)构成一对公钥,然后计算整数d,使得d*e ≡1(mod φ(n)),d和φ(n)构成一对私钥。
其中n是密钥长度,e是公钥指数,d是私钥指数。
加密和解密。
加密过程是明文M经过公钥e加密成密文C:C ≡ M^e(mod n)。
解密过程是密文C经过私钥d解密成明文M:M ≡ C^d(mod n)。
公钥(n, e)用于加密,私钥(n, d)用于解密。
RSA算法的安全性依赖于大数分解的困难性。
即使是今天最快的计算机,在有限的时间内也无法很好地分解一个非常大的、合数的公共模数。
这使得RSA算法成为一种安全可靠的加密方法。
同时RSA算法也被广泛应用于数字签名和密钥交换等领域。
除了加密和解密外,RSA算法还可以用于数字签名,这是因为私钥可以用于对数据进行签名,公钥可以用于验证签名。
RSA公钥密码算法

RSA公钥密码算法RSA公钥密码算法是一种常见的加密算法,常用于网络通信、数据传输等领域,它采用公钥与私钥相结合的方式进行加密解密,具有高度的安全性和可靠性。
下面我们将详细介绍RSA公钥密码算法的原理和实现。
RSA公钥密码算法中,每个用户都有一对不同的密钥,公钥和私钥。
公钥是公开的,可以向所有人公开,而私钥只有用户本人知道,保密性极高。
加密时使用公钥进行加密,解密时使用私钥进行解密。
RSA公钥密码算法的原理主要涉及到以下几个方面:1. 随机选择两个素数p和qRSA公钥密码算法的核心是基于数学难题,即大数分解问题。
在算法中,首先需要随机选择两个大质数p和q,它们是算法的核心秘密。
p和q不能太小,否则易被破解,也不能太大,否则计算量太大。
通常,取素数的位数越多,安全性越高。
当p和q选好后,计算N=pq。
2. 计算N和欧拉函数在算法中,N和欧拉函数φ(N)是两个重要的参数。
N=pq是两个质数的积,φ(N)表示小于N的正整数中与N互质的数目。
当p和q是不同的质数时,φ(N)=(p-1)(q-1)。
在实际应用中,我们通常选择的是越大的质数越好。
3. 选择加密密钥e在算法中,需要选定一个加密密钥e,它必须满足1<e<φ(N),且e与φ(N)互质。
加密密钥e可以公开,任何人都可以知道。
4. 计算解密密钥d在算法中,需要计算一个解密密钥d,它必须满足ed mod φ(N)=1。
解密密钥d只有用户本人知道,保密性极高。
根据扩展欧几里得算法,可以求得模φ(N)下e的逆元d。
5. 加密和解密过程在加密时,明文M先被转化为一个整数m,然后计算出密文C=me mod N,其中e是加密密钥,N是公钥中的参数。
在解密时,密文C首先被解密为明文m=Cd mod N,其中d是解密密钥,N是公钥中的参数。
6. 安全性分析RSA公钥密码算法基于大质数分解问题,因此,只有在分解N为p和q这两个质数的乘积时,才有可能破解该算法。
简述rsa加密算法原理

简述rsa加密算法原理RSA加密算法原理RSA加密算法是一种非对称加密算法,由三位数学家Rivest、Shamir 和Adleman于1977年提出。
它的安全性基于大数分解的困难性,可以用于数字签名、密钥交换等领域。
下面将从以下几个方面详细介绍RSA加密算法原理。
1. 公钥密码学公钥密码学是一种密码学技术,它采用两个不同但相关的密钥:一个公钥和一个私钥。
公钥可以自由地分发给任何人,而私钥则只能由其拥有者保管。
使用公钥加密的数据只能使用相应的私钥进行解密,反之亦然。
公钥密码学具有高度的安全性和灵活性,可以广泛应用于数据传输、数字签名等方面。
2. RSA算法生成密钥对RSA算法生成密钥对的过程如下:(1)选择两个大质数p和q,并计算它们的乘积n=pq。
(2)计算欧拉函数φ(n)=(p-1)(q-1)。
(3)选择一个整数e(1<e<φ(n)),使得e与φ(n)互质。
(4)计算d=d^-1(mod φ(n)),其中d满足de≡1(mod φ(n))。
(5)公钥为(n,e),私钥为(n,d)。
其中,p和q是足够大的质数,n是它们的乘积,φ(n)是n的欧拉函数,e是一个与φ(n)互质的整数,d是e在模φ(n)意义下的逆元。
3. RSA算法加密过程RSA算法加密过程如下:(1)将明文转换成整数m(0<=m<n)。
(2)计算密文c≡m^e(mod n),其中e为公钥中的指数。
(3)将密文c发送给接收者。
其中,m是明文,n和e是接收者的公钥,c是密文。
4. RSA算法解密过程RSA算法解密过程如下:(1)接收到密文c。
(2)计算明文m≡c^d(mod n),其中d为私钥中的指数。
其中,c是密文,n和d是接收者的私钥,m是明文。
5. RSA算法安全性分析RSA算法安全性基于大数分解的困难性。
即如果能够快速地分解出p 和q,则可以轻松地计算出d,并从而破解RSA加密。
但目前尚未发现快速分解大整数的有效方法。
简述rsa加密算法

简述rsa加密算法一、引言RSA加密算法是公钥加密算法的代表,由Ron Rivest、Adi Shamir 和Leonard Adleman三位数学家于1977年发明。
RSA算法的安全性基于大数分解这一NP难题,被广泛应用于信息安全领域。
二、RSA加密算法原理1. 公钥和私钥的生成:RSA算法使用两个大素数p和q作为私钥,并根据p和q计算出n=p*q作为公钥。
同时,根据欧拉函数φ(n)=(p-1)*(q-1),选择一个整数e与φ(n)互质作为公钥,再计算d=e^-1 mod φ(n)作为私钥。
2. 加密过程:发送方使用接收方的公钥对明文进行加密,加密后的密文只能由接收方使用其私钥进行解密。
具体地,将明文m转换成整数M,并计算C=M^e mod n得到密文。
3. 解密过程:接收方使用自己的私钥对密文进行解密,还原出原始明文。
具体地,将密文C计算出明文M=C^d mod n。
三、RSA加密算法实现1. 公钥和私钥的生成:选择两个大素数p和q,并计算n=p*q、φ(n)=(p-1)*(q-1)。
选择一个整数e与φ(n)互质,计算d=e^-1 mod φ(n)。
公钥为(n,e),私钥为(n,d)。
2. 加密过程:将明文m转换成整数M,并计算C=M^e mod n得到密文。
3. 解密过程:将密文C计算出明文M=C^d mod n。
四、RSA加密算法的安全性RSA算法的安全性基于大数分解这一NP难题,即对于一个大整数n=p*q,要找到p和q是困难的。
目前最好的分解方法是基于数域筛法和多项式求解器的广义数域筛法,但其时间复杂度依然非常高。
RSA算法在实际应用中具有较高的安全性。
五、RSA加密算法的应用RSA算法被广泛应用于信息安全领域,如数字签名、数据加密、证书认证等。
其中,数字签名可以保证信息的完整性和真实性;数据加密可以保护敏感信息不被窃取;证书认证可以确定通信双方身份并建立可信任的通信渠道。
六、总结RSA加密算法是一种公钥加密算法,在信息安全领域得到了广泛应用。
RSA公钥加密算法及其安全性讨论

RSA公钥加密算法及其安全性讨论RSA algorithm for public-key encryption and its security摘要:RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
但是,RSA的安全性依赖于大数的因子分解,却并没有从理论上证明破译RSA的难度与大数分解难度等价,即RSA的重大缺陷是无法从理论上把握它的保密性能到底如何。
随着计算能力的不断进步和各种攻击方法的出现,RSA算法是否真的安全。
关键词:RSA,公钥,加密,大数分解,攻击,安全性1 RSA加密算法1.1公钥简介密码体制按密钥类型分为对称密钥和不对称密钥。
对称密钥即加密、解密用的是同一个密钥,又称为私钥。
不对称密钥即公钥加密,加密、解密用的是不同的密钥,一个密钥“公开”,即公钥,另一个自己秘密持有,即私钥,加密方用公钥加密,只有用私钥才能解密——史称公钥加密体系:PKI。
1.2 RSA算法简介RSA加密算法是一种非对称加密算法。
RSA加密算法是Ron Rivest、Adi Shamirh和Len Adleman于1977年在美国麻省理工学院开发出来的,次年首次对外公开宣布,是第一个既能用于数据加密也能用于数字签名的算法。
RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA是建立在“大整数的素因子分解是困难问题”基础上的,其安全性取决于大数分解,也就是大数分解质因数的困难性。
换言之,对一极大整数做因式分解愈困难,RSA演算法愈可靠。
假如有人找到一种快速因式分解的演算法的话,那么用RSA加密的信息的可靠性肯定会急剧下降,但找到这样的演算法的可能性是非常小的,今天只有短的RSA钥匙才可能被强力方式解破。
到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
rsa公钥非素数
rsa公钥非素数RSA公钥加密算法是一种常见的公钥加密算法,在信息安全领域得到了广泛应用。
RSA算法的安全性基于大数分解难题,即将两个大素数相乘得到的数分解成这两个素数的乘积的难度,因此RSA算法一般都要求公钥和私钥的模数都是素数。
然而,在某些特殊情况下,RSA公钥非素数也可以被安全地使用。
这种情况包括公钥模数为合数、甚至是非唯一分解合数的情况。
本文将讨论这些情况下RSA算法的应用及安全性。
RSA算法原理RSA算法的安全性基于大数分解难题。
具体来说,算法的原理是:选择两个大素数p和q,计算它们的乘积n=pq,再选择一个整数e使得e与(p-1)(q-1)互质,计算d使得ed≡1(mod(p-1)(q-1)),此时公钥为(n,e),私钥为(n,d)。
要加密一条消息m,使用公式c≡m^e(modn)进行加密,解密则使用公式m≡c^d(modn)进行解密。
RSA公钥非素数的情况对于RSA算法,一般要求公钥和私钥的模数都是素数,这是因为如果模数是合数,则可以通过分解模数来破解算法。
但是,在特定情况下,公钥非素数也可以被安全地使用。
情况一:公钥模数为合数当公钥模数n=pq不是素数时,可以仍然使用RSA算法进行加密和解密。
此时,选择质因子p和q应尽量大,以增加分解难度,同时需要对e进行适当选择以确保其与(p-1)(q-1)互质。
对于攻击者而言,分解模数n的难度与p和q的大小有关。
因此,如果选择的p和q足够大,则可以保证算法的安全性。
情况二:公钥模数为非唯一分解合数当公钥模数n=pq不是唯一分解合数时,同样可以使用RSA算法进行加密和解密。
这种情况下,多个(p,q)组合可以生成同一个n,攻击者很难通过分解n来破解算法。
例如,可以选择p=11,q=17和p=23,q=7,它们的乘积都是187,但是(p-1)(q-1)是不同的。
安全性分析对于公钥非素数的情况,安全性依赖于攻击者分解模数n的难度。
针对公钥模数为合数的情况,攻击者需要分解模数n=pq,其中p和q都是大质数。
RSA公钥密码算法
RSA公钥密码算法RSA算法是一种非对称加密算法,是目前最广泛应用的公钥密码体制之一。
RSA算法是由 Rivest、Shamir 和 Adleman 三人在1977年提出的,它是基于对大数进行因数分解的困难性的数论问题而设计的。
RSA算法可以用于加密、签名和密钥交换等多种应用。
RSA算法的原理是很简单的,它采用一对密钥,分别为公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
RSA算法的安全性基于一个数论问题,即将两个大质数相乘很容易,但将一个大数分解为两个质数却极为困难。
在RSA算法中,公钥是由两个质数的乘积N和一个公共指数e组成。
私钥是由质数的乘积N和一个私有指数d组成。
公钥可以公开,而私钥需要保密。
RSA算法的加密过程如下:假设要加密的数据为M,加密后的数据为C,公钥为(N,e)。
将M转化为一个数m,并满足0<=m<N。
然后,通过计算C = m^e mod N来进行加密,即对m 的e次方进行模N运算。
最终得到的C就是加密后的数据。
RSA算法的应用非常广泛。
最常见的应用是在网络通信中的安全传输,比如在网上购物、网银转账等过程中,常常会使用RSA算法来加密用户的敏感信息,以保护用户的隐私和安全。
RSA算法还可以用于数字签名,用来验证数据的完整性和真实性。
在密钥交换中,RSA算法也是一种常用的方式,可以安全地传输对称加密算法的密钥。
RSA算法也存在一些缺点。
RSA算法的加解密速度较慢,尤其是当加密的数据较大时,效率更低。
RSA算法的安全性依赖于大质数的选取和密钥的保密性,如果质数选取不当或者私钥泄露,都会导致整个系统的安全性受到威胁。
RSA算法是一种非对称加密算法,通过对大数进行因数分解的困难性来实现安全加密和解密。
它具有广泛的应用领域,比如网络通信、数字签名和密钥交换等。
RSA算法的安全性和效率问题需要仔细考虑和解决。
RSA公钥密码算法
RSA公钥密码算法RSA公钥密码算法是一种非对称密码算法,由三位数学家Rivest、Shamir和Adleman于1977年提出,它利用了两个大素数的乘积的因子难以分解的特性来确保数据的安全性。
RSA算法一直被广泛应用于加密通信、数字签名和身份认证等领域,在信息安全领域具有非常重要的地位。
RSA算法的安全性基于大数分解猜想,该猜想认为任何一个大数都可以分解成几个素数的乘积。
目前为止,尚未有有效的算法可以在合理的时间内对大数进行分解,因此RSA算法在理论上是安全的。
这种安全性使得RSA算法成为了目前最为安全和可靠的非对称密码算法之一。
RSA算法的原理比较简单,它使用了两个密钥来进行加密和解密操作,分别是公钥和私钥。
公钥用于加密数据,私钥用于解密数据,这种设计使得数据的发送方和接收方都可以安全地进行通信而不必担心数据的泄露。
简单来说,RSA算法的流程如下:1. 选择两个大素数p和q,并计算它们的乘积n,n=pq。
2. 计算n的欧拉函数φ(n)=(p-1)(q-1)。
3. 选择一个整数e,使得1<e<φ(n),并且e与φ(n)互质。
4. 计算e的模φ(n)的乘法逆元d,即de≡1(mod φ(n))。
5. 公钥是(n, e),私钥是(n, d)。
6. 加密数据m时,使用公钥(n, e)进行加密运算后得到密文c,c≡m^e(mod n)。
7. 解密密文c时,使用私钥(n, d)进行解密运算后得到明文m,m≡c^d(mod n)。
通过上述流程,我们可以看到RSA算法的加密和解密操作分别使用了公钥和私钥,这样就保证了数据的安全性。
RSA算法还可以用于数字签名,可以通过私钥对数据进行签名,然后可以由持有公钥的人验证签名的有效性,这样就可以确保数据的完整性和真实性。
除了加密通信和数字签名外,RSA算法还可以用于身份认证,因为私钥是唯一的,可以用于证明数据的来源身份。
RSA算法还可以用于密钥交换,可以通过RSA算法协商一个对称密钥,然后使用对称密钥进行加密通信,这样可以提高数据传输的效率和安全性。
关于RSA公钥密码体制安全性问题的探讨
( u h u Ra l y Vo a i n lTe h ia l g , u h u 5 5 0 , i a Li z o iwa c to a c n c lCol e Li z o 4 0 7 Ch n ) e
Ab t a t RS e c y t n s s e wi e y u e h i l fi f r to n r p i n a d d g t lsg a u e , sr c : A n r p i y t m d l s d i t e f d o o ma i n e c y to n i i i n t r s o n e n a Th p l a i n p i c p e i t r d c a ro e s n sr s r e y t eu e ,t e o h rc n b b a n d b e a p i t rn i l s o p o u e a p i f y ,o e i e e v d b h s r h t e a eo t i e y c o k a y u e ,a d i i h r o g h o g e o g t a o h r k y t u h a e y o h u l e y t m s n s r n t s a d t o t r u h a k y t e n t e e , h s t e s f t ft e p b i k y s s e i c
任何 人 通过 一 定 的方 式都 可 获 取他 人 的公钥 ; 一 个 另 用来 解密信 息 , 称之 为私钥 , 钥 只有本 人才拥 有 。 私
和 q即被 销毁 , 也就 无法 根 据 P和 q计算 出 ( ) 。因 此 , 法通过 d或 e 无 计算 出另一 个值 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RSA公钥加密算法及其安全性讨论RSA algorithm for public-key encryption and its security摘要:RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
但是,RSA的安全性依赖于大数的因子分解,却并没有从理论上证明破译RSA的难度与大数分解难度等价,即RSA的重大缺陷是无法从理论上把握它的保密性能到底如何。
随着计算能力的不断进步和各种攻击方法的出现,RSA算法是否真的安全。
关键词:RSA,公钥,加密,大数分解,攻击,安全性1 RSA加密算法1.1公钥简介密码体制按密钥类型分为对称密钥和不对称密钥。
对称密钥即加密、解密用的是同一个密钥,又称为私钥。
不对称密钥即公钥加密,加密、解密用的是不同的密钥,一个密钥“公开”,即公钥,另一个自己秘密持有,即私钥,加密方用公钥加密,只有用私钥才能解密——史称公钥加密体系:PKI。
1.2 RSA算法简介RSA加密算法是一种非对称加密算法。
RSA加密算法是Ron Rivest、Adi Shamirh和Len Adleman于1977年在美国麻省理工学院开发出来的,次年首次对外公开宣布,是第一个既能用于数据加密也能用于数字签名的算法。
RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA是建立在“大整数的素因子分解是困难问题”基础上的,其安全性取决于大数分解,也就是大数分解质因数的困难性。
换言之,对一极大整数做因式分解愈困难,RSA演算法愈可靠。
假如有人找到一种快速因式分解的演算法的话,那么用RSA加密的信息的可靠性肯定会急剧下降,但找到这样的演算法的可能性是非常小的,今天只有短的RSA钥匙才可能被强力方式解破。
到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战。
1.3 RSA算法1.3.1公钥和私钥的产生假设Alice想要通过一个不可靠的媒体接收Bob的一条私人讯息。
她可以用以下的方式来产生一个公钥和一个私钥:(1)选两个保密的足够大的素数p和q。
同时对p, q严加保密,不让任何人知道。
(2)计算N=p×q。
(3)计算f(n)=(p-1)(q-1)。
(4)找一个与f(n)互质的数e,且1<e<f(n)。
(5)计算d,使得:(d * e) ≡ 1 (mod (f(n)))。
(6)将p和q的记录销毁。
(7)以{e,N}为公钥,{d,N}为私钥。
Alice将她的公钥(N,e)传给Bob,而将她的私钥(N,d)藏起来。
1.3.2 加密与解密消息假设Bob想给Alice送一个消息m,他知道Alice产生的N和e。
他使用起先与Alice约好的格式将m转换为一个小于N的整数n。
假如他的信息非常长的话,他可以将这个信息分为几段,然后将每一段转换为n。
用下面这个公式他可以将n加密为c:c≡n e (mod N)计算c并不复杂。
Bob算出c后就可以将它传递给Alice。
解密过程为计算:n≡c d(mod N)。
得到n后,她可以将原来的信息m重新复原。
由算法可知:如果第三者进行窃听,他会得到n,N(p×q),e这几个数,如果想要解码,必须想办法得到d。
要获得d,最简单的方法是将N分解为p和q,这样她可以得到同余方程d × e≡ 1 (mod (p-1)(q-1))并解出d,然后代入解密公式n≡c d(mod N)导出n(破密)。
但至今为止还没有人找到一个多项式时间的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在。
2 RSA算法的安全性2.1大数的分解问题著名数学家费马(1601-1665)和勒让德(1752-1833)都研究过分解因子的算法,现代某些更好的算法是勒让德方法的扩展。
其中R. Schroeppel算法是一类较好的算法,用此法分解因子仍然需要大约e 次运算, 其中ln表示自然对数,可见分解n所需的运算次数与密钥的长度有关,随着密钥长度的增加,分解所需的时间会成指数倍增加。
若用1台1s能进行1亿次因子分解的高速计算机来计算,分解十进制长度为200位的n,其所需时间为3 800 000年。
由此可见,对于RSA系统,如果用一个长度为200位(十进制)的n,认为它是比较安全的。
n的长度越长,因子分解越困难,密码就越难以破译,加密强度就越高。
一般来说,每增加10位二进制数,分解的时间就要加长1倍。
不过随着计算机运算速度的提高和并行计算的发展,破解的速度也会同步提高,这时可能要求使用更长的密钥。
1993年,一个国际研究小组决定对RSA-129发出挑战。
他们之所以敢于这样做,主要因为近20年来,计算机运算速度有了突飞猛进的提高,在大数分解理论上也有新的突破。
该小组在国际互联网上集合来自世界各地的志愿参加者,向他们分发因数分解软件。
每个参加者都领取了不同的因数分解任务,在自己的计算机上独立运算,然后把计算结果寄回MIT总部,列表归纳。
到1994年4月,共有600余名志愿者参加了这项破译活动。
他们总共动用了1600多台工作站、大型机和超级计算机,花费了8个月的时间,终于分解了RSA-129的公开钥匙。
不过破解的难度随着n长度而不断增加,因此可以根据被加密文件的重要程度及对加密时间的要求这两个因素来选择n的长度,密钥长度决定保密的等级。
到目前为止,世界上还没有任何可靠的攻击RSA演算法的方式。
只要其钥匙的长度足够长,用RSA加密的信息实际上是不能被解破的。
1994年彼得·秀尔(Peter Shor)证明一台量子计算机可以在多项式时间内进行因数分解。
它利用量子计算的并行性,可以快速分解出大数的质因子。
假如有人能够找到一种有效的分解大整数的算法的话,或者假如量子计算机可行的话,那么大数分解将不再是难题。
基于大数分解的加密算法将不再安全,包括RSA在内。
2.2已公开的或已知的攻击方法2.2.1 RSA共模攻击若系统中共有一个模数,只是不同的人拥有不同的e和d,系统将是危险的。
最普遍的情况是同一信息用不同的公钥加密,这些公钥共模而且互质,那么该信息无需私钥就可得到恢复。
设P为信息明文,两个加密密钥为e1和e2,公共模数是n,则:C1 = P^e1 mod nC2 = 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。
2.2.2 RSA的选择密文攻击RSA在选择密文攻击面前很脆弱。
一般攻击者是将某一信息作一下伪装( Blind),让拥有私钥的实体签署。
然后,经过计算就可得到它所想要的信息。
实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构:( XM )^d = X^d *M^d mod n前面已经提到,这个固有的问题来自于公钥密码系统的最有用的特征--每个人都能使用公钥。
但从算法上无法解决这一问题,主要措施有两条:一条是采用好的公钥协议,保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随机文档签名,签名时首先使用One-Way HashFunction 对文档作HASH处理,或同时使用不同的签名算法。
2.2.3大数因数分解法针对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.2.4误用导致的安全性问题RSA的小指数攻击。
有一种提高RSA速度的建议是使公钥e取较小的值,这样会使加密变得易于实现,速度有所提高。
但这样作是不安全的,对付办法就是e和d 都取较大的值。
e = 2永远不应该被使用。
找到的p和q还要满足一定的要求,首先它们不能太靠近,此外p-1或q-1的因子不能太小,否则的话N也可以被很快地分解。
1990年有人证明假如p大于q而小于2q(这是一个很经常的情况)而d < N1/4/3,那么从N和e可以很有效地推算出d。
因此密钥d必须足够大。
RSA的攻击攻击方法很多,如旁道攻击法,部分密钥暴露攻击法,RSA使用不当的其他攻击法等。
2.3 RSA 加密算法的缺点1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
2) RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价。
且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。
3)至今为止没有人能够证明对N进行因数分解是唯一的从c导出n的方法。
若有或发现其他简单的方法的话,RSA算法将会被攻破。
4)北京时间2月15日上午消息,据《纽约时报》周二报道,欧美数学家和密码学家偶然发现,目前被全世界广泛应用的公钥加密算法RSA存在漏洞。
他们发现,在700万个实验样本中有2.7万个公钥并不是按理论随机产生的。
也就是说,或许有人可以找出产生公钥的秘密质数。
5)RSA密钥长度随着保密级别提高,增加很快。
总结:RSA的安全性依赖于大数的因子分解难题,从提出到现在的三十多年里,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。
虽然并没有人证明RSA的难度与大数分解难度等价,也没有人证明对N进行因数分解是唯一的从c导出n的方法。
但迄今为止,也没有一个好的攻击RSA算法的方法,RSA密码同样很少被破译。
随着计算能力的增长,以及分解方法的改进,大数分解问题,可能将越来越容易。
但同时增加大数的位数可以增加分解的难度。
RSA的缺点和误用,只要合理的避开和防范就可以很好地避免。