Z 1196 adresów Bitcoin odpłynęło łącznie 1082,65 BTC, warte około 70,2 miliona dolarów w chwili zdarzenia. Operacja trwała 41 minut, 30 lipca. Galaxy Research przeanalizowało przebieg transakcji i powiązało go z błędem w firmware portfeli sprzętowych Coldcard, produkowanych przez kanadyjską firmę Coinkite. Analitycy zastrzegli jednak, że sam wzorzec szybkiego przenoszenia środków wskazuje operatora, ale nie dowodzi kradzieży, ponieważ podobnie może wyglądać zaplanowane przeniesienie monet przez ich właściciela. Publicznie nie odtworzono seeda żadnej ofiary i nie dopasowano go do opróżnionego adresu.
Na czym polegał błąd
Problem wynikał z błędu integracyjnego w firmware wydanym w marcu 2021 roku. Podczas generowania seedów Coldcard korzystał z deterministycznego programowego generatora pseudolosowego (PRNG), choć powinien używać sprzętowego generatora liczb losowych (RNG) układu STM32. Analiza Block wskazała na konfigurację produkcyjną, w której biblioteka libngu sprawdzała obecność ustawienia, ale nie to, czy zostało ono włączone. W efekcie kompilacja była powiązana z awaryjnym generatorem Yasmarang używanym przez MicroPython. Generator ten był inicjalizowany między innymi na podstawie identyfikatora układu i stanu zegara, a po uruchomieniu nie pobierał nowej entropii.
Według szacunków Coinkite efektywna entropia wynosiła około 40 bitów w modelu Mk3 oraz około 72 bitów w modelach Mk4, Mk5 i Q. Dla porównania, 12 słów w standardzie BIP-39 odpowiada 128 bitom. Możliwość odtworzenia kandydatów zależała od dostępnych informacji o urządzeniu, czasie uruchomienia, wcześniejszych wywołaniach generatora i kosztu sprawdzania adresów. Block nie opublikował praktycznego benchmarku, a wyższa z podanych wartości nie jest równoznaczna z 73 bitami bezpieczeństwa kryptograficznego.
Aktualizacja nie naprawia istniejącego seeda
Coinkite wydało 31 lipca awaryjne aktualizacje firmware dla wszystkich objętych problemem modeli i ścieżek wydań. Samo zainstalowanie poprawki nie naprawia seeda utworzonego na podatnej wersji. Firma zaleca użytkownikom, których seedy mogły być narażone, wygenerowanie nowego seeda na poprawionym firmware i przeniesienie środków. Przywrócenie starego seeda w zaktualizowanym Coldcardzie albo w innym portfelu przenosi problem dalej.
O tym, czy seed jest narażony, decyduje wersja firmware użyta podczas jego tworzenia, a nie wersja zainstalowana obecnie. Coinkite ocenia, że seed utworzony z użyciem co najmniej 50 uczciwych, niezależnych i prywatnych rzutów kośćmi nie jest zagrożony tym konkretnym błędem. Jeśli liczba rzutów lub ich prywatność jest niepewna, producent zaleca migrację. Silne, unikalne hasło BIP-39 tworzy oddzielny portfel, do którego same słowa seeda nie dają dostępu, ale również w takim przypadku firma rekomenduje wymianę seeda. Multisig pomaga tylko wtedy, gdy próg podpisów nie opiera się wyłącznie na urządzeniach objętych błędem. Produkty TAPSIGNER, OPENDIME i SATSCARD korzystają z innych baz kodu i nie są objęte tym problemem.