Saturday, March 15, 2014

Bitcoin: tehničko pojašnjenje (prvi dio)


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.


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).

bitcoin transakcije
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.

Ova konstrukcija također rješava problem dvostrukog trošenja. U poglavlju dva spomenuto je da je bitan samo prvi pokušaj trošenja (prijenosa) bitcoina. Sad je vidljivo i zašto. Zato što će prvo trošenje stvoriti dulji lanac transakcija u koji je uloženo više rada (dokaza rada) te će korisnici sustava prihvatiti taj lanac, a odbaciti onaj kraći (eventualni pokušaj dupliciranja iste transakcije).


Kako se brzina računala povećava, težina se dokaza rada također povećava.

No comments:

Post a Comment