63 lines
2.4 KiB
Markdown
63 lines
2.4 KiB
Markdown
### RSA 算法原理
|
||
|
||
RSA 算法是一种非对称加密算法,它的名字来源于三位发明者 Rivest、Shamir 和 Adleman 的姓氏首字母。与对称加密不同,非对称加密使用一对密钥:**公钥**和**私钥**。公钥可以公开给任何人,用于加密数据;而私钥必须由用户自己保管,用于解密数据。RSA 的核心在于利用了两个数学难题:**大整数质因数分解**和**欧拉函数**
|
||
|
||
**密钥生成过程**
|
||
|
||
密钥生成是 RSA 算法的基础,这个过程决定了公钥和私钥的值
|
||
|
||
1. **选择大质数**:随机选择两个非常大的质数 p 和 q。为了确保安全性,这两个质数必须足够大且不能太接近
|
||
|
||
2. **计算模数**:计算它们的乘积 `n=p×q`。这个 n 就是 RSA 的模数,它既是公钥的一部分,也是私钥的一部分
|
||
|
||
3. **计算欧拉函数**:计算欧拉函数 `ϕ(n)=(p−1)(q−1)`。欧拉函数 ϕ(n) 表示小于或等于 n 且与 n 互质的正整数的个数
|
||
|
||
4. **选择公钥指数**:选择一个整数 e,它必须满足以下条件:
|
||
|
||
- `1<e<ϕ(n)`
|
||
|
||
- e 与 ϕ(n) 互质(即最大公约数为 1)
|
||
|
||
通常,为了计算效率,会选择一些常见的质数,比如 65537。这个 e 就是公钥的指数
|
||
|
||
5. **计算私钥指数**:计算一个整数 d,它必须满足以下条件:
|
||
|
||
- `d × e ≡ 1 (mod ϕ(n))`
|
||
|
||
这个等式意味着 `d × e` 除以 ϕ(n) 的余数为 1。我们可以使用扩展欧几里得算法来高效地找到这个 d。这个 d 就是私钥的指数
|
||
|
||
至此,密钥生成完成。**公钥为 (n,e)**,可以公开;**私钥为 (n,d)**,必须严格保密
|
||
|
||
**加密和解密过程**
|
||
|
||
有了公钥和私钥,就可以进行数据的加密和解密了
|
||
|
||
**加密**
|
||
|
||
假设发送方想向你发送一条消息 M
|
||
|
||
1. 发送方获取你的公钥 (n,e)
|
||
|
||
2. 将明文消息 M 转换为一个整数(通常通过 ASCII 或其他编码方式)
|
||
|
||
3. 使用公钥进行加密,计算密文 C:
|
||
|
||
`C = Me (mod n)`
|
||
|
||
**解密**
|
||
|
||
当接收方收到密文 C 后,就可以使用自己的私钥进行解密
|
||
|
||
1. 接收方使用自己的私钥 (n,d)
|
||
|
||
2. 使用私钥进行解密,计算出原始明文 M:
|
||
|
||
`M = C^d (mod n)`
|
||
|
||
这里看起来很简单,但其背后的数学原理是:
|
||
|
||
```
|
||
(M^e)^d ≡ M^ed ≡ M (mod n)
|
||
```
|
||
|
||
这正是**欧拉定理**在起作用,它保证了加密和解密的可逆性 |