Peer-to-peer elektroniski sistem za plaćanje

Programer ili grupa koja sebe naziva Satoshi Nakamoto je definisala elektronski novac kao lanac digitalnih potpisa. Svaki vlasnik prenosi novac do narednog digitalnog potpisivanja sačinjenog od miksa prethodnih transakcija, te javnog ključa narednog vlasnika dodajući ga, što na kraju rezultira kao novac sa novim vlasnikom. Primalac uvek može proveriti potpise da bi proverio kompletan lanac vlasništva (što bi rekli poreklo imovine).

Struktura transakcija peer-to-peer sistema plaćanja

transakcije-p2p-sistema

Nakamoto, Satoshi (1 Nov 2008). ”Bitcoin: A Peer-to-Peer Electronic Cash System”. http://bitcoin.org/bitcoin.pdf

Problem je, naravno, što primalac nema informaciju da li je jedan od prethodnih vlasnika dva ili više puta potrošio novac. Zajeničko rešenje je uvođenje pouzdanog središnjeg tela ili emitera tog novca koji ima ulogu provere o pokušaju dvostukog trošenja istog novca. Nakon svake transakcije novac se mora vratiti emiteru (izdavaču) koji bi taj novac konvertovao u novi novac, dok bi samo novac izdat od strane emitera imao ekskluzivitet proverenog, sigurnog novca. Odmah se nameće problem. Sudbina celokupnog novčanog sistema od tada zavisi od jedne firme (emitera koji poseduje centralni registar) koji obrađuje baš svaku transakciju, baš kao i banke.
Znači, postoji potreba da primalac zna ko su prethodni vlasnici, te da zna da taj novac nije potrošen. Dolazimo do saznanja da je najvažniji prvi vlasnik novca odnosno poreklo novca, dok se kasniji pokušaji duplog trošenja lako proveravaju. Jedini način tih provera je posedovanje informacije o svim transakcijama. Emiterov bazni model kompletne baze svih transakcija lako dolazi do informacije koja je od transakcija bila prva.
Da bi se to postiglo, bez emitera ili centralnog registra, sve transakcije moraju biti javne i kao takve se i objavljivati, a ono što ostaje da se postigne je jedinstven sistem svih učesnika u transakcijama u dogovoru o jedinstvenoj istoriji redosleda transakcija kojom su obavljane. Uplatiocu je potrban dokaz da je vreme svake transakcije potvrdio svaki od čvorova (koje smo ranije pominjali).

Server kontrole vremenskih pečata

Server vremenskog pečata (time stamp) radi tako što uzima miks bloka stavki koje će se vremenski overavati i objavi ga na vrlo velikom broju javnih internet adresa (pa i novinama, raznim korisničkim stranicama itd). Svaki vremenski pečat uključuje prethodnu oznaku u svoj miks tvoreći lanac sa svakim dodatnim vremenskim pečatom jačajući na taj način onaj prethodni.

Dokaz o delu

Za distribuciju informacija servera vremenskog pečata na peer-to-peer osnovi koristi se „Proof-Of-Work” (prev. eng: dokaz o delu) sistem. On je identičan kao i „Adam Back’s Hashcash” -ov sistemu, a koji isključuje štampane medije, i Usenet forume i postove iz objava o transakciji. Dokaz o delu uključuje skeniranje vrednosti koje su izgenerisane (kao SHA-256). Početak znakovnog niza počinje sa brojem 0, što označava njegovu vrijednost od 0 bajtova. Prosečan potreban rad je eksponencija broju nula bajtova potrebnih za proveru izvršenja jednog „hash”-a (prev. eng: miks, smesa).
Za bitcoinove mreže su implementirani uvećanjem dokaza o delu upisom u blok, dok se vrednosti u pronađenom bloku, koji tvori blokovski hash, daje informaciju o količini potrebnih 0 bajtova. Jednom kad računarski procesor izvrši potrebnu količinu procesa koji zadovoljavaju dokaz o poslu on taj proces ponavlja. Blok se i dalje ne može menjati sve dok se čitav proces ne ponovi. Po završetku tog procesa i promene upisane u blok, naredni blokovi postaju uvezani, tako da je posao promene bloka sačinjen od ponavljanja svih blokova nakon obrade tog prethodnog bloka.

Adam Back’s Hashcash-ov sistem

