489 / 736PBKDF2

PBKDF2

Odvození seedu v BIP39

Při obnově peněženky mají stejná zálohovací slova a stejná passphrase vést ke stejným klíčům. U BIP39 zajišťuje část této cesty PBKDF2: z obou údajů vypočítá seed, tajný základ pro další odvozování. Výpočet opakuje, ale žádné nové tajemství nevymýšlí.

PBKDF2, plným názvem Password-Based Key Derivation Function 2, převádí heslový vstup a doplňkový parametr salt na odvozený klíč. Výsledek závisí také na počtu opakování, použité výpočetní funkci a požadované délce. Stejné vstupy se stejným nastavením dávají stejný výsledek. BIP39 používá konkrétní variantu PBKDF2-HMAC-SHA512; jiné použití PBKDF2 může mít odlišné parametry.

Obnovovací slova tvoří vstup nazvaný password. Salt je druhý vstup: doslovný text "mnemonic" následovaný passphrase, tedy volitelným dodatečným heslem. Nevkládá se mezi ně oddělovač ani znovu zálohovací slova. Bez passphrase je salt stále "mnemonic", nikoli prázdný text. Oba vstupy projdou NFKD, sjednocením určitých zápisů znaků, a kódováním UTF-8. BIP39 používá HMAC-SHA512, 2048 opakování a výstup 64 bajtů neboli 512 bitů. Tento výsledek je seed; salt není další záloha, kterou byste museli vytvářet. [1]

Uvnitř se používá HMAC, výpočet kombinující klíč a zprávu. Klíčem zůstává v každém kole stejný heslový vstup. První mezivýsledek pracuje se salt a pořadovým číslem výstupního bloku; další kola zpracovávají předchozí mezivýsledek. Výsledky se spojí operací XOR, která kombinuje odpovídající bity. HMAC-SHA512 vrací 64 bajtů, takže pro BIP39 stačí jeden takový blok. Použít 2048krát samotný SHA-512 na text by byl jiný výpočet s jiným výsledkem. [2] [1]

Představte si obnovu ve druhé peněžence. Aby získala stejný seed, musí použít stejné normalizované údaje i stejné nastavení. Zvýšit předepsaných 2048 opakování není vylepšení obnovy: tím byste opustili postup BIP39 a získali jiný výsledek. Stejně tak není neutrální přeložit zálohovací slova do jiné slovní zásoby. Obnova potřebuje shodu, nikoli vlastní úpravu algoritmu. [1]

Opakování výpočtu zdražuje jednotlivý pokus, ale nevytváří novou nezávislou náhodnost. Zná-li útočník vaše slova a údaje, podle kterých pozná správnou peněženku, může slabou passphrase zkoušet offline, na vlastním počítači. Dlouhý seed o 512 bitech proto neznamená 512 bitů nepředvídatelnosti. Ani číslo 2048 není obecné doporučení pro nově navrhované systémy; zde patří ke konkrétnímu standardu obnovy. [2] [1]

Kontrolní součet BIP39 pomáhá odhalit chybně opsaná slova. PBKDF2 řeší jinou otázku: jak z dodaných vstupů vypočítat seed. Samotný výpočet nepotvrdí, že passphrase odpovídá vaší původní peněžence. Seed potom zpracuje například BIP32, postup pro odvozování celé rodiny klíčů. Kontrola zápisu, převod na seed a tvorba klíčů na sebe navazují, ale nejsou zaměnitelné. [1]

Programátor může porovnat výsledek s veřejnými testovacími vektory, tedy známými vstupy a očekávanými výstupy. BIP39 zveřejňuje původní náhodná data, slova a celý seed pro testovací passphrase TREZOR. Správný program musí výsledek reprodukovat včetně pravidel NFKD. Pro takový test není potřeba vaše skutečná záloha. Veřejné příklady naopak nikdy nepoužívejte pro peníze: zná je každý. Úspěšný test výpočtu navíc neprokazuje bezpečnost celé aplikace. [1]

Pro nejúplnější obraz čtěte toto heslo společně s BIP 39, BIP39 passphrase, Seed Generation, HD Wallet. Opačným směrem na něj odkazují také BIP39 passphrase.

DOC · 001BIP39 — Mnemonic generation and seed conversionSpecifikace DOC · 002RFC8018 — PBKDF2 constructionSpecifikace
Revidováno: Primární zdroje · Nejde o investiční doporučení