Bitcoin Whitepaper: Peer-to-peer sistem elektronskog novca

Bitcoin Whitepaper: Peer-to-peer sistem elektronskog novca

Kratak pregled:

Čista peer-to-peer verzija elektronskog novčanog sistema omogućila bi online plaćanja između dve strane direktno, bez posredovanja finansijske institucije. Digitalni potpisi su deo rešenja, ali se glavni benefiti gube ako je i dalje potrebna treća strana kojoj se mora verovati da spreči dvostruko trošenje. Predlažemo rešenje ovog problema korišćenjem peer-to-peer mreže. Mreža dodeljuje vremenske pečate transakcijama, smeštajući ih u kontinuirani lanac zasnovan na hashu dokaza o radu (Proof-of-Work). Ovakav sistem generiše zapis koji nije moguće izmeniti bez ponovnog generisanja Proof-of-Work dokaza.

Najduži lanac ne samo da potvrđuje sekvencu verifikovanih transakcija, već i služi kao dokaz da potiče iz najvećeg Pool-a računske snage. Sve dok većina CPU snage ostaje pod kontrolom čvorova koji ne sarađuju sa napadačima, oni će generisati najduži lanac i biti brži od potencijalnih napadača.Sama mreža zahteva samo minimalnu infrastrukturu. Poruke se prenose prema principu maksimalnog napora, a čvorovi mogu napustiti mrežu i kasnije se ponovo pridružiti, prihvatajući najduži Proof-of-Work lanac kao validan zapis događaja koji su se odigrali dok nisu bili prisutni.

1. Uvod 

Trgovina na internetu danas gotovo u potpunosti zavisi od finansijskih institucija koje služe kao poverljive treće strane za obradu elektronskih plaćanja. Iako ovaj sistem funkcioniše dovoljno dobro za većinu transakcija, i dalje pati od slabosti modela zasnovanog na poverenju. Potpuno nepovratne transakcije zapravo nisu moguće, jer finansijske institucije moraju posredovati u slučaju sporova. Troškovi posredovanja povećavaju cenu transakcija, podižu prag isplativosti i eliminišu mogućnost izvođenja malih plaćanja. Dodatni problem nastaje zbog nemogućnosti realizacije nepovratnih uplata za nepovratne usluge, dok opcija poništavanja transakcija povećava potrebu za poverenjem u sistem. Trgovci su primorani da budu oprezni prema kupcima i često zahtevaju više informacija nego što bi inače bilo potrebno. Određeni nivo prevara smatra se neizbežnim. Ovi troškovi i nesigurnost u vezi s plaćanjima mogu se izbeći prilikom ličnih transakcija uz upotrebu fizičkog novca, ali ne postoji mehanizam za obavljanje plaćanja putem komunikacionog kanala bez posredstva poverljive treće strane.

Neophodno je elektronsko platno rešenje zasnovano na kriptografskom dokazivanju, a ne poverenju, koje omogućava dvema voljnim stranama da vrše transakcije direktno, bez posrednika. Transakcije koje je matematički nemoguće poništiti zaštitile bi prodavce od prevara, dok bi standardizovani mehanizmi poverenja mogli biti lako implementirani radi zaštite kupaca. U ovom radu predlažemo rešenje problema dvostruke potrošnje (double spending), koristeći distribuirani peer-to-peer vremenski pečat server koji stvara računarski dokaz hronološkog redosleda transakcija. Sistem ostaje bezbedan sve dok iskreni čvorovi kontrolišu većinu CPU snage, odnosno više računske moći od bilo koje grupe udruženih napadačkih čvorova.

2. Transakcije

 

 

Elektronsku kovanicu (coin) definišemo kao lanac digitalnih potpisa. Svaki vlasnik prenosi kovanicu sledećem korisniku tako što digitalno potpisuje hash prethodne transakcije, kao i javni ključ novog vlasnika, dodajući te podatke na kraj lanca. Primalac plaćanja može verifikovati potpise kako bi potvrdio istoriju vlasništva.

 

 

 

