Randstorm / BitcoinJS

Randstorm: luka w przeglądarce stojąca za starymi portfelami Bitcoin

Które oprogramowanie jest udokumentowane, które wersje mają znaczenie i jak opuścić stary portfel, nie przenosząc ze sobą jego podatnych kluczy.

Ostatnia aktualizacja 18.09.2026

Co faktycznie poszło nie tak

Randstorm dotyczy generowania kluczy w starszym oprogramowaniu przeglądarkowym. SecureRandom() z JSBN mogło łączyć niewystarczające źródło entropii z przewidywalnym Math.random() przeglądarki. Unciphered ujawnił problem 14 listopada 2023 i zgłosił podatne portfele utworzone w latach 2011–2015. To jest okres obserwowany, a nie wyrok dotyczący każdego portfela z tych lat.

Math.random()Wartości początkowe zależne od przeglądarki
SecureRandom()Pula entropii zasila PRNG
Klucz prywatnyPoprawny format, potencjalnie przewidywalne pochodzenie

Nazwa SecureRandom nie jest gwarancją bezpieczeństwa. W źródle Coinpunk poddanym inspekcji, zapasowy mechanizm wypełnia 256-bajtową pulę używając Math.random(), miesza ją z zegarem i zasila generator Arcfour. Duża pula nie może dostarczyć nieprzewidywalności, której brakuje jej wejściom. To samo źródło zawiera też silniejsze ścieżki Web Crypto i Node.js: ważne jest dotarcie do zapasowego mechanizmu.

To jest wada w sposobie wyboru klucza prywatnego. Nie jest to złamanie weryfikacji podpisu Bitcoina. Otwarcie starej kopii zapasowej w nowszej aplikacji zachowuje te klucze; przeniesienie środków na niezależnie wygenerowane klucze zmienia uprawnienia do wydawania.

Portfele, wersje i ograniczenia dowodów

Wersję biblioteki czytaj oddzielnie od wersji portfela. Dla hostowanej strony internetowej ważniejszy jest kod serwowany w dniu tworzenia klucza niż dzisiejsza wersja aplikacji. Tabela rozróżnia udokumentowany incydent od ustaleń w kodzie źródłowym.

Dowody sprawdzone 19 września 2026
ProjektWersja lub okresCo to ustala
BitcoinJS / bitcoinjs-lib0.1.3Wymieniony jako przykład w ujawnieniu. JSBN był używany do marca 2014; nie ustala to pełnego zakresu wersji dotkniętych problemem dla wszystkich pochodnych.
Blockchain.info
Blockchain.com
Historyczny portfel webowy; brak zweryfikowanego zakresu wersji dotkniętychPortfel klienta był punktem wyjścia śledztwa Unciphered. Nie obciąża to każdego portfela Blockchain.com ani obecnej aplikacji.
bitaddress.org2.6.5 · 2.8.0
2013-12-01 · 2014-01-18
Wersja 2.6.5 zaktualizowała JSBN do 1.4. Wersja 2.8.0 dodała inicjalizację Web Crypto dla całej puli i obowiązkową entropię z myszy/klawiatury. To są udokumentowane zmiany, a nie udowodniona granica „wszystkie wcześniejsze wersje podatne / wszystkie późniejsze bezpieczne”.
Coinpunk0.2.1
63ca325be538
Inspekcja migawki repozytorium oznacza ją jako 0.2.1 i zawiera zapasowy mechanizm Math.random()/Arcfour obok silniejszych ścieżek. To ustalenie w kodzie, a nie dowód, że każde wdrożenie używało zapasowego mechanizmu. Rozwój został zatrzymany.

Ten przegląd obejmuje implementacje zweryfikowane tutaj; nie jest to wyczerpująca lista dotkniętych portfeli. Produkt nieujęty na liście nie jest automatycznie bezpieczny. Stara data utworzenia lub adres zaczynający się od 1 nie wystarczą do identyfikacji generatora.

Przygotuj miejsce docelowe raz

