Randstorm / BitcoinJS
Randstorm: webbläsarfel bakom gamla Bitcoin-plånböcker
Vilken programvara som dokumenterats, vilka versioner som är viktiga och hur man lämnar en gammal plånbok utan att ta med dess sårbara nycklar.
Innehållsförteckning
Vad som faktiskt gick fel
Randstorm gäller nyckelgenerering i äldre webbläsarprogramvara. JSBN:s SecureRandom() kunde kombinera en otillräcklig entropikälla med en förutsägbar webbläsar-Math.random(). Unciphered avslöjade problemet den 14 november 2023 och rapporterade sårbara plånböcker skapade 2011–2015. Det är en observerad period, inte en dom över varje plånbok från dessa år.
Namnet SecureRandom är ingen säkerhetsgaranti. I Coinpunks granskade källkod fyller fallbacken en 256-byte pool med Math.random(), blandar in klockan och matar en Arcfour-generator. En stor pool kan inte leverera oförutsägbarhet som dess ingångar saknar. Samma källa innehåller också starkare Web Crypto- och Node.js-vägar: att nå fallbacken är den viktiga skillnaden.
Detta är ett fel i hur en privat nyckel valdes. Det är inte ett brott mot Bitcoins signaturverifiering. Att öppna en gammal backup i en nyare app bevarar dessa nycklar; att flytta medel till självständigt genererade nycklar ändrar vad som auktoriserar spendering.
Plånböcker, versioner och bevisens begränsningar
Läs en biblioteksversion separat från en plånboksversion. För en hostad webbplats är koden som levererades den dag nyckeln skapades viktigare än dagens appversion. Tabellen skiljer på ett dokumenterat incidentfall och källkodsfynd.
| Projekt | Version eller period | Vad detta fastställer |
|---|---|---|
| BitcoinJS / bitcoinjs-lib | 0.1.3 | Nämnd som exempel i avslöjandet. JSBN användes till mars 2014; detta fastställer inte ett komplett påverkat versionsintervall för varje derivat. |
| Blockchain.info Blockchain.com | Historisk webbplånbok; inget numrerat påverkat intervall verifierat | En kundplånbok var startpunkten för Unciphereds undersökning. Detta implicerar inte varje Blockchain.com-plånbok eller den nuvarande appen. |
| bitaddress.org | 2.6.5 · 2.8.0 2013-12-01 · 2014-01-18 | 2.6.5 uppdaterade JSBN till 1.4. 2.8.0 lade till helpool Web Crypto-initialisering och obligatorisk mus-/tangentbordsentropi. Detta är dokumenterade förändringar, inte en bevisad "alla tidigare versioner sårbara / alla senare versioner säkra"-gräns. |
| Coinpunk | 0.2.1 63ca325be538 | Den granskade repository-snapshoten märker sig själv som 0.2.1 och innehåller en Math.random()/Arcfour-fallback bredvid starkare vägar. Detta är ett kodfynd, inte bevis för att varje distribution använde fallbacken. Utvecklingen har upphört. |
Denna översikt täcker de implementeringar som verifierats här; det är inte en uttömmande lista över påverkade plånböcker. En olistad produkt är inte automatiskt opåverkad. Ett gammalt skapelsedatum eller en adress som börjar med 1 räcker inte för att identifiera generatorn.
Förbered destinationen en gång
De tre nedanstående rutterna använder en ny Electrum Desktop-plånbok som destination. Menynamn hänvisar till den engelska 4.8.2 desktopgränssnittet som kontrollerats för denna artikel. Ladda ner den aktuella releasen från den officiella sidan; 4.8.2 är en referens för instruktionerna, inte en permanent minimiversion.
Hårdvaruplånböcker vi rekommenderar som ny destination →
Electrum — officiella nedladdnings- och signaturkontroller ↗
- På en betrodd, uppdaterad dator, ladda ner Electrum för ditt operativsystem. Följ de officiella signaturinstruktionerna och kontrollera oberoende signerarens fingeravtryck före installation.
- Välj File → New/Restore, namnge plånboken randstorm-new, välj sedan Standard wallet → Create a new seed. Anteckna och bekräfta de nya orden på papper och sätt ett lösenord för plånboksfilen. Importera inte den gamla hemligheten.
- Innan insättning, skapa recovery-check med File → New/Restore → Standard wallet → I already have a seed, med endast den NYA pappersbackupen. Jämför den första mottagningsadressen i båda plånböckerna via View → Addresses och fliken Addresses. Behåll båda plånböckerna under denna kontroll.
- I randstorm-new, använd Receive → Request (Onchain om Lightning är aktiverat). Kopiera Bitcoin-adressen. Den plånboksspecifika rutten nedan måste skicka till denna adress, med avgift och full destination kontrollerad före godkännande.
Blockchain.info: använd plånboken som håller de gamla adresserna
Denna rutt är för en historisk Blockchain.info-plånbok som du fortfarande kan nå via Blockchain.com. De nuvarande sändningsinstruktionerna beskriver dagens webbgränssnitt, inte en overifierad 2012-skärm. Ett Trading Account-saldo är en annan produkt.
- Behåll den ursprungliga krypterade backupen och inloggningsuppgifterna. I webbplånboken, kontrollera Settings → Wallets & Addresses → Bitcoin för separat importerade adresser. Matcha dina kända gamla publika adresser med visade innehav; en ny återställningsfras får inte antas täcka importerade nycklar.
- Öppna Send i Wallet-instrumentpanelen, välj Bitcoin och ange den nya Electrum-adressen som extern destination. Börja med ett litet belopp, välj Continue, granska adress, belopp och avgift, sedan Send.
- Vänta på bekräftelse i Electrums History. Skicka sedan återstående spenderbara saldo, med hänsyn till avgiften. Kontrollera varje separat finansierad importerad adress; det lyckade testet tömmer inte den gamla plånboken. Sluta använda alla pensionerade mottagaradresser.
bitaddress.org: överför en pappersplånbok med Sweep
Ett bitaddress-utskrift representerar vanligtvis en enda nyckel, inte en modern återställningsfras. Bevara pappret och eventuell original HTML-fil: dess filnamn eller sidfot kan identifiera releasen. Versionshistoriken hjälper till att rekonstruera setupen; den certifierar inte enskilda nycklar.
- Identifiera den privata nyckeln, inte den publika mottagaradressen. En mainnet WIF börjar vanligtvis med 5, K eller L; en BIP38-krypterad nyckel börjar med 6P. Prefixet är bara en formatindikator. Behåll originalkomprimeringsformen eftersom den bestämmer motsvarande adress.
- För BIP38, dekryptera först lokalt och offline med en verifierad kopia från den officiella bitaddress-repositoryn: Wallet Details → ange den krypterade nyckeln → View Details → ange lösenfrasen → Decrypt BIP38. Jämför den resulterande adressen med pappret innan du går vidare med motsvarande WIF. Ange aldrig nyckeln på en live-webbplats eller generera en ersättningsplånbok med detta gamla verktyg.
- I den NYA Electrum-destinationsplånboken, öppna Wallet → Private keys → Sweep. Ange endast den okrypterade WIF i denna lokala dialog. Kontrollera att destinationen tillhör randstorm-new, granska sedan transaktionen och avgiften innan sändning.
- Sweep överför det spenderbara saldot som kontrolleras av den angivna nyckeln i en transaktion. Det är inte en import och inte den lilla testsekvensen ovan. Upprepa för andra finansierade pappersplånboksnycklar och behåll originalen tills alla förväntade mottagningar bekräftats.
bitaddress.org — officiellt repository och signerade filer ↗
Coinpunk: säkra backupen innan du rör den gamla servern
Coinpunk var självhostad, så det finns ingen universell aktuell inloggningssida eller återställningstjänst. Dessa etiketter kommer från repository-snapshot 63ca325be538, vars package.json anger version 0.2.1. En modifierad distribution kan skilja sig.
- Om din ursprungliga betrodda installation fortfarande fungerar, öppna Backup → Download och behåll flera kopior av den krypterade plånboken. Bevara även inloggningsidentifierare, lösenord och serverbackup. Uppdatera eller installera inte om den enda överlevande instansen först.
- Det historiska formuläret Send Bitcoins innehåller Bitcoin address to send to, Amount och en visad avgift. Använd det endast om den ursprungliga instansen fortfarande fungerar pålitligt och stöder destinationsadressen. Tvinga inte in en bc1-adress i denna gamla programvara; den granskade adressparsen använder Base58Check.
- För en inkompatibel destination eller en offline-server, bevara backupen och återställ dess nycklar lokalt med hjälp som förstår denna Coinpunk-version. Plånboksmodellen lagrar keyPairs, inklusive växlingsnycklar, i en krypterad payload. Detta är inte en Electrum-seed eller en Bitcoin Core wallet.dat; att byta namn på filen kan inte konvertera den.
- När de återställda WIF-nycklarna matchats med de ursprungliga adresserna, använd Electrums Sweep-procedur ovan för varje finansierad nyckel. Kontrollera hela uppsättningen, inklusive växlingsadresser. Behåll den krypterade backupen och dess lösenord tills destinationsmottagningarna stämmer med det förväntade saldot.
Hårdvaruplånböcker vi rekommenderar som ny destination
För denna migration rekommenderar vi Trezor Safe 3 om du föredrar fysiska knappar, eller Trezor Safe 5 om en större pekskärm gör adresskontroller enklare för dig. Båda kan hålla de nya signeringsnycklarna på en separat enhet. Att köpa en fixar inte en gammal nyckel: skapa en helt ny plånbok på enheten.
Amazon-länkarna öppnar en regional produktsökning, inte en verifierad säljarlista. Kontrollera säljaren mot Trezors officiella Amazon-butiker eller auktoriserade återförsäljare. Använd enhetens autentiseringskontroller under installation; använd aldrig en medföljande, förskriven plånboksbackup.
- Börja på trezor.io/start och installera Trezor Suite. Följ enhetsspecifika installations- och autentiseringskontroller, välj Create a new wallet och slutför backupkontrollen på enheten. Behåll backupen offline. Återställ inte den gamla plånboken eller mjukvaruplånbokens seed från exemplet ovan på denna enhet.
- För en vanlig sändning, välj Bitcoin-kontot i Trezor Suite, välj Receive och verifiera hela adressen på den anslutna enheten. Använd denna adress istället för mjukvaruplånboksadressen i Blockchain.com-rutten. Kontrollera den inkommande överföringen och dess bekräftelser i Trezor Suite i stället för i Electrums History.
- För Electrum Sweep-rutten, anslut den nykonfigurerade Trezorn och skapa en Electrum-plånbok med File → New/Restore → Standard wallet → Use a hardware device. Följ Trezors Electrum-guide och använd matchande Bitcoin-konto och adressformat. Verifiera en mottagaradress på Trezorn, använd den sedan som sweep-destination. Ange endast den GAMLA WIF-nyckeln i Sweep; skriv aldrig in Trezor-backuporden i Electrum eller på en webbplats.
Källor och omfattning
Denna fallstudie täcker historiska webbläsarimplementationer och deras olika migrationsvägar. För det bredare sambandet mellan entropi, seedfraser och hårdvaruplånböcker, fortsätt med bakgrundsartikeln.
Bakgrund: hur svaga plånboksfrön uppstår →
- Unciphered — Randstorm-avslöjande, 14 november 2023
- bitaddress.org — signerad versionshistorik
- Coinpunk — granskad RNG och repository-snapshot · package.json · README
- Electrum — återställning, sweeping och integritets-FAQ
- Electrum 4.8.2 — desktop-plånboksguide · Desktop menus
- Blockchain.com — importerade Bitcoin-adresser
- bitaddress.org — BIP38 och Wallet Details-implementation
- Coinpunk — krypterad plånboksmodell och växlingsnycklar · Backup · Send
- Trezor Safe 3
- Trezor Safe 5
- Trezor Suite — trezor.io/start
- Trezor — officiella butiker och auktoriserade återförsäljare
- Trezor — migrera från en annan plånbok
- Trezor Suite — ta emot och verifiera en adress
Kontrollerat den 19 september 2026 mot primär dokumentation och källkod. Inga riktiga medel eller privata nycklar användes vid testning. Tabellen är inte en uttömmande lista eller diagnos av din plånbok.
Vanliga frågor
Identifierar BitcoinJS 0.1.3 min plånboksversion?
Nej. Den identifierar ett biblioteksexempel som nämns i Randstorm-avslöjandet. En plånbok kan paketera eller modifiera det biblioteket utan att exponera dess version för användaren. Den ursprungliga plånboksbyggnaden och webbläsarmiljön måste fortfarande identifieras.
Bevisar bitaddress.org 2.8.0 att min pappersplånbok är säker?
Ändringsloggen dokumenterar starkare entropisamling i 2.8.0. Den certifierar inte hur enskilda nycklar genererades, vilka webbläsarfunktioner som fanns tillgängliga eller om filen modifierades. Artikeln behandlar det därför som en dokumenterad förändring, inte en universell säkerhetsgräns.
Varför använder pappersplånboksrutten Sweep istället för Import?
Import behåller den ursprungliga privata nyckeln i bruk. Sweep skapar en transaktion som överför dess spenderbara medel till den förberedda destinationsplånboken. Den nya plånboken måste ha självständigt genererade nycklar, och destination samt avgift måste kontrolleras före sändning.
Kan Electrum öppna en Coinpunk-backup direkt?
Den granskade Coinpunk-versionen lagrar en krypterad plånbokspayload, inte en Electrum-seed. Bevara backupen, inloggningsidentifieraren och lösenordet. Återställ nycklarna lokalt med versionsspecifik expertis, matcha dem sedan med de ursprungliga adresserna innan du använder sweep-rutten.