Kiedy zawodzi losowość: błąd entropii Coldcarda i co zmieniają dwa urządzenia

·6 min czytania·Autor: SSP Editorial Team
Okładka SSP Academy: błąd entropii Coldcarda i architektura dwuurządzeniowa

Kiedy zawodzi losowość: błąd entropii Coldcarda i co zmieniają dwa urządzenia

Pod koniec lipca 2026 atakujący zaczęli wyprowadzać bitcoiny z tysięcy portfeli sprzętowych, które nie zrobiły nic złego. Ich właściciele stosowali się do rad. Kupili osobne urządzenie do podpisywania, trzymali ziarno poza internetem, nigdy nie wpisywali go na żadnej stronie. Nic z tego nie miało znaczenia, bo ziarno, które te urządzenia generowały, nigdy nie było tak losowe, jak wyglądało.

Około 1816 BTC opuściło ponad 5200 adresów w czterech falach. Stało się to największym exploitem portfeli sprzętowych tego roku.

Ten artykuł nie jest rundą honorową. Ten błąd należy do gatunku, który mógł przytrafić się niemal każdemu portfelowi, także naszemu, a interesujące pytanie nie brzmi, kto go wypuścił, lecz co architektura portfela robi, gdy on się przytrafi.

Co poszło nie tak

Jeden commit, w marcu 2021 roku.

Projekt Coldcarda przewidywał generowanie ziaren ze sprzętowego generatora liczb losowych — dedykowanego układu czerpiącego entropię z procesów fizycznych. To właściwy sposób. Ale zmiana w firmware 4.0.1 przekierowała generowanie ziaren przez programowy generator pseudolosowy zasilany publicznymi, zaszytymi w kodzie stałymi.

PRNG jest z definicji deterministyczny. Przy tej samej wartości początkowej zawsze zwraca tę samą sekwencję. Ziarno wygenerowane w ten sposób nie jest więc liczbą, której nikt nie odgadnie — jest liczbą wziętą ze zbioru dość małego, by go przeszukać, przy użyciu stałych, które cały czas leżały w opublikowanym firmware.

Urządzenia dalej zachowywały się normalnie. Pokazywały dwadzieścia cztery słowa, zapisywano je, wyprowadzały poprawne adresy, podpisywały prawidłowe transakcje. W żadnym portfelu nie ma ekranu, który pokaże ci, ile entropii weszło w twoje ziarno. Każdy dotknięty użytkownik miał urządzenie wyglądające i działające dokładnie jak sprawne — nawet przez pięć lat.

Okno sięga od firmware 4.0.1 z marca 2021 do 4.1.9 z lipca 2026. Aktualizacja firmware naprawiała generowanie od tego momentu i nie robiła absolutnie nic dla ziaren już utworzonych: te klucze były już słabe, a żadna aktualizacja nie doda wstecznie losowości liczbie zapisanej dawno temu na karteczce w czyimś sejfie. Dotknięci musieli wygenerować nowe ziarno i przenieść monety.

Dlaczego słaba losowość to cicha, całkowita strata

Warto być precyzyjnym co do tego, dlaczego ta klasa błędów jest tak poważna, bo nie jest to intuicyjne.

24-słowne ziarno BIP-39 reprezentuje 256 bitów entropii. Odgadnięcie go nie jest po prostu trudne — jest niewyobrażalne: nie istnieje komputer, obecny ani przyszły, który przeszukałby tę przestrzeń siłowo. To fundament, na którym stoi cały model samodzielnego przechowywania: twój klucz jest bezpieczny, bo jest jednym z niepojęcie wielkiej liczby możliwości.

Ta gwarancja nie jest własnością słów. Jest własnością procesu, który je wybrał. Dwadzieścia cztery słowa z słabego generatora są identyczne jak dwadzieścia cztery z mocnego. Przechodzą każdą sumę kontrolną, dają poprawne adresy i odtwarzają się bezbłędnie w dowolnym portfelu. Jedyna różnica to że ktoś inny również może do nich dojść.

Awaria jest więc niewidoczna od środka i jest całkowita. Nie „atakujący mógłby cię okraść, jeśli popełnisz błąd" — nie ma błędu do uniknięcia, linku phishingowego do odrzucenia, okna potwierdzenia do uważnego przeczytania. Pieniądze są do wzięcia, kiedy atakującemu wygodnie, a pierwszym znakiem, że coś było nie tak, jest to, że ich nie ma.

Co zmieniają dwa urządzenia

