RSA加密
密文=明文EmodN
E和N的组合就是公钥
RSA解密
明文=密文DmodN
D和N的组合就是私钥
生成密钥对
1. 求N
用伪随机数生成器求p和q,p和q都是质数
N = p * q
p和q太小的话,密码会变得容易破译,但太大的话计算时间又会变得很长。例如,假设p和q的大小都是512比特,相当于155位的十进制数字。
要求出这样大的质数,需要通过伪随机数生成器生成一个512比特大小的数,在判断这个是不是质数,若不是质数,则重新生成。
更多知识请看:
[matrix67大神的文章] (http://www.matrix67.com/blog/archives/234);[维基百科-素性测试](https://zh.wikipedia.org/zh/%E7%B4%A0%E6%80%A7%E6%B5%8B%E8%AF%95)
2. 求L
L = lcm(p - 1,q - 1)
L是p - 1和q - 1的最小公倍数
3. 求E
1 < E < L
gcd(E,L) = 1; E 和 L的最大公约数为1(E和L互质)
之所以要加上E和L的最大公约数为1的条件,是为了保证一定存在解密时需要使用的数D。
4. 求D
1 < D < L
E * D mod L = 1
要保证存在满足条件的D,就需要保证E和L的最大公约数为1。
简单的来说,E * D mod L = 1 保证了对密文进行解密时能够得到原来的明文。
一旦发现了对大整数的质因数分解的高效算法,RSA就能够被破译
其他公钥密码
- EIGamal方式
- Rabin方式
- 椭圆曲线密码