50 tiradas de dado. 12 palabras. Cero confianza.
50 dice rolls. 12 words. Zero trust.
Cuando generas una semilla en una cartera, confías en que su generador de números aleatorios es bueno y honesto. No puedes comprobarlo. Con un dado sí: la aleatoriedad la produces tú, delante de ti, y cada paso del cálculo se puede verificar a mano.
When a wallet generates a seed for you, you're trusting that its random number generator is both sound and honest. You can't check either. With a die you can: you produce the randomness yourself, in front of you, and every step of the calculation can be verified by hand.
Aquí solo se explica el método y se distribuyen los scripts. Una semilla real se genera en un ordenador sin conexión a internet, ejecutando el script en tu propia máquina. Ningún navegador es un sitio seguro para esto, incluido este.
This page only explains the method and hosts the scripts. A real seed is generated on a computer with no internet connection, by running the script on your own machine. No browser is a safe place for this — including this one.
El método, en pocas palabras
The method, in short
BIP-39 es el estándar que convierte aleatoriedad en 12 palabras memorizables. Aquí esa aleatoriedad la produces tú, con un dado en la mano. Así es todo el proceso, de principio a fin:
BIP-39 is the standard that turns randomness into 12 memorable words. Here you produce that randomness yourself, die in hand. Here's the whole process, start to finish:
Descarga uno de los dos scripts —o los dos, para comparar— y guárdalos en un USB en el que confíes. Ese USB se va a un ordenador sin conexión: wifi apagado, cable de red desconectado y, si puedes, arrancado desde un sistema «live» que se olvide de todo al apagarse. Para esto recomendamos Tails: no es obligatorio, pero está diseñado precisamente para no dejar rastro y viene ya bastante asegurado por defecto. Fuera de eso no hace falta nada especial: vale cualquier portátil viejo, siempre que en ese momento esté completamente aislado. A partir de aquí, todo ocurre en esa máquina y no sale de ella.
Download one of the two scripts — or both, to cross-check — and save them to a USB drive you trust. That drive goes to a computer with no connection: wifi off, network cable unplugged, and ideally booted from a live system that forgets everything on shutdown. We recommend Tails for this: it's not required, but it's built specifically to leave no trace and comes reasonably secure by default. Beyond that, nothing special is required — any old laptop works, as long as it's fully isolated at that moment. From here on, everything happens on that machine and stays there.
Tira un dado de verdad 50 veces y apunta cada número en un papel cualquiera. Ese papel es solo un borrador de trabajo: en cuanto tengas tus 12 palabras, lo destruyes. Esas 50 tiradas por sí solas no abren ninguna cartera —son la materia prima, no la semilla— así que no hay ningún motivo para conservarlas.
Roll a real die 50 times and jot down each number on any scrap of paper. That paper is just a working draft: as soon as you have your 12 words, destroy it. Those 50 rolls on their own don't open any wallet — they're the raw material, not the seed — so there's no reason to keep them.
Lanza el script en ese ordenador desconectado e introduce las 50 tiradas cuando te las pida. Antes de continuar, repasa dos veces lo que has escrito contra tu papel: un solo número cambiado da una semilla completamente distinta, y el script no tiene forma de avisarte de un despiste.
Run the script on that offline computer and enter the 50 rolls when it asks for them. Before moving on, check what you typed against your paper twice: a single wrong digit produces a completely different seed, and the script has no way of warning you about a slip.
El script te devuelve 12 palabras en inglés, en un orden concreto. Anótalas a mano, en ese mismo orden, en un papel que esta vez sí vas a conservar. Ese papel es tu semilla.
The script gives you back 12 words in English, in a specific order. Write them down by hand, in that same order, on paper you will actually keep this time. That paper is your seed.
Extra muy recomendable: añade a tu semilla una passphrase propia de al menos 22 caracteres, mezclando mayúsculas, minúsculas, números y algún símbolo. Es una clave adicional que memorizas y que nunca escribes junto a las 12 palabras: si alguien encuentra tu papel, sin la passphrase no tiene nada. A cambio, si la olvidas, la semilla queda inservible para siempre, así que cuídala tanto como las palabras.
A highly recommended extra: add your own passphrase to the seed, at least 22 characters long, mixing upper and lower case, numbers and a symbol or two. It's an additional key you memorise and never write down next to the 12 words: if someone finds your paper, without the passphrase they have nothing. The trade-off is that if you forget it, the seed is gone for good — so guard it as carefully as the words themselves.
¿Por qué funciona? Ver las matemáticas del método (manual detallado) Why does it work? See the method's math (detailed manual)
Las tiradas forman un número en base 6
The rolls form a number in base 6
Un dado de 6 caras aporta log₂(6) = 2,585 bits por tirada, así que 50 tiradas dan 129,25 bits: suficiente para los 128 que necesitamos. El dado no tiene cara 0, así que a cada tirada se le resta 1.
A six-sided die yields log₂(6) = 2.585 bits per roll, so 50 rolls give 129.25 bits — enough for the 128 we need. A die has no zero face, so each roll has 1 subtracted from it.
La primera tirada es el dígito más significativo. Cambiar el orden de las tiradas produce una semilla completamente distinta, así que la secuencia importa tanto como los números.
The first roll is the most significant digit. Reordering the rolls produces a completely different seed, so the sequence matters as much as the numbers.
Recortar a 128 bits exactos
Trim to exactly 128 bits
Sobran 1,25 bits, así que nos quedamos con los 128 más bajos. Eso introduce un sesgo mínimo: la entropía efectiva baja a 127,97 bits en vez de 128.
There's a 1.25-bit surplus, so we keep the lowest 128. That introduces a tiny bias: effective entropy drops to 127.97 bits instead of 128.
Los scripts incluyen un bloque comentado que elimina el sesgo por completo mediante rechazo, a cambio de repetir las 50 tiradas el 15,8 % de las veces.
The scripts include a commented-out block that removes the bias entirely by rejection, at the cost of re-rolling all 50 dice 15.8% of the time.
Añadir 4 bits de checksum
Add 4 checksum bits
Se calcula SHA-256 de la entropía y se toman los 4 primeros bits del resultado. No aportan seguridad: sirven para que, si copias mal una palabra, la cartera rechace la frase en vez de abrir en silencio una cuenta vacía que no es la tuya.
Take SHA-256 of the entropy and keep the first 4 bits of the result. They add no security — they exist so that if you mis-copy a word, your wallet rejects the phrase instead of silently opening an empty account that isn't yours.
Partir los 132 bits en 12 grupos de 11
Split the 132 bits into 12 groups of 11
La lista oficial tiene 2048 = 2¹¹ palabras, así que cada palabra codifica exactamente 11 bits. Y 128 + 4 = 132 = 12 × 11, sin que sobre ni falte un bit. Todo el diseño de BIP-39 gira en torno a esa división limpia.
The official list has 2048 = 2¹¹ words, so each word encodes exactly 11 bits. And 128 + 4 = 132 = 12 × 11, with not a single bit left over. BIP-39's whole design turns on that clean division.
Los 4 últimos bits (recuadro rojo) son el checksum. Ejemplo público de demostración: nunca uses esta semilla.
The last 4 bits (red outline) are the checksum. Public demo example: never use this seed.
Cada número es una posición en la lista
Each number is a position in the list
El índice se busca tal cual en la lista oficial de 2048 palabras. Un detalle útil: las 4 primeras letras de cada palabra son únicas, así que puedes apuntar solo cuatro letras sin perder información — práctico si grabas la semilla en metal.
The index is looked up directly in the official 2048-word list. A useful detail: the first 4 letters of every word are unique, so you can write down just four letters without losing information — handy when stamping a seed into metal.
Los pasos 1 y 4 son la misma operación en sentidos opuestos: una conversión de base. Primero leemos los dados en base 6 para construir un número; después escribimos ese número en base 2048 para obtener las palabras.
Steps 1 and 4 are the same operation in opposite directions: a base conversion. First we read the dice in base 6 to build a number; then we write that number in base 2048 to get the words.
Descarga de los scripts
Download the scripts
La misma lógica en dos lenguajes, sin dependencias externas. Antes de decidirte, esto es lo que ganas y lo que pierdes frente a otras opciones.
The same logic in two languages, no external dependencies. Before you decide, here's what you gain and what you give up compared with other options.
Ventajas y desventajas
Advantages and drawbacks
A favor
In favour
- Aleatoriedad auditable. No dependes del generador de nadie. La ves caer sobre la mesa.
- Verificable paso a paso. Cualquiera puede repetir el cálculo con lápiz y papel y llegar al mismo resultado.
- Sin dependencias. Los dos scripts usan solo la biblioteca estándar de su lenguaje. Nada que descargar, nada que pueda estar comprometido.
- Protege de un fallo concreto. Ha habido dispositivos con generadores rotos. Un dado no tiene firmware.
- Se enseña. Al terminar entiendes de verdad qué es tu semilla, no solo que la tienes.
- Auditable randomness. You don't depend on anyone's generator. You watch it land on the table.
- Verifiable step by step. Anyone can redo the calculation with pen and paper and reach the same result.
- No dependencies. Both scripts use only their language's standard library. Nothing to download, nothing that can be compromised.
- Guards against a real failure. Devices have shipped with broken generators. A die has no firmware.
- It teaches. When you're done you actually understand what your seed is, not just that you have one.
En contra
Against
- La semilla pasa por un ordenador de propósito general. Una cartera hardware nunca deja salir la clave del dispositivo. Aquí sí aparece en pantalla y en memoria.
- Es fácil equivocarse. Anotar mal una de las 50 tiradas, o una palabra, y el resultado es otro. El checksum ayuda, pero no lo cubre todo.
- Requiere disciplina. Sin red, sin fotos, sin copiar y pegar, sin dejar rastro en el historial. Un solo descuido lo invalida.
- Un dado sesgado te arruina el trabajo. Un dado barato con esquinas desgastadas no es uniforme.
- No es para todo el mundo. Si no vas a seguir el proceso con cuidado, una cartera hardware reputada te protege más que un método manual mal ejecutado.
- The seed passes through a general-purpose computer. A hardware wallet never lets the key leave the device. Here it does appear on screen and in memory.
- Mistakes are easy. Mis-record one of the 50 rolls, or one word, and you get a different result. The checksum helps, but it doesn't catch everything.
- It demands discipline. No network, no photos, no copy-paste, no shell history. One lapse undoes it.
- A biased die ruins the work. A cheap die with worn corners isn't uniform.
- It isn't for everyone. If you won't follow the process carefully, a reputable hardware wallet protects you better than a manual method done badly.
Los dos scripts
The two scripts
Elige el que ya tengas instalado, o el que sepas leer mejor: los dos están comentados paso a paso y producen resultados idénticos. Cada uno incluye --test, que comprueba los vectores oficiales de BIP-39, y --detalle, que imprime todos los valores intermedios.
Pick whichever you already have installed, or whichever you can read best: both are commented step by step and produce identical results. Each includes --test, which checks the official BIP-39 vectors, and --detalle, which prints every intermediate value.
Puedes escribirlas de una en una o varias juntas, separadas por espacios (3 1 6 4 2 5 6 1 ...). Cualquier carácter que no sea del 1 al 6 se ignora, con un aviso en pantalla salvo para espacios, comas, puntos y guiones.
You can type them one at a time or several at once, separated by spaces (3 1 6 4 2 5 6 1 ...). Any character outside 1-6 is ignored, with an on-screen warning except for spaces, commas, periods and dashes.
Python
La opción por defecto: ya viene instalado en macOS y en cualquier Linux. Es el más corto y el más fácil de leer sin saber programar.
The default choice: already installed on macOS and any Linux. It's the shortest and the easiest to read without programming experience.
RequisitosRequirements- Python 3.2 o superior
- Preinstalado en macOS y Linux
- Sin dependencias: solo
hashlib - En Windows: instálalo desde python.org, o usa WSL
- Python 3.2 or later
- Preinstalled on macOS and Linux
- No dependencies: just
hashlib - On Windows: install it from python.org, or use WSL
JavaScript
Para quien ya trabaja con Node. Usa BigInt, así que el propio lenguaje impide perder precisión por accidente.
For anyone already working with Node. It uses BigInt, so the language itself prevents accidental loss of precision.
- Node.js 10.4 o superior
- Necesita
BigInt, nativo desde esa versión - Sin
npm install: solocryptoyreadline - Descarga: nodejs.org, se recomienda la versión LTS
- Node.js 10.4 or later
- Needs
BigInt, native since that version - No
npm install: justcryptoandreadline - Download: nodejs.org, the LTS version is recommended
Los dos scripts de esta página van dentro de este fichero HTML, y al abrir el visor el navegador calcula su SHA-256 y lo compara con el hash publicado. Si algo no cuadrara, lo verías en rojo. Es el paso 3 del método funcionando delante de ti.
Both scripts on this page live inside this HTML file, and when you open the viewer your browser computes their SHA-256 and compares it with the published hash. If anything didn't match, you'd see it in red. It's step 3 of the method working in front of you.
Guarda esta página (Ctrl-S / Cmd-S) y llévatela al ordenador sin red: funciona entera sin conexión, scripts incluidos. Aun así, la verificación que de verdad cuenta es la firma GPG de abajo.
Save this page (Ctrl-S / Cmd-S) and take it to your offline computer: it works completely without a connection, scripts included. Even so, the verification that really counts is the GPG signature below.
Verificar antes de usar
Verify before you use it
Si alguien comprometiera este servidor podría cambiar los scripts y los hashes que aparecen arriba. Por eso la verificación real ocurre en tu terminal, contra una identidad publicada en varios sitios a la vez.
If someone compromised this server they could change both the scripts and the hashes shown above. That's why real verification happens in your terminal, against an identity published in several places at once.
Una vez: confiar en la clave
Once: trust the key
Debe salir exactamente esta huella. Compárala con los otros canales (repositorio, servidor de claves, Nostr). Este es el único paso que de verdad importa, y el que todo el mundo se salta:
It must print exactly this fingerprint. Compare it against the other channels (repository, key server, Nostr). This is the one step that really matters, and the one everybody skips:
En cada descarga
On every download
En Windows con PowerShell no existe la comprobación automática, hay que comparar a mano con Get-FileHash bip39_dados.py -Algorithm SHA256.
Windows PowerShell has no automatic check; compare by hand with Get-FileHash bip39_dados.py -Algorithm SHA256.
GPG dirá Good signature from "ADN" y justo debajo:
GPG will say Good signature from "ADN" and right below it:
Ese aviso es normal. Solo significa que no has marcado la clave como de confianza en tu llavero, algo que casi nadie hace. Lo que importa es que ponga Good signature y que la huella coincida. La identidad debe ser exactamente ADN <fotoshi@protonmail.com>; cualquier otra es motivo para detenerse.
That warning is normal. It only means you haven't marked the key as trusted in your keyring, which almost nobody does. What matters is that it says Good signature and that the fingerprint matches. The identity must be exactly ADN <fotoshi@protonmail.com>; anything else is a reason to stop.
Antes de usarlo con dinero real
Before using this with real money
- El ordenador está sin red: WiFi apagado y cable desconectado. Idealmente arrancado desde un USB live que se olvide todo al apagar.
- Has verificado la firma y comparado la huella con al menos dos canales distintos.
- Has ejecutado
--testy ha pasado los vectores oficiales. - Usas un dado de casino, con aristas vivas, sobre una superficie dura.
- Vas a apuntar las palabras en papel, en orden. Nada de fotos, ficheros ni gestores de contraseñas.
- Vas a verificar la entropía en hexadecimal con una segunda herramienta antes de enviar fondos.
- Sabes que vas a borrar la pantalla al terminar y apagar la máquina.
- Has probado a restaurar la semilla en una cartera vacía antes de confiarle nada.
- The computer is offline: WiFi off, cable unplugged. Ideally booted from a live USB that forgets everything on shutdown.
- You have verified the signature and compared the fingerprint against at least two separate channels.
- You ran
--testand it passed the official vectors. - You're using a casino-grade die with sharp edges, on a hard surface.
- You will write the words on paper, in order. No photos, no files, no password managers.
- You will cross-check the hex entropy with a second tool before sending funds.
- You know to clear the screen afterwards and shut the machine down.
- You have test-restored the seed into an empty wallet before trusting it with anything.
Este material se publica bajo licencia MIT, tal cual y sin garantía de ningún tipo. Eres responsable de auditar el código que ejecutas y de custodiar tu propia semilla. Nadie puede recuperarla por ti.
This material is published under the MIT licence, as is and without warranty of any kind. You are responsible for auditing the code you run and for safeguarding your own seed. Nobody can recover it for you.