不懂ECDHE, 怎么懂TLS

497 阅读2分钟

ECDHE(Elliptic Curve Diffie-Hellman Ephemeral)算法是一种基于椭圆曲线密码学的密钥交换协议,用于在 TLS(Transport Layer Security)协议中实现安全的通信。ECDHE 算法的工作流程如下:

  1. 密钥生成:客户端和服务器各自选择一个随机数作为椭圆曲线私钥,并使用椭圆曲线算法生成对应的椭圆曲线公钥。这个过程中,双方的私钥是随机生成的,且仅在当前会话中使用,不会在后续的会话中重用,这就是所谓的临时性(Ephemeral)[2][2]。

  2. 公钥交换:在握手阶段,客户端和服务器互相交换椭圆曲线公钥。这个过程中,双方的公钥是公开的,但是私钥是保密的[2]。

  3. 密钥协商:客户端和服务器各自使用对方的椭圆曲线公钥和自己的椭圆曲线私钥,通过椭圆曲线的点运算生成一个共享密钥。由于椭圆曲线的数学性质,这个共享密钥在双方都知道,但是不能被第三方计算出来。这个过程中,双方的私钥都是随机、临时生成的,都是不公开的,即使根据公开的信息(椭圆曲线、公钥、基点 G)也是很难计算出椭圆曲线上的离散对数(私钥)[2][2]。

  4. 对称加密通信:使用这个共享密钥进行对称加密通信。这个过程中,双方的私钥都是随机、临时生成的,都是不公开的,即使根据公开的信息(椭圆曲线、公钥、基点 G)也是很难计算出椭圆曲线上的离散对数(私钥)[2]。

ECDHE 算法的优点是每次握手都会生成一个新的密钥,即使有人能够破解一个会话的密钥,也无法用这个密钥破解其他会话的通信,这就是所谓的前向保密性(Forward Secrecy)[2]。此外,ECDHE 相比于 RSA 握手过程省去了一个消息往返的时间,这个有点「抢跑」的意思,它被称为是「TLS False Start」,跟「TCP Fast Open」有点像,都是在还没连接完全建立前,就发送了应用数据,这样便提高了传输的效率[2]。

总结来说,ECDHE 算法通过使用椭圆曲线密码学,提供了一种高效且安全的密钥交换方法,支持前向保密性,并且能够在 TLS 握手过程中提前发送加密的数据,从而提高通信的效率。