當前位置:開發者網絡 >> 技術教程 >> ASP教程 >> 安全加密 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
ECC加密算法入門介紹
作者:未知
日期:2004-07-19
人氣:
投稿:xiaxia(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
ECC加密算法入門介紹


前言

同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一樣,ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)也屬於公開密鑰算法。目前,國內詳細介紹ECC的公開文獻並不多(反正我沒有找到)。有一些簡介,也是泛泛而談,看完後依然理解不了ECC的實質(可能我理解力太差)。前些天我從國外網站找到些材料,看完後對ECC似乎懵懂了。於是我想把我對ECC的認識整理一下,與大家分享。當然ECC博大精深,我的認識還很膚淺,文章中錯誤一定不少,歡迎各路高手批評指正,小弟我洗耳恭聽,並及時改正。文章將採用連載的方式,我寫好一點就貼出來一點。本文主要側重理論,代碼實現暫不涉及。這就要求你要有一點數學功底。最好你能理解RSA算法,對公開密鑰算法有一個瞭解。《近世代數基礎》《初等數論》之類的書,最好您先翻一下,這對您理解本文是有幫助的。別怕,我盡量會把語言通俗些,希望本文能成為學習ECC的敲門磚。

一、從平行線談起。

平行線,永不相交。沒有人懷疑把:)不過到了近代這個結論遭到了質疑。平行線會不會在很遠很遠的地方相交了?事實上沒有人見到過。所以「平行線,永不相交」只是假設(大家想想初中學習的平行公理,是沒有證明的)。既然可以假設平行線永不相交,也可以假設平行線在很遠很遠的地方相交了。即平行線相交於無窮遠點P∞(請大家閉上眼睛,想像一下那個無窮遠點P∞,P∞是不是很虛幻,其實與其說數學鍛煉人的抽像能力,還不如說是鍛煉人的想像力)。給個圖幫助理解一下:



直線上出現P∞點,所帶來的好處是所有的直線都相交了,且只有一個交點。這就把直線的平行與相交統一了。為與無窮遠點相區別把原來平面上的點叫做平常點。
以下是無窮遠點的幾個性質。

▲直線L上的無窮遠點只能有一個。(從定義可直接得出)

▲平面上一組相互平行的直線有公共的無窮遠點。(從定義可直接得出)

▲ 平面上任何相交的兩直線L1,L2有不同的無窮遠點。(否則L1和L2有公共的無窮遠點P,則L1和L2有兩個交點A、P,故假設錯誤。)

▲平面上全體無窮遠點構成一條無窮遠直線。(自己想像一下這條直線吧)

▲平面上全體無窮遠點與全體平常點構成射影平面。

二、射影平面坐標系

射影平面坐標系是對普通平面直角坐標系(就是我們初中學到的那個笛卡兒平面直角坐標系)的擴展。我們知道普通平面直角坐標系沒有為無窮遠點設計坐標,不能表示無窮遠點。為了表示無窮遠點,產生了射影平面坐標系,當然射影平面坐標系同樣能很好的表示舊有的平常點(數學也是「向下兼容」的)。



我們對普通平面直角坐標繫上的點A的坐標(x,y)做如下改造:

令x=X/Z ,y=Y/Z(Z≠0);則A點可以表示為(X:Y:Z)。

變成了有三個參量的坐標點,這就對平面上的點建立了一個新的坐標體系。

例2.1:求點(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)在新的坐標體系下的坐標。

我們也可以得到直線的方程aX+bY+cZ=0(想想為什麼?提示:普通平面直角坐標系下直線一般方程是ax+by+c=0)。新的坐標體系能夠表示無窮遠點麼?那要讓我們先想想無窮遠點在哪裡。根據上一節的知識,我們知道無窮遠點是兩條平行直線的交點。那麼,如何求兩條直線的交點坐標?這是初中的知識,就是將兩條直線對應的方程聯立求解。平行直線的方程是:

aX+bY+c1Z =0; aX+bY+c2Z =0 (c1≠c2);

(為什麼?提示:可以從斜率考慮,因為平行線斜率相同);