Sistem rada Hashcah-a je vrlo jednostavan. On predstavlja broj vodećih bajtova koji su 0 kada se SHA1, izlazni „hash”, vidi kao binarni broj:
U prethodnom primeru vidimo pet heksagonalnih nula što je jednako 20 bajtova. Pošto je sledeći šesti broj 6, a on se binarno piše 0110, podrazumeva da se radi o 21 bajtu. U stvari, određivanje težine se svodi na minimalan broj početnih polja koje sadržavaju pečat, što govori da pošiljaoc tog iskopanog hash-a ga nije pronašao srećom nego ga je baš „iskopao”. Vizuelna mogućnost čitanja bajtova je veoma važna. Hashcash znakovi se pojavljuju u zaglavlju tako da ako ih želimo proveriti možemo to napraviti uz pomoć „SHA1 sum” alata (aplikacije) ili neke predefinisane skripte. Prvobitne verzije 0 hascash i hash niza nisu bile tako jasne i čitljive.
Bitcoin ima kontrolu inflacije koja je inovacija grupacije Satoshi Nakamoto. Grupacija je pomogla i u rešavanju problema sa proverom duplog korištenja istog novca (dokazom o delu) da bi na kraju ta vrednost bile potvrđena virtualnom valutnom podlogom. Bitcoin kontroliše inflaciju i prilagođava je svakih 14 dana automatski.
Bitcoin je ipak napravio neke promene od onih koje koristi Hashcash:

  • Bitcoin koristi „SHA 256”8 kripciju niza znakova, a Hashcash stari „SHA 1”;
  • Dodatnu sigurnost Bitcoin-u daje i dupli SHA 256 tj. SHA 256 (x). To podrazumeva da je njegova sigurnost dvostruko veća;
  • Delovi Hashcash-ovog bajta mogu biti samo prepolovljeni dok bitcoin koristi mnogo finiju stukturu manjih delova, tako da u zavisnosti od inflacije i prilagodljivosti na nju čini bitcoinov bajt mnogo sadržajnijim od drugih virtuelnih valuta.

 

Mreža

Koraci koji pokreću mrežu su sledeći:

  1. Nova transakcija se emituje svim čvorovima;
  2. Svaki čvor prikuplja nove transakcije i pastavlja ih u blok;
  3. Svaki čvor traži i rešava „proof-of-work” i stavlja ih u blok;
  4. Kada čvor pronađe „dokaz o poslu”, emituje taj blok svim čvorovima;
  5. Čvorovi prihvataju blok samo ako su sve transakcije uvrštene u njega ispravne i nisu već korišćene.

Čvorovi očekuju prihvatanje bloka radeći na izgradnji sledećeg u lancu, i to na način što koristeći hash prihvaćenog bloka koristi kao prethodni hash.

Čvorovi su programirani da prihvataju najduži lanac kao ispravan i upravo njega nastavljaju dalje da nadograđuju. Ako dva čvora emituju različite verzije sljedećeg bloka u istom trenutku, neki od čvorova može primiti jedan dok će neki drugi čvor prihvatiti naredni kao prvi. U slučaju da obrađuju prvi blok koji im pristigne oni će narednog staviti na čekanje kao naredni zadatak samo u slučaju da se onaj, koji je trenutno u obradi, oduži. Spona koja veže čvor i pristigli blok, stavljen na čekanje, će pući kada sledeći „dokaz o poslu” bude pronađen, a zadatak još nije obrađen. Čvor koji obrađuje sledeći zadatak će se prebaciti produkt svog rada na naredni, duži lanac, jer je lanac bloka koji se sam obrađuje tad ostao kraći.

Nije neophodno da svaka nova transakcija prispe do svih čvorova. Dok god nova transakcija bude prihvaćena od nekoliko čvorova ona će biti prihvaćena u čvor čak i pre proširenja. Kod emitovanje bloka se takođe tolerišu izgubljeni upisi. Ako čvor ne registruje neki obrađeni blok, on će kod prijema sledećeg bloka ga zahtevati od drugih čvorova, jer će u tom trenutku shvatiti da jedan blok nedostaje da bi on na njega povezao blok koji i sam trenutno obrađuje.

Podsticaj

