橢圓曲線密碼體制(ECC)簡介


一、橢圓曲線的基本概念

簡單的說橢圓曲線並不是橢圓,之所以稱為橢圓曲線是因為他們是用三次方程來表示,並且該方程與計算橢圓周長的方程相似。

   對密碼學比較有意義的是基於素數域GF(p)和基於二進制域(GF(2^m))上的橢圓曲線。

   下面重點介紹基於GF(p)上的橢圓曲線:

                 y^2 º x^3 + a*x + b(modp)

 其中p是素數,a和b滿足:4a^3 + 27b^2 (mod p) ¹ 0

 滿足上述方程的整數對(x, y), 就叫橢圓曲線上的點。

素數域

其實域就是一個集合,在其上面進行加,減,乘,除運算而封閉。比如有理數集合,實數集合,復數集合,這些都是無限域,在密碼學中沒有什么實際意義,所以考慮與整數有關的域,對密碼學有實際意義。

研究最多的就是素數域GF(p)。我的理解就是一個素數p,在集合[0…p-1]上定義一個模加,一個模乘,就構成了一個有限素數域,比如取p = 5,定義如下模加, 模乘:

模加

+

0

1

2

3

4

0

0

1

2

3

4

1

1

2

3

4

0

2

2

3

4

0

1

3

3

4

0

1

2

4

4

0

1

2

3

模乘

+

0

1

2

3

4

0

0

0

0

0

0

1

0

1

2

3

4

2

0

2

4

1

3

3

0

3

1

4

2

4

0

4

3

2

1

下面以連續的橢圓曲線為例介紹一下橢圓曲線上

 的點的運算規則

  橢圓曲線上點的加法定義

    對於橢圓曲線上的任意兩點P(x1, y1),

      Q(x2, y2),R = (x3, y3), 其中R = P+Q

  具體描述如下:

     X3 = K^2 – X1 – X2(modp)

     y3 = k(x1-x3) – y1 (modp)

  其中

  當P不等於Q時

     K = (y2 – y1)/(x2 – x1) (modp)

  當P等於Q時

    k = (3*x1^2 + a)/2*y1 (modp)

  19_2197_7

零元   

       對橢圓曲線上的任意一點P(x1, y1), 有

      P + O = O + P = P

          如右圖

負元

     -P = (x1, -y1)

     P – P = O

     O = -O

       其中O為無窮遠點,一條與Y軸平行的直線

       只有一個無窮點O

純量乘法

KP = P+P+P+…+P  K個P相加

19_2197_8

 

基於GF(p)上的橢圓曲線舉例

P = 23, a = 1, b = 0

方程:y^2 = x^3 + x(mod23)

橢圓曲線上的點:

(0,0) (1,5) (1,18) (9,5) (9,18) (11,10) (11,13) (13,5)

(13,18) (15,3) (15,20) (16,8) (16,15) (17,10) (17,13) (18,10)

(18,13) (19,1) (19,22) (20,4) (20,19) (21,6) (21,17)

和無窮遠點O構成橢圓曲線上的加法群

其點運算規則和上面講到的連續橢圓曲線

上的運算規則是相同的

ec3_1

二、橢圓曲線離散對數在密碼中的應用

公鑰密碼算法總要基於一個數學難題,比如RSA的依據是給定兩個數p, q很容易相乘得到N, 而對n進行因式分解則相對困難的多。橢圓曲線密碼體制(ECC)采用的數學難題則是求橢圓曲線加法群的離散對數問題,具體描述如下:

Q = kG

其中Q為橢圓曲線上的點, G為橢圓曲線上的基點,k 為小於n的整數,n為G的階即, nG = O

根據上節提到的純量乘法知道k, G不難求出Q, 但是給定Q, G求k就相對困難了,這就叫橢圓曲線加法群上的離散對數問題。

   上述整數k,就是ECC私鑰, Q為公鑰, 可以利用此密鑰對進行加密,解密,簽名,驗證等公私鑰運算。

  根據上節提到的純量乘法知道k, G不難求出Q, 但是給定Q, G求k就相對困難了,這就叫橢圓曲線加法群上的離散對數問題。

   上述整數k,就是ECC私鑰, Q為公鑰, 可以利用此密鑰對進行加密,解密,簽名,驗證等公私鑰運算。

三、ECDSA簡單介紹

下面簡單介紹一下基於GF(p)的橢圓曲線數字簽名算法(ECDSA)

預備數據: h(待簽名Hash值),公鑰Q,私鑰d

簽名過程:

1. 選取一個隨機數k;

2. 計算k = kmodn, 如果k =0返回第1步重新選取;

3. 計算kG = (x1, y1);

4. 計算r = x1mondn;

5. 如果r = 0返回第2步;

6. 計算s = k^-1*(h+ dr )modn;

7. 如果s = 0, 返回第2步;

其中(r, s)為簽名結果。

驗證過程:

 1. 驗證1=<r<=n-1, 若不成立返回false

 2. 驗證1=<s<=n-1, 若不成立返回false

 3. 計算c = s^-1modn

 4. 計算u1 = e’*c modn, u2 = r*c mon n

 5. 計算u1*G+u2*Q = (x1, y1), 如果(x1, y1)為O 返回false

 6. 計算v = x1modn;

 7. 如果r != v 返回false

 8. 返回true

四、 ECC與RSA的比較

橢圓曲線加密技術(ECC)是建立在單向函數(橢圓曲線離散對數)得基礎上,由於它比RAS使用得離散對數要復雜得多。而且該單向函數比RSA得要難。

如160位ECC與1024位RSA有相同的安全強度。而210位ECC則與2048bitRSA具有相同的安全強度

計算量小,處理速度快雖然在RSA中可以通過選取較小的公鑰(可以小到3)的方法提高公鑰處理速度,即提高加密和簽名驗證的速度,使其在加密和簽名驗證速度上與ECC有可比性,但在私鑰的處理速度上(解密和簽名),ECC遠比RSA、DSA快得多。因此ECC總的速度比RSA、DSA要快得多。

存儲空間占用小ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多,意味着它所占的存貯空間要小


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM