跳到主要内容
ecdsa.com

ECDH(椭圆曲线 Diffie–Hellman)

一种密钥协商方法:双方各自用自己的椭圆曲线私钥与对方的公钥计算出相同的共享密钥,即 d_A·d_B·G 的 x 坐标。
其他写法Elliptic Curve Diffie-HellmanECDH key agreementECC CDH

每一方都有私有标量 d 和公开点 Q = d·G;双方计算 Z,即 d_A·Q_B = d_B·Q_A 的 x 坐标。Z 不是密钥:它要经过密钥派生函数处理,例如 HKDF(TLS 1.3)、SP 800-56C 的单步 KDF 或 Concat KDF(JOSE ECDH-ES)。NIST SP 800-56A Rev. 3 规定了这一原语以及各种方案变体(临时-临时、临时-静态等)。

接收方必须校验对端的点:在曲线上、不是无穷远点、位于正确的子群中(SP 800-56A §5.6.2.3)。跳过这一步会招致无效曲线攻击,只需几百次查询就能提取出静态私钥;2017年,多个 JOSE 库的 ECDH-ES 实现就遭到了这种攻击。X25519 的设计把这项检查简化为拒绝全零结果。

临时密钥(ECDHE)提供前向保密,也是 TLS 1.3 唯一使用的类型;接收方使用静态密钥的 ECDH 出现在 ECIES、JWE ECDH-ES 和 HPKE 中。常用的组有 secp256r1、secp384r1、x25519 和 x448。ECDH 和 ECDSA 共用曲线和密钥格式,但 SP 800-57 第 1 部分建议每个密钥只用于一种用途。NIST IR 8547(草案)提议在2035年之后禁止使用 ECDH;X25519MLKEM768 等混合方案是迁移路径。

标准与参考资料

全部术语