电竞比分网-中国电竞赛事及体育赛事平台

分享

橢圓曲線(xiàn)入門(mén)詳解

 華燈初放l 2016-07-14

轉(zhuǎn)載請(qǐng)注明http://blog.csdn.net/boksic 如有疑問(wèn)歡迎留言


如果不知道數(shù)學(xué)上的群、循環(huán)群等概念,可以先了解ElGamal加密算法 后再回過(guò)來(lái)橢圓曲線(xiàn)加密

這兩個(gè)算法有共通之處,都是在離散問(wèn)題難解群上的加密算法,橢圓曲線(xiàn)是進(jìn)一步的加深


首先,什么是橢圓曲線(xiàn)

橢圓曲線(xiàn)(Elliptic curve)

叫橢圓曲線(xiàn)只是因?yàn)榉匠谈鷻E圓的曲線(xiàn)積分比較相似

橢圓曲線(xiàn)方程可以統(tǒng)一為

y^2=x^3+ax+b\,
當(dāng)然還有要求
至于長(zhǎng)什么樣,繪個(gè)圖看看

用matlab寫(xiě)了一個(gè)模擬程序,可以控制a,b變化,顯示曲線(xiàn)的圖像。

  1. clear;clc;figure(1);  
  2. a=0;  
  3. b=0;  
  4. h_text1=uicontrol('Style','text','String','a','Position',[50 20 50 20]);  
  5. h_text1=uicontrol('Style','text','String','b','Position',[50 0 50 20]);  
  6. ezplot(strcat('x+',num2str(a),'*y'));  
  7. h_slider1=uicontrol('Style','slider','Position',[100 20 200 20],...  
  8. 'Max',10,'Min',-10,'callback',['a=num2str(get(gcbo,''value''));',...  
  9. 'ezplot(strcat(num2str(b),''+x^3+'',num2str(a),''*x-y^2''))']);  
  10. %h_text2=uicontrol('Style','text','String','b');  
  11. h_slider2=uicontrol('Style','slider','Position',[100 0 200 20],...  
  12. 'Max',10,'Min',-10,'callback',['b=num2str(get(gcbo,''value''));',...  
  13. 'ezplot(strcat(num2str(b),''+x^3+'',num2str(a),''*x-y^2''))']);  


再直觀一點(diǎn)

(不得不說(shuō)在這方面,Mathematica比Matlab要方便強(qiáng)力太多,用MATLAB做這個(gè)圖像速度慢代碼長(zhǎng)步驟復(fù)雜效果爛)

b=0,a在[-20,20]上變動(dòng)時(shí)的圖像 a=-6,b在[-20,20]上變動(dòng)時(shí)的圖像
Plot3D[{(x^3+y*x)^0.5,-(x^3+y*x)^0.5},{x,-7,7},{y,-20,20}] Plot3D[{(x^3-6x+y)^0.5,-(x^3-6x+y)^0.5},{x,-7,7},{y,20,-20}]

"受ElGamal密碼啟發(fā),在其它離散對(duì)數(shù)問(wèn)題難解的群中,同樣可以構(gòu)成ELGamal密碼。于是人們開(kāi)始尋找其它離散問(wèn)題難解的群。研究發(fā)現(xiàn),有限域GF(p)上的橢圓曲線(xiàn)的解點(diǎn)構(gòu)成交換群,而且離散對(duì)數(shù)問(wèn)題是難解的。于是可在此群上建立ELGamal密碼,并稱(chēng)為橢圓曲線(xiàn)密碼。"


解點(diǎn)交換群

為了構(gòu)成加法交換群,需要定義元素、單位元、逆元素、加法

解點(diǎn)

設(shè)p是大于3的素?cái)?shù),且4a3+27b2 ≠0 mod p ,稱(chēng)
    y^2 =x^3 +ax+b ,a,b∈GF(p)
為GF(p)上的橢圓曲線(xiàn)。
由橢圓曲線(xiàn)可得到一個(gè)同余方程:
    y^2 =x^3 +ax+b    mod p
其解為一個(gè)二元組<x,y>,x,y∈GF(p),將此二元組描畫(huà)到橢圓曲線(xiàn)上便為一個(gè)點(diǎn),于是又稱(chēng)其為解點(diǎn)。

單位元

引進(jìn)一個(gè)無(wú)窮點(diǎn)O(∞,∞),簡(jiǎn)記為0,作為0元素。

     O(∞,∞)+O(∞,∞)=0+0=0 。

