Šta je to blokčein (blockchain) i kako radi?
Uvod
Verovatno da je retko ko bio spreman na sve što se ove godine dešavalo u svetu kriptovaluta. Cena bitkoina je porasla skoro 20 puta od januara, što je posebno šokantan podatak ako se ima u vidu da bitkoin spada u one kriptovalute koje su ove godine imale umereniji rast. Ova luda godina još nije gotova, pa ćemo se retrospektivom baviti početkom sledeće godine. Do tada, ne bi bilo loše da se malo vratimo osnovama i onome što je neodvojivo od kriptovaluta, a to je blokčein tehnologija. Razumevanje blokčein tehnologije je ključno za razumevanje rasta koji su cene kriptovaluta ove godine imale. Onima koji je ne razumeju, sve ovo što se dešava deluje kako mehur. Onima koji razumeju, shvataju da smo tek na početku i da, šta god bilo sa cenom pojedinačnih kriptovaluta, blokčein i kriptovalute kao koncept su sila koja se više ne može zaustaviti i koja polako, ali sigurno, osvaja svet.
Za početak, bitno je da dobro razumemo probleme koje blokčein rešava. Zato nećemo odmah početi sa blokčeinom, već ćemo do blokčeina doći posredno – preko posrednika.
Posrednici
Kada koristimo posrednike?
Kada god imamo potrebu da nešto pošaljemo nekome ko nije na istoj lokaciji kao mi, moramo da koristimo posrednika ili više njih. Ako se radi o poruci koju šaljemo putem mobilnog telefona, posrednik može biti na pr. Telenor, MTS ili VIP (ako šaljemo SMS). Takođe, može biti Viber, Whatsapp, Telegram… mogu biti društvene mreže kao što je Facebook, Twitter ili Linkedin. Opcija za slanje poruke ima mnogo, ali sve one imaju jednu zajedničku stvar – uvek nam treba posrednik. Isto je kad šaljemo e-mail. Tada posrednik može biti Gmail, Yahoo, Hotmail ili bilo koji drugi e-mail provajder. Poruku možemo poslati i pismom, u tom slučaju posrednik je Pošta.
Ako šaljemo paket, opet imamo puno opcija – Pošta, DHL, Fedex i razne druge kurirske službe. Oni koji bi da uštede na troškovima slanja ponekad koriste vozače autobusa kao posrednike, ali tad imaju veoma ograničen broj lokacija na koje mogu da pošalju.
Slanje novca je posebno zanimljiva tema imajući u vidu da se na ovom kursu bavimo kriptovalutama. Mogućnosti su brojne – u lokalu možemo koristiti banke, PostNet ili ponovo vozače autobusa. Za slanje van zemlje opet imamo banke, Western Union, PayPal itd.
Uglavnom, samo kada se fizički nalazimo na istom mestu kao i osoba kojoj nešto želimo da damo, možemo to uraditi samostalno. U svakom drugom slučaju neophodan nam je posrednik ili često više njih (Obično kada šaljemo nešto u inostranstvo imamo više posrednika uključenih u proces – više banaka, više mobilnih operatera…).
Problemi sa posrednicima
Posrednici su veoma važni jer nam omogućuju interakciju sa ljudima sa kojima se ne nalazimo na istoj lokaciji. Međutim, pored toga što su neophodni, posrednici često mogu biti i problem. Koje su to stvari koje mogu biti problematične kad su posrednici u pitanju?
- Trošak: Usluge posrednika uglavnom nisu besplatne (izuzetak je komunikacija putem interneta – Skype, Viber, e-mail, WhatsApp…). Cene tih usluga mogu biti simbolične, a mogu biti i prilično velike – tolike da cena ponekad postaje dominantan faktor pri izboru posrednika.
- Kašnjenje: Posrednici uglavnom unose neko kašnjenje u proces slanja. Ponovo je izuzetak komunikacija putem interneta gde se to kašnjenje najčešće meri delovima sekunde. Primer situacije gde to kašnjenje može biti značajno je slanje novca u drugu zemlju preko bankovnog računa. Na tome dosta profitiraju servisi kao što su Western Union i Moneygram koji brzinom transfera (neuporedivo brži od banke) opravdavaju izuzetno visoke provizije.
- Poverenje: Da li možemo verovati posredniku da će za nas uraditi ono što nam potrebno? U većini slučajeva poverenje se podrazumeva i u većini slučajeva posrednik opravda to poverenje. Desi se ponekad da se paket izgubi ili da novčana transakcija značajno kasni zbog propusta posrednika, ali su ovakvi slučajevi ipak relativno retki.
- Privatnost: Ovo se nekako nadovezuje na poverenje. Posrednik često raspolaže privatnim podacima svojih klijenata. Postoji opravdan strah da bi posrednik te podatke mogao da zloupotrebi. Takođe, potencijalno može biti veliki problem ako posrednik te podatke ne čuva na dovoljno bezbedan način. U tom slučaju do njih mogu doći hakeri i zloupotrebiti ih.
Problem vizantijskih generala
Problem vizantijskih generala je definisan još davne 1982 godine i ilustruje problematiku komunikacije preko posrednika koji nisu pouzdani. Zamislimo da vizantijski generali opsedaju neprijateljski grad i da treba da se dogovore oko zajedničkog plana akcije. Da bi napad uspeo, potrebno je da svi napadnu u isto vreme. Ako neki od generala ne izvrše napad u dogovoreno vreme, veoma je verovatno da napad neće uspeti. Pošto se generali nalaze na različitim lokacijama oko grada, ne mogu se uživo dogovarati, već komuniciraju preko kurira. Ovde imamo dva potencijalna problema. Prvi problem je ako su neki od generala izdajnici. Oni će namerno sabotirati dogovor i preko svojih kurira slati informacije tako da i među poštenim generalima izazovu konfuziju.
U jednostavnijem scenariju, svi generali su pošteni, ali nisu svi kuriri pošteni. Da još dodatno pojednostavimo slučaj, zamislimo da imamo 3 generala i svaki general po 2 kurira (kao na slici 2), pri čemu svaki šalje po jednog kurira svakom od svojih kolega. U ovom primeru, jedan od kurira prvog generala je izdajnik i on namerno trećem generalu prenosi pogrešnu poruku. Prvi i drugi general misle da je dogovor postignut i kreću u napad. Treći general dobija drugačije poruke od svojih kolega i zbog toga ne napada jer smatra da nije postignut dogovor. Umesto cele vojske, u napad kreće 2/3 vojske i to znatno umanjuje šanse za pobedu.
Na ovom jednostavnom primeru smo videli da je dovoljno da je samo 1 od 6 kurira izdajnik da bi šanse za uspeh napada značajno smanjile. U većim i kompleksnijim sistemima, broj učesnika (a često i broj izdajnika) ja značajno veći, što samo dodatno komplikuje situaciju.
Ovaj problem posebno je izražen u sistemima koji nisu centralizovani i gde je broj učesnika prevelik da bi svako sa svakim direktno komunicirao. Bitkoin predstavlja upravo jedan takav sistem – veliki i decentralizovan.
Kod centralizovanih sistema, gde problem komunikacije ne postoji, svi primaju informacije direktno sa vrha i do svih stižu iste informacije. Kod takvih sistema postoji druga vrsta problema – šta ako onaj koji je na vrhu donosi pogrešne odluke? Ipak, taj problem nije zanimljiv iz ugla ovog teksta, pa se nećemo na njemu duže zadržavati.
Blokčein
Priča o kriptovalutama počinje bitkoinom, pa ćemo i priču o blokčeinu početi bitkoinovim blokčeinom. Blokčein je registar svih transakcija koje su se ikad desile u bitkoinovom sistemu. To samo po sebi nije ništa spektakularno, jer svaki sistem u kojem se vrše neka plaćanja vodi evidenciju o tim transakcijama i čuva ih kao neku bazu podataka. Ono što je kod blokčeina velika inovacija je način na koji se informacije o transakcijama šalju i skladište.
Pođimo od samog imena. Blockchain je sastavljen od reči Block (blok) i chain (lanac). Dakle, bukvalno prevedeno, blokčein je lanac blokova. Naime, kod bitkoina se transakcije pakuju u blokove, a blokovi se vezuju u lanac. Za vezivanje blokova koristi se kriptografija, preciznije HASH funkcija, na način da je nemoguće promeniti sadržaj jednog bloka, a da se ne promeni sadržaj svih blokova koji idu nakon njega. Ovo je izuzetno bitno svojstvo blokčeina jer obezbeđuje nepromenjivost podataka koji su upisani u blokčein.
Kao što verovatno već znamo, bitkoin je decentralizovan, što znači da ne postoji centralni server ili bilo šta slično, na šta se korisnici povezuju. Svi korisnici bitkoina su povezani u peer-to-peer mrežu i svaki korisnik predstavlja jedno čvorište (node) te mreže. Pošto je peer-to-peer mreža takva da svaki korisnik može biti direktno povezan samo sa nekoliko drugih korisnika, to znači da je sa svima ostalima povezan indirektno. Informacija kroz peer-to-peer mrežu putuje tako što svaki učesnik šalje poruku samo onima sa kojima je direktno povezan, zatim svaki od njih tu poruku dalje šalje onima sa kojima je direktno povezan i tako sve dok poruka ne dođe do svih učesnika u mreži. Dakle, ovde imamo primer slanja informacija preko velikog broj posrednika i sjajan primer problema vizantijskih generala, samo mnogo komplikovaniji primer od onog kojeg smo prethodno razmatrali.
Da bismo shvatili kako bitkoin rešava problem vizantijskih generala, bitno je da napomenemo još jednu bitnu osobinu bitkoina. Naime, neka od čvorišta (takva čvorišta se nazivaju full node) u mreži imaju na svom hard disku kompletan blokčein (bazu svih transakcija koje su se ikada desile) i takvih čvorišta je na hiljade. Pošto svi oni stalno međusobno komuniciraju, uvek proveravaju da li se njihova kopija blokčeina slaže sa ostalima. Ako se ne slaže, oni automatski ažuriraju svoju verziju tako da se slaže sa ostatkom mreže. Zamislite to kao bazu podataka koja je replicirana na hiljadama računara i koja se na svim tim računarima ažurira u realnom vremenu. Koliko je teško izmeniti neki podatak u takvoj bazi?
Svaki korisnik bitkoina ima privatni ključ, javni ključ i bitkoin adresu. Javni ključ se kreira od privatnog ključa, ali na način da je nemoguće uraditi obrnut proces, to jest, od javnog ključa napraviti privatni. Zatim se od javnog ključa kreira bitkoin adresa na koju se primaju bitkoini i njega nema potrebe kriti. Sa druge strane, vrlo je važno da se dobro čuva privatni ključ. Privatnim ključem se potpisuju transakcije sa bitkoin adrese koja je za taj ključ vezana. Zamislite da je bitkoin adresa vaš broj bankovnog računa, a privatni ključ vaš pin kojim verifikujete plaćanja sa tog računa. Otprilike tako funkcioniše, uz jednu vrlo bitno razliku: Ako izgubite pin kojim verifikujete transakcije sa bankovnog računa, banka će vam izdati novi. Ako izgubite privatni ključ, izgubili ste zauvek bitkoine na adresi za koju je taj privatni ključ vezan. Ti bitkoini i dalje postoje, ali im niko ne može pristupiti bez privatnog ključa.
Kako se zapravo šalje transakcija u ovakvoj mreži? Kada želim da pošaljem bitkoine nekome, moram da unesem bitkoin adresu primaoca, iznos koji želim da pošaljem i da transakciju potpišem mojim privatnim ključem. Zatim informaciju o toj transakciji šaljem učesnicima sa kojima sam direktno povezan u peer-to-peer mreži, da bi je oni dalje prosledili sve do primaoca.
Možda ste čuli da se kod bitkoina transakcije šalju bez posrednika? Ovo je zapravo vrlo netačno. Nema posrednika u onom klasičnom smislu u kojem doživljavamo posrednika – neko ko šalje našu transakciju i koji za to uzima novac i unosi kašnjenje, ali ima i pravo da tu transakciju odbije, zamrzne, odloži… Ipak, pri slanju bitkoin transakcije ima posrednika, čak hiljade njih, samo je njihova uloga malo drugačija. Svako čvorište u bitkoin mreži je zapravo posrednik koji transakciju proveri i prosledi dalje sve dok ona ne dođe do svih čvorišta u mreži. Kad su je svi proverili i transakcija je došla do svih u mreži, ona ispunjava uslov da se ubaci u blok i time postane deo blokčeina.
Šta svi ti posrednici zapravo proveravaju?
- Da li pošiljalac ima na svojoj bitkoin adresi dovoljno bitkoina da bi mogao da izvrši transakciju?
- Da li je adresa primaoca validna?
- Da li je potpis pošiljaoca validan?
Kako oni mogu sve to da provere? Setimo se da postoje čvorišta koja na svom hard disku imaju kompletan blokčein (sve transakcije koje su se ikad desile). Baš zbog toga, oni u svakom trenutku znaju tačno na kojoj adresi koliko bitkoina ima i koje su adrese validne, a koje nisu. Ako transakcija prođe sve 3 provere, ona se prosleđuje dalje kroz peer-to-peer mrežu dok ne dođe do svih.
Iako sve ovo deluje kao veoma kompleksan proces, u praksi je bitkoin transakciji uglavnom potrebno manje od 1 sekunde da dođe do svih čvorišta u bitkoin mreži.
Za kraj ovog dela, vratimo se na problem vizantijskih generala. Šta ako su posrednici nepouzdani? Bitkoin je ovaj problem rešio na veoma zanimljiv način – povećao je broj posrednika! Ako ne možeš da veruješ jednom posredniku – koristi na hiljade njih! Deluje neverovatno, ali zaista funkcioniše. Hajde da razmislimo šta bi se desilo ako bi neki od učesnika u bitkoin mreži pokušao da promeni transakciju koju je primio, pre nego je prosledi dalje. Ne bi se desilo ništa, zbog načina na koji mreža funkcioniše. Učesnici u mreži konstanto komuniciraju i porede svoje kopije baze sa drugima. Ako primete da se njihova kopija razlikuje od drugih, oni svoju kopiju prilagode tako da bude ista. Međutim, svaki od učesnika je povezan direktno sa nekoliko drugih. Ako od jednog od njih dobija jednu informaciju, a od svih ostalih drugu, on će tog jednog učesnika jednostavno ignorisati, tako da izmenjena informacija ne može da propagira kroz mrežu.
U mreži od nekoliko hiljada učesnika jedan „izdajnik“ ne može da učini nikakvu štetu, što je nekako i logično. Međutim, šta ako imamo više „izdajnika“? Dok god je njihov broj ispod 50%, cela mreža je bezbedna, jer su čvorišta programirana tako da stav većine prihvataju kao tačan. Dakle, da bi se mreža ugrozila, potrebno je pošteni članovi mreže budu u manjini, ali to nije jedini uslov, što napad na mrežu čini još težim. Da bi napad uspeo, neophodno je da napadači budu u većini i da budu savršeno sinhronizovani. Sinhronizacija hiljada učesnika je sama po sebi dovoljno teška, a napad čini još težim to što bi oni morali da deluju istovremeno i trenutno čim se pojavi transakcija koju žele da izmene. Problem je što vrlo teško mogu unapred da znaju kada će se tačno transakcija desiti i kako će izgledati.
Napad na bitkoin mrežu je teoretski moguć, ali se u praksi pokazao kao nemoguć skoro punih 9 godina. Ovde vidimo zašto je bitkoin mnogo više od internet novca – on je rešio problem poverenja u decentralizovanoj mreži učesnika koji se međusobno ne poznaju, što je zapravo problem vizantijskih generala (koji je do pojave bitkoina bio smatran nerešivim, punih 26 godina). Možemo slati novac (ili bilo koji elektronski zapis) pomoću posrednika koje ne poznajemo i kojima ne verujemo, a opet biti potpuno sigurni da će novac stići tačno onome kome treba i tačno u iznosu koji je poslat.
Zaustavićemo se za sada ovde, pa ćemo se sledeći put baviti razlikama između javnog i privatnog blokčeina, kao i mogućim primenama blokčeina