Poniższe trzy ścieżki używają nowego portfela Electrum Desktop jako miejsca docelowego. Nazwy menu odnoszą się do angielskiego interfejsu desktopowego 4.8.2 sprawdzonego dla tego artykułu. Pobierz aktualne wydanie z oficjalnej strony; 4.8.2 to odniesienie dla instrukcji, a nie stała minimalna wersja.

Portfele sprzętowe, które polecamy jako nowe miejsce docelowe →

Electrum — oficjalne pobieranie i sprawdzanie podpisów ↗

  1. Na zaufanym, zaktualizowanym komputerze pobierz Electrum dla swojego systemu operacyjnego. Postępuj zgodnie z oficjalnymi instrukcjami podpisu i niezależnie sprawdź odcisk palca podpisującego przed instalacją.
  2. Wybierz File → New/Restore, nazwij portfel randstorm-new, następnie wybierz Standard wallet → Create a new seed. Zapisz i potwierdź nowe słowa na papierze oraz ustaw hasło do pliku portfela. Nie importuj starego sekretu.
  3. Przed wpłatą utwórz recovery-check przez File → New/Restore → Standard wallet → I already have a seed, używając tylko NOWEJ papierowej kopii zapasowej. Porównaj pierwszy adres odbiorczy w obu portfelach przez View → Addresses i zakładkę Addresses. Zachowaj oba portfele podczas tej kontroli.
  4. W randstorm-new użyj Receive → Request (Onchain jeśli Lightning jest włączony). Skopiuj adres Bitcoin. Poniższa ścieżka specyficzna dla portfela musi wysłać na ten adres, z opłatą i pełnym miejscem docelowym sprawdzonym przed zatwierdzeniem.

Blockchain.info: użyj portfela, który przechowuje stare adresy

Ta ścieżka dotyczy historycznego portfela Blockchain.info, do którego nadal masz dostęp przez Blockchain.com. Obecne instrukcje wysyłki opisują dzisiejszy interfejs webowy, a nie niezweryfikowany ekran z 2012. Saldo Trading Account to inny produkt.

  1. Zachowaj oryginalną zaszyfrowaną kopię zapasową i dane logowania. W portfelu webowym sprawdź Settings → Wallets & Addresses → Bitcoin pod kątem osobno importowanych adresów. Dopasuj znane stare adresy publiczne do wyświetlonych środków; nowa fraza odzyskiwania nie musi obejmować importowanych kluczy.
  2. Otwórz Send w panelu portfela, wybierz Bitcoin i wpisz nowy adres Electrum jako zewnętrzne miejsce docelowe. Zacznij od małej kwoty, wybierz Continue, sprawdź adres, kwotę i opłatę, następnie Send.
  3. Poczekaj na potwierdzenie w History Electrum. Następnie wyślij pozostałe dostępne saldo, uwzględniając opłatę. Sprawdź każdy osobno zasilany importowany adres; udany test sam nie opróżnia starego portfela. Przestań używać wszystkich wycofanych adresów odbiorczych.

Blockchain.com: aktualne instrukcje wysyłki ↗

bitaddress.org: przekaż portfel papierowy przez Sweep

Wydruk bitaddress zwykle reprezentuje pojedynczy klucz, a nie nowoczesną frazę odzyskiwania. Zachowaj papier i oryginalny plik HTML: jego nazwa pliku lub stopka mogą identyfikować wersję. Historia wersji pomaga odtworzyć konfigurację; nie certyfikuje pojedynczego klucza.

  1. Zidentyfikuj klucz prywatny, nie publiczny adres odbiorczy. WIF mainnet zwykle zaczyna się od 5, K lub L; klucz zaszyfrowany BIP38 zaczyna się od 6P. Prefiks to tylko wskazówka formatu. Zachowaj oryginalną formę kompresji, ponieważ determinuje odpowiadający adres.
  2. Dla BIP38 najpierw odszyfruj lokalnie i offline, używając zweryfikowanej kopii z oficjalnego repozytorium bitaddress: Wallet Details → wpisz zaszyfrowany klucz → View Details → wpisz hasło → Decrypt BIP38. Porównaj powstały adres z papierowym przed użyciem pasującego WIF. Nigdy nie wpisuj klucza na działającej stronie ani nie generuj zastępczego portfela tym starym narzędziem.
  3. W NOWYM portfelu docelowym Electrum otwórz Wallet → Private keys → Sweep. Wprowadź niezaszyfrowany WIF tylko w tym lokalnym oknie dialogowym. Sprawdź, czy miejsce docelowe należy do randstorm-new, następnie przejrzyj transakcję i opłatę przed nadaniem.
  4. Sweep przenosi dostępne saldo kontrolowane przez podany klucz w jednej transakcji. To nie jest import i nie jest to mała sekwencja testowa powyżej. Powtórz dla innych zasilanych kluczy portfela papierowego i zachowaj oryginały do potwierdzenia wszystkich oczekiwanych wpływów.