Problem je, naravno, u tome što primalac plaćanja ne može da proveri da li neki od prethodnih vlasnika kovanice nije dvostruko iskoristio istu. Uobičajeno rešenje je uvođenje centralne, poverljive institucije koja proverava svaku transakciju radi sprečavanja dvostruke potrošnje (double spending). Nakon svake transakcije, kovanica mora biti vraćena instituciji kako bi bila zamenjena novom. Korisnici mogu verovati samo kovanicama koje su direktno izdate od te institucije, jer se pretpostavlja da one nisu prethodno iskorišćene više puta. Problem sa ovim rešenjem je što celokupna sudbina sistema zavisi od kompanije koja upravlja kovanicom, a svaka transakcija mora biti procesuirana kroz nju – slično kao kod banaka.

Potrebna nam je metoda koja će primalcu plaćanja garantovati da prethodni vlasnici nisu dvostruko potpisali istu transakciju. U našem modelu, prva validna transakcija je jedina relevantna, tako da ne moramo brinuti o kasnijim pokušajima dvostruke potrošnje. Jedini način da potvrdimo da transakcija nije ponovljena jeste da imamo uvid u sve prethodne transakcije. U modelu sa centralizovanom institucijom, ona je imala pregled nad svim transakcijama i mogla je da odluči koja je prva primljena. Da bismo ovo postigli bez posrednika, transakcije moraju biti javne, a učesnici mreže moraju se saglasiti oko jednog, jedinstvenog redosleda kojim su transakcije primljene. Primalac plaćanja treba da dobije dokaz da se, u trenutku svake transakcije, većina čvorova mreže složila da je ona prva primljena.

3. Server za vremenske pečate

Rešenje koje predlažemo započinje uvođenjem servera za vremenske pečate. Ovaj server funkcioniše tako što uzima hash bloka podataka koji treba biti vremenski pečatiran i taj hash javno objavljuje, na primer, u novinama ili Usenet postu. Vremenski pečat služi kao dokaz da su podaci postojali u određenom trenutku, jer bez njih ne bi bilo moguće generisati njihov hash. Svaki vremenski pečat uključuje hash prethodnog vremenskog pečata,
formirajući lanac u kojem svaki novi pečat dodatno učvršćuje prethodne.

4. Proof-of-Work

Da bismo uveli distribuirani server za vremenske pečate na peer-to-peer bazi, moramo koristit i Proof-of-Work sistem, sličan Hashcash metodi Adama Beka, umesto oslanjanja na novine ili Usenet postove. Proof-of-Work podrazumeva pronalaženje vrednosti koja, kada se hešira (na primer, pomoću SHA-256 algoritma), daje hash koji počinje sa određenim brojem nula. Prosečna količina rada potrebna za ovo raste eksponencijalno u odnosu na broj potrebnih nula,
dok se verifikacija može izvršiti jednostavnim izračunavanjem jednog hasha.

U našoj mreži vremenskih pečata Proof-of-Work se implementira tako što se nonce u bloku povećava dok se ne pronađe vrednost koja generiše hash sa željenim brojem početnih nula. Nakon što CPU uloži dovoljno rada za ispunjenje Proof-of-Work zahteva, blok više ne može biti izmenjen bez ponovnog izvođenja istog procesa. Pošto su blokovi međusobno povezani, bilo kakva izmena jednog bloka zahtevala bi ponovno generisanje svih narednih blokova, čime sistem postaje siguran od neovlašćenih izmena.

Proof-of-Work takođe rešava problem određivanja predstavnika većinskih odluka. Da je većina određivana po principu “jedan glas po IP adresi”, sistem bi bio ranjiv na zloupotrebu od strane onih koji mogu registrovati veliki broj IP adresa. Proof-of-Work, međutim, funkcioniše po principu “jedan glas po CPU-u”. Odluka većine se ogleda u najdužem lancu, jer on predstavlja lanac u koji je uloženo najviše Proof-of-Work resursa. Ako većinu CPU snage kontrolišu iskreni čvorovi, njihov lanac će rasti najbrže, dok će svi konkurentski lanci biti odbačeni. Da bi napadač izmenio prethodni blok, morao bi ponovo izračunati Proof-of-Work za taj blok, kao i za sve naredne blokove, a zatim nadmašiti iskrene čvorove u računskoj snazi. Kasnije ćemo pokazati da verovatnoća da sporiji napadač sustigne iskrene čvorove opada drastično kako se dodaje sve više novih blokova.

