一. 基本概念
1.1 ECC
Elliptic Curves Cryptography (椭圆曲线密码学),一种建立公开密钥加密的算法,基于椭圆曲线数学。
ECC的主要优势是在某些情况下它比其他的方法使用更小的密钥(比如RSA加密算法)提供相当的或更高等级的安全。
ECC的另一个优势就是定义群之间的双线性映射,基于Weil对或是Tate对。
ECC的缺点是同长度密钥下加密和解密操作的实现比其他机制花费的时间长,但由于可以使用更短的密钥达到同级别的安全程度,所以同级安全程度下速度相对更快。一般认为160比特的椭圆曲线密钥提供的安全强度与1024比特RSA密钥相当。
1.2 ECDH
Elliptic Curve Diffe-Hellman key Exchange (椭圆曲线迪菲-赫尔曼金钥交换),一种匿名的密钥合意协议。
ECC算法和DH结合使用,用于密钥磋商,这个密钥交换算法称为ECDH。交换双方可以在不共享任何秘密的情况下协商出一个密钥。ECC是建立在椭圆曲线的离散对数问题上的密码体制,给定椭圆曲线一个点G,一个整数k,求解Q=kG很容易的;给定一个点G、Q,知道Q=kG,求整数k是一个难题。ECDH即建立在此数学难题之上。
1.2.1ECDH密钥交换
ECDH工作过程如下(以Alice和Bob为例)
- 首先Alice和Bob需要使用同一条椭圆曲线,参数(p,a,b,G,n,h)相同。
- Alice和Bob生成各自的公私钥。Alice生成私钥dA,公钥HA=dA G,Bob生成私钥dB,公钥HB=dB G。
- Alice和Bob交换各自的公钥HA和HB。攻击者可以获得HA和G,由于椭圆曲线的离散对数问题是难题,所以攻击者不可以通过HA和G计算出dA。同理HB也是如此。(HA、HB现在已经是椭圆曲线上随机的一点,可以被默认为P点)
- Alice计算S=dA HB ,Bob计算S=dB HA,可以推导出它们计算的值相同。推导过程S= dA HB=dA dB G=dB dAG=dB HA。 (S=dA HB 可以被看成 S=kP ,使用窗口法实现点乘)