移动端网络安全-密钥交换的前世今生(2)

本文介绍了椭圆曲线密码学的基础,包括椭圆曲线的数学概念、点的加法和乘法运算,以及有限域上的椭圆曲线。重点讲解了ECDH(椭圆曲线 Diffie-Hellman)密钥交换协议,阐述了其工作原理和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:前文讲了DH密钥交换协议,DH的数学基础是离散对数,而一个算法在数学上逆运算越困难,其本身被破解的难度越大。

而我们今天要讲的椭圆曲线算法,在数学上,就复杂的多。

 

  • 椭圆曲线的数学概念

椭圆曲线是由下面的方程描述的曲线:

y² = x³ + ax + b

4a³ + 27b²  !=0

比如,y² = x³ - x + 1的图像是:

椭圆曲线有这样的两个性质:

  1. 关于X轴对称
  2. 画一条直线跟椭圆曲线相交,它们最多有三个交点
  • 运算

首先定义椭圆曲线上点的加法。设椭圆曲线上有两点,A和B点,那么作过这两点的直线与该曲线相交于第三点(C点),然后关于X轴对称得到D点,则D为这两个点的和,记作D=A+B。很明显,D点也在该曲线上。所以椭圆曲线上两点之和也是曲线上的点。

特别地,如果两点重合,则作椭圆曲线在A点处的切线,与曲线相交于第二点(B点),然后关于X轴对称得到C点,则C点为A点与自身的和,记作C=A+A

A+A

计算A+B=D

当A != B时,两点纵坐标相减的值与横坐标相减的值就是直线的斜率:
λ = (Ya - Yb)/(Xa - Xb)
当A == B,计算过 C(D) 点切线的斜率,既椭圆曲线公式两边求导相除:
λ = (3Xa² - 1)/2Yb
斜率计算之后,对点R的坐标进行计算,公式如下:

Xd = (λ² - Xa - Xb) 
Yd = (λ(Xa - Xr) - Ya)

那么关于椭圆曲线的加法,我们可以得到以下结论

交换律:A+B=B+A

结合律:(A+B)+C = A+(B+C)
 

  • 椭圆曲线乘法

简单介绍完椭圆曲线上定义的加法运算,椭圆曲线上的乘法运算就比较简单了,因为加法可以退化为加法运算,就像算数上的1*3等价与1+1+1。
假设我们需要求2P,则可以化简为P+P=2P
同理,当我们需要求3P时,可以化简为P+2P=3P,其中2P=P+P
最后,我们可以得到规律,当求nP时(n为任意正整数),P+(n-1)P=nP,其中(n-1)P=P+(n-2)P
这样,通过上述介绍的椭圆曲线加法公式,完全可以进行椭圆曲线的乘法计算

这个乘法满足以下性质:

对于任意正整数kkk和jjj,有
k*(j*P) = (k*j)*P = j*(k*P)

  • 有限域上的椭圆曲线

但是密码学中,并不能使用上面介绍的实数域上的椭圆曲线。因为实数域上的椭圆曲线是连续的,有无限个点,密码学要求有限点。
实数域上的椭圆曲线的运算有误差,不精确。密码学要求精确。
所以我们需要引入有限域上的椭圆曲线。

y² = x³ + ax + b mod P

4a³ + 27b²  !=0 mod P

 

讲了这么多数学概念,相信大家头都大了,终于可以到整体了

  • 椭圆曲线的DH密钥交换(ECDH)

Tom和小明约定使用某条椭圆曲线(包括曲线参数,有限域参数以及基点P等)
Tom生成私钥A,计算A*P作为公钥公布出去
Jerry生成私钥B,计算B∗P作为公钥公布出去
Tom得知B*P后,计算
key=A*(B*P)
Jerry得到A*P后,计算
key=B*(A*P) 
双方都得到了相同的密钥的key,交换完毕

  • 安全

由于计算椭圆曲线上的离散对数是很难的,所以第三方没办法在只知道A∗P和B∗P的情况下计算出A或B的值。

需要注意的是,椭圆曲线DH算法相对于DH算法的安全性提升,仅仅只是在破解难度上,或者说在相等长度的密钥的情况下,ECDH更不容易被破解,对于中间人攻击这样的手段,依旧无能为力。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值