ECDH 密钥交换
ECDH(椭圆曲线 Diffie–Hellman 密钥交换)是一种匿名密钥协商方案,允许各自持有椭圆曲线公私钥对的双方通过不安全信道建立一个共享秘密。ECDH 与经典的 DHKE(Diffie–Hellman 密钥交换)算法非常相似,但它使用 ECC 点乘法而不是模幂运算。ECDH 基于 EC 点的以下性质:
- (a * G) * b = (b * G) * a
如果我们有两个秘密数 a 和 b(分别属于 Alice 和 Bob 的两个私钥),以及一条生成点为 G 的 ECC 椭圆曲线,就可以通过不安全信道交换值 (a * G) 和 (b * G)(Alice 和 Bob 的公钥),然后派生出共享秘密:secret = (a * G) * b = (b * G) * a。非常简单。上述等式可写成以下形式:
- alicePubKey * bobPrivKey = bobPubKey * alicePrivKey = secret
ECDH 算法(椭圆曲线 Diffie–Hellman 密钥交换)非常简单:
- Alice 生成一个随机 ECC 密钥对:{alicePrivKey, alicePubKey = alicePrivKey * G}
- Bob 生成一个随机 ECC 密钥对:{bobPrivKey, bobPubKey = bobPrivKey * G}
- Alice 和 Bob 通过不安全信道(例如互联网)交换各自的公钥
- Alice 计算 sharedKey = bobPubKey * alicePrivKey
- Bob 计算 sharedKey = alicePubKey * bobPrivKey
- 此时 Alice 和 Bob 都拥有相同的 sharedKey == bobPubKey * alicePrivKey == alicePubKey * bobPrivKey
下一节将实现 ECDH 算法,并通过代码示例进行演示。