首页/安全/加密与证书速查/常用椭圆曲线选择
加密算法基础95 条

常用椭圆曲线选择

主流曲线在安全强度、性能与生态支持上各有定位:P-256/X25519 满足 128 位强度且兼容性好,SM2 面向国密合规,secp256k1 主要用于区块链。

加密与证书速查安全更新于 2026-10-13

曲线选择的取舍

椭圆曲线的选择要在安全强度、性能与生态支持之间权衡:256 位曲线对应约 128 位安全强度,已能满足绝大多数场景;P-256 与 X25519 的兼容性最好,SM2 面向国密合规,secp256k1 主要用于区块链生态。还有一条务实原则:跟随协议与库的默认值走,不要自造曲线参数。

基本信息

默认选择TLS 场景用 P-256 或 X25519
高安全等级P-384 并搭配 SHA-384
国密场景SM2,配合 SM3 与 SM4
区块链生态常见 secp256k1
曲线与哈希强度要匹配,P-384 不应搭配 SHA-256
参数来源使用标准命名曲线,避免自造参数

常用曲线对照

曲线位数近似强度典型用途
P-256(prime256v1)256128 位TLS 证书、通用签名
P-384384192 位高等级签名与 TLS
P-521521256 位长期密钥、高安全需求
X25519 / Ed25519255约 128 位TLS 1.3、SSH、现代签名
secp256k1256128 位区块链生态
SM2256128 位国密 TLCP 与国密证书

典型使用场景

  • 申请 TLS 证书:按 CA 与客户端支持度选择 P-256 或 X25519
  • 国密合规改造:签发 SM2 证书并配套 SM3 与 SM4 套件
  • 生成 SSH 密钥:ed25519 优先,兼容老系统时退回其它算法
  • 代码签名与内部 PKI:按目标客户端的验证能力选择曲线
  • 排查签名失败:确认同一条曲线在两侧库中的名称是否一致

查询与生成

查询与生成
openssl ecparam -list_curves | head -20   # 列出本机支持的曲线名
openssl ecparam -name prime256v1 -genkey -noout -out ec.key   # 生成 P-256 私钥
openssl ec -in ec.key -pubout -out ec.pub  # 导出对应公钥
# 查看证书使用的曲线与签名算法
openssl x509 -in cert.pem -noout -text | grep -iE 'Public Key Algorithm|NIST CURVE|Signature Algorithm'
避免使用自造或冷门曲线参数;哈希算法与曲线强度要匹配,例如 P-384 应搭配 SHA-384 使用。
命名混乱是常见坑:同一条曲线在不同库里可能叫 prime256v1、P-256 或 secp256r1,脚本里建议以 openssl ecparam -list_curves 实际输出的名称为准。
X25519 与 Ed25519 用途不同:前者用于密钥交换,后者用于签名,虽然都基于 Curve25519,接口不能互换使用。
P-521 的存在感低于它的位数:强度最高,但计算开销与报文体积也更大。除长期密钥与合规明确要求外,多数场景用 P-384 已经足够。
从 RSA 迁移到椭圆曲线时要注意整条兼容链:客户端、负载均衡、硬件安全模块都要支持目标曲线,否则会出现部分终端无法握手的情况。

易错点

  • 不同库对曲线命名不一致(prime256v1 与 P-256),脚本中建议使用 openssl 实际列出的名称
  • 曲线与哈希不匹配(如 P-384 配 SHA-256)会拉低整体强度,签发前核对
  • 继续使用 160 位级别的老旧曲线,会让整体安全等级明显下降
  • 把 X25519 与 Ed25519 混用,一个做交换一个做签名,接口层次对不上
  • 自造曲线参数缺少安全性论证,实际强度无法保证

数据来源与参考

  • FIPS 186-5(批准曲线)
  • RFC 7748(Curve25519/448)
  • GB/T 32918(SM2 曲线)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