RSA算法是1977年由MIT三位密码学家Rivest、Shamirh和Adleman说发明的,是迄今为止最为成熟完善的公钥密码体制。
RSA算法能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。
RSA算法的原理:
基于数论构造,具体难题是大素数乘积的因子分解。将两个大素数相乘十分容易,但对其乘积进行因式分解却极其困难,因此可以将乘积作为加密密钥。如:
定义函数f为f(p,q)=pq,pq是两个大质数,那么我们很容易通过pq 得到f(p,q)
如果:
f(p,q)=322131149110455087323,求p,q.
这样就裂开了,在目前为止,还没有有效的算法能够解出。
其次在RSA算法中,公钥和私钥产生了,公钥和私钥的产生:
1.任意选择两个大的质数(素数)p和q,p不等于q,计算N=pq
2.根据欧拉函数,不大于M且与N互质的整数个数为(p-1)(q-1)
3.选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)
4.用以下这个公式计算d:d*e=1(mod(p-1)(q-1))
5.将p和q销毁后,(N,e)是公钥,(N,d)是私钥
如:
选素数p=47和q=71,得N=3337,(n)=(47-1)*(71-1)=3220
RSA算法加密:
1.假设Bob想给Alice送一个消息,他知道Alice产生的公钥N和e
2.将原始信息分为多段,每一段(假定为n)分别用以下公式计算出c:
3.将多个n计算出的多个c串在一起,就是密文,发送即可。
列如:公钥(N,e)=(3337,79),私钥(N,d)=(3337,1019)
现要发送明文688,计算:688^79(mod3337)=1570
RSA算法解密:
Alice得到Bob的信息c后就可以利用她的密钥(N,d)来解码。
她可以用以下这个公式来将c转换为n:
c^d=n(modN)
得到n后,她可以将原来的信息m重新复原。
例如:公钥(N,e)=(3337,79),私钥(N,d)=(3337,1019)
收到密文1570后,用私钥d=1019进行解密:
1570^1019(mod3337)=688
这就是RSA算法在密码学中的使用过程,和算法原理。