# RSA 加密指南：密钥、填充方案与使用场景

> RSA 全面指南——密钥长度、OAEP 与 PKCS#1 填充、混合加密，以及何时选择 RSA 而非 ECC。

Canonical: https://hsmkit.com/zh/guides/rsa-encryption-guide/

Last updated: 2026-04-03

RSA 是公钥密码学的基础。它保护 HTTPS 连接、签署软件更新、保护电子邮件安全。理解 RSA 有助于您在密钥长度、填充方案以及何时使用 RSA 与 ECC 等方面做出更好的决策。

## 什么是 RSA？

RSA（Rivest–Shamir–Adleman，1977 年）是一种基于大数分解数学难题的**非对称加密算法**。

与使用单一密钥的 AES 不同，RSA 使用**密钥对**：
- **公钥**：可以公开分享，用于加密或验证签名
- **私钥**：必须保密，用于解密或创建签名

## RSA 的数学原理（简化版）

RSA 的安全性依赖于：将两个大质数相乘很容易，但将乘积分解回质数在计算上不可行。

### 密钥生成
1. 选择两个大质数 **p** 和 **q**
2. 计算 **n = p × q**（模数）
3. 计算 **φ(n) = (p-1)(q-1)**
4. 选择 **e**（公开指数，通常为 65537）
5. 计算 **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 指南](/zh/guides/ecc-digital-signatures-explained/)。

## RSA 实践应用

### 何时使用 RSA 加密
- 加密少量数据（如 AES 密钥）
- 兼容遗留系统
- 基于证书的系统（TLS、S/MIME）

### 何时不使用 RSA 加密
- 加密大量数据（使用 AES + RSA 封装 AES 密钥）
- 高性能系统（改用 ECC）

### 混合加密模式
RSA 几乎总是与**混合**方案结合使用：
1. 生成随机 AES 密钥
2. 用 AES 加密数据
3. 用 RSA 公钥加密 AES 密钥
4. 同时发送加密的 AES 密钥和加密数据

这样既获得 RSA 的密钥交换安全性，又保留 AES 的高性能。

## RSA 密钥格式

### PEM 格式
带有页眉/页脚的 Base64 编码 DER：
```
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
-----END PUBLIC KEY-----
```

### DER 格式
ASN.1 结构的二进制编码。使用我们的 [ASN.1 解析器](/asn1-parser) 检查 DER 编码的密钥，或使用 [RSA DER 公钥解码器](/rsa-der-public-key) 提取密钥参数。

## 常见 RSA 陷阱

| 问题 | 风险 | 解决方案 |
|------|------|---------|
| 小密钥（< 2048 位） | 分解攻击 | 使用 2048+ 位密钥 |
| 无填充 | 教科书 RSA 攻击 | 始终使用 OAEP 或 PSS |
| 加密和签名使用同一密钥 | 跨协议攻击 | 使用独立密钥对 |
| 弱随机数生成器 | 密钥泄露 | 使用操作系统 CSPRNG |

## 在线工具

使用我们的 [RSA 加密工具](/rsa-encryption)：

- 生成 RSA 密钥对（1024/2048/4096 位）
- 使用 PKCS#1 v1.5 或 OAEP 加密/解密
- 使用 PKCS#1 或 PSS 签名/验证
- 以 PEM/DER 格式导出密钥

如需解析证书中的 RSA 公钥，请使用 [RSA DER 公钥解码器](/rsa-der-public-key)。
