BIP39 je standard, podle kterého peněženka převede náhodná data na obnovovací slova, označovaná jako Seed Phrase. Ze slov a případné passphrase, dalšího tajného údaje, pak vypočítá seed: výchozí data pro tvorbu klíčů. Standard tak pomáhá zálohovat přístup k bitcoinům; samotné mince ani historii plateb do slov neukládá.
Alice si založí peněženku používající BIP39 a podle jejích pokynů bezpečně zapíše obnovovací slova. Po čase se jí telefon rozbije. Bitcoiny tím ze sítě nezmizely; ztratila zařízení, které uchovávalo klíče pro podepisování jejích plateb. Na důvěryhodném náhradním zařízení může použít obnovu v kompatibilní peněžence. Ze stejných slov ve stejném pořadí a stejné případné passphrase vypočítá program stejný seed. Navazující postupy z něj znovu vytvoří potřebné soukromé klíče a peněženka dohledá platby v bitcoinové síti. Není to přihlášení k účtu, u kterého podpora resetuje heslo. Pokud Alice používala passphrase, potřebuje i ji; PIN starého telefonu ji nenahradí. Jestliže peněženka po obnově ukazuje nulu, nemusí to znamenat ztrátu mincí: vedle slov a passphrase je třeba ověřit také správný účet a nastavení obnovy. Právě proto se vyplatí celý postup ověřit před uložením větší částky. [1] [5] [13] [14]
Slova se lidem opisují a kontrolují snáz než dlouhý zápis počítačových dat. Marek Palatinus, Pavol Rusnak, Aaron Voisine a Sean Bowe navrhli způsob, jak počítačem vytvořenou náhodnost převést do podoby vhodné k ručnímu opsání. Návrh dostal datum 10. září 2013 a ve specifikaci má stav Deployed. Slova mají vzniknout z kvalitního náhodného vstupu; nemáte si je vymýšlet podle oblíbené věty. Takový postup by vytvořil Brainwallet s předvídatelným lidským tajemstvím. Bitcoinové uzly BIP39 nekontrolují: ověřují transakce a bloky, nikoli způsob, kterým si peněženka vytvořila klíče. [1]
Dobrý zápis pomůže jen tehdy, když podle něj dokážete peněženku obnovit. Ještě před uložením významných prostředků si na důvěryhodném zařízení ověřte postup obnovy doporučený výrobcem. Vedle přesného pořadí slov zachovejte potřebnou passphrase, údaje o peněžence a případné derivační nebo podpisové nastavení. U běžné jednopodpisové peněženky může držitel kompletní zálohy s potřebnou passphrase odvodit klíče i bez původního zařízení; u Multisig je nutné respektovat další požadované klíče a pravidla. Fotografie, cloudová kopie, tiskárna nebo historie schránky mohou tajemství vystavit dalším lidem a službám. Papír i kov mají různá fyzická omezení; žádný materiál sám nezabrání krádeži. [9] [13] [14]
BIP39 kvůli kompatibilitě důrazně doporučuje anglický seznam slov: mnoho peněženek jiné seznamy nepodporuje. Překladem zálohy se původní peněženka nezachová, protože do odvození vstupuje samotná věta. Pozor také na jiné systémy. Electrum pro své nativní zálohy používá vlastní verzovací postup; podobně vypadající slova z něj automaticky nedělají BIP39. SLIP39 je odlišný formát s vlastním seznamem 1 024 slov a pravidly, kolik dílů je potřeba k obnově. Není to prosté rozstříhání BIP39 zálohy. Rozdělením 24 slov do několika obálek nevznikne Shamir Secret Sharing a můžete si zhoršit ochranu i možnost obnovy. Vždy je potřeba znát skutečný formát zálohy. [1] [11] [12]
Na začátku je entropie, tedy náhodná data o délce ENT = 128, 160, 192, 224 nebo 256 bitů. Přidá se kontrolní součet: prvních CS = ENT/32 bitů z výsledku SHA-256 původních dat. Celek se rozdělí do skupin po 11 bitech a každá skupina určí jedno slovo. Vztah MS = (ENT+CS)/11 proto dává přesně 12, 15, 18, 21 nebo 24 slov. Dvanáct slov představuje 128 bitů náhodnosti a 4 kontrolní bity; všech 132 bitů tedy není nezávislé tajemství. U 24 slov jde o 256+8 bitů. Důvěra v zálohu začíná u generátoru náhodnosti, nikoli u toho, jak neobvykle slova vypadají. [1]
Každá 11bitová skupina vybírá jednu položku z uspořádaného seznamu 2 048 slov. První slovo tedy není první privátní klíč: všechna slova společně zapisují původní data a jejich kontrolní součet. V anglickém seznamu stačí k rozlišení slov první čtyři písmena. To však není obecné pravidlo pro libovolný jazyk ani pokyn zálohu při obnově svévolně zkracovat. Změna pořadí, synonymum nebo překlad mění vstupní data. Někdy vznikne neplatný kontrolní součet, jindy jiná platná záloha; znění i pořadí je proto potřeba uchovat přesně. [1] [2]
Počítač musí vědět, které znaky skutečně dostal. BIP39 předepisuje normalizaci Unicode NFKD a následné kódování UTF-8 pro zálohovací větu i passphrase. NFKD sjednocuje některé různě zapsané znaky, například rozkládá některá písmena s diakritikou. Dva odlišné zápisy tak mohou po normalizaci dát stejný výsledek; samotná vizuální podobnost to ale nezaručuje. Na pořadí slov, mezerách a znacích passphrase dál záleží. Jiný postup normalizace může při obnově odvodit jiný seed. Referenční implementace a veřejné testovací vektory pomáhají ověřit, že program dodržuje předepsaný postup. [1] [3] [4]
Funkce PBKDF2 dostane dva oddělené vstupy. Vstup password tvoří skutečná zálohovací slova. Druhý vstup se nazývá salt, tedy pomocný údaj pro kryptografický výpočet: jde o doslovný text „mnemonic“, za který se bez oddělovače připojí passphrase. Samotná zálohovací slova se sem znovu nevkládají. Oba vstupy se normalizují pomocí NFKD a zakódují v UTF-8. BIP39 určuje HMAC-SHA512, 2 048 iterací a výsledek o délce 512 bitů, tedy 64 bajtů. Bez passphrase zůstává salt „mnemonic“; prázdná je pouze passphrase. Výpočet není dešifrováním slov a nevytváří novou nezávislou náhodnost. Po úniku slov proto samotné iterace neochrání snadno uhodnutelnou passphrase. [1] [10]
BIP39 končí 64bajtovým seedem. Další standard, BIP32, z něj obvykle pomocí HMAC-SHA512 s pevným klíčem „Bitcoin seed“ odvodí hlavní privátní klíč a 32bajtový chain code. Chain code je doplňující údaj, který se společně s klíčem používá k odvozování dalších klíčů. Teprve z této dvojice vzniká strom dalších klíčů. Pravidla jako BIP44, BIP49, BIP84 a BIP86 určují různé derivační cesty a typy skriptů. Při obnově tak můžete zadat správná slova i passphrase a přesto vidět nulový zůstatek, pokud program hledá jiný účet, jinou větev nebo jiný typ adres. Důležitý je i gap limit, tedy kolik po sobě jdoucích nepoužitých adres program při hledání připustí. Název původní peněženky, údaje o účtech, derivační cesty nebo Output Descriptor mohou doplnit informace, které samotná slova neobsahují. [5] [6] [7] [8] [9] [14]
Passphrase je další tajný vstup do odvození seedu. Není to PIN zařízení a BIP39 neumí oznámit, že jste zadali tu nesprávnou: výsledek spočítá i pro jinou hodnotu. Překlep, který změní normalizovaný vstup, zpravidla vede k jiné peněžence, v níž své prostředky neuvidíte. Různé zápisy se stejným výsledkem NFKD naopak odvodí stejný seed. Kdo získá zálohovací slova a údaje, podle kterých pozná hledanou peněženku, může kandidáty passphrase zkoušet offline. Pokud passphrase používáte, potřebuje dostatečnou sílu, důvěryhodné zadávání a vlastní spolehlivou zálohu. Oddělené uložení má omezit společnou krádež, nemá z ní udělat tajemství, které s vámi zmizí. [1] [13]
Kontrolní součet pomáhá s překlepy, ale nedokazuje, komu záloha patří ani zda vznikla bezpečně. U 12 slov má 4 bity a u 24 slov 8 bitů. Rovnoměrně náhodná posloupnost slov z daného seznamu proto projde kontrolou s pravděpodobností 1/16, respektive 1/256. Mnoho chyb se zachytí, ne všechny; součet je navíc sám neopraví. Útočník může sestavit jinou zálohu s platným součtem. Specifikace požaduje varování při nesouladu a rozlišuje kontrolu slov od samotného odvození seedu. Neplatný součet proto řešte podle původní peněženky a jejího formátu, nikoli zadáváním skutečné zálohy do internetového kontroloru. [1]
Slova, kontrolní součet a seed
BIP39 spojí 128 bitů entropie se 4 bity kontrolního součtu. Výsledných 132 bitů rozdělí do 12 skupin po 11 bitech, které vyberou slova ze slovníku. Zálohovací slova pak tvoří vstup password pro PBKDF2-HMAC-SHA512; salt vznikne z doslovného prefixu „mnemonic“ a případné passphrase. Po normalizaci NFKD a kódování UTF-8 se při 2 048 iteracích odvodí 512bitový seed. Kontrolní součet nepřidává náhodnost.
Pro nejúplnější obraz čtěte toto heslo společně s Seed Phrase, HD Wallet, BIP39 passphrase, Trezor, Bitcoin, BIP39 checksum. Opačným směrem na něj odkazují také Seed Phrase, HD Wallet, Cold Storage, BIP (Bitcoin Improvement Proposal).
01Je BIP 39 součástí konsenzu Bitcoinu?+
Ne. Jde o konvenci peněženek pro zápis náhodnosti a odvození seedu. Bitcoinové uzly ověřují transakce a bloky bez znalosti, zda klíče vznikly pomocí BIP 39.
02Je každá fráze o 12 nebo 24 slovech kompatibilní s BIP 39?+
Ne. Počet slov nestačí: musí souhlasit seznam a pořadí slov, kontrolní součet, normalizace NFKD i odvození seedu. K obnovení původní peněženky potřebujete také správnou passphrase, pokud byla použita, a odpovídající derivační cesty a typy skriptů.