Derivation Path je přesný postup, podle kterého peněženka odvodí konkrétní klíč z výchozího klíče. Představte si cestu složkami v počítači: nestačí mít správný disk, musíte otevřít i správné složky. U peněženky se ovšem klíče matematicky vypočítávají, nikoli hledají v uložených souborech. Stejné výchozí údaje a stejná cesta vedou ke stejnému výsledku. Jiná cesta může otevřít jinou část téže peněženky. Není to platební adresa, heslo ani náhrada zálohy.
Anna obnovuje peněženku a program po ní chce cestu, kterou dříve nikdy nemusela řešit. Peněženka je aplikace nebo zařízení pro přijímání a odesílání bitcoinů. Zápis m/0/7 vypadá složitě, ale čte se postupně: m je hlavní soukromý uzel, od něj se vypočítá odvozený klíč 0 a z tohoto klíče další klíč 7. Uzel zde znamená místo ve stromu klíčů, nikoli počítač v bitcoinové síti. Čísla jsou indexy, tedy pořadová označení, ne částky ani čísla transakcí. Standard BIP 32 používá rozšířený klíč: vedle samotného klíče obsahuje chain code, doprovodná data potřebná k dalšímu odvozování klíčů. Pouhý zápis cesty bez výchozího klíče proto nestačí k podepsání platby. [1] [10]
Uvažujme m/84'/0'/0'/0/7. První část za m označuje konvenci BIP 84 pro nativní SegWit, způsob tvorby adres a utrácení. Následuje Bitcoin mainnet, tedy hlavní síť se skutečnými bitcoiny, účet 0, vnější přijímací větev 0 a index 7. Jde o osmou adresní pozici, protože se počítá od nuly. Účet odděluje skupinu peněz a větev určuje účel adres. V uspořádání BIP 44 slouží větev 1 vlastní vratce, částce, která po platbě zůstane odesílateli. První tři kroky v příkladu mají apostrof a jsou hardened, poslední dva jsou běžné. Co ta značka mění? [2] [5]
Soukromý klíč je tajný číselný údaj, kterým peněženka vytváří digitální podpis pro schválení útraty. Hardened označuje způsob odvozování, pro který je nutný soukromý klíč předchozí úrovně. U běžného kroku lze odvodit další veřejný klíč i z xpub, rozšířeného veřejného klíče; ten dovolí sestavovat příslušné adresy bez možnosti podepisovat platby. Přes hardened krok ale samotný xpub neprojde. Podle BIP 380 znamenají 0' a 0h totéž, nikoli běžný 0. Pro technické čtenáře: BIP 32 dělí 32bitové indexy na běžné 0 až 2^31−1 a hardened 2^31 až 2^32−1; uvedená značka převádí nulu na index 2^31. Když ji při přepisu vynecháte, měníte výpočet, ne pouze vzhled zápisu. [1] [7] [10]
BIP 43 nazývá první hardened úroveň purpose, tedy účel uspořádání. Díky dohodnutým hodnotám peněženky vědí, jak danou větev obvykle používat. Pro orientaci: 44' označuje tradiční P2PKH, platbu chráněnou otiskem veřejného klíče; 49' označuje P2SH-P2WPKH, SegWit vložený do staršího obalu pro kompatibilitu; 84' označuje nativní P2WPKH a 86' single-key P2TR, variantu Taprootu s jedním interním klíčem. Jsou to různé konstrukce podmínek, za kterých lze peníze utratit. Samotné číslo cestu na příslušný skript nepřemění a nevynucuje ho v konsenzu sítě. Program musí správný výstup skutečně vytvořit. Ne každá peněženka navíc používá tyto konvence. [3] [2] [4] [5] [6]
Anna může místo celé peněženky připojit pouze xpub jednoho účtu, aby viděla příjmy. Pokud pochází z m/84'/0'/0', už se nachází na úrovni účtu. K dosažení dřívějšího příkladu zbývá relativní přípona /0/7. Připojit znovu celou cestu od kořene by znamenalo začít další odvozování od nesprávného místa; hardened kroky navíc z xpub nelze provést. Exportovaný rozšířený klíč sice nese hloubku ve stromu a fingerprint rodiče, jeho krátký identifikační otisk, ale ne úplný záznam všech předchozích kroků. Proto nelze chybějící původní cestu vždy prostě přečíst ze samotného xpub. [1] [7]
Descriptor je popis klíčů a podmínek utracení, ze kterého program sestaví sledované výstupy. BIP 380 umožňuje uvést před klíčem v hranatých závorkách fingerprint a cestu jeho původu. To jsou již provedené kroky. Přípona za klíčem naopak určuje další odvozování; hvězdička * může zastupovat řadu potomků. Fingerprint má čtyři bajty a může kolidovat: různé klíče mohou mít stejný krátký otisk. Není to důkaz totožnosti ani náhrada samotného klíče. Bitcoin Core 29.0 má příkaz deriveaddresses v RPC, programovém rozhraní uzlu. Z descriptoru a případného rozsahu vypočítá adresy; samotné vypočítání ještě nezjišťuje zůstatek ani nic neposílá. [7] [1] [9]
Samotná cesta neumí vytvořit vaše klíče bez výchozích údajů. Sdílet xpub je jiná věc: příjemce může odvozovat veřejné klíče dostupné větve a s odpovídajícím typem skriptu sledovat její adresy. Není to oprávnění utrácet, ale soukromí tím utrpět může. BIP 32 upozorňuje také na méně zřejmé riziko: rodičovský xpub společně s uniklým soukromým klíčem potomka dostupného běžnými kroky může odhalit rozšířený soukromý klíč rodiče. Hardened hranice brání tomuto konkrétnímu postupu směrem k rodiči. Nezneplatní však uniklý klíč a nezachrání peníze ovládané tímto klíčem. [1]
Vraťme se k obnově. Seed Phrase jsou záložní slova; podle BIP 39 z nich spolu s případnou passphrase vzniká seed, výchozí tajemství pro tvorbu klíčů. Passphrase je další tajný text, nikoli běžné heslo aplikace. S jiným seedem stejná cesta vede k jiným klíčům. Dále musí souhlasit síť, účet, větev a typ skriptu. A program musí prohledat dost adres a historii: Gap Limit zastavuje hledání po řadě nepoužitých adres. Nulový zůstatek tedy sám nedokazuje ztrátu klíčů. Anna může výsledek porovnat se známou přijímací adresou a staršími platbami. Přijetí cesty programem pouze potvrzuje, že s ní umí pracovat, ne že našel původní peněženku celou. [8] [2] [7]
Pro nejúplnější obraz čtěte toto heslo společně s HD Wallet, Extended Public Key (xpub), Gap Limit, Output Descriptor, BIP 39, Seed Phrase. Opačným směrem na něj odkazují také HD Wallet, Watch-only Wallet, Change Address, Extended Public Key (xpub).