移動端網絡安全-密鑰交換的前世今生(2)

前言:前文講了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更不容易被破解,對於中間人攻擊這樣的手段,依舊無能爲力。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章