基于ECC算法的秘钥协商

时间:2024-04-12 07:37:14

基于ECC算法的衍生算法

  • ECDH(ECC+DH)
  • RSA
  • ECDHE(ECC+DHE)

ECDH**协商(ECC+DH)

  • 椭圆曲线密码学是属于非对称密码学的,其私钥的计算公式如下:
  1. 私钥是一个随机数d,取值范围在1……n-1,其中n是子群的阶
  2. 公钥是点H=dG,G是子群的基点
  • 如果知道私钥d 和椭圆曲线参数G,求公钥H是很容易的,但是只知道公钥H和椭圆曲线参数G,求解私钥d是非常困难的,需要解决离散对数难题,椭圆曲线的安全性保证有赖于此。
  • ECDH**协商算法基于椭圆曲线密码系统(ECC),使用较短的**长度可提供与RSA或DH算法同等的安全等级,**长度有160 ~ 256位比特的椭圆曲线算法与**长度1024 ~ 3072位比特的非ECC算法安全强度相同。

常用有限域上的椭圆曲线

椭圆曲线由以下参数组成

T=(p,a,b,G,n,h)

  • p 有限域中的大素数,长度一般224比特、256比特、384比特
  • a 整数,椭圆方程系数
  • b整数,椭圆方程系数
  • G,椭圆曲线上某点,生成元
  • n,为一个素数,表示椭圆曲线的阶
  • h,余因数
  • 其中G包含Gx和Gy一共2个参数,非压缩模式以04开始,压缩模式以03开始,实际使用中一般采用非压缩模式
  • 通过模数p和系数a,b构成椭圆曲线方程y^2=x^3+ax+b mod p
  • TLS支持很多椭圆曲线,常用的有2个secp256r1和secp284r1 : secp256r1大素数p长度256比特(32字节)和secp384r1大素数p长度384比特(48字节)

ECDH**协商步骤

  • ECDH其实和DH思想是一样的,只不过这是基于椭圆曲线离散对数实现的。

ECDH共享参数

  • Alice和Bob进行ECDH**协商之前双方要有共同的ECDH共享参数,即必须选择相同的椭圆曲线方程、大素数p、生成源G,实际中这些椭圆曲线已经被相关组织批准,比如上边的secp256r1和secp384r1,通过这个双方就确定了这些共享参数

ECHD**协商

  1. Alice选择一个比椭圆曲线阶小的随机数HA作为私密参数,计算公钥HA=dAG发送给Bob
  2. Bob选择一个比椭圆曲线阶小的随机数HB作为私密参数,计算公钥HB=dBG发送给Alice
  3. Bob收到HA并计算得到共享**参数S=dBHA
  4. Alice收到HB并计算得到共享**参数S=dAHB
  • 根据椭圆曲线结合律S=dAHB=dAdBG=dBdAG=dBHA。目前Alice和Bob就得到了相同的S,但是第三方即使知道椭圆曲线和HAHB的前提下,是无法获取S的,因为在推导S的时候是需要知道其中一个私钥,这必须**椭圆曲线离散对数难题,这个是很难**的。 应用上,一般先利用ECDH协商共享**,再利用共享**计算出对称**等其他需要的**,通信双发对数据进行对称加密安全通信。

问题

  • 如果采用静态的 DH 算法和 ECC 结合就是 ECDH 算法。这种方式每次都使用的相同的 G 基点,它的优点在于可以避免每次在初始化连接时服务器频繁生成 G。这个过程比较消耗 CPU。但是它带来的缺点是,一旦随机数 a、b 被泄露了,那么在这之前的所有会话都将会被解密。
  • 为了解决这个问题,于是出现了 DHE 算法(Diffie-Hellman Ephemeral ,短暂临时的 DH 算法),结合 ECC 后形成了 ECDHE 算法。它可以保证每次通信使用的共享**都是不同的,DH **对仅仅保存在内存中,不像 RSA 的私钥保存在磁盘上,攻击者即使从内存中**了私钥,也仅仅影响本次通信,所以无需担心在此之前的通信内容会被解密,这样的特征成为前向安全性(Forward Secrecy,FS)或者完全前向安全性(Perfect Forward Secrecy,PFS)。更安全的是,协商出会话**后,a 和 b 两个私钥可以丢弃,进一步提升了安全性,在有限的时间、有效的空间生成了**对。在 TLS 握手中使用的 ECDHE_ECDSA 和 ECDHE_RSA **交换算法。

如下图

基于ECC算法的秘钥协商

 

参考链接