ECC橢圓曲線詳解(有具體實例)

前言

ECC英文全稱"Ellipse Curve Cryptography"算法

與傳統的基於大質數因子分解困難性的加密方法不一樣,ECC經過橢圓曲線方程式的性質產生密鑰安全

ECC164位的密鑰產生一個安全級,至關於RSA 1024位密鑰提供的保密強度,並且計算量較小,處理速度更快,存儲空間和傳輸帶寬佔用較少。目前我國居民二代身份證正在使用 256 位的橢圓曲線密碼,虛擬貨幣比特幣也選擇ECC做爲加密算法。性能

從射影平面講起

古希臘數學家歐幾里得的《幾何本來》提出了五條公設。編碼

  • 1.由任意一點到任意一點可做直線。加密

  • 2.一條有限直線能夠繼續延長。spa

  • 3.以任意點爲心及任意的距離能夠畫圓。設計

  • 4.凡直角都相等。code

  • 5.同一平面內一條直線a和另外兩條直線b.c相交,若在a某一側的兩個內角的和小於兩直角,則b.c兩直線經無限延長後在該側相交。blog

《幾何本來》只有在第29個命題ip

一條直線與兩條平行直線相交,則所成的內錯角相等,同位角相等,且同旁內角之和等於兩直角

中才用到第五公設,即《幾何本來》中可不依靠第五公設而推出前28命題。所以,一些數學家提出,第五公設能不能不做爲公設,而做爲定理?能不能依靠前四個公設來證實第五公設?這就是幾何發展史上最著名的,爭論了長達兩千多年的關於「平行線理論」的討論

1820年代,俄國喀山大學羅巴切夫斯基用「至少能夠找到兩條相異的直線,且都經過P點,並不與直線R相交」代替第五公設,而後與歐氏幾何的前四個公設結合成一個公理系統,他通過細緻深刻的推理過程當中,得出了一個又一個在直覺上匪夷所思,但在邏輯上毫無矛盾的幾何體系。

這種幾何學被稱爲羅巴切夫斯基幾何,簡稱羅氏幾何。從羅氏幾何學中,能夠得出這樣一個結論:邏輯上不矛盾的一些公理都有可能提供一種幾何學。現存非歐幾何的類型能夠歸納以下:

1.堅持第五公設,引出歐幾里得幾何。

2.「能夠引最少兩條平行線」爲公設,羅氏幾何(雙曲幾何)。

3.「一條平行線也不能引」爲公設,黎曼幾何(橢圓幾何)

左:雙曲幾何,即羅氏幾何;中:歐幾里德幾何;右:橢圓幾何,即黎曼幾何

瞭解非歐式幾何,就能夠理解平行線的交點。

定義平行線相交於無窮遠點P∞,使平面上全部直線都統一爲有惟一的交點

性質:

  • 1.一條直線只有一個無窮遠點;一對平行線有公共的無窮遠點

  • 2.任何兩條不平行的直線有不一樣的無窮遠點(不然會形成有兩個交點)

  • 3.平面上全體無窮遠點構成一條無窮遠直線

射影平面:平面上全體無窮遠點與全體日常點構成射影平面

射影平面點的定義
對普通平面上點(x,y),令x=X/Z,y=Y/Z,Z≠0,則投影爲射影平面上的點(X:Y:Z)

求點(1,2)在新的座標體系下的座標
∵X/Z=1 ,Y/Z=2(Z≠0)

∴X=Z,Y=2Z ∴座標爲(Z:2Z:Z),Z≠0

即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0的座標都是(1,2)在新的座標體系下的座標

(2) 求平行線L1:X+2Y+3Z=0 與L2:X+2Y+Z=0 相交的無窮遠點
∵ L1∥L2 因此有Z=0, X+2Y=0

∴座標爲(-2Y:Y:0),Y≠0

即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0

橢圓曲線

一條橢圓曲線是在射影平面上知足威爾斯特拉斯方程(Weierstrass)全部點的集合

\[ {Y^2}Z + {a_1}XYZ + {a_3}Y{Z^2} = {X^3} + {a_2}{X^2}Z + {a_4}X{Z^2} + {a_6}{Z^3} \]

  • 1橢圓曲線方程是一個齊次方程

  • 2曲線上的每一個點都必須是非奇異的(光滑的),偏導數FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不一樣爲0

  • 3圓曲線的形狀,並非橢圓的。只是由於橢圓曲線的描述方程,相似於計算一個橢圓周長的方程故得名

橢圓曲線示例

非橢圓曲線示例

這兩個方程都不是橢圓曲線,由於他們在(0:0:1)點處(即原點)沒有切線,不知足橢圓曲線每一個點都必須是非奇異的(光滑的),

橢圓曲線普通方程

橢圓曲線普通方程:

\[ {y^2} + {a_1}xy + {a_3}y = {x^3} + {a_2}{x^2} + {a_4}x + {a_6} \]

無窮遠點 (0, Y, 0)
日常點(x,y)斜率k:
\[ \begin{array}{l} {F_x}\left( {x,y} \right) = {a_1}y - 3{x^2} - 2{a_2}x - {a_4} \\ {F_y}\left( {x,y} \right) = 2y + {a_1}x + {a_3} \\ \end{array} \]

\[ \begin{array}{l} k = - \frac{{{F_x}\left( {x,y} \right)}}{{{F_y}\left( {x,y} \right)}} = \frac{{3{x^2} + 2{a_2}x + {a_4} - {a_1}y}}{{2y + {a_1}x + {a_3}}} \end{array} \]

橢圓曲線阿貝爾羣

咱們已經看到了橢圓曲線的圖象,但點與點之間好象沒有什麼聯繫。咱們能不能創建一個相似於在實數軸上加法的運算法則呢?這就要定義橢圓曲線的加法羣,這裏須要用到近世代數中阿貝爾羣。

在數學中,羣是一種代數結構,由一個集合以及一個二元運算所組成。已知集合和運算(G,*)若是是羣則必須知足以下要求

  • 封閉性:∀a,b∈G,a*b ∈ G

  • 結合性: ∀a,b,c∈G ,有 (ab)c = a* (b*c)

  • 單位元:ョe∈G, ∀a ∈G,有ea = ae = a

  • 逆元: ∀a ∈G ,ョb∈G 使得 ab = ba = e

阿貝爾羣除了上面的性質還知足交換律公理a * b = b * a

一樣在橢圓曲線也能夠定義阿貝爾羣。

任意取橢圓曲線上兩點P、Q(若P、Q兩點重合,則做P點的切線),做直線交於橢圓曲線的另外一點R',過R'作y軸的平行線交於R,定義P+Q=R。這樣,加法的和也在橢圓曲線上,並一樣具有加法的交換律、結合律

同點加法

如有k個相同的點P相加,記做kP

P+P+P=2P+P=3P

有限域橢圓曲線

橢圓曲線是連續的,並不適合用於加密;因此,咱們必須把橢圓曲線變成離散的點,咱們要把橢圓曲線定義在有限域上。
咱們給出一個有限域Fp

  • Fp中有p(p爲質數)個元素0,1,2,…, p-2,p-1

  • Fp的加法是a+b≡c(mod p)

  • Fp的乘法是a×b≡c(mod p)

  • Fp的除法是a÷b≡c(mod p),即 a×b^(-1)≡c (mod p),b-1也是一個0到p-1之間的整數,但知足b×b-1≡1 (mod p)

  • Fp的單位元是1,零元是 0

  • Fp域內運算知足交換律、結合律、分配律

橢圓曲線Ep(a,b),p爲質數,x,y∈[0,p-1]

\[{y^2} = {x^3} + ax + b\left( {\bmod p} \right)\]

選擇兩個知足下列約束條件的小於p的非負整數a、b

\[4{a^3} + 27{b^2} \ne 0\left( {\bmod p} \right)\]

Fp上的橢圓曲線一樣有加法

  • 1.無窮遠點 O∞是零元,有O∞+ O∞= O∞,O∞+P=P

  • 2.P(x,y)的負元是 (x,-y mod p)= (x,p-y) ,有P+(-P)= O∞

  • 3.P(x1,y1),Q(x2,y2)的和R(x3,y3) 有以下關係:

x3≡k2-x1-x2(mod p)

y3≡k(x1-x3)-y1(mod p)

若P=Q 則 k=(3x2+a)/2y1mod p

若P≠Q,則k=(y2-y1)/(x2-x1) mod p

例題橢圓曲線已知E23(1,1)上兩點P(3,10),Q(9,7),求(1)-P,(2)P+Q,(3) 2P

\[\begin{array}{l} \left( 1 \right) - P = \left( {3, - 10\bmod 23} \right) = \left( {3,13} \right) \\ \\ \left( 2 \right)k = \frac{{7 - 10}}{{9 - 3}} = - {2^{ - 1}}\bmod 23 \\ 2 \cdot {2^{ - 1}} = 1\bmod 23 \Rightarrow {2^{ - 1}} = 12 \\ k = - 12\bmod 23 = 11 \\ P + Q = \left( {{{11}^2} - 3 - 9\bmod 23,11 \times \left( {3 - \left( { - 6} \right)} \right)\bmod 23} \right) = \left( {17,20} \right) \\ \\ \left( 3 \right)k = \frac{{3 \times {3^2} + 1}}{{2 \times 10}}\bmod 23 = 7 \cdot {5^{ - 1}}\bmod 23 \\ 5 \cdot {5^{ - 1}} = 1\bmod 23 \Rightarrow {5^{ - 1}} = 14 \\ k = 7 \cdot 14\bmod 23 = 6 \\ 2P = \left( {{6^2} - 3 - 3\bmod 23,6 \times \left( {3 - 7} \right)\bmod 23} \right) = \left( {7,12} \right) \\ \end{array} \]

