30 / 736BIP32

HD Wallet

Hierarchiczny portfel deterministyczny

Portfel może podawać nowy adres dla każdej płatności bez tworzenia kolejnej kopii kluczy po każdym wpływie. HD Wallet wyprowadza całe drzewo kluczy z jednego początkowego sekretu. Przy odzyskiwaniu trzeba też wiedzieć, z której części drzewa korzystał portfel.

HD Wallet oblicza wiele powiązanych kluczy z jednej tajnej podstawy, czyli seedu. Klucze prywatne służą do podpisywania płatności, a z odpowiadających im kluczy publicznych portfel tworzy adresy odbiorcze. Może dzięki temu używać nowych adresów bez osobnej kopii zapasowej dla każdego z nich.

Alicja otwiera ekran odbioru, a portfel wyświetla adres. Otrzymuje na niego 10 000 satoshi, czyli drobnych jednostek bitcoina. Przy kolejnym przelewie aplikacja proponuje inny adres, na który trafia 20 000 satoshi. Jeśli są to jej jedyne niewydane wpływy, portfel pokaże łącznie 30 000 satoshi. Nowy adres nie utworzył osobnego konta, a wcześniejsze środki nie zostały automatycznie przeniesione. Aplikacja zarządza kluczami do obu wpłat. HD Wallet ułatwia takie działanie. HD oznacza Hierarchical Deterministic: hierarchiczny, ponieważ klucze tworzą rozgałęzioną strukturę, i deterministyczny, ponieważ ten sam seed oraz ta sama ścieżka dają te same klucze, także przy odzyskiwaniu. Ścieżka to ciąg liczb wskazujący programowi, którą gałąź i który klucz obliczyć. Przy zwykłym odbieraniu płatności Alicja na ogół się nią nie zajmuje, ale odzyskiwanie wymaga właściwych ścieżek. Jedna kopia początkowego sekretu może więc obejmować także przyszłe adresy; ustawienia portfela nadal trzeba zachować. Nowe adresy pomagają unikać ponownego używania adresów, ale same nie gwarantują anonimowości. [1] [12]

Rozszerzony klucz publiczny, zwykle nazywany xpub, pozwala obliczać klucze publiczne części tej struktury. Nie zawiera kluczy prywatnych potrzebnych do podpisywania płatności. Sam xpub nie pozwala więc wydawać środków; do tworzenia konkretnych adresów aplikacja musi też znać ich format. Portfel watch-only z odpowiednim xpub może tworzyć adresy i obserwować płatności bez kluczy podpisu. Wyciek xpub może jednak powiązać dawne i przyszłe adresy gałęzi, salda oraz transakcje. Udostępniaj tylko potrzebną gałąź. Nawet prawidłowy xpub nie powstrzyma przejętego komputera przed pokazaniem cudzego adresu. Sprawdź adres odbiorczy na zaufanym urządzeniu podpisującym, które zna ten portfel. [1] [12] [14]

Sklep może tworzyć osobny adres dla każdego zamówienia. Strona potrzebuje adresów, ale nie powinna posiadać kluczy do wydawania przychodów. BIP32 pozwala oddzielić gałąź odbiorczą od reszty portfela. Autorem propozycji jest Pieter Wuille; datą jej przydzielenia jest 11 lutego 2012 roku. To standard portfeli, nie reguła konsensusu. Słowa kopii zapasowej BIP39, typy skryptów i pełna procedura odzyskiwania należą do innych warstw. [1] [11] [12]

BIP32 dodaje do klucza 256-bitowy chain code, czyli 32 bajty do dalszego wyprowadzania. Postać prywatna składa się ze skalara k krzywej secp256k1 i chain code c; publiczna używa K = point(k) oraz tego samego c. Klucz główny powstaje przez HMAC-SHA512 z dokładnym napisem „Bitcoin seed” jako kluczem funkcji i seedem jako danymi. Lewe 32 bajty są kandydatem klucza prywatnego, prawe 32 to chain code. Zero lub wartość co najmniej równa rzędowi krzywej n oznacza nieprawidłowy klucz główny. [1]

Wyprowadzanie to obliczenie, nie wyszukiwanie na zapisanej liście. Istnieją dwa rodzaje wyprowadzania: zwykłe i hardened. W zwykłym kolejne klucze publiczne można obliczyć z nadrzędnego rozszerzonego klucza publicznego; krok hardened wymaga nadrzędnego rozszerzonego klucza prywatnego. CKDpriv oblicza I = HMAC-SHA512(cpar, data), dzieli wynik na IL i IR, a parse256(IL) dodaje modulo n do prywatnego klucza nadrzędnego. IR staje się nowym chain code. Zwykła gałąź używa serP(Kpar) || ser32(i), hardened używa 0x00 || ser256(kpar) || ser32(i), gdzie i ≥ 2^31. CKDpub tworzy tylko zwykłe gałęzie publiczne, dodając point(parse256(IL)) do Kpar. Inny numer gałęzi zmienia dalsze klucze. [1]

