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.
9. Considerazioni di sicurezza
10. Domande frequenti
Mettilo in pratica — Unisciti alla lega
Chess Global League è una competizione mensile di scacchi gratuita con round Elo-valutati, classifiche di gruppo e promozioni/retrocessioni — più un e-Trainer gratuito con puzzle, allenamento delle aperture, finali e partite contro il motore da provare subito.
Sii il primo a commentare!