RSA 加密算法
RSA 加密算法是一种,是最早的公钥密码系统之一。
1978年,MIT 的 Ron Rivest,Adi Shamir 和 Leonard Adleman 三人一起提出 RSA 加密算法
原理
- 选择 2 个质数
p
和q
- 计算
n = p * q
- 根据欧拉函数
φ(n) = (p - 1) * (q - 1)
计算出φ(n)
- 确定公钥(整数)
e
,要求:1 < e < φ(n)
且e
和φ(n)
互质 - 确定私钥(整数)
d
,要求:(e * d) / φ(n)
的余数为1
- 加密:原文
m
,计算m
的e
次幂除以n
,求余数c
,c
就是加密后所得的密文 - 解密:密文
c
,计算c
的d
次幂除以n
,求余数得到原文m
示例(来自 wikipedia)
p = 61
,q = 53
n = 61 * 53 = 3233
φ(n) = (61 - 1) * (53 - 1) = 60 * 52 = 3120
e = 17
d = 2753
- 公钥
(3233,17)
,私钥(3233,2753)
- 原文
18
,公钥加密密文2100
,私钥解密得到原文18
- 原文
81
,私钥加密密文2083
,公钥解密得到原文81
安全性
- 加解需要
n
和公钥e
生成密文c
- 解密需要
n
、密钥d
和密文c
- 公开场合窃听者只能获取
n
e
c
,但是获取不到密钥d
,需要通过e
计算出d
- 如果想通过
e
计算出d
则必须知道φ(n)
- 想知道
φ(n)
必须求出p
和q
- 因为
n = p * q
而n
已知,所以必须进行【质因数分解】,数学证明大数质因数分解十分困难,这也是 RSA 算法安全性的根本保证