HD Wallet je peněženka, která z jednoho tajného základu, seedu, dokáže vypočítat mnoho souvisejících klíčů. Soukromé klíče slouží k podepisování plateb; z jejich veřejných protějšků peněženka vytváří adresy pro příjem. Díky tomu může používat nové adresy, aniž by každá potřebovala vlastní samostatnou zálohu.
Alice si otevře příjem platby a peněženka jí ukáže adresu. Přijme na ni 10 000 satoshi, tedy malých jednotek bitcoinu. Pro další platbu jí aplikace nabídne jinou adresu a na tu přijde 20 000 satoshi. Pokud jsou to její jediné neutracené příjmy, peněženka ukáže dohromady 30 000 satoshi. Novou adresou nevznikl nový samostatný účet a starší peníze se nikam automaticky nepřesunuly. Aplikace spravuje klíče k oběma příjmům. Právě to usnadňuje HD Wallet. Zkratka HD znamená Hierarchical Deterministic: hierarchická proto, že klíče tvoří rozvětvenou strukturu, a deterministická proto, že stejný seed a stejná cesta dají stejné klíče i při obnově. Cesta je posloupnost čísel určující, kterou větev a který klíč má program vypočítat. Alice ji při běžném přijímání obvykle neřeší, ale pro obnovu musí peněženka použít správné cesty. Jedna záloha výchozího tajemství proto může pokrýt i budoucí adresy; nastavení peněženky je přesto potřeba uchovat. Vytvářet nové adresy pomáhá omezit jejich opakované používání, samo však nezaručuje anonymitu. [1] [12]
Rozšířený veřejný klíč, běžně označovaný xpub, umožňuje vypočítat veřejné klíče určité části této struktury. Neobsahuje soukromé klíče potřebné k podpisu platby. Samotný xpub proto nestačí k utrácení; pro tvorbu konkrétních adres musí aplikace znát také jejich formát. Watch-only peněženka může s vhodným xpubem vytvářet adresy a sledovat platby bez podpisových klíčů. Únik xpubu však může propojit minulé i budoucí adresy dané větve, zůstatky a transakce. Sdílejte jen potřebnou větev. Ani správný xpub nebrání napadenému počítači zobrazit cizí adresu. Přijímací adresu ověřte na důvěryhodném podpisovém zařízení, které danou peněženku zná. [1] [12] [14]
Obchod může vytvořit jinou adresu pro každou objednávku. Web potřebuje adresy znát, ale neměl by mít klíče k utrácení tržeb. BIP32 umožňuje oddělit tuto přijímací větev od zbytku peněženky. Návrh vytvořil Pieter Wuille; datum přidělení je 11. února 2012. Jde o standard peněženek, nikoli pravidlo konsensu. Zálohovací slova BIP39, typy skriptů a úplný postup obnovy řeší další vrstvy. [1] [11] [12]
BIP32 ke klíči přidává 256bitový chain code, tedy 32 bajtů pro další odvozování. Soukromou formu tvoří skalár k na křivce secp256k1 a chain code c; veřejná forma používá K = point(k) a stejné c. Hlavní klíč vzniká pomocí HMAC-SHA512 s přesným řetězcem „Bitcoin seed“ jako klíčem funkce a seedem jako daty. Levých 32 bajtů je kandidát soukromého klíče, pravých 32 bajtů chain code. Nula nebo hodnota alespoň rovná řádu křivky n znamená neplatný hlavní klíč. [1]
Odvozování je výpočet, nikoli hledání v uloženém seznamu. Rozlišujeme běžné a hardened odvozování. U běžného lze další veřejné klíče vypočítat z rozšířeného veřejného klíče předchůdce; hardened krok vyžaduje jeho rozšířený soukromý klíč. CKDpriv počítá I = HMAC-SHA512(cpar, data), rozdělí výsledek na IL a IR a přičte parse256(IL) k soukromému klíči předchůdce modulo n. IR je nový chain code. Běžná větev používá serP(Kpar) || ser32(i); hardened větev používá 0x00 || ser256(kpar) || ser32(i), kde i ≥ 2^31. CKDpub umí jen běžné veřejné větve: k bodu Kpar přičte point(parse256(IL)). Jiné číslo větve změní další odvozené klíče. [1]
Z xpubu lze odvozovat veřejné klíče, dokud cesta neprochází hardened krokem. S touto možností souvisí i riziko: xpub předchůdce spolu s uniklým soukromým klíčem jeho běžného potomka umožní dopočítat soukromý klíč předchůdce. Ohrožené jsou pak i další jeho větve. Hardened tento zpětný výpočet blokuje. Nechrání však před krádeží seedu, nekvalitní náhodností ani potvrzením škodlivé transakce. [1]
Na mainnetu začíná standardní veřejný zápis na xpub a soukromý na xprv; jejich verze jsou 0x0488B21E a 0x0488ADE4. Před kódováním Base58Check má záznam 78 bajtů: verzi 4, hloubku 1, otisk předchůdce 4, číslo potomka 4, chain code 32 a klíčová data 33. Výsledný zápis má 111 znaků. Krátký otisk pomáhá párovat klíče, není důkazem identity. Prefixy ypub/zpub ze SLIP132 někdy naznačují typ skriptu; jejich změna sama klíče ani pravidla peněženky nezmění. [1] [9]
BIP43 vyhradil první hardened úroveň účelu použití. BIP44 používá m / 44' / coin_type' / account' / change / address_index. Za účtem následuje větev 0 pro příjem nebo 1 pro vrácení zbytku a číslo adresy. Apostrof či h označuje index zvýšený o 2^31. BIP44 při hledání používá gap limit 20: zastaví se po 20 po sobě nepoužitých příjmových adresách. BIP48 popisuje Multisig, BIP84 účel 84' pro nativní SegWit a BIP86 účel 86' pro jednoklíčový Taproot. Konvence nejsou uložené v samotném seedu ani vynucované uzly. [2] [3] [4] [5] [6]
Klíče ještě neurčují skript chránící mince. Output Descriptor může zaznamenat původ klíčů, cestu, konstrukci jako wpkh(), potřebný počet podpisů, další účastníky Multisigu a kontrolní součet. Multipath descriptor může spojit příjmovou větev s větví pro vrácení zbytku. Seed jednoho účastníka neobnoví ostatní xpuby ani společná pravidla. Zálohujte i ověřený veřejný descriptor či export konfigurace a chraňte jeho soukromí. Obsahuje-li export soukromé klíče, zacházejte s ním jako s tajemstvím. [7] [8] [10] [13]
Ze seedu lze znovu odvodit klíče, ale aplikace potřebuje znát formát seedu, případnou BIP39 passphrase, síť, typ skriptu, coin type, účty, obě větve a rozsah hledání. Multisig potřebuje i společnou konfiguraci. Nulový zůstatek po obnově nemusí znamenat ztracené mince; příčinou může být jiná cesta. Bezpečný test na důvěryhodném zařízení má najít správná UTXO, tedy dosud neutracené výstupy transakcí, a ověřit podpis. Skutečný seed ani zálohovací slova nikdy nezadávejte do webového nástroje nebo běžného online počítače. [3] [7] [10] [11]
BIP32 řeší i vzácné neplatné výsledky: parse256(IL) ≥ n, nulový odvozený soukromý klíč nebo veřejný bod v nekonečnu. U takového potomka se zkusí další index. Při obnově častěji chybí cesta, větev pro vrácení zbytku či podporovaný typ skriptu. Před výměnou aplikace ověřte nalezení mincí a malý zkušební převod. Původní zálohu a konfiguraci nerušte, dokud nový postup nefunguje. xprv umožňuje odvodit klíče pro podepisování, xpub odhaluje finanční souvislosti a descriptor popisuje sestavení peněženky. [1] [7] [9] [10]
Pro nejúplnější obraz čtěte toto heslo společně s Peněženka, Seed Phrase, Extended Public Key (xpub), Derivation Path, Gap Limit, Bitcoin. Opačným směrem na něj odkazují také Bitcoinová adresa, BIP 39, Cold Storage, Watch-only Wallet.