Softwarová peněženka používá náhodné číslo ke generování hlavního soukromého klíče.
Poté může prostřednictvím deterministického a nevratného algoritmu odvodit neomezený počet podřízených soukromých klíčů z tohoto hlavního soukromého klíče.
Proč potřebujeme deterministický a nevratný algoritmus?
Protože deterministický znamená, že všechny podřízené soukromé klíče lze vždy generovat ze stejného hlavního soukromého klíče, zatímco nevratné znamená, že hlavní soukromý klíč nelze rekonstruovat z žádného podřízeného soukromého klíče.
Proto se nazývá Hierarchická deterministická (HD) peněženka. Struktura odvozování soukromých klíčů připomíná strom: nadřazený klíč může odvodit více podřízených klíčů, každý podřízený klíč může odvozovat více klíčů vnuků a tento proces může pokračovat neomezeně dlouho.
Při prvním vytvoření peněženky HD nebo při zálohování peněženky se vygeneruje mnemotechnická fráze. Mnemotechnická fráze je posloupnost anglických slov. Tato sekvence se používá ke generování seed a seed se pak používá ke generování všech soukromých klíčů v peněžence. Jinými slovy, mnemotechnická fráze slouží jako záloha peněženky, protože ji lze použít k obnovení peněženky. Seed zase odpovídá původnímu náhodnému číslu za deterministickou peněženkou.
Jednou z hlavních výhod HD peněženky je, že k vygenerování libovolného počtu podřízených veřejných klíčů je potřeba pouze hlavní veřejný klíč. Jinými slovy, nové veřejné adresy lze vytvořit z hlavního veřejného klíče, aniž by byl vyžadován přístup k soukromým klíčům, ať už jde o hlavní soukromý klíč nebo podřízené soukromé klíče. Všechny tyto vygenerované adresy však mohou být nakonec řízeny hlavním soukromým klíčem.
Tento design samozřejmě přináší i rizika. Pokud je mnemotechnická fráze odhalena, je to v podstatě ekvivalentní odhalení všech soukromých klíčů. Jakmile k tomu dojde, bezpečnost digitálních aktiv v peněžence je efektivně ztracena.
Proč je potřeba tolik soukromých klíčů?
Důvod, proč uživatelé potřebují tolik soukromých klíčů, lze pochopit prostřednictvím mechanismu změn v bitcoinových transakcích.
Bitcoinová transakce je datová struktura, která obsahuje vstupy a výstupy. Obsahuje také potřebné skriptovací informace, které přenášejí hodnotu ze svého zdroje (vstupu) do cíle (výstupu).
Abychom porozuměli bitcoinovým vstupům a výstupům, je důležité znát koncept UTXO (Nevyužitý transakční výstup). UTXO je základní jednotkou bitcoinové transakce a představuje nevyčerpaný transakční výstup. Jediný bitcoin je ve skutečnosti distribuován mezi mnoha transakcemi a mnoha bloky ve formě UTXO. Ve skutečnosti neexistuje žádná centralizovaná evidence uchovávající prostý zůstatek účtu; místo toho existují pouze decentralizované UTXO uzamčené pro jejich příslušné vlastníky.
UTXO může představovat jakoukoli hodnotu, ale jakmile je vytvořeno, je nedělitelné stejným způsobem, jako nelze rozdělit fyzickou minci na polovinu. Pokud je hodnota UTXO větší než částka potřebná pro transakci, musí být i tak utraceno celé UTXO a přebytek bude vrácen jako změna.
Představte si například, že máte UTXO v hodnotě 20 jednotek a chcete zaplatit 1 jednotku. Transakce musí spotřebovat celých 20 jednotek UTXO a vytvořit dva výstupy: jeden výstup odešle 1 jednotku příjemci, zatímco druhý pošle 19 jednotek zpět do vaší peněženky jako drobné. V tomto smyslu většina bitcoinových transakcí generuje změnu.
To vede k další otázce: má být změna zaslána zpět na původní adresu, nebo na nově vygenerovanou adresu?
Když Satoshi Nakamoto navrhoval bitcoiny, byl použit mechanismus změny adresy, což znamená, že se často vytváří nová adresa, která obdrží změnu z každé transakce. Výhodou tohoto designu je, že pomáhá chránit soukromí uživatelů a snižuje určitá bezpečnostní rizika.
V reálném životě to lze přirovnat k otevření několika bankovních účtů pod různými jmény a identitami u různých bank. I když někdo může pozorovat tok peněz na každém účtu, je pro něj mnohem těžší vysledovat je zpět ke skutečnému vlastníkovi digitálních aktiv. To je součástí toho, co dává bitcoinu jeho relativní anonymitu.
To je důvod, proč uživatelé peněženek potřebují tolik soukromých klíčů. Protože veřejné klíče a soukromé klíče vždy existují ve dvojicích a každá transakce může generovat novou adresu pro změnu, ukládání a zálohování soukromých klíčů odpovídajících všem těmto adresám by se jinak stalo velkou technickou výzvou. Peněženka HD řeší tento problém tím, že umožňuje jedinému kořenu generovat libovolný počet dětských veřejných klíčů a dětských soukromých klíčů, což výrazně zlepšuje použitelnost digitálních peněženek.
