Randstorm / BitcoinJS
Randstorm: la vulnerabilidad del navegador detrás de las antiguas carteras de Bitcoin
Qué software está documentado, qué versiones importan y cómo dejar una cartera antigua sin llevar sus claves vulnerables contigo.
Índice
Qué fue lo que realmente salió mal
Randstorm se refiere a la generación de claves en software de navegador antiguo. SecureRandom() de JSBN podía combinar una fuente de entropía insuficiente con un Math.random() predecible del navegador. Unciphered divulgó el problema el 14 de noviembre de 2023 e informó de carteras vulnerables creadas entre 2011 y 2015. Ese es un periodo observado, no un veredicto sobre todas las carteras de esos años.
El nombre SecureRandom no es una garantía de seguridad. En el código fuente inspeccionado de Coinpunk, el fallback llena un pool de 256 bytes usando Math.random(), mezcla el reloj y alimenta un generador Arcfour. Un pool grande no puede suministrar imprevisibilidad que sus entradas no tengan. El mismo código también contiene rutas más fuertes con Web Crypto y Node.js: alcanzar el fallback es la distinción importante.
Este es un defecto en la forma en que se eligió una clave privada. No es una ruptura de la verificación de firmas de Bitcoin. Abrir una copia de seguridad antigua en una app más nueva preserva esas claves; mover fondos a claves generadas independientemente cambia lo que autoriza el gasto.
Carteras, versiones y los límites de la evidencia
Lee una versión de biblioteca separada de una versión de cartera. Para un sitio web alojado, el código servido el día de creación de la clave importa más que la versión actual de la app. La tabla distingue un incidente documentado de hallazgos en el código fuente.
| Proyecto | Versión o periodo | Qué establece esto |
|---|---|---|
| BitcoinJS / bitcoinjs-lib | 0.1.3 | Nombrado como ejemplo en la divulgación. JSBN se usó hasta marzo de 2014; esto no establece un rango completo de versiones afectadas para todos los derivados. |
| Blockchain.info Blockchain.com | Cartera web histórica; no se verificó un rango numerado afectado | Una cartera de cliente fue el punto de partida de la investigación de Unciphered. Esto no implica a todas las carteras de Blockchain.com ni a la app actual. |
| bitaddress.org | 2.6.5 · 2.8.0 2013-12-01 · 2014-01-18 | La versión 2.6.5 actualizó JSBN a 1.4. La 2.8.0 añadió inicialización Web Crypto de pool completo y entropía obligatoria de ratón/teclado. Son cambios documentados, no un límite probado de “todas las versiones anteriores vulnerables / todas las posteriores seguras”. |
| Coinpunk | 0.2.1 63ca325be538 | La instantánea del repositorio inspeccionado se etiqueta como 0.2.1 y contiene un fallback Math.random()/Arcfour junto con rutas más fuertes. Esto es un hallazgo de código, no prueba de que cada despliegue usara el fallback. El desarrollo se ha detenido. |
Esta visión general cubre las implementaciones verificadas aquí; no es una lista exhaustiva de carteras afectadas. Un producto no listado no está automáticamente libre de afectación. Una fecha de creación antigua o una dirección que empieza con 1 no es suficiente para identificar el generador.
Prepara el destino una vez
Las tres rutas siguientes usan una nueva cartera Electrum Desktop como destino. Los nombres de menú se refieren a la interfaz de escritorio en inglés 4.8.2 revisada para este artículo. Descarga la versión actual desde el sitio oficial; 4.8.2 es una referencia para las instrucciones, no una versión mínima permanente.
Carteras hardware que recomendamos como nuevo destino →
Electrum — descarga oficial y comprobaciones de firma ↗
- En un ordenador confiable y actualizado, descarga Electrum para tu sistema operativo. Sigue las instrucciones oficiales de firma y verifica independientemente la huella digital del firmante antes de la instalación.
- Elige File → New/Restore, nombra la cartera randstorm-new, luego selecciona Standard wallet → Create a new seed. Anota y confirma las nuevas palabras en papel y establece una contraseña para el archivo de la cartera. No importes el secreto antiguo.
- Antes de depositar, crea recovery-check con File → New/Restore → Standard wallet → I already have a seed, usando solo la copia de seguridad en papel NUEVA. Compara la primera dirección de recepción en ambas carteras vía View → Addresses y la pestaña Addresses. Mantén ambas carteras durante esta comprobación.
- En randstorm-new, usa Receive → Request (Onchain si Lightning está activado). Copia la dirección Bitcoin. La ruta específica de cartera abajo debe enviar a esta dirección, con la comisión y el destino completos verificados antes de aprobar.
Blockchain.info: usa la cartera que contiene las direcciones antiguas
Esta ruta es para una cartera histórica de Blockchain.info a la que aún puedes acceder vía Blockchain.com. Las instrucciones actuales de envío describen la interfaz web de hoy, no una pantalla no verificada de 2012. Un saldo de Trading Account es un producto diferente.
- Conserva la copia de seguridad cifrada original y los registros de inicio de sesión. En la cartera web, revisa Settings → Wallets & Addresses → Bitcoin para direcciones importadas por separado. Compara tus direcciones públicas antiguas conocidas con los saldos mostrados; no se debe asumir que una nueva frase de recuperación cubre claves importadas.
- Abre Send en el panel de la cartera, selecciona Bitcoin e introduce la nueva dirección Electrum como destino externo. Empieza con una cantidad pequeña, elige Continue, revisa la dirección, cantidad y comisión, luego Send.
- Espera la confirmación en History de Electrum. Luego envía el saldo restante disponible, descontando la comisión. Revisa cada dirección importada financiada por separado; la prueba exitosa sola no vacía la cartera antigua. Deja de usar todas las direcciones de recepción retiradas.
bitaddress.org: transfiere una cartera en papel con Sweep
Una impresión de bitaddress suele representar una sola clave, no una frase de recuperación moderna. Conserva el papel y cualquier archivo HTML original: su nombre o pie de página puede identificar la versión. El historial de versiones ayuda a reconstruir la configuración; no certifica una clave individual.
- Identifica la clave privada, no la dirección pública de recepción. Un WIF mainnet comúnmente empieza con 5, K o L; una clave cifrada BIP38 empieza con 6P. El prefijo es solo una pista de formato. Conserva la forma original de compresión porque determina la dirección correspondiente.
- Para BIP38, primero descifra localmente y sin conexión usando una copia verificada del repositorio oficial de bitaddress: Wallet Details → introduce la clave cifrada → View Details → introduce su contraseña → Decrypt BIP38. Compara la dirección resultante con el papel antes de usar el WIF correspondiente. Nunca introduzcas la clave en un sitio web en vivo ni generes una cartera de reemplazo con esta herramienta antigua.
- En la cartera destino NUEVA Electrum, abre Wallet → Private keys → Sweep. Introduce solo el WIF sin cifrar en este diálogo local. Verifica que el destino pertenezca a randstorm-new, luego revisa la transacción y la comisión antes de transmitir.
- Sweep transfiere el saldo disponible controlado por la clave suministrada en una sola transacción. No es una importación ni la secuencia de prueba pequeña arriba. Repite para otras claves de carteras en papel financiadas y conserva los originales hasta que se confirmen todos los recibos esperados.
Coinpunk: asegura la copia de seguridad antes de tocar el servidor antiguo
Coinpunk era autoalojado, por lo que no hay un sitio universal actual de inicio de sesión ni servicio de recuperación. Estas etiquetas provienen de la instantánea del repositorio 63ca325be538, cuyo package.json declara la versión 0.2.1. Un despliegue modificado puede diferir.
- Si tu instalación original confiable aún funciona, abre Backup → Download y guarda múltiples copias de la cartera cifrada. Conserva también el identificador de inicio de sesión, la contraseña y la copia de seguridad del servidor. No actualices ni reinstales la única instancia superviviente primero.
- El formulario histórico Send Bitcoins contiene Bitcoin address to send to, Amount y una comisión mostrada. Úsalo solo si la instancia original aún funciona de forma fiable y soporta la dirección destino. No fuerces una dirección bc1 en este software antiguo; el analizador de direcciones inspeccionado usa Base58Check.
- Para un destino incompatible o un servidor sin conexión, conserva la copia de seguridad y recupera sus claves localmente con ayuda que entienda esta versión de Coinpunk. El modelo de cartera almacena keyPairs, incluidas claves de cambio, dentro de una carga cifrada. Esto no es una semilla Electrum ni un wallet.dat de Bitcoin Core; renombrar el archivo no puede convertirlo.
- Una vez que las claves WIF recuperadas se hayan asociado a las direcciones originales, usa el procedimiento Sweep de Electrum arriba para cada clave financiada. Revisa el conjunto completo, incluidas las direcciones de cambio. Conserva la copia de seguridad cifrada y su contraseña hasta que los recibos destino concilien con el saldo esperado.
Carteras hardware que recomendamos como nuevo destino
Para esta migración, recomendamos Trezor Safe 3 si prefieres botones físicos, o Trezor Safe 5 si una pantalla táctil más grande facilita la comprobación de direcciones. Ambos pueden mantener las nuevas claves de firma en un dispositivo separado. Comprar uno no arregla una clave antigua: crea una cartera completamente nueva en el dispositivo.
Los enlaces de Amazon abren una búsqueda regional de productos, no un listado verificado de vendedores. Comprueba el vendedor contra las tiendas oficiales de Trezor en Amazon o revendedores autorizados. Usa las comprobaciones de autenticación del dispositivo durante la configuración; nunca uses una copia de seguridad de cartera preescrita suministrada.
- Empieza en trezor.io/start e instala Trezor Suite. Sigue la configuración y comprobaciones de autenticación específicas del dispositivo, elige Create a new wallet y completa la comprobación de copia de seguridad en el dispositivo. Mantén la copia de seguridad offline. No restaures la cartera antigua ni la semilla de cartera software del ejemplo anterior en este dispositivo.
- Para un envío normal, selecciona la cuenta Bitcoin en Trezor Suite, elige Receive y verifica la dirección completa en el dispositivo conectado. Usa esta dirección en lugar de la dirección de cartera software en la ruta Blockchain.com. Comprueba la transferencia recibida y sus confirmaciones en Trezor Suite en lugar de History de Electrum.
- Para la ruta Electrum Sweep, conecta el Trezor recién configurado y crea una cartera Electrum con File → New/Restore → Standard wallet → Use a hardware device. Sigue la guía Electrum de Trezor y usa la cuenta Bitcoin y tipo de dirección correspondientes. Verifica una dirección de recepción en el Trezor, luego úsala como destino de sweep. Introduce solo la clave WIF ANTIGUA en Sweep; nunca escribas las palabras de copia de seguridad de Trezor en Electrum o un sitio web.
Fuentes y alcance
Este estudio de caso cubre implementaciones históricas de navegador y sus diferentes rutas de migración. Para la relación más amplia entre entropía, frases semilla y carteras hardware, continúa con el artículo de fondo.
Antecedentes: cómo surgen semillas débiles en carteras →
- Unciphered — divulgación Randstorm, 14 de noviembre de 2023
- bitaddress.org — historial de versiones firmado
- Coinpunk — RNG inspeccionado e instantánea del repositorio · package.json · README
- Electrum — recuperación, sweeping y FAQ de privacidad
- Electrum 4.8.2 — asistente de cartera de escritorio · Desktop menus
- Blockchain.com — direcciones Bitcoin importadas
- bitaddress.org — implementación BIP38 y Wallet Details
- Coinpunk — modelo de cartera cifrada y claves de cambio · Backup · Send
- Trezor Safe 3
- Trezor Safe 5
- Trezor Suite — trezor.io/start
- Trezor — tiendas oficiales y revendedores autorizados
- Trezor — migrando desde otra cartera
- Trezor Suite — recibir y verificar una dirección
Verificado el 19 de septiembre de 2026 contra documentación primaria y código fuente. No se usaron fondos reales ni claves privadas en las pruebas. La tabla no es una lista exhaustiva ni un diagnóstico de tu cartera.
Preguntas frecuentes
¿BitcoinJS 0.1.3 identifica la versión de mi cartera?
No. Identifica un ejemplo de biblioteca citado en la divulgación Randstorm. Una cartera puede incluir o modificar esa biblioteca sin exponer su versión al usuario. Aún se debe identificar la construcción original de la cartera y el entorno del navegador.
¿bitaddress.org 2.8.0 prueba que mi cartera en papel es segura?
El registro de cambios documenta una recolección de entropía más fuerte en 2.8.0. No certifica cómo se generó una clave individual, qué funciones del navegador estaban disponibles o si el archivo fue modificado. Por lo tanto, el artículo lo trata como un cambio documentado, no un límite universal de seguridad.
¿Por qué la ruta de cartera en papel usa Sweep en lugar de Import?
Import mantiene la clave privada original en uso. Sweep crea una transacción que transfiere sus fondos disponibles a la cartera destino preparada. La nueva cartera debe tener claves generadas independientemente, y el destino y la comisión deben verificarse antes de transmitir.
¿Puede Electrum abrir directamente una copia de seguridad Coinpunk?
La versión Coinpunk inspeccionada almacena una carga cifrada de cartera, no una semilla Electrum. Conserva la copia de seguridad, el identificador de inicio de sesión y la contraseña. Recupera las claves localmente con experiencia específica de versión, luego asócialas a las direcciones originales antes de usar la ruta sweep.