En este artículo
- TL;DR
- ¿Qué es BIP39?
- 12 palabras frente a 24 palabras
- Cómo deriva las claves tu wallet
- Cómo generar wallets BIP39 en Node.js
- Stack técnico
- Imports y constantes
- Generar una wallet
- Comprobar la actividad de una dirección
- Guardar los aciertos
- Coordinar la ejecución
- La palabra 25 que casi nadie configura
- Un robo en casa deja de ser una ruina
- La superficie de ataque se reduce
- Los ataques que vacían wallets de Bitcoin
- Lo que NO debes hacer con tu frase semilla
- Cómo guardar tu frase semilla
- Metal, no papel
- Hardware wallets recomendadas para 2026
- Computación cuántica y BIP39
- BIP39 aguanta. La parte humana, a menudo no.
Trabajo en el espacio de la autocustodia cripto, y en 2026 todavía hay alguien cada mes que me pregunta si debe preocuparse por un ataque de fuerza bruta contra su frase semilla (especificación BIP-39). Las matemáticas dicen que no. El comportamiento dice que sí, por motivos que nadie espera.
Trata esas 12 o 24 palabras como si fueran el propio Bitcoin. Quien tenga la frase es dueño de cada satoshi de la wallet. Nadie puede restablecerla por ti.
Aquí verás cómo funciona BIP39, dónde falla, qué separa 12 de 24 palabras y por qué la passphrase BIP39 es, en mi opinión, la función de seguridad menos aprovechada de Bitcoin.
TL;DR
Una frase semilla BIP39 es la llave maestra de tu Bitcoin: de 12 a 24 palabras en inglés que codifican de 128 a 256 bits de entropía (especificación BIP-39). La lista tiene 2.048 palabras, el orden importa y PBKDF2 estira la frase hasta una semilla de 512 bits de la que sale cada clave de la wallet. Contra entropía real, la fuerza bruta queda fuera de alcance. El riesgo está en otra parte: generadores de números aleatorios débiles, fotos de la frase, copias en la nube, errores al teclear y malware. Escríbela en metal o en papel. Nunca en digital.
¿Qué es BIP39?
Los autores de BIP39 escribieron que una frase de palabras resulta más cómoda para las personas que manejar la representación binaria o hexadecimal en bruto de la semilla de una wallet (especificación BIP-39). BIP39 estandarizó esa frase.
Cómo funciona:
- La wallet genera entropía. Un valor aleatorio de 128 a 256 bits, en saltos de 32 bits.
- La wallet añade una suma de verificación. Los primeros bits de un hash SHA-256 de la entropía van al final.
- El valor resultante se divide en segmentos de 11 bits. Cada segmento corresponde a una palabra de la lista BIP39.
- Según la entropía inicial, obtienes 12, 15, 18, 21 o 24 palabras.
La lista BIP39 tiene exactamente 2.048 palabras (2^11, a propósito). La especificación dice que la lista inglesa permite reconocer cada palabra por sus cuatro primeras letras, lo que reduce los errores al escribir (especificación BIP-39). BIP-39 incluye 10 listas oficiales en inglés, japonés, coreano, español, chino (simplificado), chino (tradicional), francés, italiano, checo y portugués (registro de listas BIP-39). La propia especificación desaconseja con firmeza las listas que no están en inglés, porque la mayoría de las wallets solo admiten el inglés. Marek Palatinus, Pavol Rusnak, Aaron Voisine y Sean Bowe escribieron el estándar, asignado el 10 de septiembre de 2013 (especificación BIP-39).
Después, la función de estiramiento de claves PBKDF2 pasa el mnemónico por 2.048 rondas de HMAC-SHA512 para producir una semilla binaria de 512 bits (especificación BIP-39). Esa semilla alimenta el algoritmo de derivación de wallets HD (jerárquicas deterministas) de BIP32, que genera todo el árbol de claves privadas y públicas que usa la wallet.
Una sola frase semilla cubre un árbol entero de claves: cada clave del árbol puede tener 2^31 hijas normales y 2^31 hijas reforzadas (especificación BIP-32). Cualquier dirección que haya generado la wallet se recupera con esas palabras, más la passphrase si configuraste una.
12 palabras frente a 24 palabras
BIP39 asigna 12 palabras a 128 bits de entropía y 24 palabras a 256 bits (especificación BIP-39). En cifras queda así:
| Longitud de la frase | Entropía | Combinaciones posibles |
|---|---|---|
| 12 palabras | 128 bits | ~3,4 × 10^38 (2^128) |
| 24 palabras | 256 bits | ~1,16 × 10^77 (2^256) |
Un ejemplo con números. Cada intento cuesta 2.048 rondas de HMAC-SHA512. Una RTX 4090 calcula PBKDF2-HMAC-SHA512 a 3.120,9 miles de hashes por segundo con 999 iteraciones (benchmark de hashcat), lo que equivale a unos 1,5 millones de comprobaciones de semilla por segundo con 2.048. A ese ritmo, una tarjeta necesita unos 7 × 10^24 años para probar todas las semillas de 12 palabras, y un millón de tarjetas todavía necesita unos 7 × 10^18 años. Al Sol le quedan unos 5.000 millones de años (NASA). Para elegir y usar una wallet paso a paso, consulta la guía de autocustodia.
24 palabras dan a la semilla 256 bits. Las claves que deriva siguen estando en la curva secp256k1, a la que SEC 2 asigna 128 bits de seguridad (SEC 2, tabla 1). Así que las 12 palabras extra protegen la semilla, no las claves de firma.
Las dos opciones son seguras hoy. Mi regla: 24 palabras para el ahorro a largo plazo, porque ese margen solo cuesta unos minutos más de escritura.
Cómo deriva las claves tu wallet
La ruta de derivación explica por qué una sola frase semilla tiene tanto poder y por qué es tan peligroso exponerla.
Tu frase semilla, mediante PBKDF2, produce la semilla maestra. La semilla maestra, mediante BIP32, produce la clave privada maestra y el código de cadena maestro.
A partir de la clave privada maestra, la wallet deriva claves hijas a lo largo de una ruta de derivación. BIP44 define la estructura de la ruta (especificación BIP-44), y BIP84 la reutiliza con el propósito 84' para direcciones SegWit nativas (especificación BIP-84). Una ruta BIP44 tiene este aspecto:
m / 44' / 0' / 0' / 0 / 0
Donde:
m= clave maestra44'= propósito BIP440'= Bitcoin (tipo de moneda 0)0'= primera cuenta0= cadena externa (direcciones de recepción)0= primer índice de dirección
Cada dirección de Bitcoin en la que has recibido fondos se deriva de forma determinista de esa semilla maestra. Restaura la frase semilla en una wallet compatible, con la misma passphrase y la misma ruta de derivación, y todo vuelve: direcciones, saldos, historial de transacciones.
Si pierdes la frase semilla, no queda nada que restaurar. Ni servidor central ni vía de recuperación.
Cómo generar wallets BIP39 en Node.js
La forma más rápida de entender la entropía BIP39 es generarla tú mismo. El montaje de Node.js de abajo crea wallets y comprueba si las direcciones generadas han tenido fondos alguna vez. Código funcional de Bi-Catalyst/bruteforcebitcoin. Solo con fines educativos. Generar wallets al azar y comprobar su actividad on-chain es un ejercicio de fuerza bruta que confirma las matemáticas. No es un camino hacia las monedas de nadie.
Stack técnico
- axios para las peticiones HTTP a las API de blockchain
- bip39 para generar el mnemónico y derivar la semilla
- bitcoinjs-lib para derivar direcciones y trabajar con transacciones
package.json:
{
"name": "bruteforcebitcoin",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"run": "node generate_wallet.js"
},
"license": "MIT",
"dependencies": {
"axios": "^1.4.0",
"bip39": "^3.1.0",
"bitcoinjs-lib": "^5.2.0"
}
}
Imports y constantes
const axios = require("axios");
const bip39 = require("bip39");
const bitcoin = require("bitcoinjs-lib");
const fs = require("fs");
const parallelLimit = 10;
const iterations = 100;
const batchSize = 10;
const delayBetweenBatches = 5000; // 5 seconds
const apiDelay = 3000; // 3 seconds
let useBlockchainInfoAPI = true;
Generar una wallet
async function generateWallet() {
// Generate a new 12-word mnemonic seed phrase
const mnemonic = bip39.generateMnemonic(128);
console.log("Mnemonic:", mnemonic);
// Convert the mnemonic to a seed
const seed = await bip39.mnemonicToSeed(mnemonic);
// Derive the wallet from the seed using BIP32
const network = bitcoin.networks.bitcoin;
const hdMaster = bitcoin.bip32.fromSeed(seed, network);
const account = hdMaster.derivePath("m/44'/0'/0'/0");
// Generate a new Bitcoin address
const { address } = bitcoin.payments.p2pkh({
pubkey: account.derive(0).publicKey,
network,
});
console.log("Bitcoin Address:", address);
const hasTransactions = await checkAddressActivity(address);
await new Promise((resolve) => setTimeout(resolve, apiDelay));
return { address, hasTransactions };
}
Comprobar la actividad de una dirección
Dos exploradores de bloques públicos que se alternan para no chocar con los límites de peticiones. La API de Blockchain.com y la API de BlockCypher:
async function checkAddressActivity(address) {
try {
let response;
if (useBlockchainInfoAPI) {
response = await axios.get(`https://blockchain.info/rawaddr/${address}`);
} else {
response = await axios.get(`https://api.blockcypher.com/v1/btc/main/addrs/${address}`);
}
useBlockchainInfoAPI = !useBlockchainInfoAPI;
let hasTransactions = false;
if (response.data.txs) {
hasTransactions = response.data.txs.length > 0;
} else if (response.data.txrefs) {
hasTransactions = response.data.txrefs.length > 0;
}
if (hasTransactions) {
console.log("This address has transactions associated with it.");
return true;
} else {
console.log("This address has no transactions associated with it.");
return false;
}
} catch (error) {
console.error("Error fetching address data:", error.message);
return false;
}
}
Guardar los aciertos
function appendToFile(filename, data) {
fs.appendFile(filename, data, (err) => {
if (err) {
console.error(`Error saving data to ${filename}:`, err.message);
} else {
console.log(`Data saved to ${filename}`);
}
});
}
Coordinar la ejecución
async function main() {
const walletPromises = [];
for (let i = 0; i < iterations; i++) {
walletPromises.push(generateWallet());
if (walletPromises.length === parallelLimit) {
await processBatch(walletPromises);
walletPromises.length = 0;
}
}
if (walletPromises.length > 0) {
await processBatch(walletPromises);
}
}
Déjalo funcionando toda la noche y no darás con ninguna wallet con fondos. El script procesa 10 wallets a la vez, espera 3 segundos después de cada llamada a la API y 5 segundos entre lotes (generate_wallet.js), así que comprueba más o menos una wallet por segundo frente a un espacio de 2^128 semillas. Demuestra las matemáticas al fracasar contra ellas.
El repositorio completo está en github.com/Bi-Catalyst/bruteforcebitcoin.
La palabra 25 que casi nadie configura
BIP39 incluye una passphrase opcional, la «palabra 25». Según mi experiencia, la mayoría de los titulares nunca configura una. Es un error.
Cuando el mnemónico se convierte en semilla binaria, PBKDF2 recibe dos entradas: tu mnemónico y una passphrase opcional. Por defecto, la passphrase es una cadena vacía (especificación BIP-39). Puedes escribir lo que quieras. Una palabra, una frase, símbolos, números.
Otra passphrase produce otra wallet: las mismas 24 palabras, una semilla maestra nueva, direcciones nuevas, saldos nuevos. De ahí salen dos efectos sobre la seguridad.
Un robo en casa deja de ser una ruina
Alguien entra en tu casa y encuentra tu frase semilla en papel. Sin la passphrase, solo llega a la wallet de passphrase vacía, un señuelo con una cantidad pequeña. La especificación BIP39 da nombre a esta propiedad: cada passphrase genera una wallet válida, lo que «ofrece negación plausible» (especificación BIP-39).
Deja una cantidad pequeña en la wallet base. Guarda lo importante detrás de la passphrase. Haz que la passphrase sea larga y aleatoria: un ladrón con tus palabras puede probar passphrases sin conexión con BTCRecover, así que una palabra corta sirve de poco.
La superficie de ataque se reduce
La mayoría de los vectores de ataque (robo, miradas por encima del hombro, una foto filtrada) solo necesitan las palabras de la semilla. La passphrase añade un segundo factor. No la escribas nunca en el mismo papel, no la guardes nunca en el mismo sitio, no la envíes nunca por medios digitales.
Coldcard, Jade, Trezor y Ledger la admiten. Coldcard vende el Q con un teclado QWERTY que, según el fabricante, es «ideal para passphrases BIP-39 largas» (COLDCARD Q). Jade tiene un ajuste para la passphrase BIP39 (registro de cambios de Jade). Trezor incluye la protección con passphrase en el Safe 3 (Trezor Safe 3). Ledger la sitúa en Ajustes, luego Seguridad, en el Nano S Plus, y en Ajustes, luego Avanzado, en el Flex (soporte de Ledger).
Una advertencia. La passphrase no se puede recuperar. Si la olvidas, ese Bitcoin se pierde. Anótala aparte, guárdala en un lugar seguro y prueba la recuperación antes de depositar una cantidad importante.
Los ataques que vacían wallets de Bitcoin
Las pérdidas reales de frases semilla casi nunca tienen que ver con la fuerza bruta contra buena entropía. Yo las clasifico en tres grupos: digitales, físicas y matemáticas.
Los ataques digitales van primero. Según mi experiencia, el phishing causa la mayoría de las pérdidas: apps de wallet falsas, webs falsas de «recuperación de wallet», falsos agentes de soporte. Ledger afirma que nunca te pedirá las 24 palabras de tu frase de recuperación (Ledger), y BitBox dice lo mismo de sus palabras de recuperación (BitBox02). Trata como un ladrón a cualquiera que te las pida. Después vienen las fotos. En febrero de 2025, Kaspersky encontró en Google Play y en la App Store de Apple apps que escaneaban la galería del móvil con reconocimiento de texto para robar frases de recuperación, y las apps infectadas de Google Play superaban las 242.000 descargas (Securelist). El malware (keyloggers, secuestradores del portapapeles) en equipos conectados a internet puede capturar frases semilla mientras se escriben, y por eso existen las hardware wallets dedicadas.
Los ataques físicos son más lentos, pero siguen ocurriendo. Alguien encuentra tu frase semilla escrita en un cajón, detrás de un cuadro, bajo un imán de la nevera. Aquí te defienden el lugar donde la guardas y la passphrase BIP39. Las miradas por encima del hombro son la versión leve. Alguien te observa mientras generas o introduces tu frase semilla. Configura las hardware wallets en privado y busca cámaras antes de confirmar nada delicado.
Los ataques matemáticos (la fuerza bruta contra la propia entropía) son el tema del título de este artículo. Solo han vaciado wallets cuando la entropía era débil. El comando bx seed de Libbitcoin Explorer producía semillas con 32 bits de entropía real, y los investigadores de Milk Sad calculan que se robaron más de 900.000 dólares (informe de Milk Sad). El aviso de Coinkite del 30 de julio de 2026, actualizado el 1 de agosto, dice que un fallo del firmware de Coldcard debilitó la generación de semillas, que las semillas de Mk4, Q y Mk5 tenían unos 72 bits en lugar de 128 y que unos atacantes regeneraron esas semillas débiles sin conexión y robaron fondos (aviso de Coinkite). La historia completa está en el artículo sobre la entropía débil de Coldcard (en inglés). Las matemáticas aguantan. Las pérdidas vienen del comportamiento y de fuentes de entropía defectuosas.
Lo que NO debes hacer con tu frase semilla
Mis reglas firmes:
- Nada de fotos digitales. Nunca.
- Nada de almacenamiento en la nube. Dropbox, Google Drive, iCloud, OneDrive.
- Nada de gestores de contraseñas, salvo que hayas pensado bien el modelo de amenazas.
Además, evita el correo electrónico (ni a ti ni a nadie), las apps de mensajería (WhatsApp, Signal, iMessage), las capturas de pantalla y cualquier web que se presente como «validador de frases semilla» o «herramienta de recuperación de wallets». Son estafas.
Guarda la frase en papel o en metal, en lugares que controles.
Cómo guardar tu frase semilla
Genérala en un dispositivo dedicado (Coldcard, Jade, Trezor) y no en una extensión del navegador, una app móvil o una wallet de escritorio con acceso a internet. Un ordenador conectado tiene demasiadas superficies de ataque. Un dispositivo también puede salir de fábrica con un mal generador de números aleatorios, así que añade tu propia entropía cuando el dispositivo lo permita. El aviso de Coinkite dice que las semillas creadas con al menos 50 tiradas de dados privadas conservaron al menos 128 bits de entropía pese al fallo (aviso de Coinkite).
Metal, no papel
El papel arde, se moja, se deteriora. Los respaldos de metal guardan tus palabras en acero. Cryptosteel dice que su Seed24 es ignífugo (Cryptosteel), y SEEDOR afirma que su caja de acero inoxidable 316L aguanta 1.450 °C (SEEDOR). Una copia en un solo lugar es un punto único de fallo. Ten dos o tres respaldos de metal en lugares físicos distintos. Si usas una passphrase BIP39, guárdala separada de las palabras de la semilla.
Hardware wallets recomendadas para 2026
También lo trata el capítulo Wallets Staying Secure (en inglés).
- Coldcard Q. Solo Bitcoin, air-gapped, USD 319 (COLDCARD Q). En mi opinión, la más centrada en la seguridad de las cuatro.
- Jade Plus. Totalmente open source, USD 169,99 (Blockstream Jade).
- Trezor Safe 5. Firmware con licencia GPL-3.0 (repositorio del firmware de Trezor) y lo que Trezor llama un «NDA-free EAL 6+ Secure Element» (Trezor Safe 5). El Safe 5, y el Safe 3 desde junio de 2024, crean por defecto un respaldo SLIP-39 de 20 palabras, con 12 o 24 palabras BIP-39 a elegir (guía de respaldos de Trezor).
- Ledger Nano S Plus y BitBox02. Ledger usa una frase de recuperación de 24 palabras (soporte de Ledger). La BitBox02 guarda el respaldo en una tarjeta microSD, con palabras de recuperación como opción (BitBox02). Ledger ha publicado dos incidentes propios: una filtración de datos de contacto de clientes en 2020 (Ledger) y el compromiso del Connect Kit en diciembre de 2023 (informe de incidente de Ledger).
Prueba antes de depositar. Borra el dispositivo. Restáuralo desde tu frase semilla. Comprueba que todas las direcciones coinciden. Confirma que la passphrase funciona. Solo entonces envía Bitcoin de verdad a la wallet.
Computación cuántica y BIP39
El algoritmo de Shor resuelve logaritmos discretos (Shor 1995), el problema detrás de las firmas de curva elíptica que Bitcoin usa en las transacciones. No se aplica a la entropía BIP39. Un ordenador cuántico lo bastante grande podría obtener una clave privada a partir de una clave pública ya visible en la cadena. Contra la semilla, el mejor ataque conocido es la búsqueda de Grover, que necesita más o menos la raíz cuadrada del número clásico de intentos (Grover 1996). Eso convierte 2^128 en unos 2^64 pasos cuánticos para una semilla de 12 palabras y 2^256 en unos 2^128 para una de 24, y cada paso sigue ejecutando 2.048 rondas de HMAC-SHA512.
El NIST publicó sus tres primeros estándares poscuánticos definitivos, FIPS 203, 204 y 205, el 13 de agosto de 2024 (NIST). Bitcoin todavía no los usa. Las firmas Schnorr de Taproot (BIP-340) funcionan sobre la misma curva secp256k1 que ECDSA, así que corren el mismo riesgo frente a Shor. En mi opinión, cualquier migración será un cambio de protocolo coordinado. El análisis completo está en el análisis de la amenaza cuántica.
BIP39 aguanta. La parte humana, a menudo no.
La criptografía es sólida. Unos 128 o 256 bits de entropía real generan un espacio de claves que ningún adversario puede recorrer por fuerza bruta (especificación BIP-39).
Los puntos débiles son humanos, más algún generador de números aleatorios defectuoso de vez en cuando. Las frases semilla se fotografían, se sincronizan con la nube, se escriben en webs de phishing y se guardan en un único lugar sin copia de reserva. Una passphrase BIP39 robusta, que admiten todas las hardware wallets citadas arriba, desactiva la mayoría de esos escenarios con un paso más.
Haz tres cosas. Activa la passphrase BIP39 y guárdala separada de tus palabras. Pásate a un respaldo de metal, porque el papel no dura para siempre. Prueba la recuperación antes de necesitarla: borra el dispositivo, restáuralo desde la semilla y la passphrase y comprueba que funciona.
BIP39 hace su parte. Que tus monedas sigan siendo tuyas depende de la passphrase, el respaldo y la prueba de restauración que añadas encima.
Este artículo se basa en la documentación pública de BIP-39 y en la información de los fabricantes de hardware wallets disponible en octubre de 2026. No es asesoramiento de seguridad. El firmware y las funciones de las hardware wallets cambian. Prueba cada proceso de recuperación en un dispositivo dedicado antes de depositar cantidades importantes de Bitcoin, verifica el estado open source de cada firmware en el repositorio público actual del fabricante y trata como estafa cualquier oferta de un servicio de «fuerza bruta BIP-39». Los consejos de seguridad caducan rápido. Si tienes dudas, consulta a un profesional de seguridad independiente o a un custodio supervisado por la FINMA antes de meter un capital importante en una configuración que no puedes verificar por tu cuenta.
Fuentes:
- Especificación BIP-39
- Registro de listas de palabras BIP-39
- Especificación BIP-32
- SEC 2: Recommended Elliptic Curve Domain Parameters
- Benchmark de hashcat en una RTX 4090
- Informe de Milk Sad
- Coinkite: aviso de seguridad de Coldcard
- Kaspersky Securelist: SparkCat
- Repositorio del firmware de Trezor
- Guía de respaldos de Trezor
- Proyecto Post-Quantum Cryptography del NIST
¿Eres nuevo en Bitcoin? Empieza por el capítulo 1 (en inglés).
¿Quieres la visión completa? Lee los 19 capítulos gratis (en inglés) o pide el libro impreso.