Po dogovoru, prva transakcija u bloku je specijalna transakcija koja pokreće novac čiji je vlasnik kreator samog bloka. To dodavanje podstiče čvorove da podržavajući mrežu postavljaju inicijalnu distribuciju novaca u opticaj (što je uloga centralnog kontrolnog sistema kod klasičnog novca). Ovakvo dodavanje konstantne vrednosti novih novčanica predstavlja zlatni rudnik očekivanih resursa za dodavanje „zlata” u opticaj. U našem slučaju je to CPU (računarsko) vreme i potrošena struja.

Podsticaj se može finansirati iz provizije na transakcijama. Ako je izlazna vrednost transakcije manja od ulazne, razlika je provizija na transakciju koja se dodaje u podsticajne vrednosti bloka u koji je sama transakcija uvrštena. Jednom kada bi se novac unapred stavio u opticaj, podsticaj može doprineti da provizija i inflacija budu totalno slobodne.

Još jedna uloga ovakvih podsticaja je da pomogne i podstiče čvorove da ostanu pošteni. Ako je napadač u stanju da okupi više procesorske snage od svih poštenih čvorova, biće u mogućnosti da bira da li će tu snagu koristiti kao krađu svojog potrošenog novca ili je koristiti za generisanje novog kriptovanog novca. Sistem je osmišljen tako da je uvek najprofitabilnije ako se „igra” po pravilima. Sistem ga tada isplaćuje sa više novca (jer ima veoma veliku procesorsku snagu) nego što bi stekao urušavajući sistem, a samim tim i mogućnosti sopstvene zarade.

Čišćenje prostora na disku

Kada se izvrši transakcija iz dovoljnog broja blokova u novac, tek nakon završenog postupka se vrši čišćenje diska radi uštede prostora na njemu. Da bi se proces emitovanja blokova olakšao, transakcije su „hashed” u „Merkle Tree” (Merkel stablo), s tim da je samo njegov koren odnosno izvor obuhvaćen u emiter bloka. Stari blokovi se mogu komprimovati i postaviti na stablo drveta. Unutrašnji hash-ovi se ne čuvaju.

Transakcijski hash

Transakcijski Hashed u Merkle Stablu Poslije prerade Tx0-2 Bloka

Naslov bloka bez transakcije bi trebao biti oko 80 bajtova. Ako predpostavimo da se blok generiše svakih 10 minuta, 80 bajta x 6 x 24 x 365 = 4,2MB godišnje. Računari se od 2008. godine prave sa standardnih 2Gb RAM-a i Moore-ov zakon (glasi: „ …snaga računara se udvostučuje približno svakih 18-24 mjeseca” 11) koji predviđa povećanje od 1,2Gb godišnje, dok skladištenje podataka ne bi trebao biti problem (što smo videli iz prethodne računice) iako naslovi blokova moraju biti sačuvani u RAM memoriji sve vreme.

Merkle Tree

Merkle-ovo stablo je binarno stablo hash-ova. U bitcoinu ono koristi dvostruki SHA- 256, SHA-256 hash od SHA-256 hash-a od nečega. Kada tvorimo red na stablu on bi trebao imati neparan broj elemenata tako da konačni dvostruki (ponovljeni) broj hash-eva ipak na kraju bude parnim broj.

Bitcoin adresa leži u činjenici samog hash-a kao ECDSA javni ključ, kriptovan na sledeći način:

 

Pojednostavljena verifikacija plaćanja

Moguće je da se plaćanja verifikuju bez kompletnog pokretanja mrežnog čvora. Korisnik treba samo da zadrži kopiju naslova bloka najdužeg lanca „dokaza posla”, što će on dobiti ispitivanjem mrežnih čvorova. Dok vlastito čvorište ima duži lanac za tu izmenu koju smo napravili u „off line” režimu, dobija Markle granu za povezivanja transakcije u bloku sa unutrašnjom overom vremena transakcije. On ne može sam da proveri tu transakciju. Na taj način što se povezuje na to mesto u mrežnom lancu tako proverava na ostalim mrežnim čvorovima da li je prihvaćen. Prihvatanjem te nove transakcije od strane ostalih čvovova blok se automatski pridodao ostalim lancima na mreži.

Grafikon 4 – Način verifikacije plaćanja

