2020-08-30

你离开我真会死。 提交于 2020-10-14 19:54:37

RSA算法

RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。当时他们三人都在麻省理工学院工作。RSA就是他们三人姓氏开头字母拼在一起组成的。
RSA是非对称的,也就是用来加密的密钥和用来解密的密钥不是同一个。RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。
在公开密钥密码体制中,加密密钥(即公开密钥)PK是公开信息,而解密密钥(即秘密密钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。虽然解密密钥SK是由公开密钥PK决定的,但却不能根据PK计算出SK。
正是基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式,即信息采用改进的DES或IDEA对话密钥加密,然后使用RSA密钥加密对话密钥和信息摘要。对方收到信息后,用不同的密钥解密并可核对信息摘要。
RSA是被研究得最广泛的公钥算法。RSA允许你选择公钥的大小。512位的密钥被视为不安全的;768位的密钥不用担心受到除了国家安全管理(NSA)外的其他事物的危害;1024位的密钥几乎是安全的。RSA在一些主要产品内部都有嵌入,像 Windows、网景 Navigator、 Quicken和 Lotus Notes。
算法原理
RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。
算法描述
RSA算法的具体描述如下:
(1)任意选取两个不同的大素数p和q计算乘积;
(2)任意选取一个大整数e,满足
,整数e用做加密钥(注意:e的选取是很容易的,例如,所有大于p和q的素数都可用);
(3)确定的解密钥d,满足
,即是一个任意的整数;所以,若知道e和
,则很容易计算出d;
(4)公开整数n和e,秘密保存d;
(5)将明文m(m<n是一个整数)加密成密文c,加密算法为
(6)将密文c解密为明文m,解密算法为[5]
然而只根据n和e(注意:不是p和q)要计算出d是不可能的。因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。在这里插入图片描述
安全性
RSA的安全性依赖于大数分解,但是否等同于大数分解一直未能得到理论上的证明,也并没有从理论上证明破译。RSA的难度与大数分解难度等价。因为没有证明破解RSA就一定需要做大数分解。假设存在一种无须分解大数的算法,那它肯定可以修改成为大数分解算法,即RSA的重大缺陷是无法从理论上把握它的保密性能如何,而且密码学界多数人士倾向于因子分解不是NPC问题。
运算速度
由于进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。RSA的速度比对应同样安全级别的对称密码算法要慢1000倍左右。
算法攻击
迄今为止,对RSA的攻击已经很多,但都没有对它构成真正的威胁。在这里,我们讨论一些典型的攻击方法。
RSA的选择密码攻击
RSA在选择密码攻击面前显得很脆弱。一般攻击者是将某一信息进行下伪装,让拥有私钥的实体签名;然后,经过计算就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂保留了输入的乘法结构。前面已经提到,这个固有的问题来自于公钥密码系统的最基本的特征,即每个人都能使用公钥加密信息。从算法上无法解决这一问题,改进措施有两条:是采用好的公钥协议保证工作过程中实体不对其他实体任意产生的信息解密,不对自己一无所知的信息签名;二是决不对陌生人送来的随机文档签名,或签名时首先对文档作Hash处理,或同时使用不同的签名算法。
RSA的小指数攻击
当公钥e取较小的值,虽然会使加密变得易于实现,速度有所提高,但这样做也是不安全的。最简单的办法就是e和d都取较大的值。
因为密钥的产生受素数产生技术的限制,所以也有它的局限性。
(1)密钥的产生受素数产生技术的限制,因而难以做到一次一密;
(2)分组长度太大,为保证安全性,n至少也要600比特以上,使运算代价很高,尤其是速度较慢,比对称密码算法慢几个数量级;随着大整数素因数分解算法的改进和计算机计算能力的提高,对n的长度在不断增加,不利于实现数据格式的标准化。
RSA算法例题
已知RSA算法中两个素数P=5,Q=11及公钥e=3 ,求私钥d=? 如果明文M=3 ,则密文C=?
1 )求N
p = 5
q = 11
N = p * q =55
2 )求L
L = lcm(p-1, q-1)= lcm(4,10) = 20
20为4和10对最小公倍数
3 ) 求D
求D也必须满足2个条件:1 < D < L,E*D mod L = 1
即1 < D < 20,3* D mod 20= 1
显然当D= 7时满足上述两个条件
1 < 7< 20
3*7mod 20= 21mod 20= 1
此时私钥=(D,N)=(7,55)
4 )加密
准备的明文必须时小于N的数,因为加密或者解密都要mod N其结果必须小于N
M = 3
则 密文=明文EmodN=3^3mod55=27
解密为 = 密文D modN = 27^7 mod55 =3



















































标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!