1. 程式人生 > >ECC加密演算法原理入門介紹

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+c1
Z =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。如下圖:P+P+P = 2P+P = 3P。

點選檢視全圖

下面,我們利用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) –P的值為(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
現在我們描述一個利用橢圓曲線進行加密通訊的過程:

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
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
3、產生一個隨機整數r(r
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
3、產生一個隨機整數r(r
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’ ,則註冊失敗。
</N),計算點R(X,Y)=RG; /></N),利用基點G計算公開金鑰K=KG; />


八、結語

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


2003-5- 3 初稿,於看雪論壇
2004-7-11二稿,修正一張圖片

<全文完>


主要參考文獻

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

相關推薦

ECC加密演算法原理入門介紹

 前言 同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一樣,ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)也屬於公開金鑰演算法。目前,國內詳細介紹ECC的公開文獻並不多(反正我沒有找到)。

[分享]ECC加密演算法入門介紹演算法乾貨】

前言 同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一樣,ECC(Elliptic Curves Cryptography,橢圓曲線密碼編碼學)也屬於公開金鑰演算法。目前,國內詳細介紹ECC的公開文獻並不多(反正我沒有找到)。有一些簡介,也是

區塊鏈教程區塊鏈背後的資訊保安2DES、3DES加密演算法原理

Feistel輪函式 每次Feistel輪函式內部,均經過4種運算,即: 1、擴充套件置換:右側32位做擴充套件置換,擴充套件置換將32位輸入擴充套件成為48位輸出,使得擴充套件後輸出資料長度與48位子金鑰等長。 2、異或運算:右側32位擴充套件置換為48位後,與48位子金鑰做異或運算。 3

K-means聚類演算法原理簡單介紹

K-means演算法 (1. 剛開始隨機選擇兩個點作為簇重心,然後計算每個資料點離這個重心的距離並把這些點歸為兩個類) (上一步的結果如下圖,所有離藍色叉近的點被標為藍色了,紅色亦然)

加密演算法原理及DNS服務原理

1、簡述常見加密演算法及常見加密演算法原理,最好使用圖例解說在安全領域,利用金鑰加密演算法來對通訊的過程進行加密是一種常見的安全手段。利用該手段能夠保障資料安全通訊的三個目標 1、資料的保密性,防止使用者的資料被竊取或洩露; 2、保證資料的完整性,防止使用者傳輸的資料被篡改; 3、通

bcrypt加密演算法原理和應用

Question剛開始接觸這種加密方式,而又對加密原理不瞭解時,很容易產生這種疑問❔:    對一個密碼,bcryptjs每次生成的hash都不一樣,那麼它是如何進行校驗的?Basic verification    雖然對同一個密碼,每次生成的ha

AES加密演算法的詳細介紹與實現

#include <stdio.h> #include <stdlib.h> #include <string.h> #include "aes.h" /** * S盒 */ static const int S[16][16] = { 0x63, 0

SM2演算法第一篇:ECC加密演算法

SM2橢圓曲線公鑰密碼演算法本身是基於ECC橢圓曲線演算法的,所以要搞sm2, 先要弄懂ECC。 這裡學習ECC橢圓曲線演算法,主要參考了一位前輩的技術部落格,網名為ZMWorm 的大牛在多年前寫的《橢圓曲線ECC加密演算法入門介紹》。 在此特別註明出處: 作者  :ZMW

AES,RSA,ECC加密演算法實現

RSA演算法: package key; import java.math.BigInteger; import java.util.Random; public class RSA extends Cryption{ KEY ku;//公鑰 KEY kr;//

MD5加密演算法原理及實現

1 #include "MD5.h" 2 3 /*4組計算函式*/ 4 inline unsigned int F(unsigned int X, unsigned int Y, unsigned int Z) 5 { 6 return (X & Y) | ((~

ECC加密演算法

關鍵詞: ECC:Elliptic Curve Cryptography (ECC) 基於離散對數的橢圓曲線密碼系統提供與RSA類似的安全性,但是具有相對較短的金鑰大小。 GF(

[C++] MD5加密演算法原理及實現

參考文獻: 1. RFC1321 - R. Rivest 2. 中山大學 蔡國揚 老師的 Web安全課件 演算法概述 MD5 使用 little-endian,輸入任意不定長度資訊,以 512 位長進行分組,生成四個32位資料,最後

​​​​​​​MD5加密演算法原理及實現

MD5訊息摘要演算法,屬Hash演算法一類。MD5演算法對輸入任意長度的訊息進行執行,產生一個128位的訊息摘要。 以下所描述的訊息長度、填充資料都以位(Bit)為單位,位元組序為小端位元組。 演算法原理 1、資料填充 對訊息進行資料填充,使訊息的長度對512取模得4

DES 加密演算法原理

  DES加密演算法是由 IBM 研究在1977年提出的。使用64位(bit)的資料進行加密和解密的,所用的金鑰也是64位。並被美國國家標準局宣佈為資料加密標準DES,主要用於非國家保密機關。

MD5加密演算法原理及其Go語言實現

MD5訊息摘要演演算法(英語:MD5 Message-Digest Algorithm),一種被廣泛使用的密碼雜湊函式,可以產生出一個128位元(16位元組)的雜湊值(hash value),用於確保資訊傳輸完整一致。 go 呼叫 md5 方法 新建 m

區塊鏈背後的資訊保安(1)AES加密演算法原理及其GO語言實現

# AES加密演算法原理及其GO語言實現AES是作為DES的替代標準出現的,全稱Advanced Encryption Standard,即:高階加密標準。AES加密演算法,經歷了公開的選拔,最終2000年,由比利時密碼學家Joan Daemen和Vincent Rijmen設計的Rijndael演算法被選中

paillier加密演算法原理詳解

  paillier加密演算法是一種公鑰加密演算法,基於複合剩餘類的困難問題。滿足加法同態,即密文相乘等於明文相加:D(E(m1)·E(m2))=m1+m2。這裡詳細介紹其加密解密是如何推導的,需要具備數論、代數系統、模運算的相關知識,同時理解起來可能需要多閱讀幾遍並加以思考。 先將金鑰生成和加

公鑰加密演算法那些事 | RSA 與 ECC 系統對比

https://blog.csdn.net/u010646653/article/details/73888734 一、背景 據記載,公元前 400 年,古希臘人發明了置換密碼。1881 年世界上的第一個電話保密專利出現。在第二次世界大戰期間,德國軍方啟用「恩尼格瑪」密碼機,密碼學在戰爭中起著非

【百度】大型網站的HTTPS實踐(二)——HTTPS加密演算法介紹

大型網站的HTTPS實踐(二)——HTTPS加密演算法介紹 原創 網路通訊/物聯網 作者:AIOps智慧運維 時間:2018-11-09 15:09:43  358  0   前言

Atitit 演算法原理與導論 目錄 1. Attilax總結的有用演算法 按用途分類 1 1.1. 排序演算法 字串匹配(String Matching) 1 1.2. 加密演算法 編碼演算法 序列

Atitit 演算法原理與導論   目錄 1. Attilax總結的有用演算法 按用途分類 1 1.1. 排序演算法  字串匹配(String Matching) 1 1.2. 加密演算法  編碼演算法  序列化演算法 1 1.3. 查