Randstorm / BitcoinJS
Randstorm: a falha no navegador por trás das carteiras antigas de Bitcoin
Qual software está documentado, quais versões importam e como deixar uma carteira antiga sem carregar suas chaves vulneráveis com você.
Sumário
O que realmente deu errado
Randstorm diz respeito à geração de chaves em softwares de navegador mais antigos. O SecureRandom() do JSBN poderia combinar uma fonte de entropia inadequada com um Math.random() previsível do navegador. A Unciphered divulgou o problema em 14 de novembro de 2023 e relatou carteiras vulneráveis criadas entre 2011 e 2015. Esse é um período observado, não um veredito sobre todas as carteiras desses anos.
O nome SecureRandom não é uma garantia de segurança. No código-fonte inspecionado do Coinpunk, o fallback preenche um pool de 256 bytes usando Math.random(), mistura o relógio e alimenta um gerador Arcfour. Um pool grande não pode fornecer imprevisibilidade que seus insumos não têm. O mesmo código também contém caminhos mais fortes com Web Crypto e Node.js: alcançar o fallback é a distinção importante.
Este é um defeito na forma como uma chave privada foi escolhida. Não é uma quebra da verificação de assinatura do Bitcoin. Abrir um backup antigo em um app mais novo preserva essas chaves; mover fundos para chaves geradas independentemente muda o que autoriza o gasto.
Carteiras, versões e os limites das evidências
Leia a versão da biblioteca separadamente da versão da carteira. Para um site hospedado, o código servido no dia da criação da chave importa mais que a versão atual do app. A tabela distingue um incidente documentado de achados no código-fonte.
| Projeto | Versão ou período | O que isso estabelece |
|---|---|---|
| BitcoinJS / bitcoinjs-lib | 0.1.3 | Nomeado como exemplo na divulgação. JSBN foi usado até março de 2014; isso não estabelece um intervalo completo de versões afetadas para todos os derivados. |
| Blockchain.info Blockchain.com | Carteira web histórica; nenhum intervalo numerado de versões afetadas verificado | Uma carteira de cliente foi o ponto de partida da investigação da Unciphered. Isso não implica todas as carteiras Blockchain.com ou o app atual. |
| bitaddress.org | 2.6.5 · 2.8.0 2013-12-01 · 2014-01-18 | 2.6.5 atualizou JSBN para 1.4. 2.8.0 adicionou inicialização Web Crypto para o pool inteiro e entropia obrigatória de mouse/teclado. São mudanças documentadas, não uma fronteira comprovada “todas as versões anteriores vulneráveis / todas as posteriores seguras”. |
| Coinpunk | 0.2.1 63ca325be538 | O snapshot do repositório inspecionado se rotula 0.2.1 e contém um fallback Math.random()/Arcfour junto com caminhos mais fortes. Isso é um achado de código, não prova que toda implantação usou o fallback. O desenvolvimento foi interrompido. |
Esta visão geral cobre as implementações verificadas aqui; não é uma lista exaustiva de carteiras afetadas. Um produto não listado não é automaticamente não afetado. Uma data antiga de criação ou um endereço começando com 1 não são suficientes para identificar o gerador.
Prepare o destino uma vez
As três rotas abaixo usam uma nova carteira Electrum Desktop como destino. Os nomes dos menus referem-se à interface desktop 4.8.2 em inglês verificada para este artigo. Baixe a versão atual do site oficial; 4.8.2 é uma referência para as instruções, não uma versão mínima permanente.
Carteiras de hardware que recomendamos como novo destino →
Electrum — verificações oficiais de download e assinatura ↗
- Em um computador confiável e atualizado, baixe o Electrum para seu sistema operacional. Siga as instruções oficiais de assinatura e verifique independentemente a impressão digital do assinante antes da instalação.
- Escolha File → New/Restore, nomeie a carteira randstorm-new, depois selecione Standard wallet → Create a new seed. Anote e confirme as novas palavras no papel e defina uma senha para o arquivo da carteira. Não importe o segredo antigo.
- Antes de depositar, crie recovery-check com File → New/Restore → Standard wallet → I already have a seed, usando apenas o backup NOVO em papel. Compare o primeiro endereço de recebimento em ambas as carteiras via View → Addresses e a aba Addresses. Mantenha ambas as carteiras durante essa verificação.
- Em randstorm-new, use Receive → Request (Onchain se o Lightning estiver ativado). Copie o endereço Bitcoin. A rota específica da carteira abaixo deve enviar para esse endereço, com a taxa e o destino completos verificados antes da aprovação.
Blockchain.info: use a carteira que contém os endereços antigos
Esta rota é para uma carteira histórica Blockchain.info que você ainda pode acessar via Blockchain.com. As instruções atuais de envio descrevem a interface web de hoje, não uma tela não verificada de 2012. O saldo da Trading Account é um produto diferente.
- Mantenha o backup criptografado original e os registros de login. Na carteira web, verifique Settings → Wallets & Addresses → Bitcoin para endereços importados separadamente. Combine seus endereços públicos antigos conhecidos com os saldos exibidos; uma nova frase de recuperação não deve ser assumida como cobrindo chaves importadas.
- Abra Send no painel da carteira, selecione Bitcoin e insira o novo endereço Electrum como destino externo. Comece com um valor pequeno, escolha Continue, revise o endereço, valor e taxa, depois Send.
- Espere a confirmação no History do Electrum. Então envie o saldo restante disponível, descontando a taxa. Verifique cada endereço importado financiado separadamente; o teste bem-sucedido sozinho não esvazia a carteira antiga. Pare de usar todos os endereços de recebimento aposentados.
bitaddress.org: transfira uma carteira de papel com Sweep
Uma impressão do bitaddress geralmente representa uma única chave, não uma frase de recuperação moderna. Preserve o papel e qualquer arquivo HTML original: seu nome ou rodapé pode identificar a versão. O histórico de versões ajuda a reconstruir a configuração; não certifica uma chave individual.
- Identifique a chave privada, não o endereço público de recebimento. Um WIF mainnet normalmente começa com 5, K ou L; uma chave criptografada BIP38 começa com 6P. O prefixo é apenas uma dica de formato. Mantenha a forma original de compressão porque ela determina o endereço correspondente.
- Para BIP38, primeiro descriptografe localmente e offline usando uma cópia verificada do repositório oficial do bitaddress: Wallet Details → insira a chave criptografada → View Details → insira a senha → Decrypt BIP38. Compare o endereço resultante com o papel antes de usar o WIF correspondente. Nunca insira a chave em um site ativo ou gere uma carteira substituta com esta ferramenta antiga.
- Na carteira destino NOVA Electrum, abra Wallet → Private keys → Sweep. Insira o WIF não criptografado somente neste diálogo local. Verifique que o destino pertence a randstorm-new, depois revise a transação e a taxa antes de transmitir.
- Sweep transfere o saldo disponível controlado pela chave fornecida em uma única transação. Não é uma importação nem a sequência de teste pequena acima. Repita para outras chaves de carteira de papel financiadas e mantenha os originais até que todos os recebimentos esperados sejam confirmados.
Coinpunk: proteja o backup antes de mexer no servidor antigo
O Coinpunk era auto-hospedado, então não há um site universal atual de login ou serviço de recuperação. Esses rótulos vêm do snapshot do repositório 63ca325be538, cujo package.json declara a versão 0.2.1. Uma implantação modificada pode ser diferente.
- Se sua instalação original confiável ainda funciona, abra Backup → Download e mantenha várias cópias da carteira criptografada. Preserve também o identificador de login, senha e backup do servidor. Não atualize nem reinstale a única instância sobrevivente primeiro.
- O formulário histórico Send Bitcoins contém Bitcoin address to send to, Amount e uma taxa exibida. Use-o apenas se a instância original ainda funcionar de forma confiável e suportar o endereço de destino. Não force um endereço bc1 neste software antigo; o analisador de endereços inspecionado usa Base58Check.
- Para um destino incompatível ou um servidor offline, preserve o backup e recupere suas chaves localmente com ajuda que entenda esta versão do Coinpunk. O modelo da carteira armazena keyPairs, incluindo chaves de troco, dentro de um payload criptografado. Isso não é uma seed Electrum nem um wallet.dat do Bitcoin Core; renomear o arquivo não pode convertê-lo.
- Uma vez que as chaves WIF recuperadas tenham sido associadas aos endereços originais, use o procedimento Sweep do Electrum acima para cada chave financiada. Verifique o conjunto completo, incluindo endereços de troco. Mantenha o backup criptografado e sua senha até que os recebimentos no destino conciliem com o saldo esperado.
Carteiras de hardware que recomendamos como novo destino
Para esta migração, recomendamos o Trezor Safe 3 se você preferir botões físicos, ou o Trezor Safe 5 se uma tela sensível ao toque maior facilitar a verificação de endereços. Ambos podem manter as novas chaves de assinatura em um dispositivo separado. Comprar um não corrige uma chave antiga: crie uma carteira completamente nova no dispositivo.
Os links da Amazon abrem uma busca regional de produtos, não uma listagem de vendedor verificado. Verifique o vendedor contra as lojas oficiais da Amazon do Trezor ou revendedores autorizados. Use as verificações de autenticação do dispositivo durante a configuração; nunca use um backup de carteira pré-escrito fornecido.
- Comece em trezor.io/start e instale o Trezor Suite. Siga a configuração específica do dispositivo e as verificações de autenticação, escolha Create a new wallet e complete a verificação do backup no dispositivo. Mantenha o backup offline. Não restaure a carteira antiga nem a seed da carteira de software do exemplo acima neste dispositivo.
- Para um envio normal, selecione a conta Bitcoin no Trezor Suite, escolha Receive e verifique o endereço completo no dispositivo conectado. Use este endereço em vez do endereço da carteira de software na rota Blockchain.com. Confira a transferência recebida e suas confirmações no Trezor Suite, em vez de History do Electrum.
- Para a rota Electrum Sweep, conecte o Trezor recém-configurado e crie uma carteira Electrum com File → New/Restore → Standard wallet → Use a hardware device. Siga o guia Electrum do Trezor e use a conta Bitcoin e tipo de endereço correspondentes. Verifique um endereço de recebimento no Trezor, depois use-o como destino do sweep. Insira somente a chave WIF ANTIGA no Sweep; nunca digite as palavras de backup do Trezor no Electrum ou em um site.
Fontes e escopo
Este estudo de caso cobre implementações históricas de navegador e suas diferentes rotas de migração. Para a relação mais ampla entre entropia, frases seed e carteiras de hardware, continue com o artigo de fundo.
Contexto: como surgem seeds fracas em carteiras →
- Unciphered — divulgação Randstorm, 14 de novembro de 2023
- bitaddress.org — histórico de versões assinado
- Coinpunk — RNG inspecionado e snapshot do repositório · package.json · README
- Electrum — FAQ de recuperação, sweeping e privacidade
- Electrum 4.8.2 — assistente da carteira desktop · Desktop menus
- Blockchain.com — endereços Bitcoin importados
- bitaddress.org — implementação BIP38 e Wallet Details
- Coinpunk — modelo de carteira criptografada e chaves de troco · Backup · Send
- Trezor Safe 3
- Trezor Safe 5
- Trezor Suite — trezor.io/start
- Trezor — lojas oficiais e revendedores autorizados
- Trezor — migrando de outra carteira
- Trezor Suite — recebendo e verificando um endereço
Verificado em 19/09/2026 contra documentação primária e código-fonte. Nenhum fundo real ou chave privada foi usado nos testes. A tabela não é uma lista exaustiva nem um diagnóstico da sua carteira.
Perguntas frequentes
O BitcoinJS 0.1.3 identifica a versão da minha carteira?
Não. Ele identifica um exemplo de biblioteca citado na divulgação Randstorm. Uma carteira pode embutir ou modificar essa biblioteca sem expor sua versão ao usuário. A build original da carteira e o ambiente do navegador ainda precisam ser identificados.
O bitaddress.org 2.8.0 prova que minha carteira de papel é segura?
O changelog documenta coleta de entropia mais forte na 2.8.0. Não certifica como uma chave individual foi gerada, quais recursos do navegador estavam disponíveis ou se o arquivo foi modificado. O artigo, portanto, trata isso como uma mudança documentada, não uma fronteira universal de segurança.
Por que a rota da carteira de papel usa Sweep em vez de Import?
Import mantém a chave privada original em uso. Sweep cria uma transação que transfere seus fundos disponíveis para a carteira destino preparada. A nova carteira deve ter chaves geradas independentemente, e o destino e a taxa devem ser verificados antes da transmissão.
O Electrum pode abrir um backup Coinpunk diretamente?
A versão Coinpunk inspecionada armazena um payload de carteira criptografado, não uma seed Electrum. Preserve o backup, identificador de login e senha. Recupere as chaves localmente com expertise específica da versão, depois associe-as aos endereços originais antes de usar a rota sweep.