Ten sam błąd, dwie architektury

Oto część istotna architektonicznie, którą chcę ująć precyzyjnie, a nie marketingowo.

SSP to multisig 2-z-2. Środki leżą pod adresem kontrolowanym przez dwa niezależne klucze wygenerowane na dwóch niezależnych urządzeniach — jeden w rozszerzeniu przeglądarki, drugi w aplikacji mobilnej SSP Key — a transakcja wymaga obu podpisów. Układ dwa-z-dwóch to cała podstawa tego portfela.

Teraz przyłóż scenariusz Coldcarda do tej struktury. Załóżmy, że generowanie ziarna w rozszerzeniu miało tę samą wadę i atakujący potrafi w pełni wyprowadzić twój klucz z przeglądarki.

Nadal nie może niczego wydać. Ma jeden z dwóch wymaganych podpisów. Adres nie wypuszcza środków na jeden klucz, czyjkolwiek by był i jakkolwiek zdobyty. Aby ruszyć twoje monety, musiałby dodatkowo, niezależnie i jednocześnie, złamać klucz na twoim telefonie — inna aplikacja, inny system operacyjny, inne źródło entropii, wygenerowany w innej chwili.

To jest ta strukturalna różnica. W portfelu jednokluczowym słabe ziarno to całkowita strata. W 2-z-2 słabe ziarno to poważny problem, który sam z siebie stratą nie jest.

Zastrzeżenie, powiedziane wprost

Łatwo byłoby na tym poprzestać i pozwolić ci wywnioskować, że SSP jest na to odporny. Nie jest, a udawanie inaczej w czasie cudzego incydentu byłoby dokładnie najgorszym momentem.

Obie aplikacje SSP używają tej samej implementacji BIP-39 — @scure/bip39, przypiętej w obu do tej samej wersji. Wada w samej tej bibliotece dotknęłaby oba klucze. Niezależność, którą daje SSP, jest realna, ale konkretna: dwa osobne ziarna, wygenerowane w różnych momentach na różnych urządzeniach, czerpiące entropię z różnych źródeł systemowych — Web Crypto przeglądarki z jednej strony, CSPRNG platformy mobilnej z drugiej. To nie jest niezależność dwóch całkowicie niepowiązanych baz kodu.

Kupuje to ochronę przed trybem awarii, który u Coldcarda faktycznie zaszedł: błędem implementacji specyficznym dla urządzenia w tym, jak jeden produkt generował swoje ziarna. Nie ochroni przed defektem we wspólnej primitywie kryptograficznej leżącej pod obydwoma.

To znacznie słabsze twierdzenie niż „nam to nie może się zdarzyć" — i to prawdziwe. Kto mówi ci, że jego portfel jest kategorycznie odporny na awarię entropii, opowiada ci o swoim marketingu, nie o architekturze.

Co z tego wynieść

Jeśli masz Coldcarda z tego okna firmware, jedyne bezpieczne założenie jest takie, że ziarno jest skompromitowane, niezależnie od tego, czy środki się ruszyły. Wygeneruj nowe na załatanym firmware i przenieś się. Urządzenie, którego jeszcze nie opróżniono, nie jest urządzeniem bezpiecznym.

Jeśli używasz jakiegokolwiek portfela jednokluczowego, to jest ryzyko, które ze sobą nosisz, i lepiej być go świadomym niż się nim zadręczać. Portfele sprzętowe pozostają dla większości ludzi nieporównanie lepsze od alternatyw. Nauka nie brzmi, że są złe; brzmi tak, że jeden klucz to jeden punkt awarii, a każdy fragment historii tego klucza — w tym chwila jego narodzin, lata temu, w firmware, którego nie czytałeś — należy do twojego modelu zagrożeń.

I ogólnie: wybieraj architektury, w których jedna rzecz idąca nie tak nie wystarcza. Ta zasada jest powodem, dla którego SSP wymaga dwóch urządzeń, dla którego niektóre operacje żądają ponownego podpisu, choć jesteś już uwierzytelniony, i dla którego co naprawdę zatrzymuje transakcję to pytanie warte zadania każdemu portfelowi, któremu ufasz. Odpowiedź nigdy nie powinna brzmieć: „jeden sekret i nadzieja, że wygenerowano go porządnie".

Dla szerszego porównania opcji i tego, przed czym każda faktycznie chroni, porównanie opcji samodzielnego przechowywania omawia kompromisy.

Udostępnij ten artykuł

Powiązane artykuły