將二方程聯立,求解。有c2Z= c1Z= -(aX+bY),∵c1≠c2 ∴Z=0 ∴aX+bY=0;
所以無窮遠點就是這種形式(X:Y:0)表示。注意,平常點Z≠0,無窮遠點Z=0,因此無窮遠直線對應的方程是Z=0。

例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的坐標,都表示這個無窮遠點。

看來這個新的坐標體系能夠表示射影平面上所有的點,我們就把這個能夠表示射影平面上所有點的坐標體系叫做射影平面坐標系。


練習:
1、求點A(2,4) 在射影平面坐標系下的坐標。
2、求射影平面坐標系下點(4.5:3:0.5),在普通平面直角坐標系下的坐標。
3、求直線X+Y+Z=0上無窮遠點的坐標。
4、判斷:直線aX+bY+cZ=0上的無窮遠點 和 無窮遠直線與直線aX+bY=0的交點,是否是同一個點?


三、橢圓曲線

上一節,我們建立了射影平面坐標系,這一節我們將在這個坐標系下建立橢圓曲線方程。因為我們知道,坐標中的曲線是可以用方程來表示的(比如:單位圓方程是x2+y2=1)。橢圓曲線是曲線,自然橢圓曲線也有方程。

橢圓曲線的定義:
一條橢圓曲線是在射影平面上滿足方程
Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3 ----------------[3-1]
的所有點的集合,且曲線上的每個點都是非奇異(或光滑)的。

定義詳解:

▲ Y2Z+a1XYZ+a3YZ2 = X3+a2X2Z+a4XZ2+a6Z3是Weierstrass方程(維爾斯特拉斯,Karl Theodor Wilhelm Weierstrass,1815-1897),是一個齊次方程。

▲ 橢圓曲線的形狀,並不是橢圓的。只是因為橢圓曲線的描述方程,類似於計算一個橢圓周長的方程(計算橢圓周長的方程,我沒有見過,而對橢圓線積分(設密度為1)是求不出來的。誰知道這個方程,請告訴我呀^_^),故得名。

我們來看看橢圓曲線是什麼樣的。





▲ 所謂「非奇異」或「光滑」的,在數學中是指曲線上任意一點的偏導數Fx(x,y,z),Fy(x,y,z),Fz(x,y,z)不能同時為0。如果你沒有學過高等數學,可以這樣理解這個詞,即滿足方程的任意一點都存在切線。

下面兩個方程都不是橢圓曲線,儘管他們是方程[3-1]的形式。




因為他們在(0:0:1)點處(即原點)沒有切線。

▲橢圓曲線上有一個無窮遠點O∞(0:1:0),因為這個點滿足方程[3-1]。

知道了橢圓曲線上的無窮遠點。我們就可以把橢圓曲線放到普通平面直角坐標繫上了。因為普通平面直角坐標系只比射影平面坐標系少無窮遠點。我們在普通平面直角坐標繫上,求出橢圓曲線上所有平常點組成的曲線方程,再加上無窮遠點O∞(0:1:0),不就構成橢圓曲線了麼?

我們設x=X/Z ,y=Y/Z代入方程[3-1]得到:
y2+a1xy+a3y = x3+a2x2+a4x+a6 -------------------------[3-2]

也就是說滿足方程[3-2]的光滑曲線加上一個無窮遠點O∞,組成了橢圓曲線。為了方便運算,表述,以及理解,今後論述橢圓曲線將主要使用[3-2]的形式。

本節的最後,我們談一下求橢圓曲線一點的切線斜率問題。
由橢圓曲線的定義可以知道,橢圓曲線是光滑的,所以橢圓曲線上的平常點都有切線。而切線最重要的一個參數就是斜率k。

例3.1:求橢圓曲線方程y2+a1xy+a3y=x3+a2x2+a4x+a6上,平常點A(x,y)的切線的斜率k。
解:令F(x,y)= y2+a1xy+a3y-x3-a2x2-a4x-a6
求偏導數
Fx(x,y)= a1y-3x2-2a2x-a4
Fy(x,y)= 2y+a1x +a3
則導數為:f'(x)=- Fx(x,y)/ Fy(x,y)=-( a1y-3x2-2a2x-a4)/(2y+a1x +a3)
= (3x2+2a2x+a4-a1y) /(2y+a1x +a3)
所以k=(3x2+2a2x+a4-a1y) /(2y+a1x +a3) ------------------------[3-3]

