Ovaj bi tekst trebao pokušati pojasniti rad u kojem je
opisan Bitcoin protokol.
Originalni tekst je vrlo sažet i nije jednostavan za
čitanje. Prije čitanja rada bilo bi dobro imati osnovno zanje iz
područja kriptografije javnog ključa,
digitalnih potpisa, Merkleovog stabla, kriptografskih hash funkcija,
raspodijeljenih sustava te problema bizantskih generala.
Također bi bilo poželjno prvo pročitati radove koji
su referencirani u radu o Bitcoinu: b-money, How to time-stamp a digital document, Design of a secure timestamping service with minimaltrust requirements, Improving the efficiency and reliability of digitaltime-stamping, Secure names for bit-strings i Hashcash - a denial of service counter-measure.
Rad se oslanja i na implementaciju samog protokola u
bitcoin klijentu.
Bitcoin rad i programski kod razvijani su istovremeno.
Ovaj će tekst pratiti originalni rad o bitcoinu poglavlje po
poglavlje te je zamišljen da se čita nakon svakog poglavlja originalnog teksta.
2. poglavlje: Transactions
U prvom odlomku drugog poglavlja bitcoin je definiran
kao lanac digitalnih potpisa. Znači da bitcoin nije nešto kao
elektronički token koji si korisnici međusobno prosljeđuju, nego
nešto apstraktnije. Niz digitalnih potpisa koji su na neki način
povezani (svaka "karika" ovisi o prethodnoj) te tako tvore
lanac. Svaki element tog lanca naziva se transakcija. Transakcija je
prijenos bitcoina s jednog vlasnika na drugog. Prijenos se obavlja
tako da se hash prethodne transakcije, odnosno podataka koje ona
sadrži, digitalno potpisuje zajedno sa javnim ključem idućeg
vlasnika (prikazano na idućoj slici).
Slika 1. Bitcoin transakcije |
Recimo da vlasnik 0 želi prenijeti nešto bitcoina
vlasniku 1. Svaki od vlasnika ima svoj jedinstveni javni i privatni
ključ. Svaki od pravokutnika na slici predstavlja jednu transakciju
Da bi prenijeo sredstva vlasnik 0 uzima hash prethodne transakcije od
koje je njemu prenesen bitcoin te javni ključ vlasnika 1 i ta dva
podatka digitalno potpisuje svojim privatnim ključem.
Slično, ako vlasnik jedan želi dati nešto bitcoina
vlasniku 2. On uzima hash goreopisane transakcije, javni ključ
vlasnika 2 te ta dva podatka digitalno potpisuje svojim privatnim
ključem. Ako vlasnik 2 želi provjeriti tu transakciju, uzima javni
ključ vlasnika 1 te verificira transakciju.
U iduća se dva
odlomka uočava problem dvostrukog trošenja. Kako novi vlasnik
bitcoina može biti siguran da prethodni vlasnik nije poslao
identičnu transakciju već nekome prije i tako stvorio novac ni iz
čega? Zaključuju se tri stvari: da je bitan samo prvi pokušaj
trošenja (prijenosa) novca te da oni kasniji nisu važni, da se sve
transakcije moraju javno objaviti kako bi se izbjeglo oslanjanje na
posrednika i da je potreban sustav kako bi se svi njegovi sudionici
mogli složiti oko jedinstvenog redoslijeda izvršavanja transakcija
(odnosno prijenosa novca s jednog vlasnika na drugog). Dvije
mogućnosi javnog objavljivanja transakcija opisane su u tekstu
b-money.
3. poglavlje: Timestamp server
Ovo se poglavlje primarno temelji na tekstu How to
timestamp a digital document. Kaže da “timestamp server” uzima
hash stvari (pretpostavlja se transakcija) koji treba vremenski
obilježiti te se taj hash na neki način javno objavi. Također je
vrlo bitno da taj hash sadrži prethodnu vremensku oznaku u sebi.
Ako je bitcoin timestamp server modeliran prema
gorespomenutom tekstu, davat će izlaze kao n-torke (n, tn,
IDn, yn, Ln). N je redni broj
elementa koji se vremenski označava, t je vrijeme (vremenska
oznaka), ID je identifikator klijenta (javni ključ vlasnika), y je
sama transakcija koja se označuje, a L je hash prethodne vremenske
oznake.
U tekstu "Improving the efficiency and reliability
of digital time-stamping" opisana su poboljšanja timestamp
poslužitelja. Taj tekst daje odgovor na pitanje što ako jako veliki
broj banalnih događaja želi da ih se vremenski obilježi, no
događaji sami po sebi nisu "dovoljno značajni" za to? U
prijevodu na bitcoin: što ako korsinici bitcoin sustava međusobno
šalju velik broj transakcija zanemarive vrijednosti? Transakcije
moraju biti uključene u sustav, no predstavljaju nepotrebno
opterećenje.
Tekst predlaže sljedeće rješenje: timestamp
poslužitelj prikuplja dokumente koji mu stižu kroz određeni
vremenski period (npr. sat vremena). Zatim od tih dokumenata stvara
Merkleovo stablo te korijen tog stabla hashira s korijenom prethodnog
stabla dobivenog na isti način u prijašnjih sat vremena. Svaki
korijen ima vremensku oznaku.
4. poglavlje: Proof-of-work
U ovom se poglavlju prvi put eksplicitno spominje
peer-to-peer model bitcoin sustava. Budući da je cilj Bitcoin rada
omogućiti sudionicima sustava itravnu interakciju, dakle bez
posrednika, p2p je pogodan model. Peer-to-peer timestamp server
temelji se na modelu sličnom modelu Hash-cash.
Ovaj model s "dokazom rada" sličan je modelu
opisanom u prethodnom poglavlju. Svi sudionici ovog raspodijeljenog
sustava (peerovi) prikupljaju transakcije koje se u njemu događaju
kroz određeni vremenski period (10 minuta). Zatim te transakcije
stavljaju u blok (popis transakcija) te se u taj blok stavlja hash
prethodnog bloka. No u novom se modelu uz transakcije i hasheve
prethodnog bloka dodaje i tzv. nonce, niz znakova koji se ne
ponavlja.
Taj niz znakova, nonce, koristi se za "dokaz
rada". Nonce se inkrementira te se svaka nova vrijednost hashira
pomoću SHA256 algoritma i provjerava se počinje li hashirana
vrijednost s unaprijed određenim brojem nula.
Prednost ovakvog načina postavljanja vremenskih oznaka
je u tome što se krivotvorenje blokova transakcija otežava. Svaki
novi blok transakcija ovisi o točno hashiranoj vrijednosti iz
prethodnog bloka te da bi se promijenio sadašnji blok potrebno je
prvo promijeniti sve njegove prethodnike.
Kako se brzina računala povećava, težina se dokaza
rada također povećava.
No comments:
Post a Comment