Kryptografia krzywych eliptycznych

0

Robię stronę internetową na informatykę i wybrałem sobie temat o kryptografii krzywych eliptycznych. Rozumiem wszystko z http://www.certicom.com/index.php/ecc-tutorial ale nie wiem co zrobić potem, jak wygenerować klucze oraz jak zaszyfrować i odszyfrować wiadomość. Znalazłem open source'owy program (sks-ecc) wykorzystując ECC ale jest napisany w C/C++ nie znam wystarczająco aby zrozumieć algorytm. Czy ktoś mógłby przedstawić sam algorytm z możliwie małą zawartością składni jakiegokolwiek języka, ew. w Pascalu ?

0

Eliptyczne krzywe mozesz zastosowac na kryptosystemy takie jak El - gamal czy DSA (->ECDSA). Klucze generujesz w podobny sposob jak do tych systemow, czyli w przypadku El-Gamal wygladalo by to tak (np. w grupie cyklicznej mod 11):
wybierasz generator g np (2,1), jako prywatny klucz np. x = 7 . Publiczny klucz wynosi [g, y] = [(2,1), 7*(2,1)].
Ktos szyfrujemy wiadomosc dla Ciebie np. M = (10,4) - punkt na eliptycznej krzywej. Zalatwia sobie twoje publiczne transformacje (g, y)

  1. wybiera przypadkowo k (1<=k<=10) np k = 3 , oblicza a = kg i b = M+ky .
  2. Text zaszyfrowany to (a,b)
    Ty odszyforwujesz:
    1.obliczasz z = -x*a
  3. Wiadomosc M = z + b

ps. zakladam ze znasz kryptosystem El-Gamal, troche teorii liczb no i jak wspomiales ECC (zauwaz ze w przypadku el-gamal jest praktycznie nie mozliwe znalezienie dyskretnego logarytmu, czyli x wiedzac ze y = g^x i majac tylko g i y, a w przypadku ECC jest praktycznie nie mozliwe znalezc x wiedzac ze y = g*x i majac tylko g i y).
ps2. sorry, nie mam zadnych zrodel , pokaz ten z C/C++ moze da sie go rozgryzc

0

Dziękuję za wyjaśnienie. Mniej więcej zrozumiałem, ale czy mógłbyś dokończyć przykład? Link do źródeł : https://launchpad.net/ubuntu/hardy/+source/sks-ecc/0.93-1/+files/sks-ecc_0.93.orig.tar.gz .

0

Dla krzywej eliptycznej E: y<sup>2 = x</sup>3 + 3x + 9 ;w; Z_{11} wybierasz generator g = (2,1).
Obliczasz wielokrotnosc g, czyli generujemy nastepne punkty:
2g = (0,3)
3
g = (10,7)
4g = (3,1)
5
g = (6,10)
6g = (6,1)
7
g = (3,10)
8g = (10,4)
9
g = (0,8)
10g = (2,10)
11
g = O

//pisales ze wszytko wiesz o krzywych wiec nie wnikam jak te punkty obliczylem,(ta strone nie przegladalem ale w sumie to dodawanie punktow na krzywej to podstawy i powinny tam byc).

Wybierasz prywatny klucz x = 7 obliczasz swoj publiczny y = 7g = 7(2,1) = (3,10). W publiczynym katalogu znajduje sie twoje E i ((2,1)(3,10)) = (g,y).

I teraz to co w poprzednim poscie napisalem:
Ktos szyfrujemy wiadomosc dla Ciebie np. M = (10,4). Zalatwia sobie twoje publiczne transformacje (g, y)

  1. wybiera przypadkowo k (1<=k<=10) np k = 3 , oblicza
    ) a = kg = 3*(2,1) = (10,7)
    **) b = M+k*y = (10,4) + 3 * (3,10) = (10,4) + (2,10) = (3,10) //dodawanie punktow P1 + P2
  2. Text zaszyfrowany to C = ((10,7),(3,10))
    Ty odszyforwujesz:
    1.obliczasz z = -xa = -7(10,7) = (2,1) // - 7 mod 11 = 4
  3. Wiadomosc M = z + b = (2,1) + (3,10) = (10,4)

1 użytkowników online, w tym zalogowanych: 0, gości: 1