486 / 736SEED-GEN

Seed Generation

Generování seedu peněženky

Když si založíte novou peněženku, její zálohovací slova musí vycházet z náhodnosti, kterou nikdo jiný nedokáže předpovědět. Seed Generation označuje právě vznik tohoto tajného základu a jeho zpracování. To, že peněženka přijme správný počet slov, ještě neznamená, že je bezpečné je použít.

U běžného postupu BIP39 vzniknou z náhodných dat zálohovací slova neboli Seed Phrase. Z nich a případné passphrase, dodatečného hesla, se vypočítá seed: tajná data, ze kterých může peněženka podle BIP32 odvodit strom klíčů. Náhodná data, slova, seed a klíče jsou tedy různé kroky stejné cesty. Jiné zálohovací formáty mohou fungovat jinak.

Představte si, že chcete peněženku, jejíž zálohu si snadno zapamatujete, a vyberete slova z oblíbené knihy. Vám mohou připadat neobvyklá, ale útočník může zkoušet právě citáty a lidské zvyklosti. BIP39 proto začíná počítačem vytvořenou náhodností a teprve potom ji zapisuje slovy. Její nepředvídatelnost popisuje entropie. Slova jsou čitelný zápis tajných dat, nikoli příležitost vymyslet si vlastní větu. [1]

Peněženka potřebuje náhodná data skutečně získat, ne pouze zavolat správně pojmenovanou funkci. Například Linux nabízí getrandom(), které při výchozím nastavení počká, než je systémový zdroj připravený. S volbou GRND_NONBLOCK místo čekání může oznámit EAGAIN: data zatím nejsou k dispozici. Program musí zkontrolovat výsledek i počet získaných bajtů, tedy jednotek dat. Pokračovat po chybě, jako by tajný vstup úspěšně vznikl, by mohlo vytvořit zdánlivě funkční, ale nezabezpečenou peněženku. [2]

Také prohlížeč má rozhraní pro bezpečná náhodná data. Web Crypto getRandomValues() vyplní pole celých čísel kryptograficky bezpečnými bajty; požadavek nad 65536 bajtů odmítne chybou QuotaExceededError. To je ale vlastnost jedné funkce, nikoli osvědčení celého webu. Stránka může správně získat náhodnost a přesto zálohovací slova následně vyzradit. Je proto nutné posoudit i načtený kód a to, co s výsledkem dělá. [3]

Když přepíšete slovo špatně, peněženka může chybu odhalit pomocí kontrolního součtu: krátké kontroly vypočítané z původních dat. V BIP39 se ke 128 bitům vstupu přidají 4 kontrolní bity a vznikne 12 slov; u 256 bitů se přidá 8 bitů a vznikne 24 slov. Bit je základní jednotka informace. Kontrolní bity pocházejí z otisku dat vypočítaného funkcí SHA256, nepřidávají novou nezávislou náhodnost. Platný součet proto neříká, zda jsou slova tajná nebo byla vytvořena bezpečně. [1]

Slova jsou vhodná pro zálohu; software z nich potřebuje znovu získat přesně určená data. BIP39 k tomu používá odvozovací funkci PBKDF2-HMAC-SHA512 s 2048 opakováními. Výsledkem je 512bitový seed. Vedle fráze vstupuje parametr salt, zde doslovný text mnemonic spojený s passphrase; pokud ji nepoužíváte, připojí se prázdný řetězec. Fráze i tento parametr se zpracují ve formátu UTF-8 NFKD, který sjednocuje zápis znaků. Dlouhý výstup nepřidá chybějící náhodnost: délka seedu sama nedokazuje 512 bitů vstupní entropie. [1]

Další krok popisuje BIP32. Ze seedu vytvoří hlavní soukromý klíč a chain code, doprovodná data potřebná k odvozování dalších klíčů. Díky tomu může peněženka vytvářet nové adresy ze společného základu. Technicky použije HMAC-SHA512 s pevným textem Bitcoin seed v roli klíče této funkce a výsledek rozdělí. Tento veřejný text není vaše tajemství. Pokud odvozený soukromý klíč vyjde nulový nebo mimo povolený rozsah, je neplatný. Seed se tedy pouze nepřejmenuje na soukromý klíč. [4]

Vývojář potřebuje poznat, zda jeho program postup spočítá správně. K tomu slouží testovací vektory: předem známé vstupy a očekávané výsledky. BIP39 zveřejňuje sady s entropií, slovy a seedem, včetně testovací passphrase TREZOR. Shoda ověří převod konkrétního vstupu; neprověří, zda živý generátor vytváří nepředvídatelná tajemství. Protože jsou testovací údaje veřejné, nesmějí sloužit jako tajná záloha pro skutečné prostředky. [1]

Od zdroje náhodnosti přes slova až k uložení zálohy na sebe navazuje několik kroků. NIST SP 800-90C popisuje, jak se zdroje entropie spojují s mechanismy generování náhodných dat. Při posuzování peněženky však musíme sledovat i konkrétní verzi softwaru, zpracování chyb a předávání dat dál. Dobře prověřená součást nemůže sama zaručit, že jiná část tajemství neztratí nebo nevyzradí. Smyslem kontroly je sledovat celý postup, ne hledat jediné důvěryhodně znějící označení. [5]

Pro nejúplnější obraz čtěte toto heslo společně s Random Number Generator, BIP 39, HD Wallet, Seed Phrase. Opačným směrem na něj odkazují také Random Number Generator, CSPRNG, Deterministic RNG, Entropy Mixing.

DOC · 001BIP39 — Mnemonic generation and seed conversionSpecifikace DOC · 002Linux getrandom — Initialization and return valuesDokumentace DOC · 003W3C Web Crypto — getRandomValues contractSpecifikace DOC · 004BIP32 — Master key generationSpecifikace DOC · 005NIST SP 800-90C — Random bit generator constructionsSpecifikace
Revidováno: Primární zdroje · Nejde o investiční doporučení