Saltar al contenido principal

Estándar BIP-39 explicado: cómo funcionan las frases semilla mnemónicas

BIP-39 (Bitcoin Improvement Proposal 39) define el estándar para generar frases mnemónicas —las conocidas secuencias de 12 o 24 palabras— que codifican la entropía usada para derivar claves de billeteras de criptomonedas. Publicado en 2013 por Marek Palatinus, Pavol Rusnak, Aaron Voisine y Sean Bowe, BIP-39 se ha convertido en el estándar dominante para respaldo de billeteras en prácticamente todas las criptomonedas principales.

Entender BIP-39 a nivel técnico te da confianza en que tu respaldo de frase semilla es confiable y te ayuda a evaluar las propiedades de seguridad de distintas implementaciones de billeteras.

Resumen de BIP-39

BIP-39 especifica dos procesos:

  1. Generación del mnemónico — Convertir entropía aleatoria en una secuencia de palabras legibles por humanos.
  2. Derivación de semilla — Convertir las palabras mnemónicas (más una passphrase opcional) en una semilla binaria de 512 bits que puede usarse con BIP-32 para generación jerárquica determinista de claves.

Estos dos procesos están separados de forma deliberada. El mnemónico es la representación amigable para humanos; la semilla es la entrada criptográfica para la derivación de claves.

Paso 1: Generación de entropía

El proceso comienza con un bloque de datos aleatorios criptográficamente seguros (entropía). BIP-39 admite cinco tamaños de entropía:

Entropía (bits)Checksum (bits)Total (bits)Palabras
128413212
160516515
192619818
224723121
256826424

En la práctica, casi todas las billeteras usan 128 bits (12 palabras) o 256 bits (24 palabras). Los otros tamaños son válidos según la especificación, pero rara vez se implementan.

La calidad de la fuente de entropía es fundamental. Si el generador de números aleatorios está sesgado, es predecible o tiene entropía insuficiente, un atacante puede adivinar la frase semilla resultante. Consulta nuestra guía de Entropía y Aleatoriedad para un tratamiento detallado de este tema.

Fuentes de entropía

  • Generadores de números aleatorios por hardware (HRNG) — Usados por billeteras de hardware como Ledger y Trezor. Muestrean fenómenos físicos (ruido térmico, shot noise) para producir aleatoriedad real.
  • CSPRNG del sistema operativo/dev/urandom en Linux/macOS, CryptGenRandom en Windows, o crypto.getRandomValues() en navegadores. Estos son generadores pseudoaleatorios criptográficamente seguros (CSPRNG) inicializados desde fuentes de entropía por hardware.
  • Lanzamientos de dados — Algunos usuarios generan entropía manualmente con dados de calidad de casino, mapeando lanzamientos a binario o índices de palabras. Esto elimina la confianza en cualquier RNG de software o hardware.

Paso 2: Cálculo del checksum

Una vez generada la entropía, se añade un checksum:

  1. Calcula el hash SHA-256 de los bytes de entropía.
  2. Toma los primeros ENT / 32 bits del hash (donde ENT es la longitud de la entropía en bits).
  3. Añade estos bits de checksum a la entropía.

Para entropía de 256 bits, esto produce 8 bits de checksum, dando un total de 264 bits.

El checksum funciona como mecanismo de detección de errores: cuando ingresas tu frase semilla en una billetera para recuperación, la billetera recalcula el checksum. Si alguna palabra es incorrecta o el orden de las palabras es incorrecto, el checksum fallará y la billetera rechazará el mnemónico. Esto protege contra errores de transcripción, pero no los corrige: solo detecta que algo está mal.

Implicaciones del checksum

Como la última palabra del mnemónico codifica bits de checksum, no todas las palabras son válidas como palabra final para una secuencia dada. En un mnemónico de 24 palabras, la última palabra codifica 3 bits de entropía y 8 bits de checksum, por lo que solo 8 de las 2,048 palabras posibles son válidas para cualquier conjunto de las primeras 23 palabras. Por eso no puedes elegir libremente la última palabra.

Paso 3: Mapeo a palabras

Los bits combinados de entropía + checksum se dividen en grupos de 11 bits. Cada grupo de 11 bits representa un índice de 0 a 2,047, que corresponde a una palabra en la lista de palabras BIP-39.

264 bits / 11 bits per word = 24 words
132 bits / 11 bits per word = 12 words

La lista de palabras en inglés