Na taj način verifikacija je izuzetno pouzdana, sve dok pošteni čvorovi kontrolišu mrežu. U trenutku validacije sam sistem je najranjiviji na napade od strane grupe napadača i njihove ukupne procesorske snage. Oni bi taj blok mogli pokušali promijeniti i uvrstili neku od svojih adresa koje bi im to pomoglo da nadvladaju poštene čvorove.
Jedna od strategija zaštite od ovakvih napada je da ako bilo koji čvor u mreži otkrije nedoslednost blokova koje prima od napadača, taj blok proglasi nevažećim, o čemu obavesti korisnika čiji je blok iskorišćen kao „trojanac”. Na taj način i sam korisnik biva upozoren na neispravnost bloka koji je poslat na proveru.
Firme koje se bave čestim novčanim transakcijama će verovatno tražiti posedovanje svojih čvorišta što bi za njih značilo bržu i nezavisnu proveru bezbednosti poslatih transakcija u vidu blokova.

Kombinovanje i podela vrednosti

I ako je moguće individualno upravljanje novcem, bilo bi preglomazno kad bi se pravila transakcija na svaki fening kao posebna transakcija. Da bi se dozvolilo da vrednosti budu podeljene ili kombinovane, transakcije moraju da sadrže više ulaza i izlaza (inputa i outputa). Normalno je da bude jedan ulaz iz prethodne transakcije, ali i više ulaza iz kombinacije manjih transakcija, s tim da je uvek najviše dva izlaza i to: jedan za plaćanje, a drugi za vraćanje promene (ako ih ima) nazad pošiljaocu.

Grafikon 5 – Šematski prikaz ulaza i izlaza transakcija

Treba napomenuti da u ovom slučaju ne predstavlja problem ako transakcija zavisi od drugih transakcija, a te iste transakcije opet zavise od nekih trećih. Nema potrebe da se u takvom slučaju pravi kopija kompletne istorije svake grupe transakcija.

Model privatnosti

Tradicionalni bankarski model dostiže nivo privatnosti tako što ograničava strankama pristup informacijama koje učestuju sa trećom stranom. Taj metod, upravo suprotno ovom našem, zabranjuje javno objavljivanje transakcija, dok se privatnost i dalje zadržava pa i kod zabrane toka informacija na nekom drugom mestu održavajući ih kao anonimne javne ključeve. Javnost može videti da neko nekome šalje izvesnu količinu novca, ali bez informacija o početku i kraju transfera, tj. njegovih učesnika. To je sličan metod koji se koristi i na berzama, gde vreme i veličina pojedinih kupoprodaja obrazuju „trake” koje se iznose u javnost, ali ne i njegovi učesnici.

Grafikon 6 – Šematski prikaz modela privatnosti

Kao dodatna zaštita uvek se koristi novi par ključeva koji se koriste za svaku transakciju, što sprečava povezivanje sa zajedničkim vlasnikom. Neka povezivanja su još uvek neizbežna kao npr. kod multi ulazne transakcije, koji neizbežno otkrivaju da su njihovi ulazi u vlasništvu istog vlasnika. Rizik je da u koliko se otkrije identitet vlasnika javnog ključa mogao bi se povezati i sa drugim poslovima koje je taj vlasnik obavljao.

Kalkulacija u službi sigurnosti

Smatra se da bi scenario eventualnog napadača bio upravo u bržem pravljenju alternativnog lanca nego što to radi pošteni lanac. Čak i ako bi to postigao, sistem i dalje nije podložan promeni lanca tako što bi kreirao novac koji nije postojao ili uzimao novca koji mu ne pripada (koga pokušava da prebacuje na neke svoje račune). Čvorovi neće prihvatiti nevažeće transakcije sačinjene od prepravljenih blokova. Jedina mogućnost eventualnog napadača je da pokuša da vrati novac koji je potrošio u jednoj finansijskoj transakciji. Pri tome ta transakcija je morala biti u što skorijem vremenu, jer i vreme radi protiv napadača.
Neprestana trka između poštenog i napadačkog lanca se može okarakterisati „binomom slučajnog uzorka”. Pošteni lanac je uvek jedan blok ispred, povećavajući prednost za +1, a napadač je uvek prisiljen da predpostavlja povećanje novog bloka lanca smanjujući razliku za -1. Verovatnoća sustizanja napadačevog deficita transakcijskim lancima poštenih čvorova ravna je večitoj kockarskoj težnji. Kockar koji bi i imao neograničen kredit s kojim bi krenuo sa kockanjem, te sa tim kreditom igrao na svaki broj za koji je „siguran” da ima pravu kombinaciju.