实现 RSA 密钥对管理
概述
RSA(Rivest-Shamir-Adleman)是应用最广泛的非对称(asymmetric)密码算法,用于数字签名、密钥交换和加密。本技能涵盖遵循 NIST SP 800-57 密钥管理指南生成、存储、轮换和管理 RSA 密钥对,包括密钥序列化格式(PEM、DER、PKCS#8)、密码保护和密钥强度验证。
目标
- 生成适当密钥大小(2048、3072、4096 位)的 RSA 密钥对
- 使用 PKCS#8 以 PEM 和 DER 格式序列化密钥
- 使用强密码加密保护私钥
- 实现带版本控制的密钥轮换
- 提取公钥组件和指纹
- 验证密钥强度并检测弱密钥
- 使用 RSA-PSS 签名和验证数据
核心概念
RSA 密钥大小与安全强度
| 密钥大小(位) | 安全强度(位) | 推荐使用至 |
|---|---|---|
| 2048 | 112 | 2030 年 |
| 3072 | 128 | 2030 年以后 |
| 4096 | ~140 | 2030 年以后 |
RSA 填充方案
| 方案 | 使用场景 | 标准 |
|---|---|---|
| OAEP | 加密 | PKCS#1 v2.2(RFC 8017) |
| PSS | 签名 | PKCS#1 v2.2(RFC 8017) |
| PKCS#1 v1.5 | 仅遗留系统 | 新系统已弃用 |
密钥存储格式
- PEM:带头部的 Base64 编码,人类可读
- DER:二进制 ASN.1 编码,紧凑
- PKCS#8:私钥封装标准
- PKCS#12/PFX:密钥 + 证书捆绑,密码保护
安全注意事项
- 新部署最少使用 3072 位密钥(NIST 推荐)
- 始终使用 AES-256-CBC 密码加密保护私钥
- 使用 RSA-PSS 签名(不要使用 PKCS#1 v1.5)
- 使用 RSA-OAEP 加密(不要使用 PKCS#1 v1.5)
- 以限制性文件权限(0600)存储私钥
- 至少每年实施一次密钥轮换
验证标准
- 密钥生成产生有效的 RSA 密钥对
- 可以从私钥中提取公钥
- 私钥受密码保护
- RSA-PSS 签名验证成功
- 篡改后的签名验证失败
- 密钥指纹计算正确
- 密钥轮换保留对旧密钥的访问以供验证