Direct la conținutul principal

Ce este BIP39?

U
Scris de UKey Wallet

Specificația BIP-39 descrie în principal algoritmul și procesul de generare a portofelelor deterministe bazate pe mnemonice (un set de cuvinte ușor de reținut).

Specificația constă din două părți principale:

  1. Cum se generează mnemonicul.

  2. Cum se transformă mnemonicul generat într-o sămânță binară.

Mai jos este o privire asupra modului de a genera portofele deterministe, descriind mai întâi fiecare dintre aceste două părți.

Generarea unui mnemonic

Procesul algoritmic pentru generarea unui mnemonic este următorul:

Procesul este după cum urmează:

  1. Creați o secvență aleatorie (entropie) de 128 până la 256 de biți (dimensiunea pasului 32 de biți)

  2. Efectuați SHA256 pe secvența aleatorie generată în pasul anterior pentru a genera o valoare Hash și luați primii N biți ai valorii Hash (lungimea entropiei / 32, de exemplu, 128 de biți, apoi N = 4) ca sumă de control a secvenței aleatoare.

  3. Adăugați suma de control la sfârșitul secvenței aleatoare generată în primul pas, astfel încât pentru exemplul din figură secvența aleatoare cu suma de control să fie 128 + 4 = 132 biți.

  4. Separați secvența aleatorie din pasul anterior prin segmente de 11 biți (divizat), astfel încât pentru o secvență cu lungimea entropiei de 128 de biți, să fie generate 12 segmente (132 / 11 = 12).

  5. În acest moment, maparea fiecărei valori care conține un segment de 11 biți la un dicționar predefinit de 2048 de cuvinte.

  6. Ultimul grup de cuvinte generat în ordinea tăierii este mnemonicul.

Generarea semințelor din mnemonică

După generarea mnemonică, putem genera sămânța utilizând algoritmul funcției de generare a cheilor PBKDF2.

PBKDF2 necesită doi parametri: un mnemonic și o sare. Scopul sării este de a face cracarea mai dificilă, iar în BIP-39 putem introduce o frază de acces ca un factor de securitate suplimentar pentru a proteja semințele.

„PBKDF2 face parte din seria Public-Key Criptography Standards (PKCS) a RSA Laboratories, în special PKCS #5 v2.0, publicat și ca Internet Engineering Task Force's RFC 2898.”

În urma generării mnemonice de mai sus, următoarea diagramă arată algoritmul pentru generarea semințelor.

  • Primul parametru al PBKDF2 este mnemonicul generat mai sus.

  • Al doilea parametru al PBKDF2 este sarea, care constă, în general, dintr-un șir și o concatenare opțională de șiruri de criptare furnizate de utilizator.

  • PBKDF2 folosește algoritmul HMAC-SHA512, care folosește 2048 hashe-uri pentru a produce o valoare de 512 biți ca semințe.

Generarea portofelului HD din semințe

Semințele generate mai sus vor fi folosite ca Root Seed ale portofelului HD, iar Root Seed-ul oricărui portofel HD poate recrea întregul portofel HD.

Introducerea semințelor rădăcină în algoritmul HMAC-SHA512 produce un hash de 512 biți, ai cărui 256 de biți din stânga sunt utilizați ca cheie privată principală și cei 256 de biți din dreapta ca cod de lanț principal. După aceea, cheia publică principală (264 de biți) poate fi generată de cheia privată principală m.

După cum puteți vedea din figura de mai sus, cheia HD este generată cu următorii parametri.

  • Cheie privată părinte sau cheie publică părinte; (ambele sunt chei ECDSA de 256 de biți necomprimate).

  • Codul lanțului părinte de 256 de biți.

  • Un număr index întreg de 32 de biți.

În plus, procesul de mai sus este recursiv și Cheie privată copil din diagramă poate fi utilizată ca Cheie privată părinte la nivelul următor.

Introducând (Parent Publick Key, Parent Chain Code, Index Number) în algoritmul HMAC-SHA512, putem genera subcheile acestuia și putem ajusta numărul de index pentru a genera mai multe subchei la același nivel.

Despre cheia extinsă

Deoarece această funcție de derivare a cheilor este unidirecțională, toate subcheile nu pot fi utilizate pentru a obține cheile părinte sau cheile surori la același nivel, numai cheia părinte și codul lanțului părinte (care sunt generate din cheia și codul lanțului la nivel de părinte al părintelui) pot fi folosite pentru a deriva toate subcheile și codurile sublanțului și, ulterior, pentru a genera cheile publice și adresele corespunzătoare pentru semnarea tranzacțiilor.

Combinația dintre codul cheie și lanțul se numește cheie extinsă, iar cheia extinsă poate fi folosită pentru a genera toate ramurile de acolo în jos.

Cheia furnizată în cheia extinsă poate fi fie o cheie privată, fie o cheie publică, combinată cu codul de lanț numit Extended Private Key și, respectiv, Extended Public Key, și notat ca (k, c) și respectiv (K, c), unde cheia publică K = punctul (k).

Putem deriva cheia publică extinsă din cheia privată extinsă și nu invers, astfel încât pentru unele scenarii de tranzacție (de exemplu, comerțul electronic), o nouă cheie publică și o adresă pot fi generate pentru fiecare tranzacție pentru a primi plata, în timp ce cheia privată extinsă poate fi stocată într-un portofel de hârtie sau într-un portofel hardware pentru semnarea offline securizată a tranzacțiilor. După cum putem vedea, securitatea cheii publice extinse este relativ ridicată, iar următoarea diagramă arată mecanismul de transmitere al cheii publice părinte extinse pentru a deriva cheia privată copil și a genera cheia publică copil:

Ați primit răspuns la întrebare?