Exploit Coldcard: deterministyczny PRNG opróżnił $88M w BTC

1 sierpnia 2026 roku w skoordynowanej operacji opróżniono około 1196 adresów bitcoin. Bez phishingu. Bez podpisanego złośliwego PSBT. Bez błędu użytkownika w tradycyjnym sensie. Exploit na Coldcard, który opróżnił bitcoiny warte około 88 mln dolarów, nie dotknął żadnego urządzenia w momencie kradzieży, według relacji CoinDesk o tym incydencie.
Przyczyna jest gorsza niż jakiekolwiek komentarze, które widziałem w pierwszych 24 godzinach. Chodzi o lukę w firmware'ze portfela sprzętowego dostarczoną w 2021 roku, która po cichu zastąpiła sprzętowy generator liczb losowych oparty na prawdziwej losowości programową procedurą pseudolosową. Każdy seed wygenerowany w tej kompilacji był deterministyczny. Każdy adres wyprowadzony z tych seedów był, co do zasady, możliwy do obliczenia z góry przez każdego, kto metodą inżynierii wstecznej odtworzył ten błąd.
To nie jest hack. To pięcioletnie opóźnienie między commitem a konsekwencjami.
Co tak naprawdę zrobiła luka w oprogramowaniu Coinkite
Wadliwa kompilacja, jak szczegółowo opisał The Hacker News, kierowała wywołania entropii przez programowy PRNG seedowany małym, łatwym do odgadnięcia stanem zamiast sprzętowego RNG chipa SE. Użytkownicy nie mieli żadnej możliwości wykrycia tej zamiany. Urządzenie uruchamiało się, wyświetlało oczekiwane ekrany konfiguracji, generowało 24-słowny seed i wyglądało identycznie jak poprawnie skonfigurowany portfel.
Produkowane przez nie seedy mieściły się w przestrzeni przeszukiwania liczącej może kilka miliardów możliwości. To nie jest portfel. To bilet loteryjny.
Gdy atakujący (a raczej badacz, który to odkrył i nie ujawnił w sposób odpowiedzialny) zaczął 1 sierpnia przeczesywać tę przestrzeń pod kątem zbioru UTXO, opróżnianie portfeli trwało godziny, a nie miesiące.
Dlaczego liczba 1196 opróżnionych adresów bitcoin ma znaczenie
1 196 to liczba mała w wartościach bezwzględnych, lecz ogromna pod względem sygnału. Wyznacza populację użytkowników, którzy wygenerowali ziarno w tym konkretnym oknie firmware'u i nigdy go nie zmienili. To sprawdzalne, falsyfikowalne twierdzenie o skali zagrożenia, a artykuł TechSpot potwierdza, że dotknięte urządzenia można prześledzić wstecz do wąskiego okresu wysyłki.
Jeśli wygenerowałeś ziarno na innym firmware'ie albo zrotowałeś je po aktualizacji, niemal na pewno jesteś bezpieczny. Jeśli wygenerowałeś je na tej wersji i nigdy nie przesunąłeś środków, twoje klucze były już skompromitowane, po prostu jeszcze o tym nie wiedziałeś.
Cichy detal: część opróżnionych UTXO nie była ruszona od 2021 roku. Pięć lat pod hasłem «moje klucze, moje monety», a klucze nigdy tak naprawdę nie były twoje.
Problem deterministycznego PRNG w Bitcoinie jest stary i wciąż powraca
Ta klasa błędów ma długą i wstydliwą historię. Android's SecureRandom w 2013 roku pozbawiał ludzi BTC dokładnie w ten sam sposób. Błąd PRNG Debiana w OpenSSL z 2008 roku paraliżował klucze SSH przez dwa lata, zanim ktokolwiek to zauważył. Każde pokolenie od nowa odkrywa, że entropia to jedyna rzecz, której nie można skontrolować, przyglądając się samym wynikom.
Prawidłowo wygenerowana losowa liczba 256-bitowa i deterministyczna liczba 256-bitowa wyglądają na wejrzeniu identycznie. Musisz kontrolować źródło, nie próbkę. Na tym polega cała gra.
Portfele sprzętowe sprzedają założenie, że bezpieczny element zajmuje się tym za ciebie. Gdy firmware omija SE, otrzymujesz wszystkie niedogodności zimnego przechowywania bez żadnych gwarancji. Najgorsze z obu światów.
Samodzielne przechowywanie kontra ETF to nie jest debata, za jaką ludzie ją uważają
To moja opinia i biorę za nią odpowiedzialność: rozmowa o samodzielnym przechowywaniu kontra ETF była ramowana jako kwestia ideologiczna, podczas gdy tak naprawdę jest to pytanie o łańcuch dostaw.
Spotowe ETF na BTC ma jedną powierzchnię ataku, która mnie interesuje: bezpieczeństwo operacyjne powiernika. Ta powierzchnia podlega audytowi regulatorów, można ją ubezpieczyć, a zajmują się nią ludzie, których pełnoetatowym zadaniem jest niepozbycie się monet. Gdy zawiedzie, ktoś wypisuje czek.
Samodzielna opieka ma dłuższy łańcuch: dostawca układów scalonych, pipeline budowania firmware, podpisywanie wydań, łańcuch dostaw, OPSEC użytkownika końcowego, higiena kopii zapasowych. Wystarczy, że jeden ogniw zawiedzie, i nie ma czeku. Exploit na Coldcard to moment Terra dla tej tezy, nie dlatego, że samodzielna opieka jest martwa, lecz dlatego, że maksymalistyczne podejście "po prostu trzymaj własne klucze" musi dojrzeć.
Oba modele niosą realne ryzyko. Udawanie, że jeden z nich jest wolny od ryzyka, doprowadziło do opróżnienia 1196 adresów.
Co faktycznie zmienia się po exploicie na Coldcard
Kilka rzeczy, które moim zdaniem nastąpią (i powinny nastąpić):
- Reprodukowalne buildy firmware staną się wymogiem podstawowym. Jeśli nie możesz odbudować binarki ze źródła i porównać jej bajt po bajcie, ufasz podpisowi, nie kodowi źródłowemu.
- Attestacja entropii po wygenerowaniu. Urządzenie powinno podpisywać dowód, że dany seed pochodzi z SE, a nie z oprogramowania. To nie jest trudne. Coinkite mogłoby to wdrożyć w ciągu kwartału.
- Niezależne kontrole poprawności seeda. Narzędzia firm trzecich, które bez znajomości twojego seeda mogą zweryfikować, czy jego ścieżka derywacji ląduje w rozkładzie spójnym z prawdziwą losowością.
- Produkty ubezpieczeniowe dla samodzielnej opieki. Nie te parodystyczne. Prawdziwy underwriting wymagający potwierdzonego firmware i odnawiający pokrycie wraz z starzeniem się buildów.
Żadna z tych rzeczy nie czyni portfeli sprzętowych przestarzałymi. Czyni je klasy enterprise, za jaką zawsze się podawały.
Niekomfortowa analogia dla reszty z nas
W LCX przeznaczamy nieproporcjonalnie dużo czasu inżynierskiego na rzeczy, które dla użytkowników są niewidoczne: ceremonie kluczy HSM, deterministyczne pipeline buildowania, audyty entropii na każdej ścieżce kodu dotykającej klucza prywatnego. To nudna robota. To też różnica między tytułem w prasie a zwykłym wtorkiem.
Incydent z Coldcard trafia tak samo jak komentarze CEO OpenZeppelin na temat audytów DeFi na początku tego roku. Stos audytowy, który odziedziczyliśmy, był zaprojektowany z myślą o świecie, w którym kod, który wdrażałeś, był kodem, który uruchamiałeś. To nie jest już ten świat, jeśli w ogóle kiedykolwiek nim był.
Cold storage miało być nudną, poprawną odpowiedzią. Okazuje się, że nuda wymaga znacznie więcej rusztowania, niż chcieliśmy przyznać.
Źródła
- The Hacker News: Luka w portfelu sprzętowym Coldcard powiązana z kradzieżą bitcoinów wartą 88 milionów dolarów
- CoinDesk: Jak zimne portfele bitcoinowe straciły 70 milionów dolarów w ataku, który nigdy nie dotknął urządzeń
- TechSpot: Luka w oprogramowaniu Coldcard, hakerzy opróżniają 70 milionów dolarów w bitcoinach