Thursday, May 15, 2014

Matematika ključeva


Javni i privatni ključevi u Bitcoin protokolu generiraju se pomoću eliptičke krivulje. To su specijalne krivulje trećeg stupnja definirane nad nekim poljem i najčešći im je oblik:

(1)  y2 = x3 + ax + b


Gdje su a, b, x, y elementi nekog polja (realnih brojeva, kompleksnih brojeva, racionalnih brojeva itd.). Za potrebe kriptografije eliptičke se krivulje definiraju nad konačnim poljima Fp. To su polja koja za razliku od prije navedenih imaju konačan broj elemenata p. U kriptografiji p je najčešće neparan prost broj. Tako se jednadžba (1) pretvara u:

(2)  (y2 = x3 + ax + b) mod p

Eliptička krivulja koja se koristi u protokolu Bitcoin ima službeni naziv secp256k1 te 
ima jednadžbu:

(3)  (y2 = x3 + 7) mod p

Parametri krivulje šest su elemenata T = (p, a, b, G, n, h).

p je veličina konačnog polja nad kojim je krivulja definirana. U ovom je slučaju p = 2256 – 232 – 29 – 28 – 27 – 26 – 24 – 1 odnosno u heksadecimalnom obliku p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
a i b su već opisani koeficijenti jednadžbe: a = 0, b = 7.

G je točka generator eliptičke krivulje, slično generatoru cikličke grupe. Ciklička grupa je grupa koju je moguće generirati iz jednog njezinog elementa. Takav element naziva se generator grupe i označava s g. Ostali se elementi generiraju potenciranjem generatora: gn, n Є [0, p - 1] gdje je p broj elemenata u grupi (veličina polja). Za secp256k1:

G = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8

Analogno cikličkoj grupi, sve se točke mogu izvesti iz generatora eliptičke krivulje. Mogu se prikazati u dva oblika, kompresiranom i nekompresiranom. To se prepoznaje prema broju na početku generatora. Ako je broj 0x04 kao u gornjem primjeru znači da je format nekompresiran, a ako je broj 0x02 ili 0x03 radi se o kompresiji. U gornjem je primjeru x koordinata točke generatora 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798, a y
483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8.

n je red generatora, odnosno broj koji zadovoljava jednadžbu:

(4) n ∙ G = 0 (mod p)

U ovom je primjeru n = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141.

Parametar h je kofaktor, omjer broja točaka na eliptičkoj krivulji i reda generatora te iznosi h = 1.

Generiranje ključeva



Privatni ključ d koji se koristi za pristup sredstvima na adresi je slučajno odabrani element iz intervala [1, n – 1] gdje je n red generatora:

(5) d Є [0, FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364140]

Javni ključ Q dobiva se iz privatnog ključa d pomoću generatorske točke na krivulji:

(6) Q = d ∙ G (mod p)

Dakle javni ključ Q je zapravo točka na krivulji dobivena matematičkom operacijom množenja. Glavna karakteristika ovakvog množenja je da je ono ireverzibilno. Poznajući Q i G nemoguće je dobiti privatni ključ d.

Jednadžba (6) preciznije napisana je:

(7)  Q = d ∙ (xG, yG) = (xQ, yQ)

Koordinate ključa veličine su 32 bajta. U protokolu Bitcoin te se koordinate konkateniraju i dobiva se javni ključ veličina 64 bajta. On se zatim hashiranjem pretvara u adresu na koju se primaju bitcoini.

No comments:

Post a Comment