bitaddress.org — oficjalne repozytorium i podpisane pliki ↗

Coinpunk: zabezpiecz kopię zapasową przed dotknięciem starego serwera

Coinpunk był samodzielnie hostowany, więc nie ma uniwersalnej obecnej strony logowania ani usługi odzyskiwania. Te etykiety pochodzą z migawki repozytorium 63ca325be538, której package.json deklaruje wersję 0.2.1. Zmodyfikowane wdrożenie może się różnić.

  1. Jeśli oryginalna zaufana instalacja nadal działa, otwórz Backup → Download i zachowaj wiele kopii zaszyfrowanego portfela. Zachowaj też identyfikator logowania, hasło i kopię zapasową serwera. Nie aktualizuj ani nie reinstaluj najpierw jedynej działającej instancji.
  2. Historyczny formularz Send Bitcoins zawiera Bitcoin address to send to, Amount i wyświetlaną opłatę. Używaj go tylko, jeśli oryginalna instancja działa niezawodnie i obsługuje adres docelowy. Nie wymuszaj adresu bc1 w tym starym oprogramowaniu; analizator adresów używany w inspekcji korzysta z Base58Check.
  3. Dla niekompatybilnego miejsca docelowego lub serwera offline zachowaj kopię zapasową i odzyskaj klucze lokalnie z pomocą rozumiejącą tę wersję Coinpunk. Model portfela przechowuje keyPairs, w tym klucze zmiany, wewnątrz zaszyfrowanego ładunku. To nie jest Electrum seed ani Bitcoin Core wallet.dat; zmiana nazwy pliku nie konwertuje go.
  4. Gdy odzyskane klucze WIF zostaną dopasowane do oryginalnych adresów, użyj powyższej procedury Sweep Electrum dla każdego zasilanego klucza. Sprawdź cały zestaw, w tym adresy zmiany. Zachowaj zaszyfrowaną kopię zapasową i jej hasło, aż wpływy na miejsce docelowe zgadzają się z oczekiwanym saldem.

Portfele sprzętowe, które polecamy jako nowe miejsce docelowe

Do tej migracji polecamy Trezor Safe 3, jeśli wolisz fizyczne przyciski, lub Trezor Safe 5, jeśli większy ekran dotykowy ułatwia sprawdzanie adresów. Oba mogą przechowywać nowe klucze podpisujące na osobnym urządzeniu. Zakup nie naprawia starego klucza: utwórz całkowicie nowy portfel na urządzeniu.

Jako partner Amazon zarabiam na kwalifikowanych zakupach.

Trezor Safe 3

Dwa przyciski i monochromatyczny ekran: nasz wybór dla czytelników, którzy chcą świadomego potwierdzenia przyciskiem. Zweryfikuj pełny adres odbiorczy na urządzeniu przed przeniesieniem starego salda.

Zobacz Trezor Safe 3 na Amazon

Trezor Safe 5

Kolorowy ekran dotykowy 1,54 cala z haptycznym sprzężeniem zwrotnym: nasz wybór, gdy rozmiar ekranu i sterowanie dotykowe są najważniejsze. Bardziej komfortowy wyświetlacz nie czyni ponownie używanych lub ujawnionych kluczy bezpiecznymi.

Zobacz Trezor Safe 5 na Amazon