看不懂解題過程沒有關係,記住結論[3-3]就可以了。


練習:
1、將給出圖例的橢圓曲線方程Y2Z=X3-XZ2 和Y2Z=X3+XZ2+Z3轉換成普通平面直角坐標繫上的方程。


四、橢圓曲線上的加法

上一節,我們已經看到了橢圓曲線的圖像,但點與點之間好像沒有什麼聯繫。我們能不能建立一個類似於在實數軸上加法的運算法則呢?天才的數學家找到了這一運算法則

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
自從近世紀代數學引入了群、環、域的概念,使得代數運算達到了高度的統一。比如數學家總結了普通加法的主要特徵,提出了加群(也叫交換群,或Abel(阿貝爾)群),在加群的眼中。實數的加法和橢圓曲線的上的加法沒有什麼區別。這也許就是數學抽像把:)。關於群以及加群的具體概念請參考近世代數方面的數學書。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

運算法則:任意取橢圓曲線上兩點P、Q (若P、Q兩點重合,則做P點的切線)做直線交於橢圓曲線的另一點R』,過R』做y軸的平行線交於R。我們規定P+Q=R。(如圖)





法則詳解:
▲這裡的+不是實數中普通的加法,而是從普通加法中抽像出來的加法,他具備普通加法的一些性質,但具體的運算法則顯然與普通加法不同。

▲根據這個法則,可以知道橢圓曲線無窮遠點O∞與橢圓曲線上一點P的連線交於P』,過P』作y軸的平行線交於P,所以有 無窮遠點 O∞+ P = P 。這樣,無窮遠點 O∞的作用與普通加法中零的作用相當(0+2=2),我們把無窮遠點 O∞ 稱為 零元。同時我們把P』稱為P的負元(簡稱,負P;記作,-P)。(參見下圖)



▲根據這個法則,可以得到如下結論 :如果橢圓曲線上的三個點A、B、C,處於同一條直線上,那麼他們的和等於零元,即A+B+C= O∞

▲k個相同的點P相加,我們記作kP。如下圖:3P = P+P+P = R+P = S。



下面,我們利用P、Q點的坐標(x1,y1),(x2,y2),求出R=P+Q的坐標(x4,y4)。

例4.1:求橢圓曲線方程y2+a1xy+a3y=x3+a2x2+a4x+a6上,平常點P(x1,y1),Q(x2,y2)的和R(x4,y4)的坐標。
解:(1)先求點-R(x3,y3)
因為P,Q,-R三點共線,故設共線方程為y=kx+b,其中
若P≠Q(P,Q兩點不重合) 則
直線斜率k=(y1-y2)/(x1-x2)
若P=Q(P,Q兩點重合) 則直線為橢圓曲線的切線,故由例3.1可知:
k=(3x2+2a2x+a4 -a1y) /(2y+a1x+a3)

因此P,Q,-R三點的坐標值就是方程組:
y2+a1xy+a3y=x3+a2x2+a4x+a6 -----------------[1]
y=(kx+b) -----------------[2]
的解。

將[2],代入[1] 有
(kx+b)2+a1x(kx+b)+a3(kx+b) =x3+a2x2+a4x+a6 --------[3]
對[3]化為一般方程,根據三次方程根與係數關係(當三次項係數為1時;-x1x2x3 等於常數項係數, x1x2+x2x3+x3x1等於一次項係數,-(x1+x2+x3)等於二次項係數。)
所以-(x1+x2+x3)=a2-ka1-k2
x3=k2+ka1+a2+x1+x2;---------------------求出點-R的橫坐標
因為k=(y1-y3)/(x1-x3) 故
y3=y1-k(x1-x3);-------------------------------求出點-R的縱坐標

(2)利用-R求R
顯然有 x4=x3= k2+ka1+a2+x1+x2; ------------求出點R的橫坐標
而y3 y4 為 x=x4時 方程y2+a1xy+a3y=x3+a2x2+a4x+a6的解
化為一般方程y2+(a1x+a3)y-(x3+a2x2+a4x+a6)=0 , 根據二次方程根與係數關係得:
-(a1x+a3)=y3+y4
故y4=-y3-(a1x+a3)=k(x1-x4)-y1-(a1x4+a3); ---------------求出點R的縱坐標
即:
x4=k2+ka1+a2+x1+x2;
y4=k(x1-x4)-y1-a1x4-a3;

