Ugrás a fő tartalomra

Mi az a BIP39?

U
Írta: UKey Wallet

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:

  1. Hogyan lehet létrehozni a mnemonikát.

  2. 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ő:

  1. Hozzon létre egy 128-256 bites véletlenszerű sorozatot (entrópiát) (32 bites lépésméret)

  2. 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.

  3. 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.

  4. 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).

  5. 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.

  6. 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:

Választ kapott a kérdésére?