W popularnej procedurze BIP39 losowe dane zamieniają się w słowa zapasowe, czyli Seed Phrase. Z nich i opcjonalnej passphrase, dodatkowego hasła, powstaje seed: tajne dane, z których BIP32 może wyprowadzić drzewo kluczy portfela. Losowe dane, słowa, seed i klucze to różne etapy tej samej drogi. Inne formaty kopii zapasowej mogą działać inaczej.
Wyobraź sobie, że chcesz łatwo zapamiętać kopię portfela i wybierasz słowa z ulubionej książki. Tobie mogą wydawać się nietypowe, ale atakujący może sprawdzać właśnie cytaty i znane ludzkie schematy. Dlatego BIP39 zaczyna od losowości wygenerowanej komputerowo i dopiero potem zapisuje ją słowami. Jej nieprzewidywalność opisuje entropia. Słowa są czytelnym zapisem tajnych danych, a nie zachętą do ułożenia własnego zdania. [1]
Portfel musi rzeczywiście otrzymać losowe dane, nie tylko wywołać funkcję o odpowiedniej nazwie. Linux udostępnia na przykład getrandom(), które domyślnie czeka na gotowość źródła systemowego. Z opcją GRND_NONBLOCK może zamiast czekać zgłosić EAGAIN: dane nie są jeszcze dostępne. Program musi sprawdzić wynik oraz liczbę otrzymanych bajtów, czyli jednostek danych. Kontynuowanie po błędzie tak, jakby tajne dane wejściowe powstały poprawnie, mogłoby stworzyć pozornie działający, lecz niezabezpieczony portfel. [2]
Przeglądarki także mają interfejs do uzyskiwania bezpiecznych danych losowych. Web Crypto getRandomValues() wypełnia tablicę liczb całkowitych kryptograficznie bezpiecznymi bajtami; żądanie ponad 65536 bajtów kończy się błędem QuotaExceededError. Jest to jednak opis jednej funkcji, a nie potwierdzenie bezpieczeństwa całej strony. Strona może uzyskać dobrą losowość, a później ujawnić słowa zapasowe. Trzeba więc sprawdzić również załadowany kod i sposób wykorzystania wyniku. [3]
Jeśli źle przepiszesz słowo, portfel może wykryć błąd dzięki sumie kontrolnej: krótkiej wartości obliczonej z pierwotnych danych. BIP39 dodaje 4 bity kontrolne do 128 bitów wejścia, tworząc 12 słów; 256 bitów z 8 bitami kontrolnymi daje 24 słowa. Bit jest podstawową jednostką informacji. Bity kontrolne pochodzą z odcisku danych obliczonego przez SHA256, a nie z dodatkowej niezależnej entropii. Prawidłowa suma nie dowodzi zatem, że słowa są tajne ani że powstały bezpiecznie. [1]
Słowa są wygodne do zapisania kopii; oprogramowanie musi przekształcić je w ściśle określone dane. BIP39 używa funkcji wyprowadzania PBKDF2-HMAC-SHA512 z 2048 powtórzeniami, uzyskując seed o długości 512 bitów. Obok frazy wykorzystuje parametr salt: tutaj dosłowny tekst mnemonic połączony z passphrase lub z pustym ciągiem, jeśli jej nie używasz. Fraza i ten parametr są przetwarzane w UTF-8 NFKD, co ujednolica zapis znaków. Dłuższy wynik nie tworzy brakującej losowości: jego długość nie dowodzi 512 bitów entropii wejściowej. [1]
Kolejny krok opisuje BIP32. Wyprowadza główny klucz prywatny oraz chain code, dane pomocnicze używane do wyprowadzania dalszych kluczy. Dzięki temu portfel może tworzyć nowe adresy ze wspólnego źródła. Technicznie stosuje HMAC-SHA512 ze stałym tekstem Bitcoin seed jako kluczem tej funkcji i dzieli wynik. Ten publiczny tekst nie jest twoim sekretem. Wyprowadzony klucz prywatny równy zero lub spoza dozwolonego zakresu jest nieprawidłowy. Seed nie zostaje więc po prostu przemianowany na klucz prywatny. [4]
Programiści muszą wiedzieć, czy ich program liczy poprawnie. Pomagają w tym wektory testowe: znane dane wejściowe i oczekiwane wyniki. BIP39 publikuje zestawy zawierające entropię, słowa i seed, w tym testową passphrase TREZOR. Zgodny wynik potwierdza przekształcenie danego wejścia, ale nie nieprzewidywalność sekretów tworzonych przez rzeczywisty generator. Dane testowe są publiczne, więc nie wolno używać ich jako tajnej kopii dla prawdziwych środków. [1]
Źródło losowości, słowa i przechowywaną kopię łączy kilka etapów. NIST SP 800-90C opisuje łączenie źródeł entropii z mechanizmami generowania losowych danych. Przy ocenie portfela trzeba też sprawdzić konkretną wersję oprogramowania, obsługę błędów i przekazywanie danych między etapami. Dobrze zbadany element nie gwarantuje, że inny nie zgubi lub nie ujawni sekretu. Celem jest prześledzenie całego procesu, a nie znalezienie jednej wiarygodnie brzmiącej nazwy. [5]
Pełniejszy obraz uzyskasz, czytając to hasło razem z Random Number Generator, BIP 39, HD Wallet, Seed Phrase. Do tego hasła prowadzą również odsyłacze z Random Number Generator, CSPRNG, Deterministic RNG, Entropy Mixing.