并定義對(duì)于所有的解點(diǎn)P(x ,y)有

     P(x ,y)+O=O+ P(x ,y)=P(x ,y) 

逆元素

任何解點(diǎn)R(x ,y)的逆就是 R(x ,-y)。

加法

P(x1 ,y1)+Q(x2 ,y2)=R(x3 ,y3) 

(提醒一下,這里的運(yùn)算都是模運(yùn)算,值都是整數(shù),像除法是模逆運(yùn)算)

定義s = (yP ? yQ)/(xP ?xQ),即PQ線(xiàn)的斜率

總共3種情況

1.一般情況下 R = P + Q = (xR, ? yR)其中

x_R = s^2 - x_P - x_Q,\,

y_R = y_P + s(x_R - x_P).\,


2.如果xP = xQ,yP = ?yQ(包括yP =yQ = 0的情形)

結(jié)果R就是無(wú)窮遠(yuǎn)點(diǎn)0


3 盡管xP = xQ但yP = yQ ≠ 0那么R =P +P = 2P = (xR,?yR)有

s = {(3{x_P}^2 - p)}/{(2y_P)},\,

x_R = s^2 - 2x_P,\,

y_R = y_P + s(x_R - x_P).\,

加法的幾何意義

設(shè)P和Q是橢圓曲線(xiàn)的兩個(gè)點(diǎn),則連接P和Q的直線(xiàn)與橢圓曲線(xiàn)的另一交點(diǎn)關(guān)于橫軸的對(duì)稱(chēng)點(diǎn)即為R點(diǎn)。在該群中P + Q + R = 0

ECClines.svg



橢圓曲線(xiàn)交換群實(shí)例

對(duì)于標(biāo)準(zhǔn)方程y^2=x^3+ax+b (mod p) 設(shè)定基本參數(shù)

 p=31,a=2,b=17

隨便找一個(gè)在曲線(xiàn)上(即滿(mǎn)足該方程)的點(diǎn)P=(10,13) 

然后按照上面提到的公式來(lái)逐一計(jì)算2P,3P,4P.....

我用的Python來(lái)計(jì)算(調(diào)用的mod_inv是模下的除運(yùn)算,代碼可參看前面的文章):

[python] view plain copy
  1. px,py=10,13  
  2. x,y=px,py  
  3. a,b=2,17   
  4. p=31  
  5. for i in range(p+20):  
  6.  if(x==px and y==py):   
  7.   x3=(9*x**4-8*x*y**2+6*a*x**2+a**2)\  
  8.   *mod_inv(4*y**2,p)%p  
  9.   y3=((3*x**2+a)*(x-x3)*mod_inv(2*y,p)-y)%p  
  10.  elif(x==px):  
  11.   x3,y3=0,0  
  12.  elif(x==0 and y==0):  
  13.   x3,y3=px,py  
  14.  else:  
  15.   x3=(((y-py)*mod_inv(x-px,p))**2-x-px)%p  
  16.   y3=((y-py)*(px-x3)*mod_inv(x-px,p)-py)%p  
  17.  str = "%dP= (%d,%d)"%(i+2,x3,y3)  
  18.  print str,  
  19.  x,y=x3,y3  

可以得到


[plain] view plain copy
  1. 2P= (21,19) 3P= (19,30) 4P= (27,10)  
  2. 5P= (29,25) 6P= (24,1) 7P= (30,13)  
  3. 8P= (22,18) 9P= (8,24) 10P= (20,11)  
  4. 11P= (6,11) 12P= (23,27) 13P= (12,23)  
  5. 14P= (3,22) 15P= (7,23) 16P= (1,19)  
  6. 17P= (17,2) 18P= (9,12) 19P= (13,15)  
  7. 20P= (5,11) 21P= (5,20) 22P= (13,16)  
  8. 23P= (9,19) 24P= (17,29) 25P= (1,12)  
  9. 26P= (7,8) 27P= (3,9) 28P= (12,8)  
  10. 29P= (23,4) 30P= (6,20) 31P= (20,20)  
  11. 32P= (8,7) 33P= (22,13) 34P= (30,18)  
  12. 35P= (24,30) 36P= (29,6) 37P= (27,21)  
  13. 38P= (19,1) 39P= (21,12) 40P= (10,18)  
  14. 41P= (0,0) 42P= (10,13)  

matlab顯示一下,點(diǎn)的分布與順序都是雜亂無(wú)章




    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多