2. Portfel hierarchicznie deterministyczny | Portfel HD
Aby rozwiązać problemy losowych portfeli, społeczność deweloperów Bitcoin w 2012, 2013 i 2014 roku ustanowiła trzy standardowe protokoły: BIP32, BIP39, BIP44 (BIP, Bitcoin Improvement Proposal), które ostatecznie stały się podstawą architektury obecnych portfeli.


Trzy. Podstawowa logika portfela HD
Początkowo portfel HD został stworzony na podstawie tych trzech protokołów, a następnie stopniowo rozwijał się i ewoluował. Poniżej krótko opiszemy, jak te trzy protokoły współpracują ze sobą.
1. Generowanie sekwencji [BIP39]
1) Najpierw wygeneruj losową liczbę binarną, zazwyczaj 128/160/192/224/256 bitów, powszechnie używaną jest 128 bitów i 256 bitów, to właściwie jest „źródło sekwencji”, a wszystkie kolejne są wyprowadzane na podstawie tego „źródła sekwencji”.

128-bitowa liczba losowa w postaci binarnej:
00001100000111100010010011100101100100010111011101111001110100101001011111100001010011010100010111110001010011100001101000011010
Użyj narzędziWygeneruj odpowiadające 32 bity szesnastkowe
0x0C1E24E5917779D297E14D45F14E1A1A
2) Użyj narzędzi online do obliczenia jego SHA-256 i weź pierwsze 4 znaki jako kod kontrolny 0x7
3) Połącz liczbę losową z kodem kontrolnym, aby uzyskać 132-bitową liczbę binarną
33 znaki szesnastkowe:
0x0C1E24E5917779D297E14D45F14E1A1A7
132-bitowa liczba losowa w postaci binarnej:
000011000001111000100100111001011001000101110111011110011101001010010111111000010100110101000101111100010100111000011010000110100111
4) Podziel te 132 bity na grupy po 11, razem 12 grup. Dlaczego po 11 bitów? Ponieważ słownik BIP39 zawiera 2048 słów (2^11 = 2048), a następnie przypisz te 12 grup do 12 fraz pamięci.

5) Użyj funkcji algorytmu PBKDF2-HMAC-SHA512, aby przekształcić „frazy pamięci” w 512-bitową liczbę binarną jako sekwencję
sekwencja (seed) = PBKDF2_HMAC_SHA512(hasło=fraza pamięci, sól="fraza pamięci"+dodatkowe hasło, iteracje=2048, outputLen=64 bajty)
Uwaga:
A. Parametr „hasło” = ciąg 12 fraz pamięci połączonych spacjami
B. Funkcja algorytmu zamieni 12 fraz pamięci połączonych spacjami na odpowiadające im liczby binarne w kodowaniu UTF-8, a nie użyje mapy fraz pamięci 132-bitowej
C. Wartość soli = "fraza pamięci"+dodatkowe hasło, bez spacji między nimi
D. Liczba iteracji wynosi 2048
E. Wynik wyjściowy to 64 bajty, czyli 128 znaków szesnastkowych
Fraza pamięci (połączona spacjami):
armia furgonetka obrona nosić zazdrości prawda śmieci roszczenie echo media robić chrupanie
sól (bez dodatkowego hasła):
fraza pamięci
Użyj narzędzi online, aby obliczyć sekwencję:
5b56c417303faa3fcba7e57400e120a0ca83ec5a4fc9ffba757fbe63fbd77a89a1a3be4c67196f57c39a88b76373733891bfaba16ed27a813ceed498804c0570