RSA算法简介
RSA算法基于一个广泛用做密码学基石的数论问题——因子分解问题:给一个任意的整数n(通常很大,并且越大越难分解),在合理的时间内分解出它的素因子是很困难的。通常困难程度随着n的银子个数减少而增加,最难的情形就是n是两个大素数的乘积。而RSA算法的安全性就基于这个最难的情形。
加密过程
a. 首先设出p,q两个非常大的素数(通常在十进制下有几百位),而n=pq,则可以得知,通过p,q求n是简单的,而通过n来求p,q则是非常困难的。
b. 计算t=φ(n)=(p-1)(q-1),其中φ(n)是欧拉函数。
c. 设e满足条件:e∈Ζ(整数),1<e<t,gcd(e,t)=1,且e在ctf题目中也常被取为65535(2^16-1)。
d. 计算e的逆元d:d=e^-1(mod t)
e. 则这样取得的e和d存在性质:
Med≡Mde≡Mt+1≡M1≡M(mod t)
该同余式成立的基础是欧拉定理第三推论(这个之后再补):t是n的欧拉函数值,从e和d的构造有ed≡1(mod t)。欧拉定理的第三推论告诉我们Mde≡M1(mod n)
则有加解密过程为:
C≡Me(mod n) 其中C是密文,M是明文
恢复明文为:
M≡Cd≡Med(mod n)
其中e和n是可以对外公开的这样他可以完成加密,但是难以对截获的密文进行解密。
公钥为(e,n),私钥为(d,n)