1. Por qué 256 bits caben en 64 casillas
Las claves privadas de Bitcoin son enteros sobre la curva elíptica secp256k1. El rango válido es [1, n−1], donde n ≈ 2256 − 232 − 977. En la práctica, casi cualquier cadena de 256 bits es una clave válida — la probabilidad de caer en la zona prohibida es aproximadamente 1 entre 2224.
Un tablero de ajedrez tiene 8 × 8 = 64 casillas, pero no toda disposición es una posición legal. El ejército estándar tiene 32 piezas (2 reyes, 2 damas, 4 torres, 4 alfiles — uno de cada color por bando — 4 caballos, 16 peones). Contando las formas de colocarlos en 64 casillas con los peones restringidos a las filas 2–7 obtenemos aproximadamente 2148 posiciones distintas. Un tablero guarda 148 bits; dos tableros aproximadamente 296 bits, que absorben cómodamente los 256 bits de una clave.
2. El esquema de 32 piezas estándar
En lugar de inventar piezas nuevas, el visualizador se atiene al ejército estándar de 32 piezas que todo ajedrecista conoce. Cada tablero codificado contiene exactamente: 1 rey blanco, 1 rey negro, 1 dama blanca, 1 dama negra, 2 torres de cada color, 2 alfiles de cada color (uno en casilla clara y otro en oscura), 2 caballos de cada color y 8 peones de cada color. Las restricciones son:
Estas tres restricciones definen el conjunto exacto de posiciones sobre el que se construye la biyección. El orden numérico de colocación es fijo (reyes, damas, torres, alfiles, caballos, peones) para que codificador y decodificador coincidan en los pesos.
3. Anatomía de una clave privada Bitcoin
Una clave privada en crudo son sólo 32 bytes aleatorios. Para transportarla entre monederos, Bitcoin define el WIF (Wallet Import Format):
Mainnet vs testnet — confusión común. La clave privada de 32 bytes es sólo un número; es idéntica en toda red Bitcoin. La única diferencia es la codificación visible: WIF usa prefijo 0x80 en mainnet y 0xEF en testnet, las direcciones usan bc1… / 1… frente a tb1… / m… / n…. El tablero codifica la clave, no la red — las mismas dos posiciones generan ambas direcciones, depende sólo de cómo decidas imprimirlas. Nuestro conversor muestra mainnet porque es lo reconocible.
Para nuestro propósito, sólo importan los 32 bytes centrales — eso es lo que pintamos en el tablero. Prefijo, flag y checksum se añaden automáticamente al mostrar el WIF.
4. De clave a dirección: ECDSA → HASH160
Dada la clave privada k, la clave pública es el punto de la curva elíptica P = k · G, donde G es el punto generador fijo de secp256k1. Este paso es unidireccional: recuperar k a partir de P es el problema del logaritmo discreto, computacionalmente infactible.
La dirección se calcula como:
5. Sumas de verificación: Base58Check vs Bech32
Base58Check (direcciones legacy y claves WIF) añade 4 bytes de doble-SHA-256 truncado al payload y lo codifica en un alfabeto de 58 caracteres (sin 0, O, I, l). Cualquier error de tipeo tiene una probabilidad de aproximadamente 1 entre 232 de producir una cadena "válida".
Bech32 (BIP-173, SegWit) es mucho más inteligente: usa un código BCH de 30 bits sobre GF(32). Detecta cualquier error de un símbolo con probabilidad 1, y cualquier par de errores con probabilidad ≥ 1 − 2−30. Su alfabeto de 32 símbolos también encaja perfectamente con las 32 casillas claras del tablero — una coincidencia que aprovechamos abajo.
6. La biyección en código
Cada tablero representa una mitad de 128 bits de la clave (mitad baja en el tablero 1, mitad alta en el tablero 2). Como el esquema admite sólo un conjunto fijo de posiciones legales, la biyección no es una simple búsqueda por casilla \u2014 es una unranking combinatoria. Coloca las piezas en orden fijo (reyes, damas, torres, alfiles, caballos, peones); en cada paso, elige k casillas entre las n vacías restantes; el índice de la elección es un dígito en un sistema mixto cuya base en cada paso es C(n, k).
Los alfiles tienen un paso ligeramente distinto: cada bando elige un alfil de casilla clara entre las claras disponibles y uno oscuro entre las oscuras, así la base es nL × nD. Los peones se restringen a las filas 2\u20137 filtrando las casillas vacías restantes antes del binomio. El algoritmo completo cabe en unas 40 líneas de JavaScript puro con BigInt; puedes leerlo en el código fuente del conversor.
7. El visualizador: dos tableros, FEN editables
El conversor renderiza ambas mitades como diagramas reales con chessboard.js y el set Wikipedia \u2014 la misma librería y gráficos que usa la sala de Vote Chess de la liga. El tablero de la izquierda lleva los 128 bits bajos de la clave, el de la derecha los 128 bits altos. Bajo cada tablero aparece la posición en FEN dentro de un input editable.
Puedes pegar cualquier FEN. El tablero se redibuja al instante para que siempre veas la posición, y el borde del input se pone verde o rojo según si la posición encaja en el esquema:
Un pequeño botón de copiar junto a cada input copia la cadena FEN para compartir o guardar. El selector de "Posiciones famosas", el botón aleatorio y los botones PNG/compartir usan la misma tubería, así que todo lo que aparezca puede exportarse como FEN.
8. Aplicaciones
- Cartera de papel ajedrecística. Imprime la posición y métela en un libro de aperturas. Negación plausible + cero electrónica + legible por humanos.
- Arte generativo. Acuña tableros como NFTs que también sean claves Bitcoin válidas. Cada disposición es demostrablemente única.
- Tableros vanity. Buscar tableros que decodifican a direcciones que empiezan con letras elegidas (bc1qchess…).
- Educación. Un tablero es la forma más visceral de enseñar la magnitud de los espacios de claves.
- Memorización. Los ajedrecistas memorizan cientos de posiciones sin esfuerzo. Un tablero es muchísimo más fácil de recordar que 52 caracteres WIF.
¡Sé el primero en comentar!