En mjukvaruplånbok använder ett slumptal för att generera en huvudnyckel.
Sedan, genom en deterministisk och irreversibel algoritm, kan den härleda ett obegränsat antal privata underordnade nycklar från den privata huvudnyckeln.
Varför behöver vi en deterministisk och irreversibel algoritm?
Eftersom deterministisk betyder att alla underordnade privata nycklar alltid kan genereras från samma privata huvudnyckel, medan oåterkallelig betyder att den privata huvudnyckeln inte kan rekonstrueras från någon underordnad privat nyckel.
Det är därför den kallas en Hierarchical Deterministic (HD) plånbok. Härledningsstrukturen för privata nycklar liknar ett träd: en föräldernyckel kan härleda flera underordnade nycklar, varje underordnad nyckel kan härleda flera barnbarnsnycklar, och denna process kan fortsätta på obestämd tid.
När en HD-plånbok först skapas, eller när en plånbok säkerhetskopieras, genereras en mnemonisk fras. En mnemonisk fras är en sekvens av engelska ord. Denna sekvens används för att generera seed, och seeden används sedan för att generera alla privata nycklar i plånboken. Med andra ord, den mnemoniska frasen fungerar som säkerhetskopia av plånboken, eftersom den kan användas för att återställa plånboken. Fröet i sin tur motsvarar det ursprungliga slumptalet bakom den deterministiska plånboken.
En stor fördel med en HD-plånbok är att endast huvudnyckeln krävs för att generera valfritt antal offentliga underordnade nycklar. Med andra ord kan nya publika adresser skapas från den allmänna huvudnyckeln utan att kräva åtkomst till de privata nycklarna, vare sig den privata huvudnyckeln eller de underordnade privata nycklarna. Men alla dessa genererade adresser kan fortfarande i slutändan kontrolleras av den privata huvudnyckeln.
Naturligtvis kommer denna design också med risker. Om mnemoniska frasen avslöjas är det i huvudsak likvärdigt med att exponera alla privata nycklar. När det väl händer är säkerheten för de digitala tillgångarna i plånboken i praktiken förlorad.
Varför behövs så många privata nycklar?
Anledningen till att användare behöver så många privata nycklar kan förstås genom ändringsmekanismen i Bitcoin-transaktioner.
En Bitcoin-transaktion är en datastruktur som innehåller ingångar och utgångar. Den innehåller också nödvändig skriptinformation som överför värde från dess källa (indata) till dess destination (utgången).
För att förstå Bitcoin-ingångar och -utgångar är det viktigt att känna till konceptet UTXO (Outnyttjad transaktionsutgång). En UTXO är den grundläggande enheten i en Bitcoin-transaktion och representerar en outnyttjad transaktionsutgång. En enda bitcoin är faktiskt fördelad över många transaktioner och många block i form av UTXO. I verkligheten finns det ingen centraliserad post som lagrar ett enkelt kontosaldo; istället finns det bara decentraliserade UTXO:er låsta till sina respektive ägare.
En UTXO kan representera vilket värde som helst, men när det väl har skapats är det odelbart på samma sätt som ett fysiskt mynt inte kan delas på mitten. Om värdet på en UTXO är större än det belopp som behövs för en transaktion, måste hela UTXO fortfarande spenderas, och överskottet kommer att returneras som växel.
Tänk dig till exempel att du har en UTXO värd 20 enheter och vill betala 1 enhet. Transaktionen måste konsumera hela 20-enheters UTXO och skapa två utgångar: en utgång skickar 1 enhet till mottagaren, medan den andra skickar 19 enheter tillbaka till din plånbok som växel. I denna mening genererar de flesta Bitcoin-transaktioner förändring.
Detta leder till en annan fråga: ska ändringen skickas tillbaka till den ursprungliga adressen, eller till en nygenererad adress?
När Satoshi Nakamoto designade Bitcoin användes en ändringsadressmekanism, vilket innebär att en ny adress ofta skapas för att ta emot ändringen från varje transaktion. Fördelen med denna design är att den hjälper till att skydda användarnas integritet och minskar vissa säkerhetsrisker.
I verkligheten kan detta jämföras med att öppna flera bankkonton under olika namn och identiteter hos olika banker. Även om någon kan observera pengaflödet på varje konto, blir det mycket svårare för dem att spåra allt tillbaka till den verkliga ägaren av de digitala tillgångarna. Detta är en del av det som ger Bitcoin dess relativa anonymitet.
Det är därför plånboksanvändare behöver så många privata nycklar. Eftersom publika nycklar och privata nycklar alltid finns i par, och varje transaktion kan generera en ny ändringsadress, skulle lagring och säkerhetskopiering av de privata nycklar som motsvarar alla dessa adresser annars bli en stor teknisk utmaning. HD-plånboken löser detta problem genom att tillåta en enda rot att generera valfritt antal underordnade offentliga nycklar och underordnade privata nycklar, vilket avsevärt förbättrar användbarheten av digitala plånböcker.
