ECDHE (椭圆曲线临时 Diffie-Hellman)
定义
ECDHE 是椭圆曲线上的临时 Diffie-Hellman 密钥交换,TLS 双方每次握手都生成新的椭圆曲线密钥对,并据此协商出共享密钥。
ECDHE 就是在椭圆曲线群上进行的 Diffie-Hellman 密钥协商,"临时"(Ephemeral)指双方每次握手都生成新的私钥、用完即丢。双方各自发送公钥点,再用对方的点和自己的私钥计算,得到相同的共享秘密。TLS 1.2 中它出现在 ECDHE-RSA-AES128-GCM-SHA256 这类套件名里;TLS 1.3 中客户端为 x25519 或 secp256r1(即 P-256)等曲线发送 key_share,服务器回应自己的那一份。
为什么重要
私钥只存在于一次握手中,所以 ECDHE 提供前向保密:即使证书私钥日后泄露,之前录下的会话也无法解密。与同等强度的有限域 DHE 相比,它的计算和传输开销小得多,256 位曲线就相当于 3072 位 DH 群的强度。今天几乎所有 HTTPS 连接都使用 ECDHE,后量子混合方案 X25519MLKEM768 中的经典部分也正是 X25519。
例子
在 Nginx 中设置曲线优先级,并检查服务器实际选用哪条曲线:
ssl_ecdh_curve X25519:prime256v1:secp384r1;
openssl s_client -connect example.com:443 -groups X25519
加了 -groups 后,只有服务器支持该曲线时握手才会成功,连接摘要里也会显示实际协商出的群。注意 OpenSSL 把 P-256 叫作 prime256v1。
常见误区
- 用 ECDHE 必须配 ECDSA 证书。 ECDHE 只负责密钥交换,身份认证仍可使用 RSA,ECDHE-RSA 系列套件就是这样。
- "临时"指服务器证书的密钥是临时的。 临时的只有密钥交换用的那对密钥,证书密钥是长期的。
- ECDH 和 ECDHE 是一回事。 静态 ECDH 套件复用证书里的固定密钥,没有前向保密,TLS 1.3 已将其删除。