用更短的密钥换同级安全
椭圆曲线密码(ECC)把安全性建立在大整数分解之外的离散对数问题上:256 位曲线的安全强度大致相当于 3072 位 RSA,密钥与签名都短得多,运算也更快。TLS 用 ECDHE 做密钥交换、ECDSA 或 Ed25519 做签名,SSH 也大量使用 Ed25519 密钥;代价是实现细节更敏感,曲线选择需要谨慎。
基本信息
| 适用平台 | OpenSSL、SSH、各类 TLS 库普遍支持 |
|---|---|
| 强度对照 | 256 位 ECC 约等于 3072 位 RSA,384 位约等于 7680 位 |
| 签名算法 | ECDSA(依赖随机数质量)、Ed25519(确定性签名) |
| 密钥交换 | X25519、P-256 等曲线的 ECDHE |
| 相关标准 | RFC 8032 定义 Ed25519,RFC 8446 列出 ECDHE 曲线 |
常用曲线
| 曲线 | 用途 | 备注 |
|---|---|---|
| P-256(prime256v1) | ECDSA 证书与 ECDHE | NIST 标准,兼容性最好 |
| P-384 | 高安全级别 | 政府与合规场景常用 |
| X25519 | ECDHE 密钥交换 | 速度快、实现简洁,常作首选 |
| Ed25519 | 签名(SSH 与现代证书) | 确定性签名,无需随机数即可防侧信道 |
生成与查看
生成与查看
openssl ecparam -name prime256v1 -genkey -noout -out ec.key # 生成 P-256 私钥
openssl pkey -in ec.key -pubout # 查看公钥
ssh-keygen -t ed25519 -C 'ops@example.com' # 生成 Ed25519 SSH 密钥
openssl s_client -connect example.com:443 </dev/null 2>/dev/null | grep -i -E 'temp key|curve'
# 输出会显示协商出的临时密钥曲线,如 X25519 或 prime256v1典型使用场景
- 移动端与物联网设备:密钥短、计算量小,适合算力受限环境
- SSH 登录密钥迁移到 Ed25519,替代默认的 RSA 密钥
- 排查握手失败:确认客户端与服务端在曲线列表上是否有交集
- 证书签名算法选型:ECDSA 证书比 RSA 证书握手开销更小
ECDSA 的安全性依赖签名时随机数的质量:随机数复用或可预测会直接泄露私钥,这也是 Ed25519 采用确定性签名更受推荐的原因之一。
老客户端与老设备可能不支持新曲线:同时提供 X25519 与 P-256 能覆盖更多客户端,只开新曲线会在老旧终端上直接握手失败。
Ed25519 在 SSH 侧兼容性已经很好,但个别老版本客户端与部分网络设备仍不支持:批量替换密钥前先在目标设备上实测登录,再决定是否保留一把 RSA 备用密钥。