Randstorm / BitcoinJS
Randstorm: la falla del browser dietro ai vecchi wallet Bitcoin
Quale software è documentato, quali versioni contano e come lasciare un vecchio wallet senza portarsi dietro le sue chiavi vulnerabili.
Indice
Cosa è effettivamente andato storto
Randstorm riguarda la generazione delle chiavi in software browser più vecchi. SecureRandom() di JSBN poteva combinare una fonte di entropia inadeguata con un prevedibile Math.random() del browser. Unciphered ha divulgato il problema il 14 novembre 2023 e ha segnalato wallet vulnerabili creati tra il 2011 e il 2015. Questo è un periodo osservato, non un verdetto su ogni wallet di quegli anni.
Il nome SecureRandom non è una garanzia di sicurezza. Nel codice ispezionato di Coinpunk, il fallback riempie un pool di 256 byte usando Math.random(), mescola l’orologio e alimenta un generatore Arcfour. Un pool grande non può fornire imprevedibilità che manca nei suoi input. Lo stesso codice contiene anche percorsi più robusti Web Crypto e Node.js: raggiungere il fallback è la distinzione importante.
Questo è un difetto nel modo in cui è stata scelta una chiave privata. Non è una violazione della verifica della firma di Bitcoin. Aprire un vecchio backup in un’app più recente preserva quelle chiavi; spostare fondi su chiavi generate indipendentemente cambia chi è autorizzato a spendere.
Wallet, versioni e limiti delle prove
Leggi una versione di libreria separatamente da una versione di wallet. Per un sito web ospitato, il codice servito il giorno della creazione della chiave conta più della versione dell’app odierna. La tabella distingue un incidente documentato da riscontri nel codice sorgente.
| Progetto | Versione o periodo | Cosa stabilisce |
|---|---|---|
| BitcoinJS / bitcoinjs-lib | 0.1.3 | Citato come esempio nella divulgazione. JSBN è stato usato fino a marzo 2014; questo non stabilisce un intervallo completo di versioni affette per ogni derivato. |
| Blockchain.info Blockchain.com | Wallet web storico; nessun intervallo numerato di versioni affette verificato | Un wallet cliente è stato il punto di partenza dell’indagine di Unciphered. Questo non implica ogni wallet Blockchain.com o l’app attuale. |
| bitaddress.org | 2.6.5 · 2.8.0 2013-12-01 · 2014-01-18 | 2.6.5 ha aggiornato JSBN alla 1.4. 2.8.0 ha aggiunto inizializzazione Web Crypto su tutto il pool e entropia obbligatoria da mouse/tastiera. Sono cambiamenti documentati, non un confine provato “tutte le versioni precedenti vulnerabili / tutte le successive sicure”. |
| Coinpunk | 0.2.1 63ca325be538 | Lo snapshot del repository ispezionato si etichetta 0.2.1 e contiene un fallback Math.random()/Arcfour insieme a percorsi più robusti. È un riscontro nel codice, non la prova che ogni distribuzione abbia usato il fallback. Lo sviluppo è fermo. |
Questa panoramica copre le implementazioni verificate qui; non è una lista esaustiva di wallet affetti. Un prodotto non elencato non è automaticamente non affetto. Una data di creazione vecchia o un indirizzo che inizia con 1 non bastano a identificare il generatore.
Prepara la destinazione una volta sola
Le tre rotte qui sotto usano un nuovo wallet Electrum Desktop come destinazione. I nomi dei menu si riferiscono all’interfaccia desktop inglese 4.8.2 verificata per questo articolo. Scarica la versione corrente dal sito ufficiale; 4.8.2 è un riferimento per le istruzioni, non una versione minima permanente.
Hardware wallet che raccomandiamo come nuova destinazione →
Electrum — controlli ufficiali di download e firma ↗
- Su un computer affidabile e aggiornato, scarica Electrum per il tuo sistema operativo. Segui le istruzioni ufficiali per la firma e verifica indipendentemente l’impronta del firmatario prima dell’installazione.
- Scegli File → New/Restore, nomina il wallet randstorm-new, poi seleziona Standard wallet → Create a new seed. Annota e conferma le nuove parole su carta e imposta una password per il file wallet. Non importare il vecchio segreto.
- Prima di depositare, crea recovery-check con File → New/Restore → Standard wallet → I already have a seed, usando solo il NUOVO backup cartaceo. Confronta il primo indirizzo ricevente in entrambi i wallet tramite View → Addresses e la scheda Addresses. Tieni entrambi i wallet durante questo controllo.
- In randstorm-new, usa Receive → Request (Onchain se Lightning è abilitato). Copia l’indirizzo Bitcoin. La rotta specifica del wallet qui sotto deve inviare a questo indirizzo, con la commissione e la destinazione completa verificate prima dell’approvazione.
Blockchain.info: usa il wallet che contiene i vecchi indirizzi
Questa rotta è per un wallet storico Blockchain.info a cui puoi ancora accedere tramite Blockchain.com. Le istruzioni di invio attuali descrivono l’interfaccia web odierna, non uno schermo 2012 non verificato. Un saldo Trading Account è un prodotto diverso.
- Conserva il backup originale criptato e i dati di login. Nel wallet web, controlla Settings → Wallets & Addresses → Bitcoin per indirizzi importati separatamente. Confronta i tuoi vecchi indirizzi pubblici noti con i fondi mostrati; non si deve presumere che una nuova frase di recupero copra chiavi importate.
- Apri Send nella dashboard Wallet, seleziona Bitcoin e inserisci il nuovo indirizzo Electrum come destinazione esterna. Parti con una piccola somma, scegli Continue, rivedi indirizzo, importo e commissione, poi Send.
- Attendi la conferma nella History di Electrum. Poi invia il saldo spendibile rimanente, tenendo conto della commissione. Controlla ogni indirizzo importato finanziato separatamente; il test riuscito da solo non svuota il vecchio wallet. Smetti di usare tutti gli indirizzi riceventi dismessi.
bitaddress.org: trasferisci un paper wallet con Sweep
Una stampa bitaddress rappresenta di solito una singola chiave, non una moderna frase di recupero. Conserva la carta e qualsiasi file HTML originale: il nome file o il piè di pagina possono identificare la versione. La storia delle versioni aiuta a ricostruire la configurazione; non certifica una singola chiave.
- Identifica la chiave privata, non l’indirizzo pubblico ricevente. Un WIF mainnet inizia comunemente con 5, K o L; una chiave criptata BIP38 inizia con 6P. Il prefisso è solo un suggerimento di formato. Mantieni la forma di compressione originale perché determina l’indirizzo corrispondente.
- Per BIP38, prima decrittografa localmente e offline usando una copia verificata dal repository ufficiale bitaddress: Wallet Details → inserisci la chiave criptata → View Details → inserisci la passphrase → Decrypt BIP38. Confronta l’indirizzo risultante con quello sulla carta prima di procedere con il WIF corrispondente. Non inserire mai la chiave su un sito web attivo o genera un wallet sostitutivo con questo vecchio strumento.
- Nel wallet di destinazione NUOVO Electrum, apri Wallet → Private keys → Sweep. Inserisci la sola WIF non criptata in questa finestra locale. Verifica che la destinazione appartenga a randstorm-new, poi rivedi la transazione e la commissione prima di trasmettere.
- Sweep trasferisce il saldo spendibile controllato dalla chiave fornita in una sola transazione. Non è un’importazione e non è la sequenza di piccolo test sopra. Ripeti per altre chiavi di paper wallet finanziate e conserva gli originali finché tutte le ricevute attese sono confermate.
Coinpunk: metti al sicuro il backup prima di toccare il vecchio server
Coinpunk era self-hosted, quindi non esiste un sito di login universale o servizio di recupero attuale. Queste etichette provengono dallo snapshot del repository 63ca325be538, il cui package.json dichiara versione 0.2.1. Una distribuzione modificata può differire.
- Se la tua installazione originale affidabile funziona ancora, apri Backup → Download e conserva più copie del wallet criptato. Conserva anche l’identificatore di login, la password e il backup del server. Non aggiornare o reinstallare prima l’unica istanza sopravvissuta.
- Il modulo storico Send Bitcoins contiene Bitcoin address to send to, Amount e una commissione mostrata. Usalo solo se l’istanza originale funziona ancora affidabilmente e supporta l’indirizzo di destinazione. Non forzare un indirizzo bc1 in questo vecchio software; il parser di indirizzi ispezionato usa Base58Check.
- Per una destinazione incompatibile o un server offline, conserva il backup e recupera le sue chiavi localmente con aiuto che conosca questa versione di Coinpunk. Il modello wallet memorizza keyPairs, incluse le chiavi di cambio, dentro un payload criptato. Non è un seed Electrum né un wallet.dat di Bitcoin Core; rinominare il file non lo converte.
- Una volta che le chiavi WIF recuperate sono state abbinate agli indirizzi originali, usa la procedura Sweep di Electrum sopra per ogni chiave finanziata. Controlla l’insieme completo, inclusi gli indirizzi di cambio. Conserva il backup criptato e la sua password finché le ricevute di destinazione non riconciliano il saldo atteso.
Hardware wallet che raccomandiamo come nuova destinazione
Per questa migrazione, raccomandiamo Trezor Safe 3 se preferisci pulsanti fisici, o Trezor Safe 5 se uno schermo touchscreen più grande rende più facili i controlli degli indirizzi. Entrambi possono mantenere le nuove chiavi di firma su un dispositivo separato. Acquistare uno non risolve una vecchia chiave: crea un wallet completamente nuovo sul dispositivo.
I link Amazon aprono una ricerca regionale di prodotto, non una lista di venditori verificati. Controlla il venditore rispetto agli store ufficiali Amazon di Trezor o rivenditori autorizzati. Usa i controlli di autenticazione del dispositivo durante la configurazione; non usare mai un backup wallet precompilato fornito.
- Inizia su trezor.io/start e installa Trezor Suite. Segui la configurazione specifica del dispositivo e i controlli di autenticazione, scegli Create a new wallet e completa il controllo del backup sul dispositivo. Conserva il backup offline. Non ripristinare il vecchio wallet o il seed del wallet software dall’esempio sopra su questo dispositivo.
- Per un invio normale, seleziona l’account Bitcoin in Trezor Suite, scegli Receive e verifica l’indirizzo completo sul dispositivo connesso. Usa questo indirizzo invece di quello del wallet software nella rotta Blockchain.com. Controlla il trasferimento ricevuto e le relative conferme in Trezor Suite anziché in History di Electrum.
- Per la rotta Electrum Sweep, collega il Trezor appena configurato e crea un wallet Electrum con File → New/Restore → Standard wallet → Use a hardware device. Segui la guida Electrum di Trezor e usa l’account Bitcoin e il tipo di indirizzo corrispondenti. Verifica un indirizzo ricevente sul Trezor, poi usalo come destinazione sweep. Inserisci solo la chiave WIF VECCHIA in Sweep; non digitare mai le parole di backup Trezor in Electrum o in un sito web.
Fonti e ambito
Questo case study copre implementazioni browser storiche e le loro diverse rotte di migrazione. Per il rapporto più ampio tra entropia, frasi seed e hardware wallet, continua con l’articolo di background.
Background: come nascono seed wallet deboli →
- Unciphered — divulgazione Randstorm, 14 novembre 2023
- bitaddress.org — storia delle versioni firmata
- Coinpunk — RNG ispezionato e snapshot repository · package.json · README
- Electrum — FAQ su recupero, sweeping e privacy
- Electrum 4.8.2 — wizard wallet desktop · Desktop menus
- Blockchain.com — indirizzi Bitcoin importati
- bitaddress.org — implementazione BIP38 e Wallet Details
- Coinpunk — modello wallet criptato e chiavi di cambio · Backup · Send
- Trezor Safe 3
- Trezor Safe 5
- Trezor Suite — trezor.io/start
- Trezor — store ufficiali e rivenditori autorizzati
- Trezor — migrazione da un altro wallet
- Trezor Suite — ricevere e verificare un indirizzo
Verificato il 19/09/2026 contro documentazione primaria e codice sorgente. Non sono stati usati fondi reali o chiavi private nei test. La tabella non è una lista esaustiva né una diagnosi del tuo wallet.
FAQ
BitcoinJS 0.1.3 identifica la versione del mio wallet?
No. Identifica un esempio di libreria citato nella divulgazione Randstorm. Un wallet può includere o modificare quella libreria senza esporre la sua versione all’utente. Serve ancora identificare la build originale del wallet e l’ambiente browser.
bitaddress.org 2.8.0 dimostra che il mio paper wallet è sicuro?
Il changelog documenta una raccolta di entropia più robusta in 2.8.0. Non certifica come è stata generata una singola chiave, quali funzionalità browser fossero disponibili o se il file sia stato modificato. L’articolo quindi lo tratta come un cambiamento documentato, non un confine universale di sicurezza.
Perché la rotta paper-wallet usa Sweep invece di Import?
Import mantiene in uso la chiave privata originale. Sweep crea una transazione che trasferisce i fondi spendibili al wallet di destinazione preparato. Il nuovo wallet deve avere chiavi generate indipendentemente, e destinazione e commissione devono essere verificate prima della trasmissione.
Electrum può aprire direttamente un backup Coinpunk?
La versione Coinpunk ispezionata memorizza un payload wallet criptato, non un seed Electrum. Conserva il backup, l’identificatore di login e la password. Recupera le chiavi localmente con competenze specifiche di versione, poi abbinale agli indirizzi originali prima di usare la rotta sweep.