本節的最後,提醒大家注意一點,以前提供的圖像可能會給大家產生一種錯覺,即橢圓曲線是關於x軸對稱的。事實上,橢圓曲線並不一定關於x軸對稱。如下圖的y2-xy=x3+1


五、密碼學中的橢圓曲線

我們現在基本上對橢圓曲線有了初步的認識,這是值得高興的。但請大家注意,前面學到的橢圓曲線是連續的,並不適合用於加密;所以,我們必須把橢圓曲線變成離散的點。
讓我們想一想,為什麼橢圓曲線為什麼連續?是因為橢圓曲線上點的坐標,是實數的(也就是說前面講到的橢圓曲線是定義在實數域上的),實數是連續的,導致了曲線的連續。因此,我們要把橢圓曲線定義在有限域上(顧名思義,有限域是一種只有由有限個元素組成的域)。

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
域的概念是從我們的有理數,實數的運算中抽像出來的,嚴格的定義請參考近世代數方面的數。簡單的說,域中的元素同有理數一樣,有自己得加法、乘法、除法、單位元(1),零元(0),並滿足交換率、分配率。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

下面,我們給出一個有限域Fp,這個域只有有限個元素。

Fp中只有p(p為素數)個元素0,1,2 …… p-2,p-1;
Fp 的加法(a+b)法則是 a+b≡c (mod p);即,(a+c)÷p的餘數 和c÷p的餘數相同。
Fp 的乘法(a×b)法則是 a×b≡c (mod p);
Fp 的除法(a÷b)法則是 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。

同時,並不是所有的橢圓曲線都適合加密。y2=x3+ax+b是一類可以用來加密的橢圓曲線,也是最為簡單的一類。下面我們就把y2=x3+ax+b 這條曲線定義在Fp上:

選擇兩個滿足下列條件的小於p(p為素數)的非負整數a、b
4a3+27b2≠0 (mod p)
則滿足下列方程的所有點(x,y),再加上 無窮遠點O∞ ,構成一條橢圓曲線。
y2=x3+ax+b (mod p)
其中 x,y屬於0到p-1間的整數,並將這條橢圓曲線記為Ep(a,b)。

我們看一下y2=x3+x+1 (mod 23)的圖像



是不是覺得不可思議?橢圓曲線,怎麼變成了這般模樣,成了一個一個離散的點?
橢圓曲線在不同的數域中會呈現出不同的樣子,但其本質仍是一條橢圓曲線。舉一個不太恰當的例子,好比是水,在常溫下,是液體;到了零下,水就變成冰,成了固體;而溫度上升到一百度,水又變成了水蒸氣。但其本質仍是H2O。

Fp上的橢圓曲線同樣有加法,但已經不能給以幾何意義的解釋。不過,加法法則和實數域上的差不多,請讀者自行對比。

1 無窮遠點 O∞是零元,有O∞+ O∞= O∞,O∞+P=P
2 P(x,y)的負元是 (x,-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)/2y1 若P≠Q,則k=(y2-y1)/(x2-x1)


例5.1 已知E23(1,1)上兩點P(3,10),Q(9,7),求1)-P,2)P+Q,3) 2P。
解 1) ?CP的值為(3,-10)
2) k=(7-10)/(9-3)=-1/2,2的乘法逆元為12 因為2*12≡1 (mod 23)
k≡-1*12 (mod 23) 故 k=11。
x=112-3-9=109≡17 (mod 23);
y=11[3-(-6)]-10=89≡20 (mod 23)
故P+Q的坐標為(17,20)
3) k=[3(32)+1]/(2*10)=1/4≡6 (mod 23)
x=62-3-3=30≡20 (mod 23)
y=6(3-7)-10=-34≡12 (mod 23)
故2P的坐標為(7,12)

最後,我們講一下橢圓曲線上的點的階。
如果橢圓曲線上一點P,存在最小的正整數n,使得數乘nP=O∞,則將n稱為P的 階,若n不存在,我們說P是無限階的。
事實上,在有限域上定義的橢圓曲線上所有的點的階n都是存在的(證明,請參考近世代數方面的書)


