Con qué se termina
Una frase de recuperación de doce palabras cuya aleatoriedad salió de dados tirados y mirados, convertida en palabras por dos programas escritos por gente distinta que coincidieron, y restaurada en una billetera de solo lectura antes de que guarde nada.
Vale la pena decir con claridad por qué molestarse. Cualquier otra forma de crear una seed pide confiar en un generador de números aleatorios que no se puede inspeccionar: un chip dentro de un dispositivo firmante, o el pozo de entropía de un sistema operativo. Casi con seguridad están bien. Pero "casi con seguridad está bien" es una afirmación que se acepta bajo la palabra de otro, y los dados son la única fuente de aleatoriedad que se puede mirar con los propios ojos y contar. Coldcard reconstruyó su manejo de entropía en 2026 justamente por eso: el cambio fue sobre qué puede comprobar quien lo usa, no sobre un chip mejor.
Esta guía no es para todo el mundo. Para mover un monto modesto fuera de un exchange por primera vez, el generador de un dispositivo firmante serio es razonable, y este procedimiento agrega varias formas nuevas de perder el dinero. Conviene leer antes qué cuesta realmente la autocustodia y volver cuando el monto justifique el cuidado.
Antes de empezar
- Dados. Un dado de dieciséis caras marcado
0-9yA-F, que se vende como dado hexadecimal o d16, o dados comunes de seis caras. Los dos sirven; cambia la cantidad de tiradas, y la sección siguiente explica por qué. - Papel y lapicera. No un teléfono, no una app de notas, no una foto.
- Una forma de convertir tiradas en palabras, sin conexión. Un dispositivo firmante que lo haga en el propio equipo, como SeedSigner 0.8.7 o una Coldcard, o una computadora con la red apagada.
- Una segunda implementación independiente para la comprobación. Si la primera conversión ocurre en un dispositivo, la segunda ocurre en una computadora, y al revés. Correr dos veces el mismo programa no prueba nada.
- Una superficie plana con borde, para que un dado que se cae de la mesa no se convierta en una tirada que hay que adivinar.
Comprobado en agosto de 2026 contra la especificación BIP-39, la herramienta BIP39 de Ian Coleman en la versión 0.5.6, python-mnemonic, Sparrow 2.5.3 y SeedSigner 0.8.7. Donde un número de abajo sale de la documentación de un proyecto y no de la especificación, el enlace apunta a esa documentación.
La aritmética, porque decide cuántas veces se tira
Un dado de dieciséis caras tiene dieciséis resultados igualmente probables, así que una
tirada aporta log2(16) = 4 bits. Cada tirada es exactamente un carácter hexadecimal.
- 32 tiradas dan 128 bits, escritos como 32 caracteres hexadecimales, que BIP-39 convierte en una frase de doce palabras.
- 64 tiradas dan 256 bits, escritos como 64 caracteres hexadecimales, que se convierten en una frase de veinticuatro palabras.
La cantidad de palabras sale de la aritmética en lugar de elegirse: BIP-39 agrega un checksum de un bit por cada 32 bits de entropía, así que 128 bits más 4 bits de checksum son 132 bits, y 132 dividido por 11 bits por palabra da doce palabras.
Doce palabras no son una billetera más débil en ningún sentido que le importe a una persona. 128 bits es el nivel de seguridad de la curva elíptica sobre la que viven las claves, así que una seed de 256 bits no compra una clave más fuerte: compra algo más largo para anotar y transcribir mal.
Un dado de seis caras aporta log2(6) = 2.58 bits por tirada, y por eso las cuentas quedan
incómodas. Coldcard exige
50 tiradas para doce palabras y 99 para veinticuatro,
y aplica SHA-256 a la cadena de tiradas en lugar de leerla como dígitos, porque los dígitos
1 a 6 no son un valor uniforme de cuatro bits y tratarlos como tal tiraría entropía a
la basura.
El costo que se está aceptando
Se saca al fabricante del modelo de amenaza y se pone a uno mismo adentro. Cada una de estas es una forma real en la que se perdieron monedas:
- Un error de transcripción en 32 caracteres hexadecimales produce una frase que parece válida, para una billetera que no es la suya y que no se puede recuperar.
- Un dado sesgado o cargado baja la entropía en silencio, y no se nota.
- Una computadora que se creía sin conexión y no lo estaba, o que escribió la frase en un archivo de swap, en el historial de la terminal o en la caché del navegador.
- Un patrón de tiradas "inteligente". Volver a tirar porque un resultado "se ve raro", o parar antes porque los dígitos ya parecen bastante aleatorios, reemplaza el azar por el propio criterio, que es exactamente lo que se estaba evitando.
El modo de falla del camino habitual, confiar en el generador de un dispositivo, es que el generador tenga una puerta trasera. El modo de falla de este camino es haberse equivocado. Entre las personas que probaron los dos, el segundo costó mucho más dinero que el primero.
Pasos
Hacerlo de una sentada, con la puerta cerrada y sin nadie filmando.
- Apagar la red en la máquina que se va a usar para la conversión, o usar un dispositivo firmante y saltar al paso 8.
- Abrir la herramienta de conversión desde una copia local. Descargar la release de BIP39 de Ian Coleman, verificar el archivo contra el hash publicado de esa release, y abrir el único archivo HTML desde el disco sin red disponible.
- Dibujar en el papel una grilla de 32 casillas numeradas. Numerarlas es lo que evita perder la cuenta.
- Tirar el dado una vez. Anotar el carácter que muestra en la casilla 1.
- Repetir hasta llenar las 32 casillas, en orden, anotando cada resultado antes de volver a tirar. Si un dado queda torcido o se cae de la mesa, esa tirada no ocurrió: se tira de nuevo. Descartar una tirada ambigua está bien. Descartar un resultado que no gusta no.
- Leer los 32 caracteres del papel, en voz alta, y contarlos. Tienen que ser exactamente
- Escribirlos en el campo de entropía de la herramienta con el tipo puesto en
Hex [0-9A-F]. Confirmar que la herramienta informa 128 bits antes de mirar las palabras. - En un dispositivo firmante, en cambio: elegir la opción de seed por tiradas de dados, ingresar 50 tiradas de seis caras para doce palabras, y dejar que la conversión ocurra en el dispositivo.
- Anotar las palabras resultantes, en orden, numeradas, en papel. Escribirlas una sola vez desde la pantalla, y después cerrar la herramienta.
- Apagar la máquina. Si era un sistema live arrancado desde un medio extraíble, ese es el momento en que la entropía deja de existir en cualquier lugar que no sea el papel.
Cómo comprobar que salió bien
Hacer las cuatro cosas antes de que la billetera reciba un solo satoshi.
- Convertir las mismas tiradas otra vez con una implementación distinta. En una segunda
máquina sin conexión, correr
python-mnemonico un dispositivo firmante contra los mismos 32 caracteres, leídos del papel y no copiados de la primera herramienta. Las doce palabras tienen que ser idénticas. Si no lo son, una de las dos cargas tiene un error de tipeo, y se busca en lugar de adivinar cuál salida conservar. - Restaurar la frase, no crear una billetera a partir de ella. En Sparrow 2.5.3, crear una billetera de solo lectura importando la frase, y anotar la primera dirección de recepción.
- Comprobar que la otra implementación da la misma dirección, sobre la misma ruta de derivación. Que dos herramientas deriven la misma primera dirección desde las mismas palabras es la comprobación más fuerte disponible sin gastar nada.
- Enviar un monto chico y volver a gastarlo hacia afuera. No solo recibir: recibir, y después construir y difundir un gasto desde la billetera restaurada hacia una dirección propia en otro lado. Recibir prueba que la dirección estaba bien. Gastar prueba que se tiene la clave.
Recién después del paso 4 la billetera recibe el resto.
Si algo sale mal
La herramienta dice que la frase es inválida. Es el checksum haciendo su trabajo: una palabra está mal o fuera de orden. Las palabras de BIP-39 son únicas en sus primeras cuatro letras, así que conviene comparar de a cuatro letras y no palabras enteras.
Las dos implementaciones dan palabras distintas. No elegir una. Volver a cargar los 32
caracteres en las dos, despacio. Los errores de transcripción hexadecimal se concentran
entre 0 y D, entre 8 y B, y en la S, que no es un dígito hexadecimal y casi
siempre es un 5 mal leído.
La primera dirección de recepción no coincide entre herramientas. Casi siempre es la
ruta de derivación y no la seed. Sparrow usa segwit nativo por defecto, m/84'/0'/0'; una
herramienta puesta en m/44'/0'/0' va a dar una dirección completamente distinta, y
igualmente correcta, desde las mismas palabras.
Se perdió la cuenta de las tiradas. Empezar de nuevo. Una frase armada con 29 tiradas rellenadas hasta 32 es una frase con 116 bits de entropía que uno cree que tiene 128.
Se escribió la frase en algo conectado. Esa seed está quemada. Generar otra y mover los fondos. No hay forma de des-ver una frase de recuperación, y a las monedas no les consta que la exposición fue un accidente.
Corrección, 20 de agosto de 2026. Una versión anterior de este artículo decía que 32 tiradas de un dado hexadecimal producen una clave privada hexadecimal de 64 caracteres. Producen un valor de 32 caracteres y 128 bits; 64 caracteres necesitarían 64 tiradas. Esa versión también describía el resultado como una clave privada en crudo y no como entropía BIP-39, que no es como ninguna billetera actual espera que se maneje una seed generada con dados. Ambas cosas fueron corregidas arriba.
