RSA 是一种经典的非对称加密算法,由 Rivest、Shamir 和 Adleman 于 1977 年提出,其安全性基于大整数分解的数学难题。以下是关于 RSA 的详细解析:
一、核心原理
-
数学基础:
- 依赖大数分解难题:将两个大质数的乘积(如 ( n = p \times q ))分解回原始质数 ( p ) 和 ( q ) 在计算上是不可行的。
- 欧拉定理:若 ( a ) 和 ( n ) 互质,则 ( a^{\phi(n)} \equiv 1 \mod n ),其中 ( \phi(n) ) 是欧拉函数(计算与 ( n ) 互质的数的个数)。
-
密钥生成:
- 步骤:
- 随机选择两个大质数 ( p ) 和 ( q )。
- 计算模数 ( n = p \times q )。
- 计算欧拉函数 ( \phi(n) = (p-1)(q-1) )。
- 选择公钥指数 ( e ),满足 ( 1 < e < \phi(n) ) 且 ( e ) 与 ( \phi(n) ) 互质(常用 ( e = 65537 ))。
- 计算私钥指数 ( d ),满足 ( d \times e \equiv 1 \mod \phi(n) )(通过扩展欧几里得算法求解)。
- 密钥对:
- 公钥:( (e, n) ),可公开。
- 私钥:( (d, n) ),需严格保密。
- 步骤:
二、加密与解密过程
-
加密(使用公钥):
- 明文 ( m ) 转换为整数(需满足 ( m < n ))。
- 计算密文 ( c = m^e \mod n )。
-
解密(使用私钥):
- 计算明文 ( m = c^d \mod n )。
-
示例:
- 若公钥为 ( (e=3, n=33) ),私钥为 ( (d=7, n=33) ):
- 加密明文 ( m=7 ):( c = 7^3 \mod 33 = 343 \mod 33 = 13 )。
- 解密密文 ( c=13 ):( m = 13^7 \mod 33 = 7 )。
- 若公钥为 ( (e=3, n=33) ),私钥为 ( (d=7, n=33) ):
三、RSA 的应用场景
-
数据加密:
- 加密小数据(如对称加密的会话密钥)。
- 实际中直接加密大数据效率低,通常结合对称加密(如 TLS 中 RSA 用于交换 AES 密钥)。
-
数字签名:
- 用私钥对数据哈希值签名,公钥验证签名(如代码签名、SSL 证书)。
-
密钥协商:
- 结合 Diffie-Hellman 算法实现密钥交换(如 RSA-KEM)。
四、RSA 的优缺点
优点 | 缺点 |
---|---|
安全性高(依赖数学难题) | 计算速度慢,适合小数据 |
支持加密和数字签名 | 密钥长度大(2048 位以上才安全) |
公钥可公开分发 | 明文需转换为整数,需填充(如 OAEP) |
广泛兼容性(几乎所有系统支持) | 量子计算威胁(Shor 算法可破解 RSA) |
五、安全注意事项
-
密钥长度:
- 不安全:1024 位(已被破解)。
- 推荐:2048 位(普遍使用)或 3072/4096 位(高安全性场景)。
-
填充方案:
- 必须使用填充(如 PKCS#1 v1.5 或 OAEP),避免明文攻击。
- 未填充的 RSA(教科书式 RSA)易受选择密文攻击。
-
密钥管理:
- 私钥必须离线存储(如硬件安全模块 HSM)。
- 定期更换密钥以应对潜在破解风险。
六、RSA 与 ECC 对比
特性 | RSA | ECC(椭圆曲线加密) |
---|---|---|
安全性基础 | 大数分解难题 | 椭圆曲线离散对数难题 |
密钥长度 | 2048 位 ≈ ECC 224 位安全性 | 更短密钥(256 位 ECC ≈ 3072 位 RSA) |
计算速度 | 较慢(加密/解密) | 更快(适合移动设备) |
应用场景 | 传统系统、数字证书 | 物联网、区块链(如比特币) |
七、总结
RSA 是非对称加密的基石,尽管存在速度慢和密钥长的缺点,但其成熟性和兼容性使其在密钥交换、数字签名等领域仍广泛应用。在实际使用中需注意:
- 使用足够长的密钥(2048 位以上)。
- 结合填充方案(如 OAEP)和协议级保护(如 TLS)。
- 逐步向抗量子算法(如 Lattice-based 加密)迁移。