489 / 736PBKDF2

PBKDF2

Wyprowadzanie seedu w BIP39

Przy odtwarzaniu portfela te same słowa kopii zapasowej i ta sama passphrase powinny prowadzić do tych samych kluczy. W BIP39 część tej drogi obsługuje PBKDF2: oblicza seed, czyli tajną podstawę dalszego wyprowadzania kluczy. Powtarza obliczenia, ale nie tworzy nowego sekretu.

PBKDF2, czyli Password-Based Key Derivation Function 2, przekształca dane wejściowe pełniące rolę hasła oraz dodatkowy parametr salt w wyprowadzony klucz. Wynik zależy także od liczby powtórzeń, użytej funkcji obliczeniowej i żądanej długości. Identyczne dane i ustawienia dają identyczny wynik. BIP39 używa konkretnego wariantu PBKDF2-HMAC-SHA512; inne zastosowania mogą mieć inne parametry.

Słowa odzyskiwania stanowią wejście nazwane password. Salt jest drugim wejściem: dosłownym tekstem "mnemonic", po którym bezpośrednio następuje passphrase, czyli opcjonalne dodatkowe hasło. Nie wstawia się między nie separatora ani ponownie słów kopii. Bez passphrase salt nadal ma wartość "mnemonic", a nie pusty tekst. Oba wejścia przechodzą NFKD, ujednolicenie pewnych sposobów zapisu znaków, oraz kodowanie UTF-8. BIP39 używa HMAC-SHA512, 2048 powtórzeń i wyniku o długości 64 bajtów, czyli 512 bitów. Ten wynik to seed; salt nie jest kolejną kopią, którą trzeba przygotować. [1]

Wewnątrz działa HMAC, obliczenie łączące klucz z wiadomością. W każdej rundzie kluczem pozostają te same dane hasłowe. Pierwszy wynik pośredni wykorzystuje salt i numer bloku wyjściowego; kolejne rundy przetwarzają poprzedni wynik pośredni. Wyniki łączy operacja XOR, działająca na odpowiadających sobie bitach. HMAC-SHA512 zwraca 64 bajty, więc BIP39 potrzebuje jednego takiego bloku. Zastosowanie samego SHA-512 do tekstu 2048 razy byłoby innym obliczeniem i dałoby inny wynik. [2] [1]

Wyobraź sobie odtwarzanie środków w innym portfelu. Aby uzyskać ten sam seed, musi on użyć tych samych znormalizowanych danych i ustawień. Zwiększenie wymaganych 2048 powtórzeń nie usprawni odzyskiwania: oznacza odejście od BIP39 i inny wynik. Również przetłumaczenie słów na inną listę nie jest obojętne. Odzyskiwanie wymaga zgodności, a nie własnej modyfikacji algorytmu. [1]

Powtarzanie obliczeń zwiększa koszt pojedynczej próby, ale nie wytwarza nowej, niezależnej losowości. Napastnik, który zna twoje słowa i ma dane pozwalające rozpoznać właściwy portfel, może próbować słabych passphrase offline, na własnym komputerze. Seed o długości 512 bitów nie oznacza więc 512 bitów nieprzewidywalności. Także liczba 2048 nie jest ogólnym zaleceniem dla nowo projektowanych systemów; tutaj należy do konkretnego standardu odzyskiwania. [2] [1]

Suma kontrolna BIP39 pomaga wykrywać błędnie przepisane słowa. PBKDF2 odpowiada na inne pytanie: jak obliczyć seed z dostarczonych danych? Samo obliczenie nie potwierdza, że passphrase pasuje do twojego pierwotnego portfela. Następnie seed może przetworzyć BIP32, metoda wyprowadzania całej rodziny kluczy. Sprawdzenie zapisu, przeliczenie go na seed i tworzenie kluczy są powiązane, ale nie można ich ze sobą utożsamiać. [1]

Programista może porównać wyniki z publicznymi wektorami testowymi: znanymi danymi wejściowymi i oczekiwanymi wynikami. BIP39 publikuje pierwotne losowe dane, słowa i pełny seed dla testowej passphrase TREZOR. Poprawna implementacja musi odtworzyć wynik, uwzględniając reguły NFKD. Twoja prawdziwa kopia nie jest do tego potrzebna. Nigdy nie używaj publicznych przykładów do przechowywania pieniędzy, bo zna je każdy. Udany test obliczenia nie dowodzi też bezpieczeństwa całej aplikacji. [1]

Pełniejszy obraz uzyskasz, czytając to hasło razem z BIP 39, BIP39 passphrase, Seed Generation, HD Wallet. Do tego hasła prowadzą również odsyłacze z BIP39 passphrase.

DOC · 001BIP39 — Mnemonic generation and seed conversionSpecyfikacja DOC · 002RFC8018 — PBKDF2 constructionSpecyfikacja
Zaktualizowano: Najpierw źródła · To nie jest porada inwestycyjna