前言
ECC英文全稱"Ellipse Curve Cryptography"
與傳統的基於大質數因子分解困難性的加密方法不同,ECC通過橢圓曲線方程式的性質產生密鑰
ECC164位的密鑰產生一個安全級,相當於RSA 1024位密鑰提供的保密強度,而且計算量較小,處理速度更快,存儲空間和傳輸帶寬占用較少。目前我國居民二代身份證
正在使用 256 位的橢圓曲線密碼,虛擬貨幣比特幣
也選擇ECC作為加密算法。
從射影平面講起
古希臘數學家歐幾里得的《幾何原本》提出了五條公設。
-
1.由任意一點到任意一點可作直線。
-
2.一條有限直線可以繼續延長。
-
3.以任意點為心及任意的距離可以畫圓。
-
4.凡直角都相等。
-
5.同一平面內一條直線a和另外兩條直線b.c相交,若在a某一側的兩個內角的和小於兩直角,則b.c兩直線經無限延長后在該側相交。
《幾何原本》只有在第29個命題
一條直線與兩條平行直線相交,則所成的內錯角相等,同位角相等,且同旁內角之和等於兩直角
中才用到第五公設,即《幾何原本》中可不依靠第五公設而推出前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)所有點的集合
-
1橢圓曲線方程是一個齊次方程
-
2曲線上的每個點都必須是非奇異的(光滑的),偏導數FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同為0
-
3圓曲線的形狀,並不是橢圓的。只是因為橢圓曲線的描述方程,類似於計算一個橢圓周長的方程故得名
橢圓曲線示例
非橢圓曲線示例
這兩個方程都不是橢圓曲線,因為他們在(0:0:1)點處(即原點)沒有切線,不滿足橢圓曲線每個點都必須是非奇異的(光滑的),
橢圓曲線普通方程
橢圓曲線普通方程:
無窮遠點 (0, Y, 0)
平常點(x,y)斜率k:
橢圓曲線阿貝爾群
我們已經看到了橢圓曲線的圖象,但點與點之間好象沒有什么聯系。我們能不能建立一個類似於在實數軸上加法的運算法則呢?這就要定義橢圓曲線的加法群,這里需要用到近世代數中阿貝爾群。
在數學中,群是一種代數結構,由一個集合以及一個二元運算所組成。已知集合和運算(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]
選擇兩個滿足下列約束條件的小於p的非負整數a、b
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
補充:
-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選擇一個私有密鑰p(p<n),並生成公開密鑰K=pG 比如25, K= pG = 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 = (3,28)+6*(14,6)=(3,28)+(27,27)=(6,12) C2= 6G =(5,7)
-
6.Bob將C1、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相比要小得多
缺點
-
設計困難,實現復雜
-
如果序列號設計過短,那么安全性並沒有想象中的完善