Kako bi se balansirao rast računske snage i promenljiv interes za učestvovanje čvorova u mreži, težina Proof-of-Work algoritma prilagođava se pomoću pomičnog proseka, tako da cilja prosečan broj blokova generisanih po satu. Ako se blokovi generišu prebrzo, težina će se povećati.

5. Mreža

Koraci rada mreže su sledeći:

  • Nove transakcije se šalju svim čvorovima (nodes).
  • Svaki čvor prikuplja nove transakcije i formira blok.
  • Svaki čvor pokušava da pronađe odgovarajući Proof-of-Work za svoj blok.
  • Kada čvor pronađe Proof-of-Work, šalje blok svim ostalim čvorovima.
  • Čvorovi prihvataju blok samo ako su sve transakcije u njemu važeće i još uvek nisu potrošene.
  • Čvorovi izražavaju prihvatanje bloka tako što započinju rad na sledećem bloku u lancu, koristeći hash prihvaćenog bloka kao prethodni hash.

Čvorovi u mreži uvek pretpostavljaju da je najduži lanac ispravan i nastavljaju da rade na njegovom produžetku.

Ako dva čvora istovremeno prenesu različite verzije sledećeg bloka, neki čvorovi mogu prvo primiti jednu, a neki drugu verziju. U takvom slučaju, svaki čvor nastavlja rad na verziji koju je prvi primio, ali istovremeno čuva i drugu granu u slučaju da postane duža. Ova situacija se rešava kada se pronađe sledeći Proof-of-Work – onaj lanac koji postane duži biva prihvaćen, a čvorovi koji su radili na kraćoj verziji prebacuju se na duži lanac.

Važno je napomenuti da nove transakcije ne moraju nužno stići do svakog čvora pojedinačno. Sve dok se šire kroz dovoljno veliki broj čvorova, na kraju će biti uključene u neki blok. Širenje blokova je takođe otporno na izgubljene poruke – ako čvor ne primi određeni blok, on će ga automatski zatražiti čim uoči da mu nedostaje nakon što primi sledeći blok.

6. Podsticaji

Prema prihvaćenoj praksi, prva transakcija u bloku je posebna transakcija koja stvara novu kovanicu i dodeljuje je proizvođaču bloka. Ova transakcija služi kao podsticaj za čvorove da podrže mrežu i predstavlja način za prvo puštanje kovanica u opticaj, budući da ne postoji centralna institucija koja ih izdaje. Stalno dodavanje konstantnog broja novih kovanica analogno je rudarima zlata koji ulažu resurse kako bi povećali količinu zlata u opticaju. U ovom slučaju, resursi su CPU vreme i električna energija.

Podsticaji se mogu dodatno povećati kroz transakcione naknade. Ako je izlazna vrednost transakcije manja od njene ulazne vrednosti, razlika se tretira kao transakciona naknada i dodaje se ukupnoj nagradi za rudarenje u bloku koji sadrži tu transakciju. Kada ukupna količina kovanica u opticaju dostigne unapred određeni maksimum, podsticaji će se u potpunosti oslanjati na transakcione naknade, čime će sistem postati u potpunosti oslobođen inflacije.

Podsticaji takođe pomažu u očuvanju poštenja među čvorovima. Ako bi pohlepni napadač imao više CPU snage od svih poštenih čvorova zajedno, morao bi da bira između pokušaja prevare – kako bi ukrao transakcije – i rudarenja novih kovanica. U teoriji, pošteno učešće u mreži trebalo bi da bude profitabilnije, jer mu omogućava da zaradi više novih kovanica nego što bi mogao da stekne destabilizacijom sistema, čime bi ugrozio vrednost sopstvenog bogatstva.

