Kad u Bitcoin Coreu napraviš novi wallet, iza tog jednostavnog klika događa se dosta ozbiljna kriptografija.
Na površini to izgleda banalno: klikneš Create Wallet, i wallet je tu.
Ali ispod haube Bitcoin Core mora riješiti jedno od najvažnijih pitanja u cijeloj Bitcoin sigurnosti:
Kako stvoriti privatni ključ koji nitko drugi ne može pogoditi?
Ako je taj prvi broj — tajna iz koje nastaje tvoj wallet — loš, predvidiv ili na bilo koji način slab, cijela sigurnost walleta pada u vodu.
Zato je tema entropije toliko važna.
A upravo tu Bitcoin Core pokazuje zašto ga mnogi smatraju okosnicom Bitcoin ekonomije: ne zato što je “lijep” ili “moderan”, nego zato što je to softver koji je godinama detaljno proučavan, testiran i korišten kao temelj stvarnog Bitcoin sustava, uključujući i ozbiljne profesionalne i institucionalne stackove.
1. Što je entropija, najjednostavnije rečeno
Najjednostavnije:
Entropija je mjera nepredvidivosti.
Ako nešto možeš lako pogoditi, onda tu nema puno entropije.
Ako nešto ne možeš pogoditi ni približno, onda ima puno entropije.
Jednostavan primjer
Zamisli da bacimo pošten novčić.
Postoje samo dvije mogućnosti:
glava
pismo
To znači da postoji mala količina neizvjesnosti.
Ako bacimo novčić 10 puta, broj mogućih kombinacija naglo raste.
Ako bacimo novčić 256 puta, broj mogućih kombinacija postaje ogroman.
Kod privatnih ključeva upravo to želimo:
nešto što je toliko nepredvidivo da ga je praktički nemoguće pogoditi.
Još jednostavnije
Datum rođenja ima malu entropiju.
Lozinka 123456 ima malu entropiju.
32 bajta kvalitetne kriptografske slučajnosti imaju vrlo veliku entropiju.
Kod Bitcoina je bitno da privatni ključ ne izgleda samo nasumično, nego da stvarno bude nepredvidiv za napadača.
2. Bitcoin Core ne stvara 12 ili 24 riječi
Ovo je važno odmah raščistiti.
Kad napraviš novi standardni wallet u Bitcoin Coreu, Core ne generira BIP39 seed riječi kao neki drugi walleti.
Dakle, ne događa se ono poznato:
12 riječi
24 riječi
zapiši ih na papir
Bitcoin Core radi nešto drugo.
On generira binarni seed, odnosno vrlo kvalitetnu slučajnu vrijednost u pozadini, i iz nje zatim gradi BIP32 HD wallet strukturu.
Drugim riječima:
Bitcoin Core radi izravno s kriptografskim materijalom, bez “riječi” kao korisničkog sloja.
To ne znači da je manje siguran.
To samo znači da koristi drukčiji model backupa i drukčiji pristup walletu.
3. Što se događa kada kliknemo “Create Wallet”
Ako pojednostavimo cijeli proces, događa se otprilike ovo:
Bitcoin Core treba stvoriti novi privatni korijen walleta.
Za to mora dobiti vrlo kvalitetnu slučajnost.
Tu slučajnost uzima iz više izvora.
Sve te izvore kriptografski miješa.
Iz toga dobiva 32 bajta vrlo kvalitetne slučajnosti.
Provjerava je li ta vrijednost valjan privatni ključ.
Iz nje stvara BIP32 master ključ.
Iz master ključa stvara grane walleta i adrese.
To je srž cijele priče.
4. Odakle Bitcoin Core uzima entropiju
Ovo je središnji dio članka.
Bitcoin Core ne kaže: “Uzet ću jedan broj i vjerovati da je dobar.”
Umjesto toga koristi više slojeva.
To je jako bitno.
Jer ako bi se oslonio samo na jedan izvor, onda bi kvar ili slabost tog jednog izvora bila veliki problem.
Zato Core radi nešto puno pametnije:
uzima više različitih izvora, miješa ih i gradi robustan interni generator slučajnosti.
Glavni izvori koje koristi su:
operacijski sustav
hardverski RNG procesora (kad postoji)
vrijeme visoke preciznosti
eventi / događaji unutar procesa
dinamičko i statičko okruženje računala
vlastito prethodno interno RNG stanje
Idemo redom.
5. Operacijski sustav je glavni izvor
Najvažniji izvor za stvaranje jakog privatnog ključa je generator slučajnosti operacijskog sustava.
To znači da Bitcoin Core traži od sustava:
na Linuxu npr. getrandom()
na macOS-u getentropy()
na Windowsima odgovarajući sistemski RNG
na nekim BSD sustavima druge sistemske metode
Kad Core želi jaku slučajnost za nešto važno poput wallet ključa, koristi funkciju GetStrongRandBytes().
Ta funkcija traži od operacijskog sustava svježih 32 bajta kriptografske slučajnosti.
Ovo je jako važno:
Ako taj OS izvor ne radi kako treba, Core ne nastavlja “na silu”, nego prekida.
To je dobra stvar.
Jer je daleko bolje ne stvoriti wallet nego stvoriti wallet sa slabim ključem.
Zašto je OS toliko važan?
Zato što operacijski sustav ima najbolji pregled nad cijelim računalom:
vidi hardver
vidi procese
vidi prekide
vidi razne fizičke i sistemske događaje
sam održava svoj CSPRNG
Bitcoin Core zato ne izmišlja svoj fizički generator iz nule, nego koristi najbolje što operacijski sustav nudi — i onda to još dodatno miješa.
6. Hardverska slučajnost iz procesora
Ako procesor podržava određene instrukcije poput RDRAND ili RDSEED, Bitcoin Core može uzeti i dio slučajnosti iz CPU-a.
Ali tu je bitna jedna stvar:
Core ne tretira CPU kao jedini izvor istine.
Hardverska slučajnost je dodatni izvor, ne jedini temelj.
To je vrlo zdrava sigurnosna filozofija.
Ako hardverski izvor radi dobro — odlično, pomaže.
Ako ga nema — wallet se i dalje može napraviti sigurno.
Ako je loš — nije jedini faktor koji određuje konačni ključ.
Drugim riječima, Bitcoin Core ne kaže:
“vjerujem samo procesoru”
nego:
“uzet ću i to, ali ću ga pomiješati s ostalim izvorima”
To je puno bolji pristup.
7. Vrijeme i sitne razlike u izvršavanju
Core također koristi:
vrlo precizno vrijeme
neke informacije vezane uz izvršavanje koda
sitne razlike u memorijskom rasporedu i procesu
To nisu glavni izvori na koje se oslanja samostalno, ali su korisni kao dodatni sloj.
Zašto?
Zato što pomažu da se različita pokretanja programa još više međusobno razlikuju.
Na primjer, čak i kad bi dva sustava bila vrlo slična, male razlike u:
trenutku izvršavanja
rasporedu memorije
brzini izvođenja
kontekstu procesa
mogu pomoći da se njihova stanja dodatno razdvoje.
Važno: to ne znači da je “vrijeme dovoljno” za sigurnost. Nije.
Ovo je samo još jedan pomoćni ulaz u širu mješavinu.
8. Događaji unutar procesa
Bitcoin Core prikuplja i određene “evente”, odnosno događaje koji se zbivaju tijekom rada procesa.
To mogu biti razne sitne stvari koje se događaju u programu i čije se vrijeme također može koristiti kao dodatni signal.
Poanta nije u tome da svaki event sam po sebi nosi veliku entropiju, nego da:
unosi dodatne male nepredvidivosti
doprinosi raznolikosti stanja
pomaže u obrani u dubinu
Ovo je opet pomoćni sloj, ne glavni.
Bitcoin Core ne govori: “moji eventi su dovoljni.”
Nego: “i to ću dodati u mješavinu.”
9. Dinamičko i statičko okruženje računala
Bitcoin Core pri inicijalizaciji i povremeno u radu može u RNG uključiti i razne informacije o okruženju računala.
Pojednostavljeno rečeno, to uključuje stvari poput:
određenih karakteristika sustava
podataka o procesu
informacijama o memoriji
mrežnim sučeljima
nekim sistemskim parametrima
određenim podacima o filesystemu i okruženju
To ne znači da su svi ti podaci “tajni”.
Mnogi od njih možda nisu posebno osjetljivi.
Ali njihova uloga nije da pojedinačno “garantiraju” sigurnost, nego da:
dodatno razlikuju jedno pokretanje od drugoga
daju još više materijala za miješanje
povećaju robustnost cijelog sustava
Opet, jako važno:
Bitcoin Core ne zbraja naivno te izvore i ne tvrdi da svaki bajt automatski znači jedan bit entropije.
To bi bilo loše i površno razmišljanje.
Umjesto toga koristi ih kao dodatni ulaz u kriptografski mikser.
10. Interno RNG stanje: Core pamti prethodno stanje
Još jedna bitna stvar:
Bitcoin Core ne kreće svaki put “od nule”.
On održava i vlastito interno stanje generatora slučajnosti.
To znači da postoji interni kriptografski state koji se stalno:
hrani novim ulazima
miješa
obnavlja
koristi kao dio sljedećeg koraka
To je važno jer sustav tada nije ovisan samo o jednom trenutnom pozivu operacijskom sustavu.
Drugim riječima:
Core akumulira i održava svoj vlastiti kvalitetni RNG state, a ne samo “uzima broj i gotovo”.
To mu daje dodatnu robusnost.
11. Kako se svi ti izvori spajaju
Sad dolazimo do srca stvari.
Bitcoin Core sve te ulaze ne koristi odvojeno, nego ih kriptografski miješa.
Za to koristi SHA-512.
Pojednostavljeno:
uzme nove ulaze
doda staro interno stanje
doda brojač
sve to prođe kroz SHA-512
dio rezultata koristi kao izlaz
dio rezultata sprema kao novo interno stanje
To je jako elegantan dizajn.
Zašto?
Zato što:
svaki novi ulaz utječe na rezultat
napadač ne može lako “razdvojiti” koji je dio odakle došao
stanje se stalno osvježava
izlaz i novo stanje su međusobno povezani, ali odvojeni
To nije “magija”, nego dobra kriptografska praksa.
12. Dodatno “jačanje” stanja
Bitcoin Core pri prvoj uporabi generatora radi i dodatno “jačanje” stanja.
Pojednostavljeno rečeno, određeno kratko vrijeme ponavlja kriptografsko miješanje kako bi dodatno učvrstio seedano stanje.
Često se to opisuje kao:
jačanje pri pokretanju
povremeno dodatno osvježavanje stanja kasnije
To ne znači da iz ničega stvara entropiju.
To je važno razumjeti.
Ako svi ulazi nečim čudom ne bi imali nikakvu stvarnu nepredvidivost, samo dodatno hashanje ne bi moglo magično stvoriti sigurnost.
Ali ako već imaš dobre ulaze, onda ovaj korak pomaže:
dodatno izmiješati materijal
otežati neke napade
učiniti stanje robusnijim
Dakle: ne stvara čudo, nego pojačava već dobar proces.
13. Iz toga nastaje 32-bajtni privatni ključ
Nakon što je Core prikupio i izmiješao sve relevantne ulaze, dolazi do trenutka kad treba izvući konkretan rezultat.
Tu dobiva 32 bajta koji će biti kandidat za privatni ključ.
Ali tu posao još nije gotov.
Jer ne vrijedi baš svaki 32-bajtni niz kao valjan Bitcoin privatni ključ.
Zato Core radi provjeru.
14. Provjera je li broj valjan secp256k1 privatni ključ
Bitcoin koristi eliptičku krivulju secp256k1.
Privatni ključ mora biti u točno određenom rasponu.
Ako bi se dobila vrijednost koja nije valjana, Core je ne prihvaća.
Umjesto toga:
odbaci je
generira novu
To se zove rejection sampling.
U praksi je šansa da dobije nevaljanu vrijednost astronomski mala, ali sigurnosno je važno da provjera postoji.
To je još jedan znak ozbiljnosti sustava:
ne pretpostavlja se da je “svaki rezultat valjan”, nego se to stvarno provjerava.
15. Core zatim provjerava da privatni i javni ključ odgovaraju jedan drugome
Kad dobije valjan privatni ključ, Bitcoin Core iz njega izračuna pripadajući javni ključ.
Ali ni tu ne staje.
Radi dodatnu provjeru da privatni i javni ključ stvarno čine ispravan par.
Pojednostavljeno:
izvede javni ključ
napravi malu internu provjeru potpisa
provjeri da sve radi kako treba
To je još jedna razina “sanity checka”.
Poanta je da sustav ne kaže samo:
“evo nekog broja, valjda je dobar”
nego:
“dobio sam broj, provjerio sam da je valjan, izveo sam javni ključ i provjerio da taj par stvarno radi”
To je vrlo dobar sigurnosni obrazac.
16. Iz privatnog ključa nastaje BIP32 master ključ
Nakon što je Core dobio dobar početni ključni materijal, od njega stvara BIP32 master ključ.
Tu dolazi HD wallet logika.
Umjesto da wallet svaki put iznova nasumično generira novu potpuno nepovezanu adresu, on stvara jedan korijen, a iz njega deterministički izvodi cijelo stablo budućih ključeva i adresa.
To se radi pomoću BIP32 mehanizma.
Bitcoin Core uzima seed i prolazi ga kroz HMAC-SHA512 s oznakom "Bitcoin seed".
Rezultat se dijeli na:
master privatni ključ
chain code
Ta dva dijela zajedno postaju temelj HD walleta.
Zašto je to korisno?
Jer onda iz jednog korijena možeš dobiti:
puno adresa
receive i change grane
urednu strukturu walleta
deterministički oporavak
Dakle, dobra entropija na početku omogućuje cijelu buduću strukturu walleta.
17. Bitcoin Core zatim stvara grane walleta
Kad postoji BIP32 korijen, Core iz njega gradi konkretne wallet grane.
Kod modernog descriptor walleta to znači da Core postavlja više standardnih grana za različite vrste izlaza, npr.:
legacy
nested segwit
native segwit
taproot
i za svaku od tih vrsta ima:
vanjsku granu za primanje
unutarnju granu za change
To je praktično zato što wallet dobije urednu strukturu i može unaprijed znati:
kako generirati adrese
kako pratiti sredstva
kako organizirati različite tipove izlaza
To sve dolazi iz istog korijena.
Dakle:
nije svaki novi receive address rezultat nove fizičke entropije, nego rezultat determinističke derivacije iz već stvorenog korijena.
To je vrlo bitna razlika.
18. Keypool: unaprijed pripremljene buduće adrese
Bitcoin Core ne čeka da svaki put “izmisli” novu adresu od nule kad korisnik klikne Receive.
On unaprijed priprema niz budućih izvedenih ključeva i skripti.
To je keypool.
Poanta keypoola nije nova entropija za svaku adresu.
Poanta je:
brži rad walleta
spremne buduće adrese
uredno upravljanje derivacijom
Drugim riječima, prava “kritična entropija” bila je potrebna na početku, kod stvaranja korijena walleta.
Kasnije većinom radiš s derivacijom.
19. Što ako wallet šifriramo lozinkom?
Ovdje je jako važno razlikovati dvije stvari:
seed / privatni ključevi
wallet passphrase
To nije isto.
Seed
Seed je ono iz čega nastaje wallet i privatni ključevi.
Passphrase za wallet
To je lozinka kojom štitiš podatke walleta na disku.
Kada enkriptiraš wallet, Bitcoin Core generira još jedan zaseban nasumični ključ koji služi za šifriranje wallet sadržaja.
Taj ključ je različit od samog wallet seeda.
Passphrase služi da zaključa taj enkripcijski sloj.
Drugim riječima:
seed = temelj ključeva
passphrase = zaštita pohranjenih podataka walleta
To znači da enkripcija walleta ne stvara seed i ne popravlja lošu entropiju, nego štiti već postojeće ključeve na disku.
To je korisno i važno, ali to je drugi sloj.
20. Što sve ovaj dizajn štiti
Bitcoin Coreov pristup entropiji vrlo je dobar jer štiti od mnogo realnih problema:
ne oslanja se samo na jedan izvor
koristi svježu OS slučajnost
dodaje dodatne izvore
ima vlastito interno stanje
sve miješa kriptografski
provjerava valjanost ključa
provjerava da privatni i javni ključ odgovaraju
može periodički osvježavati stanje
faila “zatvoreno”, ne nastavlja ako OS RNG ne radi
To je ozbiljan sigurnosni dizajn.
21. Što ovaj dizajn ne može riješiti
Ipak, treba biti pošten i reći što sve ni najbolji RNG ne može riješiti.
Ako je računalo kompromitirano, to je drugi problem.
Na primjer:
ako imaš malware koji čita memoriju
ako netko kontrolira kernel
ako ti netko snima tipkovnicu ili ekran
ako je cijeli OS zlonamjerno kompromitiran
ako izgubiš backup
onda sama kvaliteta entropije ne može spasiti cijeli sustav.
To je jako važno razumjeti.
Dobar RNG je nužan, ali nije dovoljan za cijeli cold storage sustav.
Zato ozbiljan custody uvijek uključuje i druge slojeve:
odvojen uređaj
offline potpisivanje
dobar backup
enkripciju
proceduru
fizičku sigurnost
22. Zašto je sve to važno za sliku Bitcoin Corea
Sad dolazimo do šire poante.
Poanta ovog članka nije samo reći:
“Bitcoin Core ima dobar RNG”
nego pokazati nešto veće:
Bitcoin Core je softver koji ozbiljno pristupa temeljnim sigurnosnim problemima Bitcoina.
To nije igračka.
To nije marketinški proizvod koji prodaje “magičnu sigurnost”.
To je sustav koji:
validira Bitcoin mrežu
koristi pažljivo građen kriptografski RNG
stvara wallet korijene kroz ozbiljan proces
podržava descriptor wallet model
može sudjelovati u PSBT i offline workflowovima
godinama je javno proučavan
Zato ga mnogi vide kao backbone Bitcoin ekonomije.
Ne zato što svi moraju koristiti baš njegov wallet na isti način.
Nego zato što Bitcoin Core često čini temeljni sloj koji:
govori što je valjan blok
govori što je valjana transakcija
prati UTXO-e
pruža pouzdanu validaciju
omogućuje ozbiljne custody arhitekture
U institucionalnom svijetu često nije slučaj da je “sve” unutar Core walleta.
Često postoji širi stack:
Bitcoin Core node
indeksiranje i računovodstvo
PSBT workflow
HSM, multisig ili drugi signer
offline potpisivanje
broadcast preko Corea
Ali Core je i dalje vrlo često u središtu validacijskog dijela sustava.
23. Zašto je Bitcoin Core toliko pregledan i pouzdan
Još jedna važna poanta.
Snaga Bitcoin Corea nije samo u “dobroj ideji”, nego u tome što je to:
open-source kod
javno pregledavan
testiran
korišten godinama u stvarnom okruženju
analiziran od vrlo jakih tehničkih ljudi
To ne znači da je nepogrešiv.
Ali znači da je riječ o vrlo ozbiljno proučavanom sustavu.
Kad je riječ o stvarima poput:
RNG-a
wallet logike
secp256k1 biblioteke
BIP32 derivacije
descriptor walleta
tu se ne radi o površnom kodu.
Radi se o dijelovima Bitcoin stacka koji su među najvažnijima u cijelom ekosustavu.
Zaključak
Ako sve pojednostavimo u jednu rečenicu, mogli bismo reći ovako:
Kada Bitcoin Core stvara novi wallet, on ne “smisli neki nasumičan broj”, nego kroz vrlo ozbiljan i višeslojan postupak stvara visokokvalitetan privatni korijen iz kojeg kasnije nastaje cijeli wallet.
Taj postupak uključuje:
operacijski sustav kao glavni izvor slučajnosti
hardversku slučajnost kad je dostupna
vrijeme i događaje
informacije o okruženju
interno stanje generatora
kriptografsko miješanje preko SHA-512
provjeru valjanog privatnog ključa
provjeru privatno-javnog para
BIP32 stvaranje master ključa
postavljanje descriptor wallet grana
To je upravo onaj tip dizajna koji želiš vidjeti kod softvera koji treba čuvati ozbiljnu količinu bitcoina.
A to je i razlog zašto je Bitcoin Core puno više od običnog wallet programa.
On je jedan od najvažnijih tehničkih temelja cijelog Bitcoin sustava.
Value for value
Je li ti ovo pomoglo?
Sve što ovdje objavljujem otvoreno je dostupno. Ako ti je ovaj rad bio vrijedan, možeš uzvratiti vrijednošću u iznosu koji ti se čini primjerenim. Tvoja podrška pomaže mi zadržati Bitcoin edukaciju, članke, vodiče i druge resurse otvorenima i besplatno dostupnima svima.