U protokolu Bitcoin postoje dvije vrste ključeva:
privatni i javni. Privatni je ključ broj u rasponu od 1 do
115792089237316195423570985008687907852837564279074904382605163141518161494336.
Javni ključ generira se iz privatnog množenjem privatnog ključa
generatorom sliptičke krivulje. Rezultat su dva broja, x koordinata
krivulje te y koordinata krivulje. Javni se i privatni ključevi radi
praktičnosti zapisa ne prikauzju uvijek u decimalnom obliku.
Slijede primjeri različitih oblika zapisa ključeva.
Za primjer privatnog ključa uzet je
d =
105627842363267744400190144423808258002852957479547731009248450467191077417570.
Njemu pripadajući javni ključ je
Q =
[40052878126280527701260741223305245603564636128202744842713277751919610658249,
112427920116541844817408230468149218341228927370925731589596315545721129686052]
gdje je prvi broj x koordinata, a drugi y koordinata eliptičke
krivulje.
Privatni ključevi
Slijede formati zapisa privatnih ključeva. Duljina
privatnog ključa je 32 bajta ili 256 bitova.
Heksadecimalni
Najčešći format zapisa privatnog ključe je
heksadecimalni. To je ujedno i najjednostavniji zapis jer je privatni
ključ potrebno samo pretvoriti u heksadecimalni oblik. Takav zapis
izgledao bi ovako:
E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA33262.
Njegova duljina je 64 heksadecimalna znaka.
Heksadecimalni kompresirani
Još jedan jednostavni format zapisa privatnog ključa
je heksadecimalni kompresirani format. Sastoji se od dodavanja bajta
'0x1' na kraj ključa. Tako bi ključ iz primjera izgledao ovako:
E9873D79C6D87DC0FB6A5778633389F4453213303DA61F20BD67FC233AA3326201.
Duljina mu je 66 heksadecimalna znaka.
Heksadecimalni kompresirani format zapravo je dulji od
normalnog heksadecimalnog formata. Naziva se kompresirani samo zato
što služi za generiranje kompresiranih javnih ključeva koji
umjesto 65 bajtova zauzimaju samo 33 bajta.
Wallet Import Format (WIF)
WIF je jedan od najčešćih formata zapisa privatnog
ključa. Najčešće ga koriste novčanici za spremanje ključa.
Postupak pretvaranja privatnog ključa u WIF format ima nekoliko
koraka:
Generira se privatni ključ.
Na početak mu se doda bajt 0x80.
Taj se niz dva puta hashira algoritmom SHA256.
Od dobivenog se rezultata uzmu početna četiri
bajta koji će služiti kao zaština suma.
Ta se četiri bajta dodaju na kraju niza dobivenog
u drugom koraku.
Dobiveni se niz zatim pretvori u base58check bazu.
Za ključ iz primjera WIF je
5Kb8kLf9zgWQnogidDA76MzPL6TsZZY36hWXMssSzNydYXYB9KF. Wallet import
format uvijek počinje brojem 5.
Kompresirani WIF
Kompresirani WIF sličan je normalnom WIF zapisu samo
što se dobiva iz kompresiranog privatnog ključa. U koracima
navedenima za dobivanje wallet import formata u drugom je koraku
potrebno dodati i bajt '0x1' na kraj niza uz bajt '0x80' na početku
niza. Rezultat je
L53fCHmQhbNp1B4JipfBtfeHZH7cAibzG9oK19XfiFzxHgAkz6JK. Kompresirani
WIF ključevi počinju s 'K' ili 'L'.
Javni ključevi
Slijede formati zapisa javnih ključeva. Duljina
privatnog ključa je 64 bajta plus bajt prefiksa što daje 512,
odnosno 520 bitova.
Heksadecimalni
Zapis javnog ključa u heksadecimalnom formatu je: 04
|| x || y. Operator || označuje konkatenaciju, a x i y su x i y
koordinate javnog ključa u heksadecimalnom obliku. Javni ključbi
tad izgledao:
04588d202afcc1ee4ab5254c7847ec25b9a135bbda0f2bc69ee1a714749fd77dc9f88ff2a00d7e752d44cbe16e1ebcf0890b76ec7c78886109dee76ccfc8445424.
Duljina mu je 130 heksadecimalnih znakova odnosno 65 bajtova
računajući bajt prefiksa '0x4'.
Heksadecimalni kompresirani
Kompresirani javni ključ dobiva se iz
kompresiranog privatnog ključa. Umjesto da se sastoji od x i y
koordinate, dovoljna je samo x koordinata. Y se dobije rješavanjem
jednadžbe eliptičke krivulje (y
2 = x
3
+ 7) mod p
. Da bi se jednoznačno odredio y potrebna
je informacija je li on pozitivan ili negativan (odnosno, u slučaju
konačnog polja, paran ili neparan). Ako je y paran, x
koordinati dodaje se bajt prefiksa '0x2', ako je neparan dodaje se
'0x3'. Kompresirani ključ tada izgleda
ovako:
02588d202afcc1ee4ab5254c7847ec25b9a135bbda0f2bc69ee1a714749fd77dc9. U
ovom je slučaju y paran pa je prefiks '0x2'. Duljina
mu je 66 znakova, odnosno 33 bajta računajući bajt prefiksa.
Budući da se i kompresirani i nekompresirani
javni ključevi komu koristiti za dobivanje bitcoin adresa te da će
te adrese biti različite, potrebno je paziti koji se ključ koristi.
O tome računa vode bitcoin novčanici koji uglavnom koriste
kompresirani format budući da zauzima manje mjesta.