• 沒有找到結果。

橢圓曲線密碼學

第二章、 文獻探討

2.5 應用橢圓曲線於數位簽章與 Diffie-Hellman 金鑰交換機制

2.5.1 橢圓曲線密碼學

橢圓曲線密碼系統是由 Neil Koblitz(Koblitz, 1985)和 Victor Miller(Miller, 1985)兩位學者分別於 1985 年首先提出[4][10],大多數的橢圓曲線密碼系統是在 模

p

F

2n下運算。此密碼系統仍是存有 RSA 或 ElGamal 常見的弱點(e.g. 同模 數攻擊、低指數攻擊)。RSA 與 ElGamal 系統中需要使用長度為 1024 位元的模數,

才能達到足夠的安全等級,而 ECC 只需使用長度為 160 位元的模數即可,且傳 送密文或簽章所需頻寬(bandwidth)較少,並已正式列入 IEEE 1363 標準。

ECC 類似於RSA,但並非某家公司的專利品,可以自由發展,也不受任何 國家的規定管制。此外ECC 也沒有“adaptive chosen-message attack”。橢圓曲 線密碼系統的安全性是建立於解橢圓曲線離散對數問題之困難度,來保障系統的 安全性。橢圓曲線密碼系統其最大優點為可用較其他系統短的位元數,例如橢圓 曲線密碼系統金鑰長度為160 位元,其他著名的系統如RSA 用的金鑰長度為 1024 位元,二者的安全度是相等的,因此在相同的安全強度下,ECC 系統速度 比RSA 系統快上數倍,同時可節約金鑰儲存空間,它們之間金鑰長度的比較見 下表。

表 1、

破解比較表

在相同的安全強度下,ECC的金鑰長度與RSA 的金鑰長度比較,如下表所 示。從中可見ECC 的金鑰長度或數位簽章的長度遠比RSA小。隨著加解密演算 法由DES/Triple-DES 改進為AES,且128 位元金鑰到256 位元金鑰AES 的安全 性為2128至2256,相同安全性的RSA金鑰長度需3072位元到15360位元,但ECC僅需 256位元到512 位元。若RSA 或ECC 是用做金鑰交換來保護256 位元金鑰的 AES 時,RSA 應該用15360 位元的公開金鑰,而對應的ECC僅需使用512位元 金鑰。所以無論從增快執行速度或節省空間的角度,我們可見ECC是優於RSA。

1024 2048 3072 7680 15360

ECC 長度 (Bytes)

161 224 256 384 512

金鑰長度比 6 : 1 9 : 1 12 : 1 20 : 1 30 :1 橢圓曲線的通用格式為 y2

+ a

1

xy + a

3

y = x

3

+ a

2

x

2

+ a

4

x + a

6。用於密碼學技 術的橢圓曲線是由滿足上述方程式的所有點(x, y)及一個無限遠點(point at

infinity) O所形成的集合,其中座標x與y屬於某個有限體(finite field)。

橢圓曲線所分佈之有限體 (finite field),為GF(q) ,其中q = pm為質數的次 冪,m 為正整數。橢圓曲線方程式之型式為y2= x3+ ax + b mod p 與y2+ xy = x3+

ax + b mod 2

m兩種,但這都是已經經過許多化簡上述通用方程式之後所 到的結果。

密碼學的橢圓曲線是由滿足該方程式的所有點(x, y)及一個無限遠點(Point at infinity)O 所形成的集合,座標x 與y 屬於某個有限體(finite field)。目前軟硬體 具體實現的有限體為質數體(Prime field,GF(p))、二元體(Binary field,GF(2n))、

最佳擴展體(Optimal extension field,GF (pn))等三種(Bailey and Paar, 2001)。

橢圓曲線上的點可進行兩點間之加法(Menezes, 1993; Silverman and Tate, 1992)。幾何上,如果要計算相異兩點P 與Q 的和,則先找出通過這兩點的直線,

然後找出這條直線與橢圓曲線相交的第三點(-R),再將此點對x 軸做鏡射得到和 (R),如圖一所示。如果橢圓曲線上的某兩點共線的話,兩點相加之和就是O。

圖 20、橢圓曲線圖

若P = (x1, y1)與Q = (x2, y2)為橢圓曲線上的任意兩點,而P≠ O≠ Q,且選取質數 體,此時橢圓曲線方程式為 :

y2= x3+ ax + b

(1)

兩點加法的運算規則如下所示:

1. P + O= O+ P= P

2. P + (-P) = (X1+Y2) + (X1+(-Y2)) = O

3. P + Q = R = (X3,Y3)

Y2-Y1/X2-X1 if P≠ Q X

3

=

λ

2-X1-X2,Y3=

λ

(X1-X3) - Y1

λ

=

3X12

+a/2Y1 if P = Q 如果選擇二元體,則橢圓曲線方程式為:

Y2+ XY = X3+ aX2+ b

(2)

而上述公式(3)的加法規則3 必須改為:

P + Q = (X3,Y3)

λ

2

+ λ +

X1+ X2+ a if P≠ Q X3 =

λ

2

+ λ

+ a if P = Q

Y3=

λ ( X

1

+ X

3

) + X

3

+ Y

1

Y2+Y1/X2+X1 if P≠ Q

λ

=

X1+ X1/Y1 if P = Q

上下兩個公式的計算(加法、減法、乘法、除法/反元素)必須在相關的有限體 進行,若選取質數體時僅需進行模算術(Modular arithmetic),若選取二元體則需 進行多項式算術(Polynomial arithmetic)。點乘法計算k‧P 為橢圓曲線密碼系統 的基礎,其中k 為正整數,而P 為橢圓曲線上的一個點:

一共K個P

K ‧ P = P‧P‧P‧P‧P… ‧P

如果n‧P= O 則n 為點P 的級數(order)。在合適的橢圓曲線上,可以找到 一個級數n > 2160的基點(Base point) G,而此橢圓曲線系統參數基點G 可公開;

另隨機選取小於n 的正整數d 當作私密金鑰計算Q = d‧G 為對應的公開金鑰。

點乘法的計算如果直接做k 個點相加,則需要執行k-1 次加法運算,效率不佳,

目前已有許多可以加速點乘法計算的演算法。

橢圓曲線密碼系統的實現必須考慮下列因素:

1. 有限體的選擇 2. 橢圓曲線的挑選

3. 有限體元素的運算(加法、減法、乘法、除法/反元素) 4. 橢圓曲線點的運算(加法、減法、乘法)