Specifikace BIP-39 popisuje hlavně algoritmus a proces pro generování deterministických peněženek založených na mnemotechnické pomůcce (souboru snadno zapamatovatelných slov).
Specifikace se skládá ze dvou hlavních částí:
Jak vygenerovat mnemotechnickou pomůcku.
Jak převést vygenerovanou mnemotechnickou pomůcku na binární seed.
Následuje pohled na to, jak generovat deterministické peněženky tím, že nejprve popíšete každou z těchto dvou částí.
Vytvoření mnemotechnické pomůcky
Algoritmický proces pro generování mnemotechnické pomůcky je následující:
Postup je následující:
Vytvořte náhodnou sekvenci (entropii) 128 až 256 bitů (velikost kroku 32 bitů)
Proveďte SHA256 na náhodné sekvenci vygenerované v předchozím kroku, abyste vygenerovali hodnotu hash, a vezměte prvních N bitů hodnoty hash (délka entropie / 32, např. 128 bitů, pak N = 4) jako kontrolní součet náhodné sekvence.
Na konec náhodné sekvence vygenerované v prvním kroku přidejte kontrolní součet, takže pro příklad na obrázku je náhodná posloupnost s kontrolním součtem 128 + 4 = 132 bitů.
Oddělte náhodnou sekvenci od předchozího kroku 11bitovými segmenty (rozdělte), takže pro sekvenci o délce 128bitové entropie se vygeneruje 12 segmentů (132 / 11 = 12).
V tomto okamžiku mapování každé hodnoty obsahující 11bitový segment do předem definovaného slovníku 2048 slov.
Poslední skupinou slov generovaných v pořadí střihu je mnemotechnická pomůcka.
Generování semen z mnemotechnických pomůcek
Po vygenerování mnemotechnických pomůcek můžeme vygenerovat seed pomocí funkce generování klíčů PBKDF2 algoritmu.
PBKDF2 vyžaduje dva parametry: mnemotechnickou pomůcku a sůl. Účelem soli je ztížit krakování a v BIP-39 můžeme zavést přístupovou frázi jako další bezpečnostní faktor na ochranu semen.
„PBKDF2 je součástí série standardů pro kryptografii veřejného klíče (PKCS) společnosti RSA Laboratories, konkrétně PKCS #5 v2.0, také publikovaný jako RFC 2898 Internet Engineering Task Force.“
Po výše uvedeném mnemotechnickém generování ukazuje následující diagram algoritmus pro generování semene.
První parametr PBKDF2 je mnemotechnická pomůcka vygenerovaná výše.
Druhým parametrem PBKDF2 je sůl, která se obecně skládá z řetězce a volitelného zřetězení uživatelem dodaných šifrovacích řetězců.
PBKDF2 používá algoritmus HMAC-SHA512, který používá 2048 hashů k vytvoření 512bitové hodnoty jako semene.
Generování HD peněženky ze semene
Seed vygenerovaný výše bude použit jako kořenový zdroj peněženky HD a kořenový zdroj jakékoli peněženky HD může znovu vytvořit celou peněženku HD.
Zadáním kořenového jádra do algoritmu HMAC-SHA512 se získá 512bitový hash, z nichž levých 256 bitů se používá jako hlavní soukromý klíč a pravých 256 bitů jako hlavní řetězový kód. Poté může být hlavní veřejný klíč (264 bitů) vygenerován pomocí hlavního soukromého klíče m.
Jak můžete vidět na obrázku výše, HD klíč je generován s následujícími parametry.
Parent Private Key nebo Parent Public Key; (oba jsou nekomprimované 256bitové klíče ECDSA).
Rodičovský řetězový kód 256 bitů.
32bitové celé číslo indexu.
Výše uvedený proces je navíc rekurzivní a Privátní klíč dítěte v diagramu lze na další úrovni použít jako Privátní klíč rodiče.
Zadáním (Parent Publick Key, Parent Chain Code, Index Number) do algoritmu HMAC-SHA512 můžeme vygenerovat jeho podklíče a můžeme upravit Indexové číslo tak, aby se vygenerovalo více podklíčů na stejné úrovni.
O rozšířeném klíči
Protože je tato funkce odvozování klíče jednosměrná, nelze všechny podklíče použít k odvození jejich nadřazených klíčů nebo sesterských klíčů na stejné úrovni, pouze nadřazený klíč a nadřazený kód řetězce (které jsou generovány z klíče nadřazené úrovně a kódu řetězce) lze použít k odvození všech podklíčů a kódů podřetězců a následně ke generování odpovídajících podveřejných klíčů a adres pro podepisování transakcí.
Kombinace klíče a řetězového kódu se nazývá rozšířený klíč a rozšířený klíč lze použít ke generování všech větví odtamtud dolů.
Klíč poskytnutý v rozšířeném klíči může být buď soukromý klíč, nebo veřejný klíč, kombinovaný s řetězovým kódem nazvaným Extended Private Key a Extended Public Key, v tomto pořadí, a označený jako (k, c) a (K, c), v tomto pořadí, kde veřejný klíč K = point(k).
Rozšířený veřejný klíč můžeme odvodit z rozšířeného soukromého klíče a ne naopak, takže pro některé scénáře transakcí (např. e-commerce) lze pro každou transakci vygenerovat nový veřejný klíč a adresu pro příjem platby, zatímco rozšířený soukromý klíč může být uložen v papírové peněžence nebo hardwarové peněžence pro bezpečné offline podepisování transakcí. Jak vidíme, bezpečnost rozšířeného veřejného klíče je relativně vysoká a následující diagram ukazuje přenosový mechanismus rozšířeného nadřazeného veřejného klíče pro odvození soukromého klíče potomka a generování dětského veřejného klíče:




