2013-03-16 104 views
2

我想對素數場上的橢圓曲線進行點減法。我試着把積分扣除爲(x,-y log(p)),但我的答案似乎不匹配。橢圓曲線密碼術中的點減法

這是我嘗試做減法:

s9=point_addition(s6.a,s6.b,((s8.a)%211) ,-((s8.b)%211)); 

這裏s9s6s8是兩個int所有結構。

,這是我的函數不加分:

structure point_addition(int x1, int y1, int x2, int y2) 
{ 
    int s,xL,yL; 
    if((x1-x2)!=0) 
    { 
     if ((((y1-y2)/(x1-x2)) % 211)>0) 
       s=(((y1-y2)/(x1-x2)) % 211); 
     else 
       s=(((y1-y2)/(x1-x2)) % 211) + 211; 
     if ((((s*s)-(x1+x2)) % 211)>0) 
       xL= (((s*s)-(x1+x2)) % 211) ; 
     else 
       xL= (((s*s)-(x1+x2)) % 211) + 211; 
     if(((-y1+s*(x1-x2)) % 211)>0) 
       yL= ((-y1+s*(x1-xL)) % 211); 
     else 
       yL= ((-y1+s*(x1-x2)) % 211) + 211; 
    } 
    else 
    { 
     xL= 198 ; 
     yL= 139; 
    } 

    s7.a= xL; 
    s7.b= yL; 

    return s7 ; 
} 

的程序似乎並沒有給我正確的座標,請幫我這個編碼橢圓曲線加密。

+0

不要忘記標記正在執行的語言在Jowin中計算,如果只是增加觀點的數量。我猜C了,但你可以重新編輯你的問題來改變它。 –

+0

Jowin,「division」mod p表示您必須計算[模塊反轉](http://en.wikipedia.org/wiki/Modular_inverse)。 s =(((y1-y2)/(x1-x2))%211)'不是正確的方法。 –

+0

GregS,我看到我必須編輯我的代碼,用模塊化的逆方法進行分割..但是我想知道如何進行正常分割無論我得到的是橢圓曲線上的哪些點!..非常感謝您的回答!在我的程序中,無限點必須考慮橢圓,我可以採取什麼措施? –

回答

2

請參閱GregS關於division mod p的評論。你需要找到分母的倒數,然後乘。要計算模逆,你可以使用擴展的歐幾里得算法。

此外,你的方式是否定y座標,然後加211後有點奇怪。以參數形式傳遞時,最好將字段元素保持在適當的範圍內。得到-y mod p,使用p-y。

而且我認爲這僅僅是一個學習的過程,因爲你使用的是非常小的領域:)

+0

請您詳細說明我認爲p-y是我發現要替換的-y mod(p)在我的程序中糾正了我,如果我在此上錯了。 –

+0

是的,我認爲你的情況沒問題。我只是說,使用同一個字段元素的不同表示方式會造成麻煩。假設你將x1 = 210和x2 = -1傳遞給point_addition。檢查if((x1-x2)!= 0)是否不起作用。 – Frank

1

我不`噸明白你究竟在做什麼有,應該是什麼意思你的日誌(P)以及您的域參數輸入的位置,但減法很容易: 取反y座標(-Y =模 - y),然後照常添加。

如果你想爲你的計算基準,則可以使用我的開放源碼軟件「學術簽名」 從this link 它與它的計算相當透明的,例如產生ECDSA簽名的結果以人類可讀的十六進制符號表示。但目前我還不確定,如果它可以用你正在使用的這種短模量進行計算。

特色如何ECC的操作正確,以及如何使用軟件程序的說明手冊有: Link to ecc Manual

問候 邁克爾·安德斯

+0

感謝您的回覆邁克爾。我想要做的是在c http://www.dkrypt中實現以下tutuorial。COM /家庭/ ECC的P爲橢圓曲線方程 {Y2模p = X 3 + AX + B模p} P和我下載的程序是令人印象深刻的可程序能夠找到這個 1中給出橢圓曲線方程y^2模(211)=(X^3 - 4)MOD(p)的私鑰是4個發電機點是(2,2)的數字0- 200上的曲線號碼被映射到使用方法中被加密教程和發送4,5,6發送它可以告訴加密點和decypted點 –