Glosario / Billeteras y custodia
BIP39
También se conoce como BIP-39 o Código mnemónico.
- ¿Qué es BIP39?
- BIP39 es la especificación de 2013 que codifica la entropía de la billetera como palabras de una lista fija de 2.048 palabras y las estira hasta convertirlas en una semilla de 512 bits.
Se especifica en el BIP-39.
Casi todas las billeteras que puede comprar la implementan, por lo que una frase anotada en un dispositivo de una marca se restaura en otro. El documento se presentó el 10 de septiembre de 2013, y Bitcoin Core todavía no lo ha implementado nunca. Su autoridad sobre su respaldo proviene de la adopción de la industria, no del proceso de estandarización.
Cómo funciona
Marek Palatinus y Pavol Rusnak, de SatoshiLabs, junto con Aaron Voisine y Sean Bowe, escribieron el BIP-39. La especificación define dos conversiones y nada más.
La primera convierte la aleatoriedad en palabras. Una billetera toma una entropía de 128, 160, 192, 224 o 256 bits, calcula su hash con SHA-256, y añade, como suma de comprobación, los primeros bits de ese hash, en una cantidad igual a la longitud de la entropía dividida entre 32. El total se lee entonces en fragmentos de 11 bits, y cada fragmento selecciona una palabra de una lista de exactamente 2.048. Los cinco tamaños de entropía producen 12, 15, 18, 21 y 24 palabras respectivamente, y los dos que usted realmente encontrará son los extremos de ese rango.
La suma de comprobación es pequeña a propósito. Una frase de 12 palabras lleva cuatro bits de comprobación, por lo que una lista ensamblada al azar con doce palabras válidas pasa la validación aproximadamente una vez de cada dieciséis. Eso basta para detectar casi todos los errores de copiado a mano, y no basta ni de lejos para hacer segura una frase inventada.
La segunda conversión convierte las palabras en una semilla. La frase se normaliza a Unicode NFKD y después se pasa por PBKDF2 usando HMAC-SHA512 durante 2.048 iteraciones, con la sal formada por la cadena literal "mnemonic" seguida de una frase de contraseña de usuario opcional. La salida siempre tiene 512 bits, ya sea que la frase tuviera 12 palabras o 24.
Las listas de palabras son parte del estándar, no un adorno. La lista en inglés está construida de modo que ninguna pareja de palabras comparta sus primeras cuatro letras, y se excluyen los pares visualmente confundibles. También existen listas oficiales para japonés, coreano, español, chino en ambas escrituras, francés, italiano, checo y portugués. Una frase solo tiene sentido frente a la lista de la que procede, por lo que una frase en español introducida en una billetera que solo admite inglés falla de inmediato.
Dónde aparece
Toda pantalla de configuración de una billetera de hardware, todo cuadro de diálogo "restaurar con 12 o 24 palabras" y todo flujo de recuperación en el software habitual es BIP-39 por debajo. La compatibilidad que eso produce es real y vale la pena proteger: es la razón por la que un dispositivo averiado es un inconveniente y no una pérdida.
El punto débil del estándar es lo que deja fuera. Una frase no dice nada sobre qué ruta de derivación, qué tipo de script o qué software de billetera la produjo, y no lleva ningún campo de versión para añadir uno después. Dos billeteras pueden leer las mismas palabras correctamente y aun así mostrarle direcciones distintas y saldos distintos. Anotar la ruta junto con las palabras es la solución habitual, y es enteramente una convención, no algo que la especificación ayude a resolver.
Las 2.048 iteraciones de PBKDF2 son la otra crítica. Ese número era barato en 2013 y hoy es trivial, de modo que el estiramiento no ofrece casi ninguna protección a quien elija una frase de contraseña opcional débil. No protege en absoluto las palabras en sí, que dependen de sus 128 o 256 bits de entropía generada por la máquina.
BIP39 frente a billetera HD
El BIP-39 convierte las palabras en una semilla; el BIP-32 convierte una semilla en un árbol de claves. Son documentos separados de autores distintos, y una billetera puede implementar uno sin el otro. Bitcoin Core es totalmente determinista jerárquico y no admite mnemónicos en absoluto. Electrum es igualmente determinista jerárquico y usa su propio formato de frase con un marcador de versión incorporado. Trate "compatible con BIP-39" como una promesa sobre la lectura de sus palabras, no como una promesa sobre qué direcciones aparecerán después.