RSA 是公钥密码学的基础。它保护 HTTPS 连接、签署软件更新、保护电子邮件安全。理解 RSA 有助于您在密钥长度、填充方案以及何时使用 RSA 与 ECC 等方面做出更好的决策。
什么是 RSA?
RSA(Rivest–Shamir–Adleman,1977 年)是一种基于大数分解数学难题的非对称加密算法。
与使用单一密钥的 AES 不同,RSA 使用密钥对:
- 公钥:可以公开分享,用于加密或验证签名
- 私钥:必须保密,用于解密或创建签名
RSA 的数学原理(简化版)
RSA 的安全性依赖于:将两个大质数相乘很容易,但将乘积分解回质数在计算上不可行。
密钥生成
- 选择两个大质数 p 和 q
- 计算 n = p × q(模数)
- 计算 φ(n) = (p-1)(q-1)
- 选择 e(公开指数,通常为 65537)
- 计算 d 使得 e × d ≡ 1 (mod φ(n))(私有指数)
公钥:(n, e)
私钥:(n, d)
加密与解密
- 加密:
C = M^e mod n - 解密:
M = C^d mod n
RSA 密钥长度
| 密钥长度 | 安全级别 | 状态 |
|---|---|---|
| 1024 位 | 已被破解 | 禁止使用 |
| 2048 位 | ~112 位安全 | 最低可接受标准 |
| 3072 位 | ~128 位安全 | 推荐使用 |
| 4096 位 | ~140 位安全 | 高安全性 / 速度较慢 |
NIST 建议 2030 年前最低使用 2048 位,之后使用 3072 位。
填充方案——安全性的关键
原始 RSA(教科书 RSA)不安全,必须使用填充方案:
PKCS#1 v1.5 —— 传统方案
- 广泛支持,用于 TLS 1.2 及更早版本
- 若实现不当,易受 Bleichenbacher 攻击
- 签名场景仍可接受,新系统加密场景应避免使用
OAEP(最优非对称加密填充)—— 加密推荐方案
- 使用哈希函数的随机化填充
- 抵抗选择密文攻击
- 新实现使用
OAEP-SHA256
PSS(概率签名方案)—— 签名推荐方案
- 签名的随机化填充
- 可证明安全(不同于 PKCS#1 v1.5 签名)
- 某些现代标准要求使用
RSA 与 ECC 对比
| 属性 | RSA-2048 | ECC-256 |
|---|---|---|
| 安全级别 | ~112 位 | ~128 位 |
| 密钥大小 | 2048 位 | 256 位 |
| 性能 | 较慢 | 快得多 |
| 密钥生成 | 慢 | 快 |
| 签名大小 | 大 | 小 |
| 兼容性 | 通用 | 广泛支持 |
对于新系统,通常优先选择 ECC——更小的密钥、更快的操作、相同甚至更好的安全性。详见 ECC 指南。
RSA 实践应用
何时使用 RSA 加密
- 加密少量数据(如 AES 密钥)
- 兼容遗留系统
- 基于证书的系统(TLS、S/MIME)
何时不使用 RSA 加密
- 加密大量数据(使用 AES + RSA 封装 AES 密钥)
- 高性能系统(改用 ECC)
混合加密模式
RSA 几乎总是与混合方案结合使用:
- 生成随机 AES 密钥
- 用 AES 加密数据
- 用 RSA 公钥加密 AES 密钥
- 同时发送加密的 AES 密钥和加密数据
这样既获得 RSA 的密钥交换安全性,又保留 AES 的高性能。
RSA 密钥格式
PEM 格式
带有页眉/页脚的 Base64 编码 DER:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----
DER 格式
ASN.1 结构的二进制编码。使用我们的 ASN.1 解析器 检查 DER 编码的密钥,或使用 RSA DER 公钥解码器 提取密钥参数。
常见 RSA 陷阱
| 问题 | 风险 | 解决方案 |
|---|---|---|
| 小密钥(< 2048 位) | 分解攻击 | 使用 2048+ 位密钥 |
| 无填充 | 教科书 RSA 攻击 | 始终使用 OAEP 或 PSS |
| 加密和签名使用同一密钥 | 跨协议攻击 | 使用独立密钥对 |
| 弱随机数生成器 | 密钥泄露 | 使用操作系统 CSPRNG |
在线工具
使用我们的 RSA 加密工具:
- 生成 RSA 密钥对(1024/2048/4096 位)
- 使用 PKCS#1 v1.5 或 OAEP 加密/解密
- 使用 PKCS#1 或 PSS 签名/验证
- 以 PEM/DER 格式导出密钥
如需解析证书中的 RSA 公钥,请使用 RSA DER 公钥解码器。