練習:
1 求出E11(1,6)上所有的點。
2 已知E11(1,6)上一點G(2,7),求2G到13G所有的值。


六、橢圓曲線上簡單的加密/解密

公開密鑰算法總是要基於一個數學上的難題。比如RSA 依據的是:給定兩個素數p、q 很容易相乘得到n,而對n進行因式分解卻相對困難。那橢圓曲線上有什麼難題呢?

考慮如下等式:
K=kG [其中 K,G為Ep(a,b)上的點,k為小於n(n是點G的階)的整數]
不難發現,給定k和G,根據加法法則,計算K很容易;但給定K和G,求k就相對困難了。
這就是橢圓曲線加密算法採用的難題。我們把點G稱為基點(base point),k(k<n,n為基點G的階)稱為私有密鑰(privte key),K稱為公開密鑰(public key)。

現在我們描述一個利用橢圓曲線進行加密通信的過程:

1、用戶A選定一條橢圓曲線Ep(a,b),並取橢圓曲線上一點,作為基點G。
2、用戶A選擇一個私有密鑰k,並生成公開密鑰K=kG。
3、用戶A將Ep(a,b)和點K,G傳給用戶B。
4、用戶B接到信息後 ,將待傳輸的明文編碼到Ep(a,b)上一點M(編碼方法很多,這裡不作討論),並產生一個隨機整數r(r<n)。
5、用戶B計算點C1=M+rK;C2=rG。
6、用戶B將C1、C2傳給用戶A。
7、用戶A接到信息後,計算C1-kC2,結果就是點M。因為
C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
再對點M進行解碼就可以得到明文。

在這個加密通信中,如果有一個偷窺者H ,他只能看到Ep(a,b)、K、G、C1、C2 而通過K、G 求k 或通過C2、G求r 都是相對困難的。因此,H無法得到A、B間傳送的明文信息。



密碼學中,描述一條Fp上的橢圓曲線,常用到六個參量:
T=(p,a,b,G,n,h)。
(p 、a 、b 用來確定一條橢圓曲線,
G為基點,
n為點G的階,
h 是橢圓曲線上所有點的個數m與n相除的整數部分)

這幾個參量取值的選擇,直接影響了加密的安全性。參量值一般要求滿足以下幾個條件:

1、p 當然越大越安全,但越大,計算速度會變慢,200位左右可以滿足一般安全要求;
2、p≠n×h;
3、pt≠1 (mod n),1≤t<20;
4、4a3+27b2≠0 (mod p);
5、n 為素數;
6、h≤4。


七、橢圓曲線在軟件註冊保護的應用

我們知道將公開密鑰算法作為軟件註冊算法的好處是Cracker很難通過跟蹤驗證算法得到註冊機。下面,將簡介一種利用Fp(a,b)橢圓曲線進行軟件註冊的方法。


軟件作者按如下方法製作註冊機(也可稱為簽名過程)

1、選擇一條橢圓曲線Ep(a,b),和基點G;
2、選擇私有密鑰k(k<n,n為G的階),利用基點G計算公開密鑰K=kG;
3、產生一個隨機整數r(r<n),計算點R=rG;
4、將用戶名和點R的坐標值x,y作為參數,計算SHA(Secure Hash Algorithm 安全散列算法,類似於MD5)值,即Hash=SHA(username,x,y);
5、計算sn≡r - Hash * k (mod n)
6、將sn和Hash作為 用戶名username的序列號

軟件驗證過程如下:(軟件中存有橢圓曲線Ep(a,b),和基點G,公開密鑰K)

1、從用戶輸入的序列號中,提取sn以及Hash;
2、計算點R≡sn*G+Hash*K ( mod p ),如果sn、Hash正確,其值等於軟件作者簽名過程中點R(x,y)的坐標,因為
sn≡r-Hash*k (mod n)
所以
sn*G + Hash*K
=(r-Hash*k)*G+Hash*K
=rG-Hash*kG+Hash*K
=rG- Hash*K+ Hash*K
=rG=R ;
3、將用戶名和點R的坐標值x,y作為參數,計算H=SHA(username,x,y);
4、如果H=Hash 則註冊成功。如果H≠Hash ,則註冊失敗(為什麼?提示注意點R與Hash的關聯性)。

