TLS: ECDH 算法基础

ECDH 基础

注: 本章节部分参考了 https://developer.aliyun.com/article/1171611 文章, 做了非常少的修改。

引用这篇文章,主要是为了让整个专栏尽可能完善, 不至于欠缺重要的知识点。

由于 ECC 密钥具有很短的长度,所以运算速度比较快。到目前为止,对于 ECC 进行逆操作还是很难的,数学上证明不可破解,ECC 算法的优势就是性能和安全性高。实际应用可以结合其他的公开密钥算法形成更快、更安全的公开密钥算法,比如结合 DH 密钥形成 ECDH 密钥协商算法,结合数字签名 DSA 算法组成 ECDSA 数字签名算法。


算法原理


椭圆曲线源自于求椭圆弧长的椭圆积分的反函数。一般情况下,椭圆曲线可以用下面的方程式来表示,其中 a, b, c, d 为系数:
E : y 2 = a x 3 + b x 2 + c x + d E: y^2 = ax^3 + bx^2 + cx+ d E:y2=ax3+bx2+cx+d
在这里插入图片描述

上面是一条椭圆曲线,但是它的样子也并不是一个椭圆。


1. 椭圆曲线上的运算


加法运算:椭圆曲线上的两点 A 和 B,构成的直线与椭圆曲线的交点,与 X 轴的对称点,定义为 A+B。如下图:

在这里插入图片描述

在这里插入图片描述

当然也存在两个点重合的情况,这种情况下,就相当于寻找 2 倍点的问题。在椭圆曲线上的一点 A,做一条切线,与椭圆曲线的另外一交点,相对于 X 轴的对称点成为 2 倍点。这种运算成为 2 倍计算,如下图:

在这里插入图片描述

点 A 相对于 X 轴的对称位置的点成为 -A。这个运算成为椭圆曲线的正负取反运算。如下图:

在这里插入图片描述


2. 椭圆曲线加密实质


椭圆曲线加密的实质是利用椭圆曲线上离散对数问题(Elliptic Curve Discrete Logarithm Problem, ECDLP),实质是已知点 xG 求数 x 的问题

已知:

  • 椭圆曲线 E

  • 椭圆曲线 E 上的一点 G (基点)

  • 椭圆曲线 E 上的一点 xG (G 的 x 倍)

求:

  • 数 x

椭圆曲线在实数域上是连续的,曲线也是一条光滑的曲线。假设椭圆曲线为 E2:y^2 = x^3 + x + 1,如下图:

在这里插入图片描述

如果位于有限域 F23 上,那么 E2:y^2 ≡ x^3 + x + 1 (mod 23)。此时椭圆曲线就不是一个连续的曲线了,而是一堆离散的点。如下图:

在这里插入图片描述

上图中每个点的 y 坐标对 23 求余,都等于 x^3 + x + 1 对 23 求余。如果我们把 E2 上的点 G=(0,1) 作为基点,那么按照椭圆曲线的计算规则计算 2G、3G、4G、5G、……。

在这里插入图片描述

这就是“已知 G 和 xG 求 x 的问题”。这个问题在 p 相当大的时候,很难求解。椭圆曲线无法被破解的原因是:求解椭圆曲线上的离散对数问题是非常困难的

但是椭圆曲线加密算法并非在实数域 R 上,而是在有限域 F§ 上。有限域 F§ 指的是对于某个给定的质数 p,由 0,1,2,……,p-1 共 p 个元素所组成的整数集合中定义的加减乘除运算。


3. 椭圆曲线 Diffie-Hellman 密钥交换 (ECDH)


  • p = Field that the Curve is defined over
  • a, b = Values define the Curve
  • G = the generator point
  • n = prime order of G
  • h = cofactor

非椭圆曲线的 Diffie-Hellman 密钥交换利用的是:

以 p 为模,已知 G 和 G^x mod p 求 x 的复杂度(有限域上的离散对数问题)

椭圆曲线的 Diffie-Hellman 密钥交换利用的是:

在椭圆曲线上,已知 G 和 xG 求 x 的复杂度(椭圆曲线上的离散对数问题)

在这里插入图片描述

  • Alice 向 Bob 发送点 G (点 G 被窃听了也没有关系)
  • Alice 生成随机数 a。这个数只有 Alice 自己一个人知道, 这个 a 称为 Alice 的私钥.
  • Bob 生成随机数 b。这个数只有 Bob 自己一个人知道, 这个 b 称为 Bob 的私钥.
  • Alice 向 Bob 发送点 aG。它是 Alice 的公钥。
  • Bob 向 Alice 发送点 bG。它是 Bob 的公钥。
  • Alice 拿到 Bob 发过来的 bG,开始计算其在椭圆曲线上 a 倍的点,即 a(bG) = abG,它就是 Alice 和 Bob 的共享密钥。
  • Bob 拿到 Alice 发过来的点 aG 开始计算其在椭圆曲线上 b 倍的点,即 b(aG) = baG = abG,它就是 Alice 和 Bob 的共享密钥。

窃听者可以拿到 3 个有效信息:G、aG、bG。但是由于“已知 G 和 xG 求 x 非常难”,导致已知 G 和 aG 无法求解出 a,已知 G 和 bG 无法求解出 b。所以最终也就无法求解出私钥 abG。

如果采用静态的 DH 算法和 ECC 结合就是 ECDH 算法。这种方式每次都使用的相同的 G 基点,它的优点在于可以避免每次在初始化连接时服务器频繁生成 G。这个过程比较消耗 CPU。但是它带来的缺点是,一旦随机数 a、b 被泄露了,那么在这之前的所有会话都将会被解密。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VFSSoft

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值