Sunday, December 7, 2014

Mnemonički kod za generiranje determinističkih ključeva (BIP 39)


Mnemonički kod korisit se za pretvaranje nizova znamenki u jednoznačno određene riječi engleskog jezika kako bi se olakšalo njihovo zapisivanje, pamćenje i prenošenje drugim osobama. Oni se koriste i u generiranju determinističkih novčanika.

Generiranje mnemoničkih kodova


Mnemonički kod mora enkodirati entropiju u grupama po 32 bita. Što je entropija veća, veća je i sigurnost, no rečenice su dulje. Propručena veličina entropije (ENT) je 128 do 256 bitova.


Nakon generiranja entropije, generira se zaštitna suma uzimajući prvih ENT/32 bitova od SHA256(ENT). Drugim riječima, izračuna se broj grupa od 32 bita (ENT/32) te se zatim uzme toliko bitova od SHA256 hasha entropije. Zaštitna suma doda se na kraj generiranih bitova entropije.


Ti se bitovi zatim podijele u grupe duljine 11 bitova. Svaka grupa predstavlja broj od 0 do 2047 koji predstavljaju indeks u listi riječi. Te se grupe zatim pretvaraju u riječi i to je generirani mnemonički kod.


Sljedeća tablica prikazuje odnos duljine entropije (ENT), duljine zaštitne sume (CS) te duljine generiranog mnemoničkog koda (MS) u riječima.


ENT
CS
ENT+CS
MS
128
4
132
12
160
5
165
15
192
6
198
18
224
7
231
21
256
8
264
24

 Lista riječi


Idealna lista riječi ima sljedeće karakteristike:
a) Pametan izbor riječi (dovoljno je upisati prva četiri slova riječi da bi se ona jednoznačno odedila)
b) Izbjegavaju se slične riječi
c) Sortirana lista riječi
Sve riječi moraju biti kodirane u UTF-8 formatu. Ovdje je lista takvih riječi.

 Korištenje mnemoničkog koda kao sjemena


Ako se generirani mnemonički kod želi koristit kao sjeme za hijerarhijski deterministički novčanik potrebno je koristiti funkciju PBKDF2. Mnemonički kod koristi se kao lozinka, salt je riječ “mnemonic” + lozinka, broj iteracija je 2048, a koristi se HMAC-SHA512.


Generiranje sjemena odvojeno je od generiranja koda.