Što je u stvari blockchain i kako radi?
Do sad smo se dosta bavili kriptovalutama, pojašnjavajući vam kako da ih kupite, njima trgujete ili ih zaradite uz pomoć grafičkih kartica. Sad ćemo se pozabaviti fundamentalnim principima na kojima kriptovalute uopće funkcioniraju, a koji su i uzrok njihove popularnosti
Termin blockchain jednostavno se može prevesti na hrvatski jezik kao lanac blokova. Riječ je o podatkovnim blokovima koji su povezani u jednosmjerni lanac, i u kojem svaka nova karika, odnosno blok, zavisi o vrijednosti prve starije karike. Kako to obično biva u informatici kad je nužna sigurnost i određena razina privatnosti, povezivanje blokova u lanac temeljeno je na kriptografiji.
Iako se prvi znanstveni radovi na temu kriptografski povezanih blokova podataka pojavljuju još početkom 90-ih godina, blockchain kakvim ga poznajemo danas, opisan je i definiran 2008. godine. Tada je “netko” pod pseudonimom Satoshi Nakamoto podigao web-stranicu bitcoin.org i na njoj objavio rad u obliku PDF-a, pod imenom “Bitcoin: A Peer-to-Peer Electronic Cash System”. Link na rad iste je godine odaslan na jednu od mailing lista popularnih među kriptografima, gdje je izazvao popriličan interes.
Bez koncepta blockchaina ne bi postojala kriptovaluta bitcoin, pa niti jedna druga novija kriptovaluta. Naime, blockchain rješava problem stvaranja distribuirane baze podataka, bez potrebe za korištenjem posebnog entiteta koji će nadzirati transakcije. Što to znači? U klasičnim bankovnim transakcijama između dva korisnika, nazovimo ih Ivica i Marica, banka igra ulogu nadzornika i bilježnika transakcija. Ako Ivica pošalje Marici 10 kuna sa svog računa, banka će zabilježiti da je Ivičin račun manji za 10 kuna, a Maričin veći za jednak iznos. Zašto uopće postoji treći, nezavisni entitet? Zato što osigurava da jedan korisnik neće namjerno prevariti drugog. To, naravno, funkcionira pod pretpostavkom da Ivica i Marica imaju povjerenja u nezavisnog kontrolora, banku, a to, pak, banci daje popriličnu moć i izvor zarade.
Blockchain pruža alternativu takvom klasičnom sustavu tako što eliminira treću, centraliziranu stranu, kojoj treba vjerovati. U blockchainu je zamjenjuje decentralizirana mreža nepoznatih računala koja potvrđuju transakcije na bazi specifičnog algoritma. Tko stoji iza računala koja se nalaze u toj mreži? Bilo tko tko želi potvrđivanjem transakcije zaraditi, biti nagrađen, odnosno “izrudariti” bitcoine ili neku drugu kriptovalutu koja se “rudari”.
S obzirom na to da je bitcoin prva praktična implementacija blockchaina uopće, koristit ćemo ga kao primjer. Blockchain mrežu u slučaju bitcoina čine korisnici i “rudari”. Korisnici se oslanjaju na rudare radi održavanja sustava, odnosno bilježenja transakcija, a rudari se oslanjaju na korisnike jer im oni generiraju transakcije na čijim potvrdama mogu zaraditi nove kriptokovanice. Blockchain sustav, kod kojeg je za potvrđivanje transakcija potrebno vršiti zahtjevne matematičke izračune, koje odrađuju rudari, zove se Proof of Work, no postoje i drugi sustavi kao što je Proof of Stake.
Transakcije između korisnika odvijaju se na sljedeći način. Za primjer ponovno imamo Ivicu i Maricu, no koji u ovom slučaju imaju bitcoine, a ne kune. Ivica iz svog bitcoin novčanika želi poslati Marici 10 bitcoina. On taj naum pomoću softvera, novčanika za kriptovalute, objavi ostatku mreže slanjem specifične kombinacije podataka u točno određenom formatu. Kako se ta njegova transakcija širi bitcoin mrežom, tako je pokušavaju verificirati rudari.
Proces slanja bitcoina
Bitcoin novčanik, pa zapravo i bilo koji drugi blockchain novčanik, temeljen je na dva jedinstvena i povezana enkripcijska ključa – javnom, koji mogu vidjeti svi, i privatnom, koji zna samo korisnik. Javni ključ je ujedno i adresa pojedinog bitcoin novčanika, odnosno identifikacija korisnika u mreži. Kada Ivica šalje Marici 10 BTC-a, njegova se transakcija automatski kriptira pomoću privatnog ključa. Rudari, pa zapravo i bilo tko drugi, može provjeriti sadržaj transakcije tako da je dekriptira uporabom Ivičinog javnog ključa. Uporabom bilo kojeg drugog ključa, podaci dobiveni kripcijom više nemaju smisla, odnosno bezvrijedni su, čime se jamči da samo Ivica može upravljati svojim bitcoinima.
Rudari imaju lokalnu kopiju aktualnog blockchaina u koji se pohranjuju transakcije. Dakle, u bitcoin blockchainu nije implicitno zapisana vrijednost pojedinog bitcoin novčanika. Svaka transakcija između dva bitcoin novčanika (pod transakcijom se ovdje misli na “Ivica šalje 10 BTC Marici”) definirana je s listom ulaznih transakcija te listom izlaznih transakcija. U slučaju Ivičine transakcije od 10 BTC, zbroj ulaznih transakcija mora biti jednak ili veći od 10 BTC, koliko šalje Marici. U suprotnom, mreža će odbiti obradu transakcije. Postoje i drugi uvjeti za obradu transakcije, no oni nisu toliko bitni za našu priču.
Lista ulaznih transakcija zapravo predstavlja sve uplate u Ivičin BTC novčanik koje su se dogodile između posljednje isplate i isplate koja se trenutačno pokušava obaviti. Pretpostavimo da u slučaju Ivice postoje tri takve ulazne transakcije, a da je svaka vrijednosti 10 BTC. To ujedno znači da Ivičin BTC novčanik prije slanja valute pokazuje vrijednost od 30 BTC. Izlazne transakcije, pak, specificiraju kako se ukupna vrijednost ulaznih transakcija dijeli na primatelje. Kako Ivica želi Marici poslati 10 BTC, to je prva izlazna transakcija.
Druga izlazna transakcija odnosi se na takozvani miner fee, odnosno naknadu rudaru na mreži. Naknada može biti veća ili manja, a s povećavanjem naknade motiviramo rudare da našu transakciju što prije obrade. Naknada može biti i nula, no u tom će se slučaju transakcija osjetno sporije verificirati. Sav ostali iznos bitcoina adresira se na samog Ivicu, a bilježi se kao UTXO – Unspent Transaction Output.
Moć upravljanja
Rudari imaju listu svih UTXO-ova koja se čuva u lokalnoj bazi podataka (dakle, na disku ili SSD-u). Najsvježiji dio te baze podataka cacheiran je u radnoj memoriji rudara zato što je ujedno i najaktivniji u kontekstu ponovnih pristupa. Čemu ta baza podataka? Zbog toga što bitcoinov blockchain sigurno i nepromjenjivo bilježi sve transakcije, no što ga zbog veličine i zaštite ne čini zgodnim za prčkanje radi čestog dohvata informacija.
S obzirom na to da UTXO sadrži popis svih BTC transakcija koje nisu završile kao ulazni dio neke nove transakcije, efektivno je riječ o popisu svih vrijednosti bitcoina koje stoje u bitcoin novčanicima vlasnika. Ovo “stoje” treba uzeti s rezervom. Prema definiciji, korisnici ni ne mogu biti vlasnici bitcoina, već samo mogu imati upravljačka prava za slanje bitcoina unutar neke transakcije.
Samim time, kada god se otvara bitcoin novčanik, on preko mreže provjerava kompletnu UTXO bazu za svim transakcijama koje su povezane s javnim ključem tog novčanika. Zbroj svih tih unosa jest trenutačna vrijednost BTC-a kojom vlasnik novčanika može raspolagati.
Kao što možete i sami vidjeti, transakcije s bitcoinom vrlo su javne, a anonimnost dolazi samo i isključivo zbog činjenice da su korisnici u sustavu vidljivi preko svog javnog ključa. Teorija o anonimnosti drži vodu dok god se transakcije odvijaju između korisnika koji na neki drugi način nisu otkrili svoj identitet.
Rudarenje brojeva
Rudar može biti pojedinac, no u današnje vrijeme primarno se odnosi na poslovne entitete koji na raspolaganju imaju tisuće računala ili, pak, takozvane mining poolove, koji organiziraju rad malih kućnih rudara. Mining pool se prema mreži ponaša kao jedan korisnik, no interno posao raspodjeljuje na sve svoje članove, koji onda proporcionalno snazi svojih računala, dijele zarađene kriptokovanice. Kako bi transakcija BTC-a između korisnika bila potvrđena, potrebno ju je spakirati u blok – osnovni element blockchaina. Vrijednost bloka računa se tako da rudar na bazi algoritma odabere određeni broj transakcija pristiglih iz mreže (u slučaju bitcoina 500-tinjak) te ih potom hashira standardnim SHA256 algoritmom.
Na hashiranje možemo gledati i kao na digitalni potpis – izvođenjem algoritma dobije se numerička vrijednost fiksne duljine. Ako se koristi isti algoritam, hashiranje jednog te istog skupa podataka uvijek će rezultirati jednakom numeričkom vrijednošću, koju nazivamo hash.
Jedan se blok u blockchainu ugrubo sastoji od sljedećih elemenata – indeksa bloka (dakle, koji je blok redni broj u kompletnom lancu), hash vrijednosti prethodnog bloka (dakle, digitalnog potpisa prethodnog bloka), timestampa (dakle, podatka kad je blok generiran), podataka (u ovom slučaju riječ je o bitcoin transakcijama), hash vrijednosti aktualnog bloka i noncea, vrlo bitnog broja koji pokazuje koliko intenzivno rudar mora računati da dođe do validnog, odnosno odgovarajućeg hasha za aktualni blok.
Upravo je pronalazak odgovarajućeg digitalnog potpisa novog bloka dokaz rada u Proof of Work blockchain sustavu. Rudari se natječu tko će prije digitalno potpisati novi blok i dodati ga u lanac, zato što to nosi vrijedne nagrade – fiksnu vrijednost novih bitcoina koja je propisana bitcoin algoritmom te varijabilnu vrijednost bitcoina koju su korisnici mreže odlučili zakačiti na svoje transakcije kako bi potaknuli rudare da im transakciju verificiraju. Za verifikaciju bloka koristi se ponovno SHA256 algoritmom, koji se izvodi nad sljedećim podacima – indeks bloka + hash prethodnog bloka + podaci (dakle, BTC transakcije) + timestamp (novog bloka kandidata) + nonce.
Izvesti jedan hash kompjutacijski je u današnje vrijeme vrlo jednostavno pa se postavlja pitanje čemu onda sav taj silni hardver u rukama rudara? Štos je u tome da hash novog bloka mora biti izveden prema aktualnoj specifikaciji bitcoin algoritma, a taj parametar naziva se difficulty (u slobodnom prijevodu – težina izračuna). Ako difficulty diktira da hash novog bloka mora na početku imati četiri nule, hardver računa novi hash dok prvi put ne dođe do kompatibilne vrijednosti. Od svih vrijednosti koje se hashiraju samo je jednu dozvoljeno mijenjati, a to je nonce. Vrijednost kreće od nule, u svakom se ciklusu ponovnog izračuna hasha povećava za jedan, čime se dobiva drugačija vrijednost konačnog hasha. Ako rudar uspije pronaći ispravan hash za novi blok prije nego što mu neki kolega s mreže ne pošalje vlastiti ispravan blok, dodaje ga u svoj lokalni blockchain i šalje natrag prema mreži. Ako novi blok ipak stigne s mreže ranije, izračuni se prekidaju, čisti se lista pristiglih transakcija od onih koje su uključene u novopristigli blok, stvara se nova lista transakcija za verificiranje i počinje izračun za sljedeći blok.
Kao što vidimo, rudari se natječu tko će prvi izračunati blok koji nastavlja blockchain, a upravo to natjecanje jamči sigurnost i neovisnost sustava do prihvatljive razine. Difficulty algoritma inače je varijabilan, a izračunava na bazi brzine pronalaska prethodnih 2.016 blokova. Algoritam koji podešava difficulty cilja na to da se novi blok generira okvirno svakih 10 minuta, čime se održava računska zahtjevnost kompletnog procesa. Održavanje zahtjevnosti iznimno je bitno jer uvelike otežava mogućnost prevare unutar mreže.
Kako prevariti lanac?
Plaćanja bitcoinom, i bilo kojom drugom kriptovalutom, iniciraju se preko novčanika uz koji je registrirana određene količina valute. Ti novčanici poslušno će, i u skladu s protokolom, započeti transakciju plaćanja i sve će se ostalo dogoditi u skladu s pravilima protokola. S druge strane, činjenica da se radi o digitalnoj valuti koja funkcionira unutar distribuiranog sustava bez centralnog autoriteta, implicira velike mogućnosti prevare. No je li baš tako lako prevariti blockchain?
S obzirom na to da je Proof of Work sustav temeljen na natjecanju između rudara te kako je poanta natjecanja što brži pronalazak ispravnog digitalno potpisanog bloka s ispravnim transakcijama, kompletan sustav oslanja se na pravilo da je najduži blockchain u sustavu ujedno i ispravan blockchain. To znači da potencijalni napadač mora pod svoju kontrolu staviti više od 50% kompletne mreže rudara, odnosno nadjačati računsku moć “poštenog” ostatka sustava. Ta računska moć u trenutku pisanja ovog teksta za bitcoin mrežu iznosi oko 8 terahasheva po sekundi, odnosno 8 bilijuna hasheva po sekundi. Hakirati toliko rudara istovremeno praktički je nemoguće, baš kao i na neki način organizirati rudare da se odluče stvoriti alternativni fork, odnosno račvanje blockchaina u kojem je sadržana transakcija kojom je netko bio prevaren. Rudarima je u interesu 100% vremena verificirati transakcije u blockchainu koji ima najveću vrijednost i time zarađivati kriptovalutu, koja ujedno služi za otplaćivanje investicija i električne energije potrebne za napajanje hardvera.
Mnogo jednostavniji napad koji relativno često prolazi zove se napad utrkivanjem (race attack). On se temelji na tome da napadač pomoću modificiranog novčanika praktički istovremeno šalje dvije transakcije. Prva se transakcija šalje izravno korisniku od kojeg se BTC-om kupuje neka roba ili usluga. Druga transakcija ide normalno prema BTC mreži, a specificira da se kompletan iznos novčanika uplatitelja vraća uplatitelju na upravljanje. Taj napad funkcionira isključivo ako primatelj ima BTC novčanik koji dopušta izravne konekcije i spreman je prihvatiti transakciju bez verifikacije ostatka mreže (tzv. 0/unconfirmed transakcija). Prednost tako podešenog novčanika je trenutačna vidljivost transakcija, a nedostatak iznimno laka mogućnost izvođenja spomenutog napada.
Iz istog razloga danas dosta korisnika na BTC mreži (primarno trgovaca i burzi) traži 6/confirmed razinu transakcije, što znači da im novčanik ne priznaje transakciju dok ona nije ovjerena sa šest blokova u BTC blockchainu. Kako se blok generira otprilike svakih 10 minuta, na potvrdu transakcije potrebno je čekati oko sat vremena.
Postoje i neke druge varijante napada, no u principu ih nema smisla spominjati jer su dokazane samo na teoretskoj razini. To ne znači da ne rade u praksi, no vjerojatnost da uspiju toliko je malena da je možemo zanemariti. Bitcoin blockchain od trenutka postojanja nije hakiran. S druge strane, hakirani su njegovi korisnici, bilo da je riječ o malim korisnicima ili velikim korisnicima kao što su burze kriptovaluta.
No poanta ovog teksta nije bitcoin koliko blockchain – tehnologija sigurne distribuirane baze podataka, koja ne ovisi o centralnom autoritetu. Koncept koji je osmislio Satoshi Nakamoto ima cijeli niz primjena jer omogućuje zaobilaženje, zamjenu ili nadomještanje tradicionalnih institucija i tehnologija. Riječ je o tehnologiji koja ima potencijala promijeniti svijet kakvim ga poznajemo, a njezina najočitija implementacija – decentralizirane kriptovalute, trenutačno je najpopularnija.