Kad se priča o sigurnosti Bitcoina, moramo razlikovati dvije kategorije sigurnosti. Prva kategorija je sigurnost samog Bitcoina, tj. Bitcoin protokola. Druga kategorija je sigurnost korištenja Bitcoina u kojem sudjeluje čovjek bilo aktivno (slanje Bitcoina iz walleta u wallet) bilo pasivno (skripte i programi kreirani da obavljaju transakcije u ime korisnika).
Sigurnost Bitcoin protokola
Svaki Bitcoin wallet se zasniva na jednom ili više privatnih ključeva i jednom ili više javnih ključeva koji se generiraju na bazi tih privatnih ključeva te se zajedno koriste za primanje i slanje Bitcoin-a. Svaki privatni ključ je 256 bitni broj. Primjer jednog takvog broja, samim time i privatnog ključa, prikazanog u heksadecimalnom sustavu je (napomena, NE importajte ovaj ključ u svoj wallet):
413F4428472B4B6250655368566D5971337436773979244226452948404D6351
Pošto se radi o 256 bitnom broju možemo zaključiti da Bitcoin podržava količinu unikatnih ključeva koja je jednaka broju koji iza sebe ima 77 nula.
100.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000
Praktička šansa da se kreiraju dva identična wallet-a je nula ukoliko se prilikom kreiranja slijede svi standardi. Koliko je teško uopće proći kroz sve moguće privatne ključeve najbolje prikazuje sljedeća infografika:
Naravno, ukoliko namjerno (ili greškom) napravite wallet kojem je baza npr. broj 123456 iz kojeg dobijete privatni ključ tako da ga ubacite u SHA-256 funkciju, velika je šansa da će to isto napraviti i netko drugi, te bi se takva praksa trebala izbjegavati pod svaku cijenu. Privatni ključ je podatak koji se nikada ne bi smio dijeliti, te se koristi samo i jedino za kreiranje javnih ključeva te autorizaciju slanja Bitcoina. Ukoliko se desi da netko ima pristup Vašem privatnom ključu, to mu omogućava da bez ikakvih problema pošalje cijeli sadržaj Vašeg bitcoin wallet-a na svoju adresu.
Ukratko, ukoliko kreirate nasumični privatni ključ te ukoliko držite svoj privatni ključ tajnim, praktička šansa da netko drugi naleti na isti takav privatni ključ je nula.
Kompliciranost samog Bitcoina ne staje na privatnom ključu.
Kako bi primili Bitcoin na svoj novokreirani Bitcoin wallet, morate kreirati i javnu adresu (javni ključ) koju većinom kreira program u kojem ste kreirali wallet odmah prilikom kreiranja walleta. Ta javna adresa se uz pomoć SHA-256 i RIPEMD-160 algoritma dobiva od Vašeg privatnog ključa te je šansa da će netko drugi dobiti tu istu adresu 1/2160. To je brojka koja ima 49 nula.
100.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000.00
Šansa da dva privatna ključa (dva walleta) dobiju istu javnu adresu, je toliko mala (kao kod privatnih ključeva, praktički je nula), te se svim korisnicima predlaže da nikada ne koriste istu javnu adresu za primanje Bitcoin-a, već da prilikom svake transakcije koriste novu, što većina Bitcoin wallet programa radi automatski.
Javni ključevi, ili adrese, se mogu slobodno dijeliti drugim korisnicima (što im je i funkcija) kako bi se u bilo kojem trenutku mogao na njih primiti Bitcoin. Javne adrese su kreirane tako da ne postoji način kako bi se kroz te javne adrese, došlo do Vašeg privatnog ključa. To se osigurava, kao što smo već rekli korištenjem SHA-256 i REPEMD-160 funkcijama koje imaju dva bitna svojstva. One kreiraju unikatna i jednosmjerna rješenja što znači da se prema rezultatu funkcije ne može doći do podataka koji su korišteni u dobivanju tog rezultata (u slučaju Bitcoina, ne može se doći do vašeg privatnog ključa). Isto tako, rezultat je uvijek identičan za identičan ulaz, te je za različite ulaze unikatan do te mjere (u slučaju javnih adresa, to je već spomenuta brojka od 2160) da se smatra u potpunosti unikatan.
Ukoliko Vas zanima kako izgledaju rezultati spomenutih funkcija, slijede primjeri:
ako kao ulaz u funkciju damo jedno slovo:
a
kao izlazni podatak za SHA-256 funkciju dobijemo:
ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb
dok kao izlazni podatak za RIPEMD-160 dobijemo:
0bdc9d2d256b3ee9daae347be6f4dc835a467ffe
No isto tako, ako u funkciju ubacimo cijeli paragraf teksta iz npr. Lore Ipsum generatora:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec consequat accumsan purus. Suspendisse gravida enim efficitur, maximus felis quis, blandit quam. Donec lacinia dapibus metus ultrices ultricies. Aliquam tincidunt diam ac lobortis pulvinar. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In tristique urna nec tortor dapibus, in viverra risus ultrices. Praesent ultricies facilisis ligula, eu ultricies lectus porttitor sit amet. Integer id vehicula sem, a convallis purus. Mauris sed leo non nisl mollis porta non in nisl. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer pulvinar, nibh sed euismod consectetur, magna eros dictum lacus, et fermentum elit nibh in massa. Nullam luctus blandit lorem vel imperdiet. Donec mattis scelerisque vulputate. Vestibulum dignissim velit nibh, vel dignissim nunc finibus sed. Nunc sit amet elit gravida, pulvinar ipsum sed, facilisis magna. Curabitur et mauris accumsan, vestibulum ante vulputate, tempus nibh.
kao izlaz iz SHA-256 funkcije dobijemo hash identične dužine kao i hash koji smo dobili samo za jedno slovo:
897d704496930e21bcaf77c1207592e68febfb769ae0b518bae50e79bce59bf0
te izlaz iz RIPEMD-160 funkcije: 57981b0b060d5eeb725fae420d6c6979cce7be47
Kao što stoji na infografici, Vaš bitcoin je zaštićen pravilima svemira sve dok je vaš privatni ključ tajan.
Sigurnost korištenja Bitcoina
Iako smo vidjeli da je sam Bitcoin protokol siguran, isto se ne može reći za korištenje tog protokola. Samo korištenje Bitcoina ima jednu veliku manu, koju imaju svi sigurnosni sistemi koje koristi čovjek, a to je sam korisnik. Iako je nemoguće pogoditi dobro kreirani privatni ključ, baš kao i kod lozinke, dio korisnika će uvijek koristiti ključeve koje su kreirali koristeći input koji se lagano pogodi. Bitcoin wallet programi redovito uvode dodatne podatke (takozvani “salt”) koji ne ovise o direktnom inputu korisnika, kako bi se zaštitio sam korisnik, pa ako korisnik i unese “1234” kao input za kreiranje wallet-a, program će tom inputu dodati još neke random podatke te kreirati wallet na bazi tog kombiniranog inputa.
Naravno, razina intervencije samog programa zavisi od programa do programa. Neki programi interveniraju na više razina a neki namijenjeni naprednim korisnicima ne interveniraju uopće.
Tako npr. neki programi ne prihvaćaju tekstualni input korisnika, već npr. traže od korisnika da miču mišem po određenom polju te od micanja mišem kreiraju tekst kojem dodaju neki random “salt”. Na taj način korisnik može biti siguran da nitko neće moći pogoditi input po kojem je kreiran wallet, no isto tako, ukoliko korisnik izgubi wallet (izbriše ga itd.) nitko mu ne može rekreirati taj wallet i sadržaj walleta je permanentno izgubljen. Tako kreirani wallet-i moraju obavezno biti fizički spremljeni na više različitih mjesta.
Napredni korisnici ne dopuštaju intervencije već sami kreiraju privatne ključeve kako bi bilo kada u budućnosti, čak i kad izgube wallet file, imali pristup wallet-u.
Isto tako, korisnici moraju biti svjesni da ukoliko kreiraju Bitcoin wallet putem nekog programa (bilo programa za slanje Bitcoina, bilo programa specijaliziranih za kreiranje wallet-a), da ukoliko sam program ima neki bug, ili ukoliko je program namjerno modificiran, može doći do gubitka sigurnosti. Npr. moguće je da program kreira wallet-e ne po inputu koji unosi korisnik, već po nekoj unaprijed određenoj formuli, što znači da su svi walleti napraveljni u tom programu ekstremno nesigurni i vrlo vjerojatno je cijeli program kreiran sa ciljem krađe Bitcoina od korisnika tog programa.
Jedini način da se korisnik zaštiti od takvog ciljanog napada, je da koristi samo i jedino provjerene programe za kreiranje Bitcoin wallet-a koji su bez iznimke open source i koje koristi velika količina korisnika. Ukoliko korisnik ima barem osnovno znanje programiranja, tada bez puno problema može sam kreirati jednostavnu skriptu za kreiranje wallet-a te biti siguran što se i kako kreira te pod kojim pravilima.
I za kraj jedno upozorenje: Ne koristite razno razne online wallet generatore. Ukoliko je netko negdje kreirao vaš wallet, ne postoji garancija da nije kopiju tog walleta napravio i za vlastitu upotrebu. Sve dok se Vaši Bitcoini nalaze na wallet-u koji niste sami kreirali, možete smatrati da to i nisu Vaši Bitcoini, jer ne možete biti sigurni da ste jedini koji imaju pristup tom walletu.
Baš kao i kod sveg ostalog, Bitcoin ne tjera korisnika na ništa, već mu daje za pravo da sam odluči o svojoj zaštiti.
Zanimljive informacije:
- Bitcoin wallet se može kreirati bez Interneta što povećava sigurnost!
- Bitcoin wallet se može kreirati i van Bitcoin wallet programa! Tko je upoznat sa osnovama programiranja, može sam kreirati skriptu / program koji će mu bez pristupa internetu kreirati Bitcoin wallet.
- Za kreiranje bitcoin wallet-a te primanje Bitcoin uplata nije potrebno računalo niti pristup internetu! Kako se Bitcoin wallet zasniva na matematičkim formulama, Bitcoin wallet se može kreirati računanjem formula na papiru! Tako kreirani wallet najnormalnije može funkcionirati za primanje Bitcoina te ga vlasnik može najnormalnije provjeravati (njegovo stanje) na bilo kojem javnom Blockchain exploreru! Da, takav način je ekstremno težak, i sklon pogreškama, no teoretski je moguć.
- Postoje projekti kao što su Large Bitcoin Collider, koji pokušavaju pronaći barem jednu “koliziju” u javnim adresama / ključevima, koja bi omogućila trošenje Bitcoina koji se nalaze na toj javnoj adresi (ne i na cijelom walletu u sklopu kojeg je originalno napravljena ta adresa). Za sada jedini uspjeh imaju sa adresama koje su namjerno raspoređene u “dometu” na kojem projekt traži “duple” adrese. Kako se i na samim stranicama projekta tvrdi, oni traže adrese kojima privatni ključ ima čak 96 početnih nula. Šansa da se kreira ključ sa tako malom entropijom u standardnom wallet software-u je nepostojeća. Svi takvi ključevi moraju biti ručno i svjesno kreirani kako bi došli u željenu kategoriju.
Komentari
Jedan odgovor na “Koliko je Bitcoin siguran?”