La lista de palabras en inglés de BIP-39 contiene exactamente 2,048 palabras. La lista fue cuidadosamente curada con estas propiedades:

  • Prefijos únicos de cuatro letras — Ninguna pareja de palabras comparte los mismos primeros cuatro caracteres. Esto significa que abandon puede identificarse sin ambigüedad como aban, útil para respaldos metálicos compactos.
  • Vocabulario común — Las palabras son simples y ampliamente conocidas en inglés. Sin jerga, nombres propios ni términos oscuros.
  • Evitar palabras similares — Se excluyen cuando es posible palabras que pueden confundirse fácilmente (por ejemplo, "woman" y "women").
  • Longitud de caracteres — Todas las palabras tienen entre 3 y 8 caracteres.

Listas de palabras en otros idiomas

BIP-39 define listas de palabras en nueve idiomas:

IdiomaEstadoNotas
InglésEstándar de referenciaEl más compatible
JaponésEstandarizadoUsa katakana; los espacios son ideográficos (U+3000)
CoreanoEstandarizado
EspañolEstandarizado
Chino (simplificado)Estandarizado
Chino (tradicional)Estandarizado
FrancésEstandarizado
ItalianoEstandarizado
ChecoEstandarizado
PortuguésEstandarizado

Nota importante de compatibilidad: Un mnemónico generado con una lista de palabras no puede restaurarse usando una lista de palabras de otro idioma. Los índices de palabras difieren entre idiomas. Siempre anota qué idioma se usó al crear tu respaldo.

Paso 4: Derivación de semilla (PBKDF2)

La frase mnemónica no se usa directamente como clave criptográfica. En su lugar, pasa por key stretching usando PBKDF2-HMAC-SHA512:

PBKDF2(
password = mnemonic sentence (words joined by spaces, normalized to UTF-8 NFKD),
salt = "mnemonic" + optional_passphrase,
iterations = 2048,
key_length = 512 bits
)

Esto produce una semilla de 512 bits que sirve como entrada para la derivación jerárquica determinista de claves BIP-32.

Propiedades clave de PBKDF2 en BIP-39

Key stretching — Las 2,048 iteraciones de PBKDF2 añaden costo computacional a ataques de fuerza bruta. Aunque 2,048 iteraciones es modesto según estándares modernos de hash de contraseñas, la seguridad principal proviene de la entropía del propio mnemónico (128 o 256 bits), no del factor de key stretching.

Soporte de passphrase — El salt incluye una passphrase opcional (la "palabra 25"). Si no se proporciona passphrase, el salt es simplemente la cadena "mnemonic". Si se proporciona passphrase, el salt se vuelve "mnemonic" + passphrase. Esto significa que cada passphrase distinta produce una semilla completamente diferente —y por tanto un conjunto completamente diferente de claves y direcciones— a partir del mismo mnemónico.

Sin validación de passphrase — A diferencia del checksum del mnemónico, no hay checksum para la passphrase. Cualquier passphrase es válida. Introducir una passphrase incorrecta no produce error; genera silenciosamente una billetera diferente (vacía). Esto es una función útil para negación plausible, pero un riesgo para usuarios que olvidan su passphrase.

Normalización Unicode — El mnemónico y la passphrase se normalizan usando UTF-8 NFKD (Normalization Form Compatibility Decomposition) antes de pasarlos a PBKDF2. Esto garantiza una derivación de semilla consistente entre implementaciones, independientemente de cómo el sistema operativo represente internamente los caracteres.

Paso 5: De semilla a claves (BIP-32)

La semilla de 512 bits de PBKDF2 se usa como entrada para BIP-32 (Hierarchical Deterministic Wallets):

  1. La semilla se pasa por HMAC-SHA512 con la clave "Bitcoin seed".
  2. Los 256 bits de la izquierda se convierten en la clave privada maestra.
  3. Los 256 bits de la derecha se convierten en el código de cadena maestro.
  4. Juntos, forman la clave privada extendida maestra (xprv).

Desde aquí, las rutas de derivación BIP-44 definen una estructura de árbol estandarizada para derivar claves y direcciones específicas por moneda.

Ejemplo práctico

Veamos BIP-39 con un ejemplo simplificado usando 128 bits de entropía (mnemónico de 12 palabras):

1. Generar 128 bits de entropía

00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000

(Esta es entropía de todos ceros, solo para ilustración. Nunca la uses en la práctica.)

2. Calcular hash SHA-256

SHA256(0x00000000000000000000000000000000) = 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb

3. Tomar los primeros 4 bits del hash como checksum