7. Oslobađanje prostora na disku

Kada je poslednja transakcija jednog coina dovoljno duboko zakopana unutar blokova, prethodne iskorišćene transakcije mogu biti obrisane kako bi se oslobodio prostor za skladištenje. Da bi se ovo omogućilo bez narušavanja hash vrednosti bloka, transakcije se organizuju u Merkle stablo, pri čemu se samo koren stabla (Merkle root) dodaje u hash bloka. Stari blokovi mogu biti kompresovani odsecanjem grana stabla, dok unutrašnje hash vrednosti ne moraju biti sačuvane.

Blok zaglavlja bez transakcija zauzima oko 80 bajtova. Ako se blokovi generišu svakih 10 minuta, to znači da:

80 bajtova × 6 blokova na sat × 24 sata × 365 dana = 4,2 MB godišnje.

S obzirom na to da su računarski sistemi iz 2008. godine obično dolazili sa 2 GB RAM-a, a prema Murovom zakonu, koji predviđa godišnji rast memorijskih kapaciteta od 1,2 GB, prostor za skladištenje ne bi trebalo da predstavlja problem – čak i ako bi blok zaglavlja morali biti smešteni u memoriji.

8. Pojednostavljena verifikacija plaćanja

Plaćanja je moguće verifikovati bez potrebe za pokretanjem kompletnog mrežnog čvora. Korisnik treba samo da sačuva kopiju blok zaglavlja (block headers) najdužeg Proof-of-Work lanca, koji može preuzeti od drugih mrežnih čvorova dok se ne uveri da poseduje najduži lanac. Nakon toga, može preuzeti Merkle granu koja povezuje transakciju sa blokom kojem je dodeljen vremenski pečat. Iako korisnik ne može samostalno proveriti validnost transakcije, povezivanjem sa određenim mestom u lancu može videti da je transakcija prihvaćena od strane mreže. Dalji blokovi koji se dodaju na lanac dodatno potvrđuju njenu validnost i prihvatanje unutar sistema.

Kao takva, ova metoda verifikacije ostaje pouzdana sve dok mrežom upravljaju iskreni čvorovi. Međutim, postaje podložnija napadima ako mrežu preplavi napadač. Dok mrežni čvorovi mogu samostalno verifikovati transakcije, pojednostavljena metoda može biti prevarena lažnim transakcijama ako napadač uspe da preuzme kontrolu nad mrežom. Strategija zaštite od ovog problema uključivala bi primanje alarmnih signala od mrežnih čvorova kada prepoznaju nevalidan blok. To bi pokrenulo korisnički softver da preuzme puni blok i transakcije koje su izazvale upozorenje, kako bi se utvrdila neusklađenost.

Kompanije koje redovno primaju uplate i dalje će želeti da pokreću sopstvene čvorove, čime obezbeđuju veću sigurnost i bržu verifikaciju transakcija bez oslanjanja na treće strane.

9. Povezivanje i raspodela vrednosti

Iako bi bilo moguće pojedinačno upravljati svakim bitcoinom, to bi bilo nepraktično, jer bi svaka pojedinačna transakcija morala da obrađuje čak i najmanje iznose. Kako bi se omogućila fleksibilnija raspodela i kombinovanje vrednosti, transakcije sadrže više ulaza i izlaza. Obično postoji jedan ulaz iz prethodne veće transakcije ili više ulaza koji kombinuju manje iznose. Većina transakcija ima najviše dva izlaza: jedan za uplatu i, ako je potrebno, drugi za vraćanje kusura pošiljaocu.

Vredno je napomenuti da je povezivanje transakcija – gde jedna transakcija zavisi od više prethodnih, a te prethodne transakcije od još drugih – u potpunosti normalan proces. Nikada nije potrebno preuzeti kompletnu kopiju celokupnog toka transakcija kako bi se potvrdila validnost pojedinačne transakcije.

10. Privatnost

