本文是截取自Elliptic Curve Cryptography: ECDH and ECDSA,现把关于ECDH密钥协商算法部分翻译一下,有错误之处,请以后指出。

使用ECDH加密

ECDH是 Diffie-Hellman算法的一个变种,其本质是一种密钥协商算法,而不是我们平时所说的加密算法。这样意味着ECDH为通信双方定义了如何生成密钥以及如何交换密钥。而采用何种加密算法则由用户自己决定,和ECDH无关。

ECDH要解决的问题如下:

通信双方(Alice 和 Bob)需要安全的交换信息,但是通信过程中第三方可能会拦截并窃听,但是要求第三方不能解密这些加密信息。这也是TLS使用的原则之一,用下面这个例子说明。

  1. 第一步, Alice 和 Bob 生成各自的公私钥对。 Alice 拥有私钥dA 以及公钥 HA = dA G Bob拥有私钥dB 以及公钥 HB = dB G 注意,Bob和Alice必须使用同样的椭圆曲线参数:即双方使用共同的基点G作为团圆曲线的有限域。

  2. 第二步, Alice 和 Bob 通过不安全的信道交换各自的公钥 HA 和 HB 尽管中间的攻击者能够拦截并知道HA 和 HB的内容,但是攻击者无法求出dA 或者 dB ,因为攻击者无法求解离散对数问题。

  3. 第三步, Alice 计算: S = dA HB (用自己的私钥和Bob的公钥), 然后Bob计算 : S = dB HA (用自己的私钥和Alice的公钥)。 这里双方计算出的S相同, 事实上以下公式也成立:

S = dA HB = dA(dBG) = dB(dAG) = dB HA

而中间的攻击者,尽管知道双方的公钥HA 和 HB (即使也知道其他的公共参数),也无法求出 共享秘密S . 这就是传说中的Diffie-Hellman问题,也可以表述为:

给定三个点P, aP 和 bP, 如何求出abP?

或者表述为:

给定三个整数 k, kx 和 ky 如何求出kxy ?

(这个描述最早出现在Diffie-Hellman的算法中,基于摸运算)

DH密钥交换法:Alice和Bob可以很容易的计算出共享密钥, 但是中间攻击者很难计算。

基于椭圆曲线的DH问题(ECDH) 就是一个很难计算的问题。 本身基于离散对数的求解难题,因为目前还没有一种数学方法可以求解离散对数问题。 我们可以肯定的是这个问题目前无解,因为求解对数问题也是求解Diffie-Hellman问题的途径。

现在Alice和Bob已经安全的协商了一个共享秘密,他们可以用这个秘密作为对称加密算法的密钥。

例如,双方可以取S 的一个坐标x,作为加密算法的密钥,加密算法无所谓,AES或者3DES都可以。 TLS 的做法也类似,不同之处是TLS把坐标x和另外的和链接相关的一个盐值一起做了一次Hash, 然后把Hash值作为密钥。

本文系tweetyf.org翻译编辑,欢迎转载分享。