Softverski novčanik koristi nasumični broj za generiranje glavnog privatnog ključa.
Zatim, putem determinističkog i nepovratnog algoritma, može izvesti neograničen broj podređenih privatnih ključeva iz tog glavnog privatnog ključa.
Zašto nam je potreban deterministički i nepovratni algoritam?
Budući da deterministički znači da se svi podređeni privatni ključevi uvijek mogu generirati iz istog glavnog privatnog ključa, dok nepovratan znači da se glavni privatni ključ ne može rekonstruirati iz bilo kojeg podređenog privatnog ključa.
Zbog toga se naziva hijerarhijski deterministički (HD) novčanik. Struktura derivacije privatnih ključeva nalikuje stablu: nadređeni ključ može derivirati više ključeva djeteta, svaki ključ djeteta može derivirati više ključeva unuka, a ovaj se proces može nastaviti beskonačno.
Kada se prvi put kreira HD novčanik ili kada se napravi sigurnosna kopija novčanika, generira se mnemonička fraza. Mnemonička fraza je niz engleskih riječi. Ovaj niz se koristi za generiranje seeda, a seed se zatim koristi za generiranje svih privatnih ključeva u novčaniku. Drugim riječima, mnemotehnička fraza služi kao rezervna kopija novčanika, jer se može koristiti za vraćanje novčanika. Sjeme pak odgovara izvornom slučajnom broju iza determinističkog novčanika.
Jedna velika prednost HD novčanika je ta da je samo glavni javni ključ potreban za generiranje bilo kojeg broja podređenih javnih ključeva. Drugim riječima, nove javne adrese mogu se kreirati iz glavnog javnog ključa bez potrebe za pristupom privatnim ključevima, bilo da se radi o glavnom privatnom ključu ili privatnim ključevima djeteta. Međutim, svim tim generiranim adresama i dalje se u konačnici može kontrolirati glavni privatni ključ.
Naravno, ovaj dizajn također nosi rizike. Ako je mnemonička fraza izložena, to je u biti jednako izlaganju svih privatnih ključeva. Nakon što se to dogodi, sigurnost digitalne imovine u novčaniku je učinkovito izgubljena.
Zašto je potrebno toliko privatnih ključeva?
Razlog zašto korisnicima treba toliko privatnih ključeva može se razumjeti kroz mehanizam promjene u Bitcoin transakcijama.
Bitcoin transakcija je struktura podataka koja sadrži ulaze i izlaze. Također uključuje potrebne informacije o skriptiranju koje prenose vrijednost od izvora (ulaz) do odredišta (izlaz).
Da biste razumjeli ulaze i izlaze Bitcoina, važno je poznavati koncept UTXO (Unspent Transaction Output). UTXO je osnovna jedinica Bitcoin transakcije i predstavlja nepotrošeni izlaz transakcije. Jedan bitcoin zapravo se distribuira kroz mnoge transakcije i mnoge blokove u obliku UTXO-a. U stvarnosti ne postoji centralizirani zapis koji pohranjuje jednostavno stanje računa; umjesto toga, postoje samo decentralizirani UTXO-i zaključani za svoje vlasnike.
UTXO može predstavljati bilo koju vrijednost, ali nakon što se stvori, nedjeljiv je na isti način na koji se fizički novčić ne može podijeliti na pola. Ako je vrijednost UTXO-a veća od iznosa potrebnog za transakciju, cijeli UTXO se ipak mora potrošiti, a višak će se vratiti kao kusur.
Na primjer, zamislite da imate UTXO vrijedan 20 jedinica i želite platiti 1 jedinicu. Transakcija mora potrošiti cijeli UTXO od 20 jedinica i stvoriti dva izlaza: jedan izlaz šalje 1 jedinicu primatelju, dok drugi šalje 19 jedinica natrag u vaš novčanik kao kusur. U tom smislu, većina Bitcoin transakcija generira promjenu.
To dovodi do drugog pitanja: treba li se promjena poslati natrag na izvornu adresu ili na novogeneriranu adresu?
Kada je Satoshi Nakamoto dizajnirao Bitcoin, korišten je mehanizam adrese za promjenu, što znači da se često stvara nova adresa za primanje promjene iz svake transakcije. Prednost ovog dizajna je u tome što pomaže u zaštiti privatnosti korisnika i smanjuje određene sigurnosne rizike.
U stvarnom životu to se može usporediti s otvaranjem nekoliko bankovnih računa pod različitim imenima i identitetima u različitim bankama. Čak i ako netko može promatrati tok novca na svakom računu, postaje mu mnogo teže pratiti sve do pravog vlasnika digitalne imovine. To je dio onoga što Bitcoinu daje relativnu anonimnost.
Zato korisnici novčanika trebaju toliko privatnih ključeva. Budući da javni ključevi i privatni ključevi uvijek postoje u parovima, a svaka transakcija može generirati novu adresu promjene, pohranjivanje i sigurnosna kopija privatnih ključeva koji odgovaraju svim tim adresama bi inače postalo veliki tehnički izazov. HD novčanik rješava ovaj problem dopuštajući jednom korijenu da generira bilo koji broj dječjih javnih ključeva i dječjih privatnih ključeva, uvelike poboljšavajući upotrebljivost digitalnih novčanika.