簡單對比一下兩個過程:
作者簽名用到了:橢圓曲線Ep(a,b),基點G,私有密鑰k,及隨機數r。
軟件驗證用到了:橢圓曲線Ep(a,b),基點G,公開密鑰K。
Cracker要想製作註冊機,只能通過軟件中的Ep(a,b),點G,公開密鑰K ,並利用K=kG這個關係獲得k後,才可以。而求k是很困難的。


練習:
下面也是一種常於軟件保護的註冊算法,請認真閱讀,並試回答簽名過程與驗證過程都用到了那些參數,Cracker想製作註冊機,應該如何做。

軟件作者按如下方法製作註冊機(也可稱為簽名過程)
1、選擇一條橢圓曲線Ep(a,b),和基點G;
2、選擇私有密鑰k(k<n),利用基點G計算公開密鑰K=kG;
3、產生一個隨機整數r(r<n),計算點R(x,y)=rG;
4、將用戶名作為參數,計算Hash=SHA(username);
5、計算 x』=x (mod n)
6、計算sn≡(Hash+x』*k)/r (mod n)
7、將sn和x』作為 用戶名username的序列號

軟件驗證過程如下:(軟件中存有橢圓曲線Ep(a,b),和基點G,公開密鑰K)
1、從用戶輸入的序列號中,提取sn以及x』;
2、將用戶名作為參數,計算Hash=SHA(username);
3、計算 R=(Hash*G+x』*K)/sn,如果sn、Hash正確,其值等於軟件作者簽名過程中點R(x,y),因為
sn≡(Hash+x』*k)/r (mod n)
所以
(Hash*G+x』*K)/sn
=(Hash*G+x』*K)/[(Hash+x』*k)/r]
=(Hash*G+x』*K)/[(Hash*G+x』*k*G)/(rG)]
=rG*[(Hash*G+x』*K)/(Hash*G+x』*K)]
=rG=R (mod p)
4、v≡x (mod n)
5、如果v=x』 則註冊成功。如果v≠x』 ,則註冊失敗。


八、結語

歷經半個多月斷斷續續的寫作,這篇拙作終於算告一段落了。為寫這篇文章,我查了大量的資料,但為了使文章更通俗易懂,我盡量避免涉及專業術語,F2n域上的橢圓曲線本文也沒有涉及。不過,一些名詞描述的可能還不太精確,希望眾讀者對文章的問題,多多批評指正。我也僅僅把這篇文章作為初稿,我會不斷修訂他的。最後感謝看雪、Sunbird、CCG以及看雪論壇所有成員對我的支持,感謝一切幫助過我的人,沒有你們的鼓勵,這篇文章我是沒有動力寫完的,謝謝,謝謝大家!

<全文完>


主要參考文獻

張禾瑞,《近世代數基礎》,高等教育出版社,1978
閔嗣鶴 嚴士健,《初等數論》,高等教育出版社,1982
段雲所,《網絡信息安全》第三講,北大計算機系
Michael Rosing ,chapter5《Implementing Elliptic Curve Cryptography》,Softbound,1998
《SEC 1: Elliptic Curve Cryptography》,Certicom Corp.,2000
《IEEE P1363a / D9》,2001

說真的,如果發貼子,要多發象「ECC加密算法入門介紹」這樣的,你知道這篇文章有多珍貴!ZMWorm 曾向我詢問過是否知道一些加密算法的理論出發點文章,我都以各種理由推托了。因為這些東西是受專利權嚴格保護的!不要說你想瞭解它的理論,就是用一用現成的代碼都得向他繳授權費!在國外Cracker想搞到這些東西,是需要花大價錢雇商業間諜偷才能得到的!更是鮮有公佈的!!!可以說這篇文章字字值千金呀!

推薦一本書《計算機密碼學--計算機網絡中的數據保密與安全》 盧開澄 編著 清華大學出版社

橢圓曲線密碼算法介紹

一種相對比較新的技術--橢圓曲線加密系統,已經逐漸被人們用做基本的數字簽名系統。
橢圓曲線作為數字簽名的基本原理大致和RSA與DSA的功能相同,並且數字簽名的產生與認
證的速度要比RSA和DSA快。下面我們簡單的介紹一下橢圓曲線和橢圓曲線上的密碼算法。

