Mine põhisisu juurde

Mis on BIP39?

U
Autorilt UKey Wallet

BIP-39 spetsifikatsioon kirjeldab peamiselt deterministlike rahakottide genereerimise algoritmi ja protsessi, mis põhinevad mnemoonial (kergesti meeldejäävate sõnade kogum).

Spetsifikatsioon koosneb kahest põhiosast:

  1. Kuidas luua mnemoonikat.

  2. Kuidas genereeritud mnemoonikat binaarseks seemneks muuta.

Järgnevalt vaadeldakse, kuidas luua deterministlikke rahakotte, kirjeldades esmalt neid kahte osa.

Mnemoonika loomine

Algoritmiline protsess märguande genereerimiseks on järgmine:

Protsess on järgmine:

  1. Looge juhuslik jada (entroopia) 128–256 bitti (sammu suurus 32 bitti)

  2. Räsiväärtuse genereerimiseks tehke eelmises etapis genereeritud juhuslikule jadale SHA256 ja võtke juhusliku jada kontrollsummaks räsiväärtuse esimesed N bitti (entroopia pikkus / 32, nt 128 bitti, seejärel N = 4).

  3. Lisa kontrollsumma esimeses etapis genereeritud juhusliku jada lõppu, nii et joonisel oleva näite puhul on kontrollsummaga juhuslik jada 128 + 4 = 132 bitti.

  4. Eraldage juhuslik jada eelmisest etapist 11-bitiste segmentidega (lõigatud), nii et 128-bitise entroopia pikkuse jada jaoks genereeritakse 12 segmenti (132 / 11 = 12).

  5. Siinkohal vastendatakse iga 11-bitist segmenti sisaldav väärtus 2048 sõnast koosneva eelmääratletud sõnastikku.

  6. Lõikejärjekorras genereeritud sõnade viimane rühm on mnemoonika.

Seemnete genereerimine mnemoonikast

Pärast märguande genereerimist saame genereerida seemne võtme genereerimise funktsiooni PBKDF2 algoritmi abil.

PBKDF2 nõuab kahte parameetrit: märguande ja soola. Soola eesmärk on muuta lõhenemine keerulisemaks ja BIP-39-s saame seemnete kaitsmiseks täiendava turvategurina kasutusele võtta parooli.

"PBKDF2 on osa RSA Laboratories'i avaliku võtme krüptograafiastandardite (PKCS) seeriast, täpsemalt PKCS #5 v2.0, mis on avaldatud ka kui Internet Engineering Task Force's RFC 2898.

Pärast ülaltoodud mnemoloogilist genereerimist näitab järgmine diagramm seemne genereerimise algoritmi.

  • PBKDF2 esimene parameeter on ülaltoodud mnemoonika.

  • PBKDF2 teine ​​parameeter on sool, mis tavaliselt koosneb stringist ja kasutaja tarnitud šifreeritud stringide valikulisest konkatenatsioonist.

  • PBKDF2 kasutab HMAC-SHA512 algoritmi, mis kasutab 2048 räsi, et luua seemnena 512-bitine väärtus.

HD-rahakoti loomine seemnest

Ülaltoodud seemet kasutatakse HD-rahakoti juurseemnena ja mis tahes HD-rahakoti juurseemena saab kogu HD-rahakoti uuesti luua.

Juurseemne sisestamine algoritmi HMAC-SHA512 annab 512-bitise räsi, millest vasakpoolset 256 bitti kasutatakse peamise privaatvõtmena ja paremat 256 bitti peaahela koodina. Pärast seda saab peamise privaatvõtme m genereerida avaliku peamise võtme (264 bitti).

Nagu ülaltoodud jooniselt näha, luuakse HD-võti järgmiste parameetritega.

  • vanema privaatvõti või vanema avalik võti; (mõlemad on tihendamata 256-bitised ECDSA võtmed).

  • 256-bitine emaketi kood.

  • 32-bitine täisarvuline indeksiarv.

Lisaks on ülaltoodud protsess rekursiivne ja diagrammil olevat lapse privaatvõtit saab järgmisel tasemel kasutada vanema privaatvõtmena.

Sisestades (Parent Publick Key, Parent Chain Code, Index Number) HMAC-SHA512 algoritmi, saame genereerida selle alamvõtmed ja saame reguleerida indeksi numbrit, et genereerida mitu alamvõtit samal tasemel.

Teave laiendatud võtme kohta

Kuna see võtme tuletamise funktsioon on ühesuunaline, ei saa kõiki alamvõtmeid kasutada nende vanemvõtmete või sõsarvõtmete tuletamiseks samal tasemel, ainult vanemvõtit ja vanemahela koodi (mis genereeritakse vanemataseme võtmest ja ahela koodist) saab kasutada kõigi alamvõtmete ja alamahela koodide tuletamiseks ning seejärel vastavate alamvõtmete ja allkirjastamise tehingute ja aadresside genereerimiseks.

Võtme ja keti koodi kombinatsiooni nimetatakse laiendatud võtmeks ja laiendatud võtmega saab genereerida kõiki harusid sealt edasi.

Laiendatud võtmes olev võti võib olla kas privaatvõti või avalik võti, mis on kombineeritud kettkoodiga, mida nimetatakse vastavalt laiendatud privaatvõtmeks ja laiendatud avalikuks võtmeks, ning märgitakse vastavalt kui (k, c) ja (K, c), kus avalik võti K = punkt(k).

Laiendatud avaliku võtme saame tuletada laiendatud privaatvõtmest ja mitte vastupidi, nii et mõne tehingustsenaariumi (nt e-kaubandus) puhul saab iga tehingu jaoks luua uue avaliku võtme ja aadressi makse saamiseks, samas kui laiendatud privaatvõtme saab salvestada paberrahakotti või riistvarakotti tehingute turvaliseks võrguühenduseta allkirjastamiseks. Nagu näeme, on laiendatud avaliku võtme turvalisus suhteliselt kõrge ja järgmine diagramm näitab laiendatud vanema avaliku võtme edastusmehhanismi, et tuletada alam-privaatvõti ja genereerida alam-avalik võti:

Kas see vastas teie küsimusele?