Linki do Amazon otwierają regionalne wyszukiwanie produktów, a nie zweryfikowaną listę sprzedawców. Sprawdź sprzedawcę względem oficjalnych sklepów Trezor na Amazon lub autoryzowanych resellerów. Używaj kontroli uwierzytelniania urządzenia podczas konfiguracji; nigdy nie używaj dostarczonej, wstępnie zapisanej kopii zapasowej portfela.

  1. Rozpocznij na trezor.io/start i zainstaluj Trezor Suite. Postępuj zgodnie z konfiguracją specyficzną dla urządzenia i kontrolami uwierzytelniania, wybierz Create a new wallet i zakończ kontrolę kopii zapasowej na urządzeniu. Zachowaj kopię zapasową offline. Nie przywracaj starego portfela ani seed portfela programowego z powyższego przykładu na tym urządzeniu.
  2. Dla normalnej wysyłki wybierz konto Bitcoin w Trezor Suite, wybierz Receive i zweryfikuj pełny adres na podłączonym urządzeniu. Użyj tego adresu zamiast adresu portfela programowego w ścieżce Blockchain.com. Sprawdź otrzymany przelew i jego potwierdzenia w Trezor Suite zamiast w History w Electrum.
  3. Dla ścieżki Electrum Sweep podłącz nowo skonfigurowany Trezor i utwórz portfel Electrum przez File → New/Restore → Standard wallet → Use a hardware device. Postępuj zgodnie z przewodnikiem Electrum Trezor i użyj pasującego konta Bitcoin oraz typu adresu. Zweryfikuj adres odbiorczy na Trezor, a następnie użyj go jako miejsca docelowego sweep. Wprowadź tylko STARY klucz WIF w Sweep; nigdy nie wpisuj słów kopii zapasowej Trezor do Electrum ani na stronę internetową.

Trezor: podłącz urządzenie do Electrum ↗

Źródła i zakres

To studium przypadku obejmuje historyczne implementacje przeglądarkowe i ich różne ścieżki migracji. Dla szerszego związku między entropią, frazami seed i portfelami sprzętowymi, kontynuuj z artykułem wprowadzającym.

Tło: jak powstają słabe seedy portfela →

Sprawdzone 19 września 2026 na podstawie dokumentacji podstawowej i kodu źródłowego. W testach nie użyto prawdziwych środków ani kluczy prywatnych. Tabela nie jest wyczerpującą listą ani diagnozą twojego portfela.

FAQ

Czy BitcoinJS 0.1.3 identyfikuje wersję mojego portfela?

Nie. Identyfikuje przykład biblioteki cytowany w ujawnieniu Randstorm. Portfel może dołączać lub modyfikować tę bibliotekę bez ujawniania jej wersji użytkownikowi. Oryginalna budowa portfela i środowisko przeglądarki nadal muszą zostać zidentyfikowane.

Czy bitaddress.org 2.8.0 udowadnia, że mój portfel papierowy jest bezpieczny?

Dziennik zmian dokumentuje silniejsze zbieranie entropii w 2.8.0. Nie certyfikuje, jak wygenerowano pojedynczy klucz, jakie funkcje przeglądarki były dostępne ani czy plik był modyfikowany. Artykuł traktuje to jako udokumentowaną zmianę, a nie uniwersalną granicę bezpieczeństwa.

Dlaczego ścieżka portfela papierowego używa Sweep zamiast Import?

Import utrzymuje oryginalny klucz prywatny w użyciu. Sweep tworzy transakcję, która przenosi dostępne środki na przygotowany portfel docelowy. Nowy portfel musi mieć niezależnie wygenerowane klucze, a miejsce docelowe i opłata muszą być sprawdzone przed nadaniem.

Czy Electrum może otworzyć kopię zapasową Coinpunk bezpośrednio?

Inspekcjonowana wersja Coinpunk przechowuje zaszyfrowany ładunek portfela, a nie seed Electrum. Zachowaj kopię zapasową, identyfikator logowania i hasło. Odzyskaj klucze lokalnie z wiedzą specyficzną dla wersji, a następnie dopasuj je do oryginalnych adresów przed użyciem ścieżki sweep.