Primer byte: 0x37 = 00110111. Primeros 4 bits: 0011.

4. Añadir checksum a la entropía

128 bits de ceros + 0011 = 132 bits en total.

5. Dividir en grupos de 11 bits

00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000011 → 3 → "about"

Resultado: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about

Este es el vector de prueba conocido para entropía de todos ceros. La última palabra es "about" (no "abandon") debido a los bits de checksum.

6. Derivar semilla con PBKDF2

PBKDF2("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "mnemonic", 2048, 64)

Esto produce una semilla de 512 bits usada para derivación BIP-32.

Herramienta SafeSeed

Usa el Generador de Frase Semilla de SafeSeed para ver BIP-39 en acción. Genera una frase semilla y visualiza la entropía, el checksum y el mapeo de palabras en tiempo real. Ejecuta la herramienta sin conexión para máxima seguridad.

Análisis de seguridad de BIP-39

Seguridad de la entropía

Para un mnemónico de 24 palabras (256 bits de entropía):

  • El espacio de búsqueda es 2^256, aproximadamente 1.16 x 10^77 posibilidades.
  • Incluso a una tasa de un billón (10^12) de intentos por segundo, la búsqueda exhaustiva tardaría aproximadamente 3.67 x 10^57 años, mucho más que la edad del universo (1.38 x 10^10 años).

Para un mnemónico de 12 palabras (128 bits de entropía):

  • El espacio de búsqueda es 2^128, aproximadamente 3.4 x 10^38 posibilidades.
  • A un billón de intentos por segundo, la búsqueda exhaustiva tardaría aproximadamente 10^19 años.

Ambos casos son computacionalmente inviables con computación clásica.

Consideraciones sobre PBKDF2

PBKDF2 con 2,048 iteraciones añade un factor constante a los ataques de fuerza bruta, pero no es la barrera de seguridad principal. Algunos investigadores de seguridad han señalado que 2,048 iteraciones es bajo comparado con funciones modernas de derivación de claves como Argon2 o bcrypt. Sin embargo, como la entropía del mnemónico (128 o 256 bits) es el factor dominante, esto es una preocupación menor en la práctica.

Limitaciones del checksum

El checksum detecta la mayoría de errores de transcripción, pero:

  • Detecta errores, no los corrige.
  • Para mnemónicos de 12 palabras, solo existen 4 bits de checksum, lo que significa que aproximadamente 1 de cada 16 modificaciones aleatorias pasará el checksum.
  • El checksum no protege contra reordenamientos de palabras que, por casualidad, produzcan un checksum válido.

Riesgos de la passphrase

La función de passphrase es potente, pero introduce riesgos:

  • Si olvidas la passphrase, los fondos son irrecuperables (no hay mecanismo de "reset").
  • La passphrase no se valida: cualquier cadena produce una billetera válida.
  • Un atacante que obtiene el mnemónico pero no la passphrase debe forzar la passphrase por fuerza bruta, lo que aporta seguridad adicional proporcional a la entropía de la passphrase.

Críticas a BIP-39

BIP-39 no está exento de críticos dentro de la comunidad de desarrollo de Bitcoin.

Sin versionado

BIP-39 no incluye un byte de versión, lo que significa que el proceso de derivación queda fijo para siempre. Si una mejora futura requiere una función de derivación de claves diferente o parámetros distintos, no puede señalizarse dentro del formato mnemónico. Por eso algunas billeteras (en particular Electrum) usan su propio esquema mnemónico con versionado.

Acoplamiento fuerte con la lista de palabras

El mnemónico depende de la lista de palabras exacta. Si la lista de palabras se modificara alguna vez, los mnemónicos existentes no podrían recuperarse. Las listas de palabras están congeladas desde su estandarización, pero esta inflexibilidad se considera una limitación de diseño por algunos.

Key stretching débil

Como se señaló, 2,048 iteraciones de PBKDF2 se consideran débiles según estándares modernos. Aunque esto no afecta materialmente la seguridad de mnemónicos con alta entropía, ofrece menos protección para passphrases más cortas o elegidas por usuarios.

Alternativa de Electrum

La billetera Electrum usa su propio esquema mnemónico que incluye versionado y no depende de una lista de palabras fija. Los mnemónicos de Electrum no son compatibles con BIP-39. Esto significa que una frase semilla de Electrum no puede restaurarse en una billetera BIP-39 y viceversa. Siempre verifica qué estándar usa tu billetera.

Implementaciones de BIP-39

BIP-39 está implementado en prácticamente todas las billeteras principales:

BilleteraBIP-39Número de palabrasNotas
Ledger24Hardware, secure element
Trezor12/24También soporta SLIP-39 (Shamir)
Coldcard24Hardware solo Bitcoin
MetaMask12Extensión de navegador
Trust Wallet12Móvil
Exodus12Escritorio/móvil
ElectrumNo12Usa esquema propio
BlueWallet12/24Móvil centrada en Bitcoin

Pruebas y verificación

Vectores de prueba oficiales

La especificación BIP-39 incluye vectores de prueba: valores de entropía conocidos con sus palabras mnemónicas y semillas derivadas correspondientes. Se usan para verificar que las implementaciones sean correctas.

Puedes verificar la implementación BIP-39 de tu billetera comparando con los vectores de prueba oficiales publicados en:

Verificar tu frase semilla

Para verificar que registraste correctamente tu frase semilla:

  1. Genera la frase semilla en tu billetera de hardware.
  2. Escríbela con cuidado.
  3. Restablece la billetera de hardware a configuración de fábrica.
  4. Restaura desde la frase semilla que anotaste.
  5. Verifica que se generen las mismas direcciones.
  6. Confirma que la billetera puede firmar transacciones.

Este proceso confirma tanto que tu respaldo es correcto como que la implementación BIP-39 de la billetera funciona como se espera.

Preguntas frecuentes

¿Qué significa BIP-39?

BIP significa Bitcoin Improvement Proposal. BIP-39 es la propuesta número 39, que define el estándar para crear representaciones mnemónicas (legibles por humanos) de entropía criptográfica. Se introdujo en 2013 y ha sido adoptada por prácticamente todas las billeteras principales de criptomonedas.

¿Todas las frases semilla de 12 palabras son BIP-39?

No. Algunas billeteras (en particular Electrum) usan su propio esquema mnemónico distinto de BIP-39. Aunque ambas producen frases de 12 palabras a partir de listas de palabras, la codificación, las listas de palabras y los procesos de derivación son distintos. Una frase BIP-39 no puede usarse con el esquema de Electrum y viceversa. Consulta siempre la documentación de tu billetera.

¿Puedo crear mi propia frase semilla BIP-39 eligiendo palabras?

No deberías. Aunque técnicamente es posible seleccionar 23 palabras y calcular una palabra 24 válida (para satisfacer el checksum), la selección humana de palabras no produce entropía suficiente. La seguridad de BIP-39 depende de que las palabras se deriven de datos aleatorios de alta calidad, no de decisiones humanas. Deja que un CSPRNG genere la entropía.

¿Por qué se usa la palabra "mnemonic" como salt de PBKDF2?

La cadena "mnemonic" es un salt fijo especificado por BIP-39. Cuando se usa passphrase, se añade a este salt (por ejemplo, "mnemonicMyPassphrase"). Usar un salt fijo conocido garantiza una derivación de semilla consistente en todas las implementaciones sin requerir información adicional aparte del mnemónico y la passphrase opcional.

¿BIP-39 se usa solo para Bitcoin?

No. BIP-39 se usa en prácticamente todas las criptomonedas principales, incluyendo Ethereum, Litecoin, Cardano, Solana y muchas otras. El proceso de generación del mnemónico y derivación de semilla es idéntico; solo difieren las rutas posteriores de derivación de claves (definidas por los tipos de moneda BIP-44) entre cadenas.

¿Cuál es la diferencia entre BIP-39 y SLIP-39?

BIP-39 produce un único mnemónico que representa el secreto completo. SLIP-39 (Satoshi Labs Improvement Proposal 39) implementa Shamir's Secret Sharing, dividiendo el secreto en múltiples partes (por ejemplo, 3-de-5). Cualquier número umbral de partes puede reconstruir el secreto, pero menos partes no revelan información. SLIP-39 usa una lista de palabras y una codificación diferentes a BIP-39.

¿Cuántos mnemónicos BIP-39 válidos existen?

Para mnemónicos de 24 palabras: 2^256 (aproximadamente 1.16 x 10^77). Para mnemónicos de 12 palabras: 2^128 (aproximadamente 3.4 x 10^38). Estos números representan el espacio de entropía. El checksum restringe las combinaciones de palabras, pero no reduce la entropía: simplemente significa que no cualquier secuencia aleatoria de 24 palabras BIP-39 forma un mnemónico válido.

Guías relacionadas