1. 程式人生 > >橢圓曲線公鑰密碼學習

橢圓曲線公鑰密碼學習

一、         密碼背景

基於有限域上離散對數問題的公鑰密碼體制,最著名的是ElGamal體制,是由T. ElGamal在1985年提出的 ElGamal有較好的安全性,同一明文在不同時刻會產生不同的密文應用廣泛,尤其數字簽名方面的應用,著明的美國數字簽名標準DSS就是ElGamal的一種變形。

二、         加解密演算法

加密過程:

(1)   A將明文訊息編碼成一個數m<p,並在橢圓群(a,b)中選擇一點

(2)   在區間[1,n-1]內,A選取一個隨機數k,計算點P1:P1=(x1,y1)=Kg;

(3)   依據接收方B的公鑰,A計算點=(x2,y2)=k;

(4)  A計算密文C=m

(5)  A傳送加密資料{Kg,,C}給接收方B;

解密過程:

(1)   接受方B收到加密資料={Kg,,C};

(2)   接受方B使用自己的私鑰作如下計算:

(3)   B計算m=(C-)/x,得明文m。

三、         橢圓曲線公鑰密碼演算法數論基礎

中學的時候我們學過圓錐曲線,比如橢圓、雙曲線和拋物線。因為描述這些曲線的方程都是二次方程,圓錐曲線又被稱為二次曲線。而橢圓曲線是則是由三次方程描述的一些曲線。更準確地說,橢圓曲線是由下面的方程描述的曲線:

 

y2=x3+ax+b其中4a3+27b2≠0

 

需要注意的是,橢圓曲線之所以叫“橢圓曲線”,是因為其曲線方程跟利用微積分計算橢圓周長的公式相似。實際上它的影象跟橢圓完全不搭邊。

下圖是橢圓曲線y2=x3−x+1的影象


橢圓曲線有這樣的兩個性質:

關於X軸對稱

畫一條直線跟橢圓曲線相交,它們最多有三個交點

  

  橢圓曲線上的運算:

  由於橢圓曲線加密進行的運算實際上都是在橢圓曲線上進行的,所以接下來需要定義一些橢圓曲線上的運算。

必須注意的是,這裡把這些運算稱為“加法”和“乘法”僅僅是方便描述,他們跟平時認知的加法和乘法完全是兩碼事,完全可以給他們取其它名字(比如”乘法“和”冪運算“等)。

首先定義座標系中距離X軸無窮遠點為橢圓曲線上的一個特殊點,稱為0點。

那麼此時上述第二條性質可以加強為:過曲線上任意兩點(可重合)的直線必定與曲線相交於第三點。

然後定義橢圓曲線上點的加法。設橢圓曲線上有兩點,A和B點,那麼作過這兩點的直線與該曲線相交於第三點(C點),然後關於X軸對稱得到D點,則D為這兩個點的和,記作D=A+B。很明顯,D點也在該曲線上。所以橢圓曲線上兩點之和也是曲線上的點。

特別地,如果兩點重合,則作橢圓曲線在A點處的切線,與曲線相交於第二點(B點),然後關於X軸對稱得到C點,則C點為A點與自身的和,記作C=A+A

那麼關於這個加法,我們可以得到以下結論:

A+B=B+A

也就是橢圓曲線上的加法滿足交換律。

A+0=A

因為0點是無窮遠點,所以過A點與0點的直線是垂直於X軸的,它與曲線相交於另一點B點,那麼B點關於X軸對稱的點就是A點,即A點為A點和0點之和。

然後在加法的基礎上,定義橢圓曲線上點的乘法。

設P是橢圓曲線上的一個點,那麼正整數k乘以點P的結果由下面的式子定義,注意式子中的加法是上面提到的橢圓曲線上點的加法:

1∗P=P

2∗P=P+P

3∗P=2∗P+P

k∗P=(k−1)∗P+P

這個乘法滿足以下性質:

對於任意正整數k和j,有

k∗(j∗P)=(kj)∗P=(jk)∗P=j∗(k∗P)

   

橢圓曲線上的離散對數問題:

定義了基本的加法和乘法運算後,我們可以由此得到橢圓曲線加密依賴的數學難題。

 

k為正整數,P是橢圓曲線上的點(稱為基點),已知k∗P和P,計算k

從程式實現的角度來考慮,假設有這麼一個函式:

 Point add(Point A, Point B) {...}

函式引數是兩個橢圓曲線上的點,返回值是過兩個點的直線與橢圓曲線相交的第三個點關於X軸對稱的點。

那麼按照如下方式呼叫函式:

 

Point result =P;

for (int i = 0;i < k - 1; i++)

    result = add(P, result);

sendTo((result,P), others);

如果別人只知道result和P點,是很難求出k的值是多少的。

 

如果我們改一種記法,把橢圓曲線上點的加法記作乘法,原來的乘法就變成了冪運算,那麼上述難題的形式跟離散對數問題應該是一致的。即:

k為正整數,P是橢圓曲線上的點,已知Pk和P,計算k=logPPk。

所以這個難題叫橢圓曲線上的離散對數問題。

儘管兩者形式一致,但是他們並不等價。實際上這個問題比大整數質因子分解(RSA)和離散對數(DH)難題都要難得多,以致於同樣的安全強度下,橢圓曲線加密的金鑰比RSA和DH的短不少,這是橢圓曲線加密的一大優勢。

 

   有限域上的橢圓曲線:

   但是密碼學中,並不能使用上面介紹的實數域上的橢圓曲線。因為

1. 實數域上的橢圓曲線是連續的,有無限個點,密碼學要求有限點。

2. 實數域上的橢圓曲線的運算有誤差,不精確。密碼學要求精確。

所以我們需要引入有限域上的橢圓曲線。

 

所謂有限域上的橢圓曲線,簡單來說就是滿足下面式子要求的曲線(x, y, a, b都是小於素數p的非負整數):

y2modp=x3+ax+bmodp其中4a3+27b2≠0modp

對比一下原先的橢圓曲線的方程:

y2=x3+ax+b其中4a3+27b2≠0

可以看到這個只是對原式進行了簡單的取模處理而已。實際上RSA和DH中也是基於這種形式的取模運算,它們其實也都是在有限域上進行的。

 

一、         密碼侷限性(攻擊方法)

橢圓曲線安全性依賴於基於橢圓曲線的有限群上的離散對數難題。於基於RSA的數字簽名和基於有限域離散對數的數字簽名相比,在相同的安全強度條件下,橢圓曲線方案有如下特點:簽名長度短,金鑰儲存空間小,特別適用於儲存空間有限、頻寬受限、要求高速實現的場合(如在智慧卡中應用)。

為使得有較好的安全性,這些引數的選取應滿足如下條件:

(1)   P越大越安全,但越大,計算速度就越慢,160位可以滿足目前的安全要求;

(2)   為了防止Pohlig-Hellman方法攻擊,n為大於素數(n>),對於固定的有限域GF(P),n應當儘可能大;

(3)   因為+ax+b無重複因子才可基於橢圓曲線(a,b)定義群,所以要求4+27(mod p);

(4)  為了防止小步——大步攻擊,要保證P的階n足夠大,要求n4;

(5)   為了防止MOV規範法和Smart法,不能選取超奇異橢圓曲線和異常橢圓曲線等兩類特殊的曲線。