En software wallet bruger et tilfældigt tal til at generere en hoved privat nøgle.
Derefter kan den gennem en deterministisk og irreversibel algoritme udlede et ubegrænset antal private underordnede nøgler fra den primære private nøgle.
Hvorfor har vi brug for en deterministisk og irreversibel algoritme?
Fordi deterministisk betyder, at alle underordnede private nøgler altid kan genereres fra den samme private hovednøgle, mens irreversibel betyder, at den private hovednøgle ikke kan rekonstrueres fra nogen underordnet privat nøgle.
Det er derfor, det kaldes en Hierarkisk Deterministisk (HD) tegnebog. Afledningsstrukturen af private nøgler ligner et træ: en overordnet nøgle kan aflede flere underordnede nøgler, hver underordnede nøgle kan udlede flere barnebarnsnøgler, og denne proces kan fortsætte i det uendelige.
Når en HD-pung først oprettes, eller når en pung sikkerhedskopieres, genereres en mnemonisk sætning. En mnemonisk sætning er en sekvens af engelske ord. Denne sekvens bruges til at generere seed, og frøet bruges derefter til at generere alle private nøgler i tegnebogen. Med andre ord tjener den mnemoniske sætning som backup af tegnebogen, fordi den kan bruges til at gendanne tegnebogen. Frøet svarer til gengæld til det oprindelige tilfældige tal bag den deterministiske tegnebog.
En stor fordel ved en HD-pung er, at kun den offentlige hovednøgle er påkrævet for at generere et vilkårligt antal offentlige undernøgler**. Med andre ord kan nye offentlige adresser oprettes fra den offentlige hovednøgle uden at kræve adgang til de private nøgler, uanset om den private hovednøgle eller de underordnede private nøgler. Alle disse genererede adresser kan dog stadig i sidste ende styres af den private hovednøgle.
Dette design kommer naturligvis også med risici. Hvis den mnemoniske sætning er afsløret, svarer det i det væsentlige til at afsløre alle private nøgler. Når det først sker, er sikkerheden for de digitale aktiver i tegnebogen reelt tabt.
Hvorfor er der brug for så mange private nøgler?
Grunden til, at brugere har brug for så mange private nøgler, kan forstås gennem ændringsmekanismen i Bitcoin-transaktioner.
En Bitcoin-transaktion er en datastruktur, der indeholder input og output. Det inkluderer også den nødvendige scriptinformation, der overfører værdi fra dens kilde (inputtet) til dens destination (outputtet).
For at forstå Bitcoin input og output er det vigtigt at kende konceptet UTXO (Uspent Transaction Output). En UTXO er den grundlæggende enhed i en Bitcoin-transaktion og repræsenterer et ubrugt transaktionsoutput. En enkelt bitcoin er faktisk fordelt på tværs af mange transaktioner og mange blokke i form af UTXO'er. I virkeligheden er der ingen centraliseret registrering, der lagrer en simpel kontosaldo; i stedet er der kun decentrale UTXO'er låst til deres respektive ejere.
En UTXO kan repræsentere enhver værdi, men når den først er skabt, er den udelelig på samme måde, som en fysisk mønt ikke kan deles i to. Hvis værdien af en UTXO er større end det nødvendige beløb til en transaktion, skal hele UTXO stadig bruges, og det overskydende vil blive returneret som ændring.
Forestil dig for eksempel, at du har en UTXO til en værdi af 20 enheder og vil betale 1 enhed. Transaktionen skal forbruge de fulde 20-enheder UTXO og skabe to output: Den ene udgang sender 1 enhed til modtageren, mens den anden sender 19 enheder tilbage til din tegnebog som ændring. I denne forstand genererer de fleste Bitcoin-transaktioner forandringer.
Dette leder til et andet spørgsmål: skal ændringen sendes tilbage til den oprindelige adresse eller til en nyoprettet adresse?
Da Satoshi Nakamoto designede Bitcoin, blev der brugt en skifte adressemekanisme, hvilket betyder, at der ofte oprettes en ny adresse for at modtage ændringen fra hver transaktion. Fordelen ved dette design er, at det hjælper med at beskytte brugernes privatliv og reducerer visse sikkerhedsrisici.
I det virkelige liv kan dette sammenlignes med at åbne flere bankkonti under forskellige navne og identiteter i forskellige banker. Selvom nogen kan observere pengestrømmen på hver konto, bliver det meget sværere for dem at spore det hele tilbage til den sande ejer af de digitale aktiver. Dette er en del af det, der giver Bitcoin sin relative anonymitet.
Det er derfor, wallet-brugere har brug for så mange private nøgler. Da offentlige nøgler og private nøgler altid eksisterer i par, og hver transaktion kan generere en ny ændringsadresse, ville lagring og sikkerhedskopiering af de private nøgler svarende til alle disse adresser ellers blive en stor teknisk udfordring. HD tegnebogen løser dette problem ved at tillade en enkelt rod at generere et vilkårligt antal underordnede offentlige nøgler og underordnede private nøgler, hvilket i høj grad forbedrer anvendeligheden af digitale tegnebøger.
