天天看點

橢圓曲線加密算法

**橢圓曲線密碼學(ECC)*是一種建立公開密鑰加密的算法,也就是非對稱加密。ECC被公認為在給定密鑰長度下最安全的加密算法。目前我國居民二代身份證正在使用256位的橢圓曲線密碼,比特币中的公私鑰生成以及簽名算法ECDSA都是基于ECC的。

公鑰加密,也稱非對稱加密。可以說它現在是現代網絡安全或者網絡信任鍊的基礎。公鑰加密最大的特征就是通信雙方各有一對公私鑰,這一對公私鑰有着千絲萬縷的數學關系。每個人儲存自己的私鑰,公開自己的公鑰。這樣做的好處是不怕通信線路被竊聽,即使被攻擊者拿到公鑰也沒有關系

1橢圓曲線

無窮遠點:假設平行線在很遠的地方相交了。即平行線相交于無窮遠點P∞

橢圓曲線加密算法

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

以下是無窮遠點的幾個性質。

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

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

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

  ▲平面上全體無窮遠點構成一條無窮遠直線。

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

射影平面坐标系:普通平面直角坐标系沒有為無窮遠點設計坐标,不能表示無窮遠點。為了表示無窮遠點,産生了射影平面坐标系,當然射影平面坐标系同樣能很好的表示舊有的平常點。

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

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

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

橢圓曲線:一條橢圓曲線是在射影平面上滿足威爾斯特拉斯方程(Weierstrass)所有點的集合

橢圓曲線加密算法

1橢圓曲線方程是一個齊次方程

2曲線上的每個點都必須是非奇異的(光滑的),偏導數FX(X,Y,Z)、FY(X,Y,Z)、FZ(X,Y,Z)不同為0

3圓曲線的形狀,并不是橢圓的。隻是因為橢圓曲線的描述方程,類似于計算一個橢圓周長的方程故得名

橢圓曲線加密算法

橢圓曲線執行個體:

橢圓曲線加密算法
橢圓曲線加密算法
橢圓曲線加密算法

非橢圓曲線執行個體:

橢圓曲線加密算法
橢圓曲線加密算法

橢圓曲線的阿貝爾群:我們已經看到了橢圓曲線的圖象,但點與點之間好象沒有什麼聯系。我們能不能建立一個類似于在實數軸上加法的運算法則呢?這就要定義橢圓曲線的加法群,這裡需要用到近世代數中阿貝爾群。

在數學中,群是一種代數結構,由一個集合以及一個二進制運算所組成。已知集合和運算(G,)如果是群則必須滿足如下要求

封閉性:∀a,b∈G,ab ∈ G

結合性: ∀a,b,c∈G ,有 (ab)c = a (bc)

機關元:ョe∈G, ∀a ∈G,有ea = ae = a

逆元: ∀a ∈G ,ョb∈G 使得 ab = ba = e

阿貝爾群除了上面的性質還滿足交換律公理(ab)c = a (b*c)

同樣在橢圓曲線也可以定義阿貝爾群。

任意取橢圓曲線上兩點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)。

橢圓曲線加密算法

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

橢圓曲線加密算法

2.密碼學中的橢圓曲線

橢圓曲線是連續的,并不适合用于加密;是以,我們必須把橢圓曲線變成離散的點,我們要把橢圓曲線定義在有限域上。

我們給出一個有限域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)

橢圓曲線加密算法

如果橢圓曲線上一點P,存在最小的正整數n,使得數乘nP=O∞,則将n稱為P的 階,若n不存在,我們說P是無限階的。事實上,在有限域上定義的橢圓曲線上所有的點的階n都是存在的

橢圓曲線加密算法

計算可得27P=-P=(3,13)

是以28P=O ∞ P的階為28

這些點做成了一個循環阿貝爾群,其中生成元為P,階數為28。顯然點的分布與順序都是雜亂無章

3.橢圓曲線加密

考慮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、使用者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

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進行解碼就可以得到明文。

繼續閱讀