1. 密钥的产生
① 选两个保密的大素数p和q。
② 计算n=p×q,φ(n)=(p-1)(q-1),其中φ(n)是n的欧拉函数值。
③ 选一整数e,满足1<e<φ(n),且gcd(φ(n),e)=1。
④ 计算d,满足d·e≡1 mod φ(n),即d是e在模φ(n)下的乘法逆元,因e与φ(n)互素,由模运算可知,它的乘法逆元一定存在。
⑤ 以{e,n}为公开钥,{d,p,q}为秘密钥。
2. 加密
加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n,即分组长度小于log2n。然后对每个明文分组m,作加密运算: c≡m^e mod n
3. 解密
对密文分组的解密运算为:
m≡c^d mod n
例 选p=7,q=17。
解 n=p×q=119,
φ(n)=(p-1)(q-1)=96。
取e=5,满足1<e<φ(n),且gcd(φ(n),e)=1。
确定满足d·e=1 mod 96且小于96的d,
因为77×5=385=4×96+1,所以d为77,
因此公开钥为{5,119},
秘密钥为{77,119}。
设明文m=19,则由加密过程得密文为
c≡19^5mod119≡2476099 mod 119≡66
解密为 :66^77mod 119≡19
RSA的安全性是基于分解大整数的困难性假定,之所以为假定是因为至今还未能证明分解大整数就是NP问题,也许有尚未发现的多项式时间分解算法。
如果RSA的模数n被成功地分解为p×q,则立即获得φ(n)=(p-1)(q-1),从而能够确定e模φ(n)的乘法逆元d,即d≡e^(-1) mod φ(n),因此攻击成功。
随着人类计算能力的不断提高,原来被认为是不可能分解的大数已被成功分解。例如RSA-129(即n为129位十进制数,大约428个比特)已在网络上通过分布式计算历时8个月于1994年4月被成功分解,RSA-130 已于1996年4月被成功分解。
因此在使用RSA算法时对其密钥的选取要特别注意其大小。估计在未来一段比较长的时期,密钥长度介于1024比特至2048比特之间的RSA是安全的。
为保证算法的安全性,还对p和q提出以下要求:
(1) p,q的长度应相差不大,处于10^75到10^100的数量级
(2) p-1和q-1都应有大素因子
(3)gcd{p-1,q-1}应该尽可能小
对RSA的攻击
RSA存在以下两种攻击,并不是因为算法本身存在缺陷,而是由于参数选择不当造成的。
1. 共模攻击
在实现RSA时,为方便起见,可能给每一用户相同的模数n,虽然加解密密钥不同,然而这样做是不行的。
设两个用户的公开钥分别为e1和e2,且e1和e2互素(一般情况都成立),
明文消息是m,
密文分别是
c1≡me1(mod n)
c2≡me2(mod n)
敌手截获c1和c2后,可如下恢复m。
用推广的Euclid算法求出满足
re1+se2=1
的两个整数r和s,其中一个为负,设为r。再次用推广的Euclid算法求出c^(-1)(1),由此得(c^(-1)(1))-rc^s(2)≡m(mod n)。
2. 低指数攻击
假定将RSA算法同时用于多个用户(为讨论方便,以下假定3个),然而每个用户的加密指数(即公开钥)都很小。设3个用户的模数分别为ni(i=1,2,3),当i≠j时,gcd(ni,nj)=1,否则通过gcd(ni,nj)有可能得出ni和nj的分解。设明文消息是m,密文分别是
c1≡m^3(mod n1);
c2≡m^3(mod n2);
c3≡m^3(mod n3);
由中国剩余定理可求出m^3(mod n1n2n3)。由于m^3<n1n2n3,可直接由m3开立方根得到m。
分享到:
相关推荐
"RSA加密算法实验报告.pdf" 本实验报告主要介绍了RSA加密算法的实现和原理,包括密钥对的产生、加密和解密过程、数字签名等。下面是该实验报告的详细知识点总结: 一、RSA加密算法的原理 RSA加密算法是基于大数...
RSA加密算法是公钥密码学领域的一个里程碑,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是一种非对称加密算法,即加密和解密使用不同的密钥,极大地提高了安全性。在C语言中实现RSA...
RSA加密算法是公钥密码学中的一个重要组成部分,它在信息安全领域有着广泛的应用,例如数字签名、数据加密等。Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的库支持来创建桌面和移动应用。在本...
C#中RSA加密算法详解 在C#程序中,RSA加密算法是一种广泛使用的公钥加密算法。 RSA加密算法于1977年由Ron Rivest、Adi Shamir和Len Adleman在美国麻省理工学院开发的。RSA取名来自开发他们三者的名字。RSA是目前最...
RSA加密算法的实现,使用c++语言编程,使用dev c++平台编码,文件为cpp格式。经过反复测试代码正确,可搭配RSA讲解教程一起使用,讲解教程点击我的个人主页即可查看,希望能够对你有帮助,谢谢。
RSA加密算法.ppt
RSA加密算法是一种非对称加密技术,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是现代密码学的基础之一,广泛应用于网络安全,如数据传输加密、数字签名等场景。在这个案例中,我们将...
标题提到的"C#实现RSA加密算法"着重讲述了如何在C#中利用大整数类BigInteger和RSACryptoServiceProvider类来完成私钥加密公钥解密的过程。以下是对这个话题的详细解释: 1. **RSA算法基础**: RSA算法由Rivest、...
RSA加密算法是一种非对称加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因其三位发明者的名字首字母命名。它在信息安全领域有着广泛的应用,如数字签名、数据加密以及网络安全传输等。在C语言...
RSA加密算法是公钥密码学领域的一个里程碑,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。它是一种非对称加密算法,即加密和解密使用不同的密钥,极大地提高了安全性。在网络安全、数据...
RSA加密算法是公钥密码学领域的一个里程碑,由Ron Rivest、Adi Shamir和Leonard Adleman在1977年共同提出,因此得名RSA。它是一种非对称加密算法,即加密和解密使用的是两把不同的密钥,一把是公开的公钥,另一把是...
RSA加密算法是公钥密码学中的一个重要组成部分,它在信息安全领域有着广泛的应用,例如数字签名、数据加密等。本实例是基于Delphi编程环境实现的一个无第三方控件依赖的RSA加密程序,它提供了生成随机数、创建密钥对...
RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。1987年首次公布,当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏...
RSA算法是一种广泛应用于网络安全的公钥加密技术,...总之,RSA加密算法是现代密码学的基础,理解和掌握它的原理和应用对于IT专业人员来说至关重要。通过实践,可以更好地了解其在实际场景中的运用,提升信息安全能力。
RSA加密算法的特点在于它使用一对密钥:公钥和私钥。公钥负责加密数据,可以对外公开,而私钥用于解密数据,需要保密。这一对密钥中,公钥包含两个参数:N和E,而私钥包含参数N和D。N是一个大整数,它是两个质数p和q...
基于python+django的基于RSA加密算法软件的研究设计的实现.zip基于python+django的基于RSA加密算法软件的研究设计的实现.zip 运行步骤 需要先安装Python的相关依赖:pymysql,Django ,requests ,pycryptodomex,...
RSA 加密算法详解 RSA 加密算法是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA 以它的三个发明者 Ron Rivest, Adi Shamir, Leonard Adleman 的名字首字母命名,这个算法经受住了多年深入...
RSA加密算法是公钥密码学领域的一个里程碑,它由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出,因此得名RSA。这种算法基于大整数因子分解的困难性,使得它在信息安全领域被广泛用于数据加密和数字签名。在...
在Java中实现RSA加密算法,主要涉及以下几个核心概念和步骤: 1. **RSA原理**:RSA算法基于数论中的大数因子分解难题,由两个大素数P和Q相乘得到N,然后计算N的欧拉函数φ(N) = (P-1) * (Q-1),选取一个与φ(N)互质...