Extended Public Key (xpub) je rozšířený veřejný klíč podle BIP32, pravidel pro uspořádání klíčů v peněžence. Umožňuje vypočítat další veřejné klíče v určité části peněženky a se správnými pravidly adres vytvářet adresy pro příjem a sledovat platby. K utrácení je ale potřeba digitální podpis, tedy kryptografické schválení transakce. Vytváří se pomocí soukromého klíče, který xpub neobsahuje. Xpub proto nenahrazuje soukromé klíče ani Seed Phrase, zálohu peněženky zapsanou jako posloupnost slov.
Anna má bitcoinovou peněženku v hardwarovém zařízení a chce si v telefonu zkontrolovat, zda jí zákazník zaplatil. Do telefonu proto přenese veřejnou konfiguraci vybraného účtu, jejíž součástí je xpub, ale žádné privátní klíče. Telefon pak funguje jako Watch-only Wallet: umí sledovat příslušné adresy, připravit novou adresu i sestavit nepodepsanou transakci. K odeslání peněz stále potřebuje podpis zařízení, které drží tajné klíče. Podobně může e-shop vytvářet pro objednávky různé přijímací adresy, aniž by na server ukládal klíče k utrácení. Toto oddělení omezuje následky napadení serveru, neřeší však vše: útočník může zákazníkovi podstrčit svou adresu pro novou platbu. [1] [5]
Běžnou bitcoinovou adresu dáš člověku, který ti má zaplatit. Xpub otevírá podstatně širší pohled. Kdo zná xpub účtu a způsob tvorby jeho adres, může si dopočítávat přijímací adresy i adresy pro vrácení zbytku platby a spojovat jejich historii a zůstatky. Týká se to odvoditelné větve, nikoli automaticky každého účtu v celé peněžence. Pokud xpub předáš účetní službě nebo cizímu průzkumníku řetězce, může si jej uchovat a sledovat i pozdější platby. Vypnutí propojení v aplikaci už předanou kopii neodvolá. Pro jednorázovou platbu proto obvykle stačí jedna adresa; širší přístup dávej jen tam, kde má skutečný důvod. [1] [5]
Peněženka podle BIP32 vytváří z jednoho základu strom klíčů. „Větev“ zde znamená skupinu odvozených klíčů, nikoli část sítě nebo řetězce bloků. Z xpubu lze pokračovat dolů jen přes kroky označované non-hardened. Druhý druh, Hardened Derivation, vyžaduje privátní údaje a tvoří hranici, přes kterou samotný xpub neprojde. Běžné uspořádání podle BIP44 používá takovou hranici před jednotlivými účty. Export xpubu jednoho účtu proto sám neotevře ostatní účty. Záleží i na hloubce exportu: xpub pouze přijímací větve je užší oprávnění k pozorování než xpub celého účtu, který běžně zahrnuje také vratky. [1] [6]
Ze stejných veřejných klíčů lze podle různých pravidel vytvořit různé bitcoinové adresy. Výstup transakce je záznam částky a podmínek, za kterých ji lze později utratit. Aplikace proto potřebuje vědět, jaký typ výstupu peněženka používá, například Native SegWit nebo Taproot, a kterou větev a pořadová čísla má odvozovat. Prefixy ypub a zpub podle SLIP-0132 mohou typ adres napovědět, ale nejsou úplným popisem peněženky. Přesnější je Output Descriptor: textový zápis klíčů a pravidel, podle nichž se vytvoří adresy a podmínky utrácení. Může zahrnovat původ klíče, cestu odvození a kontrolní součet pro odhalení překlepů. Ten potvrzuje správnost zápisu, nikoli důvěryhodnost člověka, který ho poslal. Ne každý descriptor je jen veřejný; může obsahovat i privátní klíč, takže ho před sdílením musíš rozlišit. [2] [3] [4]
Nejdřív zkontroluj síť, vybraný účet, typ adres a cestu odvození — instrukce, které určují místo klíče ve stromu. Porovnej několik přijímacích adres s původní peněženkou a u hardwarové peněženky použij její důvěryhodný displej podle postupu výrobce. Pouhý shodný název účtu nestačí. Nulový zůstatek po importu nemusí znamenat ztrátu peněz: můžeš sledovat jiný účet, jiný typ adres nebo příliš malý rozsah jejich pořadových čísel. Kvůli tomu nezadávej obnovovací slova do náhodného webu. Pokud ti jde pouze o přehled, hledej export veřejné konfigurace, nikoli Seed Phrase nebo xprv, tedy rozšířený privátní klíč. [4] [5]
Samotný xpub není podpisový klíč. BIP32 ale obsahuje důležité propojení: rodičovský xpub, v dokumentaci parent xpub, společně s privátním klíčem nehardenovaného potomka umožňuje dopočítat rodičovský privátní klíč. U vzdálenějšího potomka musí cesta zpět k danému rodiči sestávat pouze z non-hardened kroků; k výpočtu je potřeba znát odpovídající cestu. Nejde o krádež z pouhé znalosti adresy. Nebezpečná je kombinace uniklého veřejného přehledu a uniklého tajného klíče z téže větve. Útočník tím může získat i další klíče pod tímto rodičem. Hardened hranice oddělují účty, ale už vyzrazený privátní klíč neochrání. [1]
Peněženka Multisig může například vyžadovat dva podpisy ze tří klíčů. Nestačí však vědět jen to, které dva klíče dokážeš obnovit. K sestavení správných podmínek utrácení potřebuješ také veřejné údaje ostatních zapojených klíčů, jejich uspořádání, požadovaný počet podpisů a způsob odvození. Proto se vedle tajných záloh uchovává konfigurace peněženky, například veřejný descriptor se všemi potřebnými xpuby. Není to oprávnění utrácet, ale může to být nezbytný podklad k obnově. Master fingerprint, osm hexadecimálních znaků označujících výchozí klíč, pomáhá konfiguraci spárovat. Není to nezaměnitelný průkaz totožnosti; dva různé klíče mohou mít stejný fingerprint. [4] [5]
Veřejný klíč je údaj, kterým se ověřují podpisy vytvořené odpovídajícím privátním klíčem. BIP32 k němu přidává chain code, 32bajtovou hodnotu pro odvozování dalších klíčů. Tato dvojice tvoří rozšířený veřejný klíč. Jeho přenositelný zápis navíc nese údaje o verzi a místě ve stromu: hloubku, fingerprint bezprostředního rodiče a číslo potomka. To není totéž jako úplná cesta od prvního klíče peněženky. Xpub tedy není jednotlivá přijímací adresa ani heslo k účtu a sám neobsahuje seznam transakcí. Ten si sledující peněženka dohledává v řetězci pro odpovídající adresy. [1]
Funkce CKDpub podle BIP32 vezme veřejný klíč rodiče, jeho chain code a pořadové číslo potomka. Pomocí HMAC-SHA512, kryptografického výpočtu s danými vstupy, připraví údaje pro další veřejný klíč a nový chain code. Veřejně odvoditelná čísla leží od 0 do 2³¹−1. Hardened čísla začínají na 2³¹ a v cestách se obvykle označují apostrofem nebo písmenem h; pro ně CKDpub z xpubu nestačí. Opakováním povolených kroků vznikají další potomci, nikoli sourozenci nebo předci exportovaného klíče. Pokud nastane vzácný neplatný výsledek popsaný v BIP32, implementace pokračuje dalším indexem. Běžný uživatel tyto výpočty provádět nemusí; důležité je správně přenést konfiguraci. [1]
Standardní zápis BIP32 před textovým zakódováním zabírá 78 bajtů: verze 4, hloubka 1, fingerprint rodiče 4, číslo potomka 4, chain code 32 a data klíče 33 bajtů. Base58Check přidá kontrolní součet a převede záznam na 111 znaků. Veřejná verze pro hlavní bitcoinovou síť začíná xpub, testovací verze tpub; privátní protějšky začínají xprv a tprv. Tpub neznamená Taproot. Prefix vzniká z bajtů verze a sám nepopisuje všechna pravidla adres. Při importu musí software ověřit také platnost veřejného klíče, ne pouze jeho první písmena nebo délku. [1] [3]
Pro nejúplnější obraz čtěte toto heslo společně s HD Wallet, Watch-only Wallet, Soukromí v Bitcoinu, Derivation Path, Bitcoin, Output Descriptor. Opačným směrem na něj odkazují také HD Wallet, Cold Storage, Watch-only Wallet, Output Descriptor.