1. Perché 256 bit stanno in 64 caselle
Le chiavi private Bitcoin sono interi sulla curva ellittica secp256k1. L'intervallo valido è [1, n−1], dove n ≈ 2256 − 232 − 977. In pratica, quasi qualsiasi stringa di 256 bit è una chiave valida — la probabilità di cadere nella zona proibita è circa 1 su 2224.
Una scacchiera ha 8 × 8 = 64 caselle, ma non ogni disposizione è una posizione legale. L'esercito standard ha 32 pezzi (2 re, 2 donne, 4 torri, 4 alfieri — uno per colore per parte — 4 cavalli, 16 pedoni). Contando le disposizioni su 64 caselle con i pedoni vincolati alle traverse 2–7 si ottengono circa 2148 posizioni. Una scacchiera trasporta 148 bit; due scacchiere circa 296 bit, ben oltre i 256 bit di una chiave.
2. Lo schema dell'esercito standard a 32 pezzi
Invece di inventare nuovi pezzi, il visualizzatore resta sull'esercito standard di 32 pezzi che ogni scacchista conosce. Ogni posizione codificata contiene esattamente: 1 re bianco e 1 nero, 1 donna bianca e 1 nera, 2 torri per colore, 2 alfieri per colore (uno su casa chiara, uno su casa scura), 2 cavalli per colore e 8 pedoni per colore. I vincoli:
Questi tre vincoli definiscono l'insieme preciso di posizioni su cui è costruita la biiezione. L'ordine numerico di posizionamento è fisso (re, donne, torri, alfieri, cavalli, pedoni) così encoder e decoder concordano sui pesi.
3. Anatomia di una chiave privata Bitcoin
Una chiave privata grezza è solo 32 byte casuali. Per spostarla tra wallet, Bitcoin definisce il WIF (Wallet Import Format):
Mainnet vs testnet — una confusione comune. La chiave privata di 32 byte è solo un numero; è identica su ogni rete Bitcoin. L'unica differenza è la codifica visibile: il WIF usa prefisso 0x80 su mainnet e 0xEF su testnet, gli indirizzi bc1… / 1… contro tb1… / m… / n…. La scacchiera codifica la chiave, non la rete — le stesse due posizioni producono entrambi gli indirizzi, dipende solo da come scegli di stamparli. Il nostro convertitore mostra mainnet perché è quello che la gente riconosce.
Per i nostri scopi contano solo i 32 byte centrali — è ciò che dipingiamo sulla scacchiera. Prefisso, flag e checksum vengono aggiunti automaticamente al WIF.
4. Dalla chiave all'indirizzo: ECDSA → HASH160
Data la chiave privata k, la chiave pubblica è il punto sulla curva ellittica P = k · G, dove G è il generatore fisso di secp256k1. Questo passaggio è a senso unico: recuperare k da P è il problema del logaritmo discreto, computazionalmente infattibile.
L'indirizzo si calcola così:
5. Checksum: Base58Check vs Bech32
Base58Check (indirizzi legacy e chiavi WIF) aggiunge 4 byte di doppio SHA-256 troncato e codifica il tutto in un alfabeto a 58 caratteri (senza 0, O, I, l). Qualsiasi refuso ha probabilità di circa 1 su 232 di produrre una stringa valida — praticamente zero.
Bech32 (BIP-173, SegWit) è molto più raffinato: usa un codice BCH a 30 bit su GF(32). Rileva qualsiasi errore di un singolo simbolo con probabilità 1, e qualsiasi coppia di errori con probabilità ≥ 1 − 2−30. Il suo alfabeto a 32 simboli si abbina perfettamente alle 32 caselle chiare della scacchiera — una coincidenza che sfruttiamo qui sotto.
6. La biiezione in codice
Ogni scacchiera rappresenta una metà a 128 bit della chiave (metà bassa sulla scacchiera 1, metà alta sulla 2). Poiché lo schema ammette solo un insieme fissato di posizioni legali, la biiezione non è una semplice tabella per casella \u2014 è un unranking combinatorio. Posiziona i pezzi in ordine fisso (re, donne, torri, alfieri, cavalli, pedoni); ad ogni passo scegli k caselle tra le n vuote rimaste; l'indice della scelta è una cifra in un sistema a base mista, con base C(n, k) per passo.
Gli alfieri hanno un passo leggermente diverso: ogni lato sceglie un alfiere su casa chiara dalle chiare disponibili e uno su casa scura dalle scure, base nL × nD. I pedoni sono limitati alle traverse 2\u20137 filtrando le caselle vuote prima della scelta binomiale. L'algoritmo intero sta in circa 40 righe di JavaScript puro con BigInt; leggibile direttamente nel sorgente del convertitore.
7. Il visualizzatore: due scacchiere, FEN modificabili
Il convertitore disegna entrambe le metà come veri diagrammi di scacchi con chessboard.js e il set Wikipedia \u2014 la stessa libreria e grafica usata dalla sala Vote Chess. La scacchiera a sinistra porta i 128 bit bassi, quella a destra i 128 bit alti. Sotto ogni scacchiera la posizione in FEN compare in un input modificabile.
Puoi incollare qualsiasi FEN. La scacchiera si ridisegna immediatamente così vedi sempre la posizione, e il bordo dell'input diventa verde o rosso a seconda che la posizione rispetti lo schema della biiezione:
Un piccolo pulsante "copia" accanto a ogni input copia la stringa FEN per condividere o salvare. Il selettore "Posizioni famose", il pulsante random e i bottoni PNG/condividi usano la stessa pipeline, quindi tutto ciò che appare su una scacchiera è esportabile come FEN in qualsiasi momento.
8. Applicazioni
- Paper wallet di scacchi. Stampa la posizione e infilala in un libro di aperture. Negabilità plausibile + zero elettronica + leggibile.
- Arte generativa. Conia scacchiere come NFT che sono anche chiavi Bitcoin valide. Ogni disposizione è dimostrabilmente unica.
- Scacchiere vanity. Cerca scacchiere che decodificano in indirizzi che iniziano con lettere scelte (bc1qchess…).
- Educazione. Una scacchiera è il modo più viscerale per insegnare la dimensione dello spazio delle chiavi.
- Memorizzazione. Gli scacchisti memorizzano centinaia di posizioni con facilità. Una scacchiera è molto più facile da ricordare di un WIF di 52 caratteri.
Sii il primo a commentare!