RSA 密钥长度怎么选
RSA 的安全强度随密钥长度非线性增长:2048 位约等于 112 位对称强度,3072 位约等于 128 位,4096 位约在 152 位上下。长度越高,生成、签名与验证的开销越大,证书体积也越大,握手数据随之变多。选型要在寿命、性能与合规要求之间取平衡。
基本信息
| 2048 位 | 约 112 位强度,存量系统与兼容场景的下限 |
|---|---|
| 3072 位 | 约 128 位强度,新签发证书与小规模签名的推荐值 |
| 4096 位 | 约 152 位强度,适合长期根证书与离线签发 |
| 开销 | 签名与验证时间、证书体积、握手字节数都会增加 |
| 生成时间 | 4096 位密钥生成可能耗时数十秒甚至更久 |
| 参考标准 | NIST SP 800-57 与 SP 800-131A |
典型使用场景
- 根证书规划:使用较长密钥与较长有效期,按年为单位规划
- 服务器证书:3072 位兼顾强度与握手开销,是较稳妥的默认值
- 存量兼容:老客户端与老设备可能只接受 2048 位,需要评估后过渡
- 代码与固件签名:签名验证开销较低时可用更长密钥提升寿命
- 性能敏感场景:高并发握手应权衡密钥长度带来的 CPU 开销
性能对比与生成
性能对比与生成
# 对比三种长度的签名与验证性能
openssl speed -elapsed rsa2048 rsa3072 rsa4096
# 生成 4096 位根密钥(耗时可能较长)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out root.key
# 生成 3072 位服务器密钥
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:3072 -out server.key
# 查看证书公钥长度,核对是否符合规划
openssl x509 -in cert.pem -noout -text | grep -i 'Public-Key'长度与强度对照
| 密钥长度 | 近似安全强度 | 适用场景 |
|---|---|---|
| 2048 位 | 约 112 位 | 存量系统兼容,规划迁移 |
| 3072 位 | 约 128 位 | 新签发证书与小规模签名 |
| 4096 位 | 约 152 位 | 长期根证书、离线签发与固件签名 |
证书从 2048 位升到 4096 位会同时增大握手数据与 CPU 开销:握手消息可能跨越更多 TCP 段,弱网与移动端体感更差,服务端签名运算也变慢。升降之前先在目标客户端上实测。
根证书更换密钥长度意味着重签整条链,影响周期以年计:需要提前规划签发窗口、逐级替换中间证书与终端证书,并同步更新客户端信任库。临时突击更换往往导致大面积业务中断。