Specifikacija BIP-39 uglavnom opisuje algoritam i proces za generiranje determinističkih novčanika na temelju mnemotehnike (skup riječi koje se lako pamte).
Specifikacija se sastoji od dva glavna dijela:
Kako generirati mnemotehniku.
Kako transformirati generirani mnemonik u binarno sjeme.
Slijedi pogled na to kako generirati determinističke novčanike prvo opisujući svaki od ova dva dijela.
Generiranje mnemonike
Algoritamski proces za generiranje mnemotehnike je sljedeći:
Proces je sljedeći:
Napravite nasumični niz (entropiju) od 128 do 256 bita (veličina koraka 32 bita)
Izvedite SHA256 na slučajnom nizu generiranom u prethodnom koraku za generiranje Hash vrijednosti i uzmite prvih N bitova Hash vrijednosti (duljina entropije / 32, npr. 128 bita, zatim N = 4) kao kontrolni zbroj slučajnog niza.
Dodajte kontrolni zbroj na kraj slučajnog niza generiranog u prvom koraku, tako da za primjer na slici slučajni niz s kontrolnim zbrojem bude 128 + 4 = 132 bita.
Odvojite nasumični niz iz prethodnog koraka 11-bitnim segmentima (split), tako da se za niz 128-bitne duljine entropije generira 12 segmenata (132 / 11 = 12).
U ovom trenutku preslikava se svaka vrijednost koja sadrži 11-bitni segment u unaprijed definirani rječnik od 2048 riječi.
Posljednja skupina riječi generirana redoslijedom rezanja je mnemotehnika.
Generacija sjemena iz mnemotehnike
Nakon generiranja mnemotehnike možemo generirati početnu vrijednost pomoću algoritma funkcije generiranja ključa PBKDF2.
PBKDF2 zahtijeva dva parametra: mnemotehniku i sol. Svrha soli je otežati krekiranje, au BIP-39 možemo uvesti lozinku kao dodatni sigurnosni faktor za zaštitu sjemena.
"PBKDF2 je dio RSA Laboratories 'Standardi kriptografije javnog ključa (PKCS) serije, posebno PKCS #5 v2.0, također objavljen kao RFC 2898 Radne skupine za internetsko inženjerstvo.”
Nakon gornjeg mnemotehničkog generiranja, sljedeći dijagram prikazuje algoritam za generiranje sjemena.
Prvi parametar PBKDF2 je gore generirana mnemotehnika.
Drugi parametar PBKDF2 je sol, koji se općenito sastoji od niza i izbornog ulančavanja nizova šifri koje je donio korisnik.
PBKDF2 koristi algoritam HMAC-SHA512, koji koristi 2048 hashova za proizvodnju 512-bitne vrijednosti kao početne vrijednosti.
Generiranje HD novčanika iz sjemena
Gore generirano sjeme koristit će se kao Root Seed HD novčanika, a Root Seed bilo kojeg HD novčanika može ponovno stvoriti cijeli HD novčanik.
Unos korijenskog sjemena u algoritam HMAC-SHA512 daje 512-bitni hash, od kojih se lijevih 256 bitova koristi kao glavni privatni ključ, a desnih 256 bitova kao glavni kod lanca. Nakon toga, glavni javni ključ (264 bita) može se generirati pomoću glavnog privatnog ključa m.
Kao što možete vidjeti na gornjoj slici, HD ključ se generira sa sljedećim parametrima.
Nadređeni privatni ključ ili nadređeni javni ključ; (oba su nekomprimirani 256-bitni ECDSA ključevi).
Roditeljski kod lanca od 256 bita.
32-bitni cijeli broj indeksnog broja.
Osim toga, gornji proces je rekurzivan i Privatni ključ djeteta u dijagramu može se koristiti kao Privatni ključ roditelja na sljedećoj razini.
Unosom (Parent Publick Key, Parent Chain Code, Index Number) u HMAC-SHA512 algoritam, možemo generirati njegove potključeve i možemo podesiti indeksni broj za generiranje više potključeva na istoj razini.
O proširenom ključu
Budući da je ova funkcija derivacije ključa jednosmjerna, svi podključevi ne mogu se koristiti za izvođenje svojih nadređenih ključeva ili sestrinskih ključeva na istoj razini, samo se nadređeni ključ i kod nadređenog lanca (koji su generirani iz ključa nadređene razine i koda lanca) mogu koristiti za izvođenje svih podključeva i kodova podlanca, te naknadno generiranje odgovarajućih podjavnih ključeva i adresa za potpisivanje transakcija.
Kombinacija ključa i koda lanca naziva se prošireni ključ, a prošireni ključ se može koristiti za generiranje svih grana od tamo naniže.
Ključ koji se nalazi u proširenom ključu može biti ili privatni ključ ili javni ključ, u kombinaciji s lančanim kodom koji se naziva Prošireni privatni ključ odnosno Prošireni javni ključ, i označen kao (k, c) odnosno (K, c), gdje je javni ključ K = točka (k).
Prošireni javni ključ možemo izvesti iz proširenog privatnog ključa, a ne obrnuto, tako da se za neke transakcijske scenarije (npr. e-trgovina), novi javni ključ i adresa mogu generirati za svaku transakciju za primanje plaćanja, dok se prošireni privatni ključ može pohraniti u papirnati novčanik ili hardverski novčanik za sigurno izvanmrežno potpisivanje transakcija. Kao što vidimo, sigurnost proširenog javnog ključa je relativno visoka, a sljedeći dijagram prikazuje mehanizam prijenosa proširenog nadređenog javnog ključa za izvođenje privatnog ključa djeteta i generiranje javnog ključa djeteta:




