ECDH 密钥交换协议在 Signal、Wire、WhatsApp 等即时通讯软件中的应用
什么是 ECDH?
ECDH 在即时通讯中的应用场景
Signal、Wire、WhatsApp 中的 ECDH 实现
Signal
Wire
总结
即时通讯软件的安全性越来越受到人们的重视,而端到端加密(E2EE)是保障通讯安全的重要手段。ECDH(Elliptic Curve Diffie-Hellman)密钥交换协议作为一种重要的非对称加密算法,在 Signal、Wire、WhatsApp 等主流即时通讯软件中扮演着关键角色,为端到端加密的实现提供了基础。今天咱们就来深入聊聊 ECDH 在这些应用中的具体实现细节。
什么是 ECDH?
先来简单回顾一下 ECDH。ECDH 是一种密钥协商协议,它允许两个在不安全信道上通信的参与方,在没有事先共享任何秘密的情况下,建立一个共享的秘密密钥。这个共享密钥可以用于后续的对称加密,从而实现消息的保密传输。
ECDH 基于椭圆曲线密码学(ECC)。椭圆曲线密码学的安全性基于“椭圆曲线离散对数问题”(ECDLP)的难解性。简单来说,就是在椭圆曲线上,已知一个点和一个整数的乘积,很难反推出这个整数。这个特性使得 ECC 可以在相对较短的密钥长度下,提供与 RSA 等传统非对称加密算法相当的安全性。
ECDH 的密钥交换过程大致如下(以 Alice 和 Bob 为例):
- 选择椭圆曲线和基点: Alice 和 Bob 共同约定一条椭圆曲线 E 和一个基点 G(G 是 E 上的一个点)。
- 生成私钥: Alice 和 Bob 各自随机生成一个整数作为自己的私钥,分别记为 dA 和 dB。
- 生成公钥: Alice 和 Bob 分别计算自己的公钥:PA = dA * G,PB = dB * G。这里的乘法是椭圆曲线上的点乘运算。
- 交换公钥: Alice 和 Bob 通过不安全信道交换彼此的公钥。
- 计算共享密钥: Alice 计算 S = dA * PB,Bob 计算 S = dB * PA。由于椭圆曲线点乘运算的特性,Alice 和 Bob 计算出的 S 是相同的。这个 S 就是他们共享的秘密密钥。
攻击者即使截获了 Alice 和 Bob 交换的公钥 PA 和 PB,也无法在不知道私钥 dA 和 dB 的情况下计算出共享密钥 S,这就是 ECDH 的安全性所在。
ECDH 在即时通讯中的应用场景
在即时通讯软件中,ECDH 主要用于以下几个方面:
- 密钥协商: 这是 ECDH 最核心的应用。在建立端到端加密会话时,通讯双方需要协商出一个共享密钥,用于后续消息的对称加密。ECDH 提供了安全、高效的密钥协商机制。
- 前向保密(Forward Secrecy): 前向保密是指,即使一方的长期私钥泄露,也不会影响之前通讯的安全性。在即时通讯中,通常会结合 ECDH 和“双棘轮算法”(Double Ratchet Algorithm)来实现前向保密。每次发送消息时,都会生成新的临时 ECDH 密钥对,用于协商新的会话密钥。这样,即使某个时刻的私钥泄露,也只能解密该时刻的消息,而无法解密之前的消息。
- 身份验证: 在某些情况下,ECDH 也可以用于身份验证。例如,可以使用 ECDH 结合数字签名来验证消息发送方的身份,防止中间人攻击。
Signal、Wire、WhatsApp 中的 ECDH 实现
下面我们分别来看看 Signal、Wire 和 WhatsApp 中 ECDH 的具体实现。
Signal
Signal 使用的是自己开发的 Signal 协议(以前称为 TextSecure 协议)。Signal 协议以其高度的安全性而闻名,被认为是目前最安全的即时通讯协议之一。
Signal 协议中的密钥交换主要基于 X3DH(Extended Triple Diffie-Hellman)协议。X3DH 是对 ECDH 的扩展,它结合了三个 Diffie-Hellman 密钥交换,提供了更强的安全性。
Signal 协议中使用了以下几种密钥:
- 身份密钥(Identity Key): 这是用户的长期密钥,用于身份验证。
- 预共享密钥(Pre Keys): 用户在注册时会生成一批预共享密钥,并上传到服务器。这些密钥用于在对方离线时建立会话。
- 签名预共享密钥(Signed Pre Key): 这是用身份密钥签名的预共享密钥,用于证明预共享密钥的有效性。
- 一次性预共享密钥(One-Time Pre Keys): 这是一次性的预共享密钥,用完即焚。在预共享密钥用完时使用。
- 临时密钥(Ephemeral Keys): 这是每次发送消息时生成的临时密钥,用于实现前向保密。
Signal 协议的密钥交换过程比较复杂,这里只做简要介绍:
- 发起方(Alice)从服务器获取接收方(Bob)的身份密钥、签名预共享密钥和一次性预共享密钥(可选)。
- Alice 生成一个临时密钥对。
- Alice 使用 X3DH 协议,结合自己的身份密钥、临时密钥和 Bob 的身份密钥、签名预共享密钥、一次性预共享密钥(可选),计算出一个共享密钥。
- Alice 使用这个共享密钥派生出消息密钥,用于加密第一条消息。
- 后续消息的加密使用双棘轮算法,结合 ECDH 和 KDF(Key Derivation Function)不断更新会话密钥,实现前向保密和后向保密(Break-in Recovery)。
Signal 协议中使用的椭圆曲线是 Curve25519,这是一种高性能、高安全性的椭圆曲线。
Wire
Wire 使用的是 Proteus 协议,Proteus 协议是 Signal 协议的一个分支,两者在密钥交换方面非常相似。
Wire 同样使用了 X3DH 协议进行密钥交换,也使用了 Curve25519 椭圆曲线。与 Signal 协议的主要区别在于,Wire 不使用一次性预共享密钥,而是完全依赖预共享密钥。
WhatsApp 也使用了 Signal 协议进行端到端加密。因此,WhatsApp 的密钥交换机制与 Signal 基本相同,也使用了 X3DH 协议和 Curve25519 椭圆曲线。
总结
ECDH 密钥交换协议在 Signal、Wire、WhatsApp 等即时通讯软件中发挥着至关重要的作用,为端到端加密的实现提供了安全、高效的密钥协商机制。这些软件都采用了基于 ECDH 的高级协议(如 X3DH),并结合双棘轮算法等技术,实现了前向保密、后向保密等高级安全特性,为用户的通讯安全提供了强有力的保障。
当然,端到端加密只是保障通讯安全的一个方面,还需要结合其他安全措施,如安全编码、安全审计、漏洞修复等,才能构建一个真正安全的通讯系统。但无论如何,ECDH 都是构建安全即时通讯系统的基石之一。
希望通过今天的介绍,你能对 ECDH 在即时通讯中的应用有更深入的了解。如果你对这方面感兴趣,建议进一步研究 Signal 协议、X3DH 协议、双棘轮算法等相关技术,相信你会对现代密码学在实际应用中的魅力有更深刻的体会。