1.RSA加密算法是最经常使用的非对称加密算法算法
2.RSARSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,安全
3.目前学术界没法证实RSA算法的绝对正确性,可是也没法证实否认它的安全性,所以偏偏说明该算法有至关的可信性。函数
4.RSA原理基于大数分解的难度,其公钥和私钥是一对大素数对的函数,从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)工具
5.具体的加密,解密,流程性能
RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:编码
须要明确的概念:加密
素数:便是质数,p,q必须互为质数(好比,5,7)spa
同余运算:,级C(mod n)= M^e(mod n)设计
6.应用举例数学
假设用户A须要将明文“key”经过RSA加密后传递给用户B,过程以下:
a.取两个较大的素数p,q
这里咱们为了简单起见,取p=3,q=11,(固然若是实际应用中,p,q都是几百位以上的大素数)
b.计算n=p×q 和f(n)=(p-1)×(q-1)
令p=3,q=11,得出n=p×q=3×11=33;
f(n)=(p-1)(q-1)=2×10=20;
c.肯定公钥e 和私钥 d
取公钥e=3,(3与20互质)则e×d≡1 mod f(n),即3×d≡1 mod 20, 同余运算。
私钥 d怎样取值呢?能够用试算的办法来寻找,这里简单起见能够用这种方法,实际中确定是用大型计算机(加密机计算)。试算结果见下表:
经过试算咱们找到,当d=7时,e×d≡1 mod f(n)同余等式成立。所以,可得出私钥为d=7。从而咱们能够设计出一对公私密钥,加密密钥(公钥)为:KU =(e,n)=(3,33),解密密钥(私钥)为:KR =(d,n)=(7,33)。
此时咱们就已经获得了一对公私钥(e,d)和大素数积n(n=p×q,可是p,q要绝对保密)
(2)英文数字化。
将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列数值,即:
则获得分组后的key的明文信息为:11,05,25。
(3)明文加密
用户加密密钥(3,33) 将数字化明文分组信息加密成密文。由C≡M^e(mod n)得:
C1 mod 33=11^3 mod (33)=11 => C1=11
C2 mod 33=5^3 mod (33)=26 =>C2=26
C3 mod 33=25^3 mod (33)=16 =>C3=16
所以可获得加密后的密文为 11 26 16
(4)密文解密。
用解密密钥(7,33)将受到的密文解密成明文,M≡C^d(mod n)
M1 mod 33 = 11^7 mod(33) =11 => M1=11
M2 mod 33 =26^7 mod(33)= 5 =>M2=5
M3 mod 33 = 16^7 mod (33) =25 =>M3=25
可看法密出的明文与原来的一致,整个RSA加解密过程结束
固然,实际运用要比这复杂得多,因为RSA算法的公钥私钥的长度(模长度)要到1024位甚至2048位才能保证安全,因此,p、q、e的选取、公钥私钥的生成,加密解密模指数运算都有必定的计算程序,须要仰仗计算机高速完成。
在RSA密码应用中,公钥KU是被公开的,即e和n的数值能够被第三方窃听者获得。破解RSA密码的问题就是从已知的e和n的数值(n等于pq),想法求出d的数值,这样就能够获得私钥来破解密文。从上文中的公式:d ≡e-1 (mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 咱们能够看出。密码破解的实质问题是:从Pq的数值,去求出(p-1)和(q-1)。换句话说,只要求出p和q的值,咱们就能求出d的值而获得私钥。
当p和q是一个大素数的时候,从它们的积pq去分解因子p和q,这是一个公认的数学难题。好比当pq大到1024位时,迄今为止尚未人可以利用任何计算工具去完成分解因子的任务。所以,RSA从提出到如今已近二十年,经历了各类攻击的考验,逐渐为人们接受,广泛认为是目前最优秀的公钥方案之一。
然而,虽然RSA的安全性依赖于大数的因子分解,但并无从理论上证实破译RSA的难度与大数分解难度等价。即RSA的重大缺陷是没法从理论上把握它的保密性能如何。
此外,RSA的缺点还有:A)产生密钥很麻烦,受到素数产生技术的限制,于是难以作到一次一密。B)分组长度太大,为保证安全性,n 至少也要 600 bits 以上,使运算代价很高,尤为是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增长,不利于数据格式的标准化。所以,使用RSA只能加密少许数据,大量的数据加密还要靠对称密码算法。