Derivation Path to dokładna kolejność kroków, według której portfel wyprowadza konkretny klucz z klucza początkowego. Pomyśl o folderach na komputerze: właściwy dysk nie wystarczy, jeśli otworzysz niewłaściwe foldery. Klucze są jednak obliczane matematycznie, a nie wyszukiwane w zapisanych plikach. Te same dane początkowe i ścieżka dają ten sam wynik. Inna ścieżka może prowadzić do innej części tego samego portfela. Nie jest adresem płatności, hasłem ani zamiennikiem kopii zapasowej.
Anna odzyskuje portfel, a program pyta o ścieżkę, o której wcześniej nie musiała myśleć. Portfel to aplikacja lub urządzenie do odbierania i wysyłania bitcoinów. m/0/7 wygląda skomplikowanie, ale czyta się po kolei: m to główny węzeł prywatny, z którego wyprowadza się klucz 0, a z niego klucz 7. Węzeł oznacza tu miejsce w drzewie kluczy, nie komputer w sieci Bitcoin. Liczby są indeksami, pozycjami w kolejności, a nie kwotami czy numerami transakcji. Standard BIP 32 używa klucza rozszerzonego: oprócz samego klucza zawiera on chain code, dodatkowe dane potrzebne do wyprowadzania kolejnych kluczy. Sam zapis ścieżki bez klucza początkowego nie pozwala więc podpisać płatności. [1] [10]
Weźmy m/84'/0'/0'/0/7. Pierwsza część po m oznacza konwencję BIP 84 dla natywnego SegWit, sposobu tworzenia adresów i wydawania środków. Dalej są Bitcoin mainnet, sieć główna z prawdziwymi bitcoinami, konto 0, zewnętrzna gałąź odbiorcza 0 oraz indeks 7. To ósma pozycja adresowa, bo liczenie zaczyna się od zera. Konto oddziela grupę środków, gałąź wskazuje przeznaczenie adresów. W układzie BIP 44 gałąź 1 służy własnej reszcie, czyli kwocie pozostającej u nadawcy po płatności. Pierwsze trzy kroki mają apostrof i są hardened, dwa ostatnie są zwykłe. Co zmienia ten znak? [2] [5]
Klucz prywatny to tajna wartość liczbowa, której portfel używa do utworzenia podpisu cyfrowego zatwierdzającego wydanie środków. Hardened oznacza wyprowadzanie wymagające klucza prywatnego poziomu nadrzędnego. Zwykły krok pozwala wyprowadzić pochodny klucz publiczny z xpub, rozszerzonego klucza publicznego. Z odpowiednim typem skryptu można tak tworzyć adresy bez możliwości podpisywania płatności. Sam xpub nie przejdzie przez krok hardened. Według BIP 380 zapisy 0' i 0h znaczą to samo, ale nie zwykły 0. Dla czytelników technicznych: BIP 32 dzieli 32-bitowe indeksy na zwykłe od 0 do 2^31−1 i hardened od 2^31 do 2^32−1; znak zmienia zero w indeks 2^31. Pominięcie go zmienia obliczenie, nie tylko wygląd zapisu. [1] [7] [10]
BIP 43 nazywa pierwszy poziom hardened słowem purpose, czyli przeznaczeniem struktury. Uzgodnione wartości pomagają portfelom rozpoznać typowe użycie gałęzi. Dla orientacji: 44' oznacza tradycyjne P2PKH, płatność chronioną skrótem klucza publicznego; 49' to P2SH-P2WPKH, SegWit w starszej otoczce dla zgodności; 84' to natywne P2WPKH; a 86' to single-key P2TR, konstrukcja Taproot z jednym kluczem wewnętrznym. Są to różne sposoby określenia warunków wydania pieniędzy. Sama liczba nie zmienia ścieżki w odpowiedni skrypt ani nie wymusza go przez konsensus sieci. Program musi naprawdę zbudować właściwe wyjście. Nie wszystkie portfele stosują te konwencje. [3] [2] [4] [5] [6]
Anna może podłączyć tylko xpub jednego konta, by obserwować wpływy, zamiast całego portfela. Jeśli pochodzi on z m/84'/0'/0', jest już na poziomie konta. Do naszego przykładu pozostaje względny sufiks /0/7. Ponowne dodanie całej ścieżki od korzenia rozpoczęłoby dalsze wyprowadzanie w niewłaściwym miejscu; poza tym kroków hardened nie da się wykonać z xpub. Wyeksportowany klucz rozszerzony zawiera głębokość w drzewie i fingerprint rodzica, krótki znacznik identyfikacyjny, ale nie pełny zapis wcześniejszych kroków. Dlatego brakującej pierwotnej ścieżki nie zawsze można po prostu odczytać z samego xpub. [1] [7]
Descriptor opisuje klucze i warunki wydawania, z których program tworzy obserwowane wyjścia. BIP 380 pozwala przed kluczem, w nawiasach kwadratowych, zapisać fingerprint i ścieżkę jego pochodzenia. To kroki już wykonane. Sufiks po kluczu wskazuje dalsze wyprowadzanie; gwiazdka * może oznaczać serię potomków. Fingerprint ma cztery bajty i może mieć kolizje: różne klucze mogą mieć ten sam krótki znacznik. Nie jest dowodem tożsamości ani zastępstwem klucza. Bitcoin Core 29.0 udostępnia deriveaddresses przez RPC, interfejs programistyczny węzła. Polecenie oblicza adresy na podstawie opisu descriptor i ewentualnego zakresu; samo obliczenie nie sprawdza sald ani nie wysyła środków. [7] [1] [9]
Ścieżka nie stworzy twoich kluczy bez danych początkowych. Udostępnienie xpub to inna sprawa: odbiorca może wyprowadzać klucze publiczne dostępnej gałęzi i z właściwym typem skryptu śledzić jej adresy. Nie daje mu to prawa wydawania, ale może naruszyć prywatność. BIP 32 opisuje też mniej oczywiste ryzyko: xpub rodzica razem z ujawnionym prywatnym kluczem potomka osiągalnego zwykłymi krokami może odsłonić rozszerzony klucz prywatny rodzica. Granica hardened blokuje tę konkretną drogę do rodzica. Nie unieważnia jednak ujawnionego klucza ani nie ratuje środków, nad którymi daje on kontrolę. [1]
Wróćmy do odzyskiwania. Seed Phrase to słowa kopii zapasowej. Zgodnie z BIP 39 wraz z opcjonalną passphrase tworzą seed, początkowy sekret do generowania kluczy. Passphrase jest dodatkowym tajnym tekstem, nie zwykłym hasłem aplikacji. Z innym seed ta sama ścieżka prowadzi do innych kluczy. Muszą też zgadzać się sieć, konto, gałąź i typ skryptu. Program powinien przeszukać odpowiednio dużo adresów i historii: Gap Limit zatrzymuje szukanie po serii nieużywanych adresów. Zerowe saldo samo nie dowodzi utraty kluczy. Anna może porównać wynik ze znanym adresem odbiorczym i wcześniejszymi płatnościami. Przyjęcie ścieżki oznacza tylko, że program potrafi ją obsłużyć, a nie że znalazł cały dawny portfel. [8] [2] [7]
Pełniejszy obraz uzyskasz, czytając to hasło razem z HD Wallet, Extended Public Key (xpub), Gap Limit, Output Descriptor, BIP 39, Seed Phrase. Do tego hasła prowadzą również odsyłacze z HD Wallet, Watch-only Wallet, Change Address, Extended Public Key (xpub).