A BIP-39 specifikáció elsősorban a determinisztikus pénztárcák létrehozásának algoritmusát és folyamatát írja le mnemonikus (könnyen megjegyezhető szavak halmaza) alapján.
A specifikáció két fő részből áll:
Hogyan lehet létrehozni a mnemonikát.
Hogyan alakítsuk át a generált mnemonikát bináris magmá.
Az alábbiakban áttekintjük, hogyan lehet determinisztikus pénztárcákat létrehozni úgy, hogy először leírja e két rész mindegyikét.
Mnemonika generálása
A mnemonika generálásának algoritmikus folyamata a következő:
A folyamat a következő:
Hozzon létre egy 128-256 bites véletlenszerű sorozatot (entrópiát) (32 bites lépésméret)
Hajtsa végre az SHA256 műveletet az előző lépésben generált véletlen sorozaton, hogy létrehozzon egy Hash értéket, és vegye a hash érték első N bitjét (entrópia hossza / 32, például 128 bit, majd N = 4) a véletlen sorozat ellenőrző összegeként.
Adjunk ellenőrző összeget az első lépésben generált véletlen sorozat végéhez, így az ábra példájában az Ellenőrzőösszegű véletlenszerű sorozat 128 + 4 = 132 bit.
Válasszuk el a véletlenszerű sorozatot az előző lépéstől 11 bites szegmensekkel (felosztva), így egy 128 bites entrópiahosszúságú sorozathoz 12 szegmens jön létre (132 / 11 = 12).
Ezen a ponton minden 11 bites szegmenst tartalmazó érték hozzárendelése egy előre meghatározott, 2048 szóból álló szótárhoz.
A vágás sorrendjében generált szavak utolsó csoportja a mnemonika.
Maggenerálás a mnemonikából
A mnemonikus generálás után a PBKDF2 kulcsgeneráló függvény segítségével generálhatjuk a magot.
A PBKDF2 két paramétert igényel: egy emlékeztetőt és egy sót. A só célja a repedés megnehezítése, a BIP-39-ben pedig további biztonsági tényezőként bevezethetjük a jelmondatot a magok védelmére.
„A PBKDF2 az RSA Laboratories nyilvános kulcsú titkosítási szabványai (PKCS) sorozatának része, konkrétan a PKCS #5 v2.0, amely Internet Engineering Task Force RFC 2898 néven is megjelent.”
A fenti mnemonikus generálást követően a következő diagram a maggenerálás algoritmusát mutatja.
A PBKDF2 első paramétere a fent generált mnemonika.
A PBKDF2 második paramétere a só, amely általában egy karakterláncból és a felhasználó által biztosított titkosítási karakterláncok opcionális összefűzéséből áll.
A PBKDF2 a HMAC-SHA512 algoritmust használja, amely 2048 hash-t használ, hogy 512 bites értéket állítson elő magként.
HD pénztárca előállítása magból
A fent generált mag a HD pénztárca Root Seedjeként lesz használva, és bármely HD pénztárca Root Seedje újrateremtheti a teljes HD pénztárcát.
A gyökérmag bevitele a HMAC-SHA512 algoritmusba 512 bites hash-t eredményez, amelynek bal oldali 256 bitje Master Private Key, a jobb oldali 256 bit pedig Master Chain Code. Ezt követően a fő nyilvános kulcs (264 bit) előállítható a fő magánkulccsal m.
Amint a fenti ábrán látható, a HD kulcs a következő paraméterekkel jön létre.
Parent Private Key vagy Parent Public Key; (mindkettő tömörítetlen 256 bites ECDSA kulcs).
256 bites szülőlánc kód.
32 bites egész indexszám.
Ezenkívül a fenti folyamat rekurzív, és a diagramban szereplő gyermek privát kulcs szülői magánkulcsként használható a következő szinten.
A HMAC-SHA512 algoritmusba (Parent Publick Key, Parent Chain Code, Index Number) beírva előállíthatjuk annak alkulcsait, illetve az indexszámot úgy állíthatjuk be, hogy ugyanazon a szinten több alkulcsot generáljunk.
A kiterjesztett kulcsról
Mivel ez a kulcslevezetési funkció egyirányú, az összes alkulcs nem használható a szülőkulcsok vagy testvérkulcsok azonos szintű származtatására, csak a szülőkulcs és a szülői lánckód (amelyek a szülői szint kulcsából és lánckódjából jönnek létre) használhatók az összes alkulcs és allánc kód származtatására, majd a megfelelő résznyilvános kulcsok és címek létrehozására az aláírási tranzakciókhoz.
A kulcs és a lánckód kombinációját kiterjesztett kulcsnak nevezzük, és a kiterjesztett kulccsal innentől lefelé minden ág generálható.
A kiterjesztett kulcsban található kulcs lehet magánkulcs vagy nyilvános kulcs, kombinálva a Kibővített privát kulcs és Kibővített nyilvános kulcs nevű lánckóddal, és (k, c) és (K, c) jelöléssel, ahol a nyilvános kulcs K = pont(k).
A kiterjesztett nyilvános kulcsot a kiterjesztett privát kulcsból származtathatjuk, és nem fordítva, így egyes tranzakciós forgatókönyveknél (pl. e-kereskedelem) minden tranzakcióhoz új nyilvános kulcs és cím generálható a fizetés fogadásához, míg a kiterjesztett privát kulcs papírtárcában vagy hardveres tárcában tárolható a tranzakciók biztonságos offline aláírásához. Amint látjuk, a kiterjesztett nyilvános kulcs biztonsága viszonylag magas, és a következő diagram bemutatja a kiterjesztett szülő nyilvános kulcs átviteli mechanizmusát a gyermek privát kulcs levezetéséhez és a gyermek nyilvános kulcs létrehozásához:




