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)
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
一般將Fp上的一條橢圓曲線描述爲T=(p,a,b,G,n,h)p、a、b肯定一條橢圓曲線(p爲質數,(mod p)運算)G爲基點,n爲點G的階,h是橢圓曲線上全部點的個數m與n相除的商的整數部分
參量選擇要求:
比特幣系統選用的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
優勢
安全性能更高
160位ECC與1024位RSA、DSA有相同的安全強度
處理速度更快
在私鑰的處理速度上,ECC遠 比RSA、DSA快得多
帶寬要求更低
存儲空間更小
ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多
缺點
設計困難,實現複雜
若是序列號設計太短,那麼安全性並無想象中的完善