1. 有限域上的橢圓曲線
設K表示一個有限域,E是域K上的橢圓曲線,則E是一個點的集合:
E/K = { ( x, y ) | y2+ a1xy + a3y = x3 + a2x2 + a4x + a6,
a1, a3, a2, a4, a6 x, y K } { O } 其中O表示無窮遠點。
在E上定義『+』運算,P + Q = R,R是過P、Q的直線與曲線的另一交點關於x軸的對稱點,
當P = Q時R是P點的切線與曲線的另一交點關於x軸的對稱點。這樣,( E, + )構成可換群
( Abel群),O是加法單位元(零元)。
橢圓曲線離散對數問題(ECDLP)定義如下:給定定義在K上的橢圓曲線E,一個n階的點P
E/K,和點Q E/ K,如果存在l,確定整數l, 0 l n - 1, Q = lP。我們知道,RSA是基於因
子分解,其算法的核心就是如何尋找大叔的因子分解,但ECDLP是比因子分解難得多的問題

橢圓曲線上的加法: P + Q = R

橢圓曲線上一點的2倍: P + P = R.
2. 橢圓曲線上的密碼算法
基於該難題,1985年N.Koblitz和Miller提出將橢圓曲線用於密碼算法,分別利用有限域上
橢圓曲線的點構成的群實現了離散對數密碼算法。在《數字簽名分析和實現》中詳細地介
紹過的DSA算法,被廣泛應用在橢圓曲線上的變化,稱為橢圓曲線數字簽名算法ECDSA,由
IEEE工作組和ANSI(Amercian National Standards Institute)X9組織開發。隨即展開了
橢圓曲線密碼學研究,除橢圓曲線外,還有人提出在其它類型的曲線如超橢圓曲線上實現
公鑰密碼算法。其根據是有限域上的橢圓曲線上的點群中的離散對數問題ECDLP。ECDLP是
比因子分解問題更難的問題,許多密碼專家認為它是指數級的難度。從目前已知的最好求
解算法來看,160比特的橢圓曲線密碼算法的安全性相當於1024比特的RSA算法。
此後,有人在橢圓曲線上實現了類似ElGamal的加密算法,以及可恢復明文的數字簽名方案
。除有限域上的橢圓曲線密碼算法外,人們還探索了在橢圓曲線上實現RSA算法,如KMOV等

3.橢圓曲線密碼算法的發展
RSA算法是大家熟悉的公鑰密碼算法,用它可以實現數字簽名,PGP軟件用到的就是RSA算法
。RSA算法是基於大數的因子分解難題,由於計算水平的提高,人們逐漸可以用計算機分解
更大的數。因此RSA算法的密鑰也就越來越長。在電子商務的SET協議中,規定用戶使用10
24比特的RSA密鑰,認證中心CA使用2048比特的RSA密鑰。長密鑰帶來兩個問題,一是運算
速度較慢,另一個是密鑰存儲和管理問題。如果用16位的IC卡實現電子錢包,使用1024比
特的RSA算法速度就很慢,要以秒計算。而固化RSA算法的IC卡或32位的IC卡價格則較貴。

橢圓曲線加密系統由很多依賴於離散算法問題的加密系統組成,DSA就是一個很好的例子,
成,DSA就是一個很好的例子,
DSA是以離散對數為基礎的算法。橢圓曲線數字簽名系統已經被研究了很多年並創造了很多
商業價值。
由於其自身優點,橢圓曲線密碼學一出現便受到關注。現在密碼學界普遍認為它將替代RS
A成為通用的公鑰密碼算法,SET( Secure Electronic Transactions )協議的制定者已把
它作為下一代SET協議中缺省的公鑰密碼算法,目前已成為研究的熱點,是很有前途的研究
方向。
應用橢圓曲線的數字簽名同時可以很容易地使用到小的有限資源的設備中例如:小卡(信
用卡大小的包含有微小處理芯片的塑料卡片)。橢圓曲線上的密碼算法速度很快,分別在
32位的PC機上和16位微處理器上實現了快速的橢圓曲線密碼算法,其中16位微處理器上的
EDSA數字簽名不足500ms。


相關文章: