一、橢圓曲線的基本概念
簡單的說橢圓曲線並不是橢圓,之所以稱為橢圓曲線是因為他們是用三次方程來表示,並且該方程與計算橢圓周長的方程相似。
對密碼學比較有意義的是基於素數域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)
零元
對橢圓曲線上的任意一點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相加
基於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構成橢圓曲線上的加法群
其點運算規則和上面講到的連續橢圓曲線
上的運算規則是相同的
二、橢圓曲線離散對數在密碼中的應用
公鑰密碼算法總要基於一個數學難題,比如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相比要小得多,意味着它所占的存貯空間要小