補充:
-2^(-1) mod 23 進行兩部分計算

(1) 先算 2^(-1) 對應的數A, 在這裏2^(-1)不是2的-1次方,而是2的逆元

(2) 再算-A mod 23

(1) 計算第一步
根據有限域除法規則 2 * 2^(-1) = 1 mod 23
即 2A = 1 mod 23 ==> 2A = 23 + 1 == > A = 12

(2) 計算第二步
-A mod 23 ==> -12 mod 23 即 23 -12 = 11

因此有
-2^(-1) mod 23 = 11

有限域橢圓曲線點的階

若是橢圓曲線上一點P,存在最小的正整數n使得數乘nP=O∞ ,則將n稱爲P的階
若n不存在,則P是無限階的

計算可得27P=-P=(3,13)

因此28P=O ∞ P的階爲28

這些點作成了一個循環阿貝爾羣,其中生成元爲P,階數爲29。顯然點的分佈與順序都是雜亂無章

橢圓曲線加密

考慮K=kG ,其中K、G爲橢圓曲線Ep(a,b)上的點,n爲G的階(nG=O∞ ),k爲小於n的整數。則給定k和G,根據加法法則,計算K很容易但反過來,給定K和G,求k就很是困難。由於實際使用中的ECC原則上把p取得至關大,n也至關大,要把n個解點逐一算出來列成上表是不可能的。這就是橢圓曲線加密算法的數學依據

點G稱爲基點(base point)

k(k<n)爲私有密鑰(privte key)

K爲公開密鑰(public key)

ECC保密通訊算法

  • 1.Alice選定一條橢圓曲線E,並取橢圓曲線上一點做爲基點G 假設選定E29(4,20),基點G(13,23) , 基點G的階數n=37

  • 2.Alice選擇一個私有密鑰k(k<n),並生成公開密鑰K=kG 好比25, K= kG = 25G = (14,6)

  • 3.Alice將E和點K、G傳給Bob

  • 4.Bob收到信息後,將待傳輸的明文編碼到上的一點M(編碼方法略),併產生一個隨機整數r(r<n,n爲G的階數) 假設r=6 要加密的信息爲3,由於M也要在E29(4,20) 因此M=(3,28)

  • 5.Bob計算點C1=M+rK和C2=rG C1= M+6K= M+6*25*G=M+2G=(3,28)+(27,27)=(6,12) C2=6G=(5,7)

  • 6.Bob將C一、C2傳給Alice

  • 7.Alice收到信息後,計算C1-kC2,結果就應該是點M C1-kC2 =(6,12)-25C2 =(6,12)-25*6G =(6,12)-2G =(6,12)-(27,27) =(6,12)+(27,2) =(3,28)

數學原來上能解密是由於:C1-kC2=M+rK-krG=M+rkG-krG-M

ECC技術要求

一般將Fp上的一條橢圓曲線描述爲T=(p,a,b,G,n,h)p、a、b肯定一條橢圓曲線(p爲質數,(mod p)運算)G爲基點,n爲點G的階,h是橢圓曲線上全部點的個數m與n相除的商的整數部分

參量選擇要求:

  • p越大安全性越好,但會致使計算速度變慢
  • 200-bit左右可知足通常安全要求
  • n應爲質數
  • h≤4;p≠n×h ;pt≠1(mod n) (1≤t<20)
  • 4a3+27b2≠0 (mod p)

ECC的應用

比特幣系統選用的secp256k1中,參數爲

p = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F = 2^256 − 2^32 − 2^9 − 2^8 − 2^7 − 2^6 − 2^4 − 1

a = 0, b = 7

G=(0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)

n = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

h = 01

ECC vs. RSA - 優缺點

優勢

  • 安全性能更高

  • 160位ECC與1024位RSA、DSA有相同的安全強度

  • 處理速度更快

  • 在私鑰的處理速度上,ECC遠 比RSA、DSA快得多

  • 帶寬要求更低

  • 存儲空間更小

  • ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多

缺點

  • 設計困難,實現複雜

  • 若是序列號設計太短,那麼安全性並無想象中的完善

相關文章
相關標籤/搜索