首页/安全/加密与证书速查/ECDH 椭圆曲线密钥协商
加密算法基础95 条

ECDH 椭圆曲线密钥协商

双方各自生成密钥对并交换公钥,各自计算得到相同共享秘密;有静态(固定密钥)与临时(ECDHE)两种用法,后者提供前向保密。

加密与证书速查安全更新于 2026-10-12
原理共享点 = 私钥 × 对方公钥
变体静态 ECDH(固定密钥)、临时 ECDHE
输出共享秘密(须经 KDF 派生密钥)
常用曲线P-256、X25519、SM2

Python 示例(cryptography)

Python 示例(cryptography)
from cryptography.hazmat.primitives.asymmetric import ec

a = ec.generate_private_key(ec.SECP256R1())
b = ec.generate_private_key(ec.SECP256R1())
ss_a = a.exchange(ec.ECDH(), b.public_key())
ss_b = b.exchange(ec.ECDH(), a.public_key())   # ss_a == ss_b
共享秘密是曲线上的点坐标,通常再经 HKDF 等 KDF 派生出多条用途分离的密钥。

易错点

  • 静态 ECDH 不提供前向保密:长期私钥泄漏会波及历史会话(若攻击者已存档流量)
  • 双方曲线或点格式不一致会导致协商失败,跨系统先核对参数集

数据来源与参考

  • NIST SP 800-56A Rev.3(密钥协商)
  • RFC 7748
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