前言
同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(阿貝爾)群),在**的眼中。實數的加法和橢圓曲線的上的加法沒有什麼區別。這也許就是數學抽象把:)。關於群以及**的具體概念請參考近世代數方面的數學書
ECC橢圓曲線加密
rust實現 注 本博文是sec1 v2中描述的橢圓加密標準 參考資料 1 目錄加密元件 金鑰生成 diffie hellman原根 mqv原根 簽名方案 加密和金鑰傳輸方案 金鑰協商方案 參考資料 記有一串二進位制位表示的資料 b b 0 b 1 dots b 那麼按如下規則轉為八位組 八位組 轉...
橢圓加密演算法 ECC加密 原理及應用
sm2橢圓曲線公鑰密碼演算法 移動網際網路安全專用數字證書 ecc加密演算法通用性 ecc加密演算法與rsa演算法哪個好?ecc也叫橢圓加密演算法,由koblitz和miller兩人於1985年提出。ecc加密演算法是一種公鑰加密技術,以橢圓曲線理論為基礎。利用有限域上橢圓曲線的點構成的abel群離...
解讀ECC加密演算法
ecc是 ellipticcurves cryptography 的縮寫,意為橢圓曲線密碼編碼學。和 rsa演算法一樣,ecc演算法也屬於公開金鑰演算法。最初由 koblitz 和miller 兩人於1985 年提出,其數學基礎是利用橢圓曲線上的有理點構成 abel 加法群上橢圓離散對數的計算困難性...