Tradicionalni bankarski model postiže određeni nivo zaštite privatnosti tako što ograničava pristup informacijama samo na strane koje učestvuju u transakciji i na poverljive treće strane. Međutim, potreba za javnim objavljivanjem svih transakcija u Bitcoin mreži onemogućava ovaj pristup.

Ipak, privatnost se može očuvati na drugi način – tako što javni ključevi ostaju anonimni. Javnost može videti da je određena suma poslata sa jedne adrese na drugu, ali bez informacija koje bi transakcije direktno povezale sa određenim osobama. Ovo je slično sistemu berzi, gde su vreme i veličina pojedinačnih trgovinskih transakcija javno dostupni, ali bez identiteta učesnika.

Kao dodatnu meru zaštite, trebalo bi koristiti novi par ključeva za svaku transakciju, kako bi se sprečilo povezivanje više transakcija sa istim vlasnikom. Međutim, kod transakcija sa više ulaza, određeni stepen povezanosti je neizbežan, jer se time otkriva da svi ulazi pripadaju istom korisniku. Glavni rizik leži u tome što, ako je identitet vlasnika jednog ključa poznat, moguće je povezati i ostale njegove transakcije, čime se ugrožava privatnost.

11. Obračuni

Razmatramo scenario u kojem napadač pokušava da generiše alternativni lanac brže od poštenog lanca. Čak i ako bi u tome uspeo, to ne bi omogućilo proizvoljne izmene sistema, poput stvaranja nove vrednosti iz ničega ili prisvajanja tuđeg novca. Čvorovi neće prihvatiti nevažeće transakcije kao validna plaćanja, a pošteni čvorovi nikada neće prihvatiti blok koji ih sadrži. Napadač može jedino pokušati da izmeni jednu od sopstvenih transakcija kako bi povratio sredstva koja je nedavno potrošio.

Trka između poštenog lanca i napadačevog lanca može se posmatrati kao binomijalni slučajni hod. Uspešan ishod je kada pošteni lanac bude proširen za jedan blok, čime se njegova prednost povećava za +1, dok neuspešan ishod nastupa kada napadačev lanac bude proširen, smanjujući razliku za -1.

Verovatnoća da napadač sustigne pošteni lanac iz određenog zaostatka analogna je problemu “bankrota igrača”. Zamislimo igrača sa neograničenim kreditom koji započinje sa određenim zaostatkom i potencijalno može igrati beskonačno mnogo partija, sa ciljem da dostigne nivo dobitka.

Verovatnoća da on ikada dostigne taj nivo, odnosno da napadač ikada sustigne pošteni lanac je manja od 0,1% .

12. Zaključak

Predložili smo sistem za elektronske transakcije koji ne zavisi od poverenja. Krenuli smo od standardnog modela zasnovanog na digitalnim potpisima, koji omogućava snažnu kontrolu nad vlasništvom, ali ne pruža rešenje za problem dvostruke potrošnje. Da bismo rešili ovaj problem, predložili smo peer-to-peer mrežu koja koristi Proof-of-Work kao mehanizam za evidenciju transakcija, stvarajući javnu istoriju koja je nepromenljiva sve dok većinu računske snage (CPU) kontrolišu pošteni čvorovi. Mreža je robusna u svojoj jednostavnoj i nestrukturisanoj formi. Čvorovi rade paralelno uz minimalnu koordinaciju, bez potrebe za identifikacijom, jer poruke nisu usmerene ka određenim tačkama, već se prenose prema principu najboljeg napora.

Čvorovi mogu napustiti mrežu i ponovo joj se pridružiti u bilo kom trenutku, oslanjajući se na Proof-of-Work kao dokaz o događajima koji su se desili tokom njihove odsutnosti. Koristeći računske resurse, oni „glasaju“ tako što proširuju validne blokove i odbacuju nevalidne blokove odbijanjem rada na njima.

Svi ključni mehanizmi slaganja i podsticaji mogu se sprovesti kroz ovaj sistem, osiguravajući njegovu funkcionalnost i sigurnost.

Ovde možete pročitati ceo Whitepaper upotpunjen i sa formulama na srpskom jeziku.