Hoppa till huvudinnehåll

Vad är BIP39?

U
Skrivet av UKey Wallet

BIP-39-specifikationen beskriver huvudsakligen algoritmen och processen för att generera deterministiska plånböcker baserade på mnemonic (en uppsättning ord som är lätta att komma ihåg).

Specifikationen består av två huvuddelar:

  1. Hur man genererar minnesminnet.

  2. Hur man omvandlar det genererade minnesminnet till ett binärt frö.

Följande är en titt på hur man genererar deterministiska plånböcker genom att först beskriva var och en av dessa två delar.

Genererar ett minnesminne

Den algoritmiska processen för att generera en mnemonik är följande:

Processen är som följer:

  1. Skapa en slumpmässig sekvens (entropi) på 128 till 256 bitar (stegstorlek 32 bitar)

  2. Utför SHA256 på den slumpmässiga sekvensen som genererades i föregående steg för att generera ett hashvärde, och ta de första N bitarna av hashvärdet (entropilängd / 32, t.ex. 128 bitar, sedan N = 4) som kontrollsumman för den slumpmässiga sekvensen.

  3. Lägg till Checksum i slutet av den slumpmässiga sekvensen som genererades i det första steget, så att för exemplet i figuren är den slumpmässiga sekvensen med Checksum 128 + 4 = 132 bitar.

  4. Separera den slumpmässiga sekvensen från föregående steg med 11-bitars segment (delad), så att för en sekvens med 128-bitars entropilängd genereras 12 segment (132 / 11 = 12).

  5. Vid denna punkt mappar varje värde som innehåller ett 11-bitars segment till en fördefinierad ordbok med 2048 ord.

  6. Den sista gruppen av ord som genereras i snittordningen är mnemoniken.

Frögenerering från mnemonics

Efter mnemonalgenereringen kan vi generera fröet genom att använda nyckelgenereringsfunktionen PBKDF2-algoritmen.

PBKDF2 kräver två parametrar: en mnemonisk och ett salt. Syftet med salt är att försvåra sprickbildning, och i BIP-39 kan vi införa en lösenordsfras som en extra säkerhetsfaktor för att skydda fröna.

"PBKDF2 är en del av RSA Laboratories' Public-Key Cryptography Standards (PKCS) serie, specifikt PKCS #5 v2.0, även publicerad som Internet Engineering Task Forces RFC 2898.”

Efter ovanstående mnemonalgenerering visar följande diagram algoritmen för frögenerering.

  • Den första parametern i PBKDF2 är mnemoniken som genereras ovan.

  • Den andra parametern i PBKDF2 är saltet, som vanligtvis består av en sträng och en valfri sammansättning av användartillförda chiffersträngar.

  • PBKDF2 använder HMAC-SHA512-algoritmen, som använder 2048 hash för att producera ett 512-bitars värde som ett frö.

Genererar HD-plånbok från frö

Fröet som genereras ovan kommer att användas som Root Seed för HD-plånboken, och Root Seed för alla HD-plånböcker kan återskapa hela HD-plånboken.

Inmatning av Root Seed i HMAC-SHA512-algoritmen ger en 512-bitars hash, vars vänstra 256 bitar används som Master Private Key och de högra 256 bitarna som Master Chain Code. Därefter kan Master Public Key (264 bitar) genereras av Master Private Key m.

Som du kan se från ovanstående figur genereras HD-nyckeln med följande parametrar.

  • Överordnad privat nyckel eller överordnad offentlig nyckel; (båda är okomprimerade 256 bitars ECDSA-nycklar).

  • Parent Chain Code på 256 bitar.

  • Ett 32-bitars heltalsindexnummer.

Dessutom är ovanstående process rekursiv och Barnets privata nyckel i diagrammet kan användas som förälderns privata nyckel på nästa nivå.

Genom att mata in (Publick Parent Key, Parent Chain Code, Index Number) i HMAC-SHA512-algoritmen kan vi generera dess undernycklar, och vi kan justera indexnumret för att generera flera undernycklar på samma nivå.

Om utökad nyckel

Eftersom denna nyckelhärledningsfunktion är enkelriktad, kan inte alla undernycklar användas för att härleda sina överordnade nycklar eller systernycklar på samma nivå, endast den överordnade nyckeln och den överordnade kedjekoden (som genereras från förälderns överordnade nivånyckel och kedjekod) kan användas för att härleda alla undernycklar och underkedjekoder, och därefter genererar nyckeln för signering och adresser offentligt.

Kombinationen av nyckel- och kedjekoden kallas utökad nyckel, och den utökade nyckeln kan användas för att generera alla grenar därifrån och ner.

Nyckeln som tillhandahålls i den utökade nyckeln kan vara antingen en privat nyckel eller en offentlig nyckel, kombinerad med kedjekoden som kallas Utökad privat nyckel respektive Utökad offentlig nyckel, och noteras som (k, c) respektive (K, c), där den publika nyckeln K = punkt(k).

Vi kan härleda den utökade publika nyckeln från den utökade privata nyckeln och inte vice versa, så för vissa transaktionsscenarier (t.ex. e-handel) kan en ny offentlig nyckel och adress genereras för varje transaktion för att ta emot betalning, medan den utökade privata nyckeln kan lagras i en pappersplånbok eller en hårdvaruplånbok för säker offlinesignering av transaktioner. Som vi kan se är säkerheten för den utökade offentliga nyckeln relativt hög, och följande diagram visar överföringsmekanismen för den utökade överordnade offentliga nyckeln för att härleda den underordnade privata nyckeln och generera den underordnade offentliga nyckeln:

Fick du svar på din fråga?