Z xpub można wyprowadzać klucze publiczne, dopóki ścieżka nie przechodzi przez krok hardened. Wiąże się z tym ryzyko: nadrzędny xpub wraz z ujawnionym prywatnym kluczem zwykłego potomka pozwala obliczyć nadrzędny klucz prywatny. Zagrożone są wtedy także pozostałe gałęzie. Hardened blokuje to obliczenie wstecz, ale nie chroni przed kradzieżą seedu, słabą losowością ani zatwierdzeniem szkodliwej transakcji. [1]

W mainnet standardowy zapis publiczny zaczyna się od xpub, a prywatny od xprv; ich wersje to 0x0488B21E i 0x0488ADE4. Przed Base58Check rekord ma 78 bajtów: wersja 4, głębokość 1, odcisk klucza nadrzędnego 4, numer potomka 4, chain code 32 i dane klucza 33. Wynik ma 111 znaków. Krótki odcisk pomaga kojarzyć klucze, ale nie dowodzi tożsamości. Prefiksy ypub/zpub ze SLIP132 czasem wskazują typ skryptu; sama zmiana prefiksu nie zmienia kluczy ani zasad portfela. [1] [9]

BIP43 przeznaczył pierwszy poziom hardened na określenie zastosowania. BIP44 używa m / 44' / coin_type' / account' / change / address_index. Po koncie następuje gałąź 0 do odbioru albo 1 do reszty oraz numer adresu. Apostrof lub h oznacza indeks zwiększony o 2^31. BIP44 stosuje gap limit 20: wyszukiwanie kończy się po 20 kolejnych nieużytych adresach odbiorczych. BIP48 opisuje Multisig, BIP84 zastosowanie 84' dla natywnego SegWit, a BIP86 zastosowanie 86' dla Taproot z jednym kluczem. Tych konwencji nie zapisano w samym seedzie i nie wymuszają ich węzły. [2] [3] [4] [5] [6]

Same klucze nie określają skryptu chroniącego monety. Output Descriptor może zapisać pochodzenie kluczy, ścieżki, konstrukcję taką jak wpkh(), wymaganą liczbę podpisów, pozostałych uczestników Multisig i sumę kontrolną. Multipath descriptor może połączyć gałęzie odbioru i reszty. Seed jednego uczestnika nie odtworzy innych xpub ani wspólnych zasad. Zachowaj też zweryfikowany publiczny deskryptor lub eksport konfiguracji i chroń ich poufność. Jeśli eksport zawiera klucze prywatne, traktuj go jak sekret. [7] [8] [10] [13]

Seed pozwala ponownie wyprowadzić klucze, ale aplikacja potrzebuje jego formatu, użytej BIP39 passphrase, sieci, typu skryptu, coin type, kont, obu gałęzi i zakresu wyszukiwania. Multisig wymaga także wspólnej konfiguracji. Zerowe saldo nie musi oznaczać utraty monet: powodem może być inna ścieżka. Bezpieczna próba na zaufanym urządzeniu powinna odnaleźć właściwe UTXO, czyli jeszcze niewydane wyjścia transakcji, i sprawdzić podpis. Nigdy nie wpisuj prawdziwego seedu ani słów kopii zapasowej w narzędziu internetowym lub na zwykłym komputerze online. [3] [7] [10] [11]

BIP32 uwzględnia rzadkie nieprawidłowe wyniki: parse256(IL) ≥ n, zerowy wyprowadzony klucz prywatny lub publiczny punkt w nieskończoności. Wtedy próbuje się następnego indeksu. Częściej przy odzyskiwaniu brakuje ścieżki, gałęzi reszty lub obsługi danego skryptu. Przed zmianą aplikacji sprawdź odnalezienie monet i niewielki przelew próbny. Zachowaj pierwotną kopię i konfigurację, dopóki nowa procedura nie działa. xprv pozwala uzyskać klucze potrzebne do podpisywania, xpub ujawnia powiązania finansowe, a deskryptor opisuje budowę portfela. [1] [7] [9] [10]

Pełniejszy obraz uzyskasz, czytając to hasło razem z Portfel, Seed Phrase, Extended Public Key (xpub), Derivation Path, Gap Limit, Bitcoin. Do tego hasła prowadzą również odsyłacze z Adres Bitcoin, BIP 39, Cold Storage, Watch-only Wallet.

DOC · 001BIP 32 — Hierarchical deterministic walletsSpecyfikacja DOC · 002BIP 43 — Purpose field for deterministic walletsSpecyfikacja DOC · 003BIP 44 — Multi-account hierarchySpecyfikacja DOC · 004BIP 48 — Multi-script hierarchy for multisig walletsSpecyfikacja DOC · 005BIP 84 — Native SegWit derivationSpecyfikacja DOC · 006BIP 86 — Single-key Taproot derivationSpecyfikacja DOC · 007BIP 380 — Output script descriptorsSpecyfikacja DOC · 008BIP 389 — Multipath descriptor key expressionsSpecyfikacja DOC · 009SLIP 132 — Registered HD version bytesSpecyfikacja DOC · 010Bitcoin Core — Output descriptorsDokumentacja DOC · 011BIP 39 — Mnemonic code for deterministic keysSpecyfikacja DOC · 012Bitcoin Developer Guide — WalletsDokumentacja DOC · 013Bitcoin Optech — Output script descriptorsDokumentacja DOC · 014Trezor Learn — Hierarchical deterministic walletsDokumentacja
Zaktualizowano: Najpierw źródła · To nie jest porada inwestycyjna