基于ECC算法的秘钥协商

基于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 密钥交换算法。

如下图

 

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值