Bitcoin come una scacchiera

21 May 2026  ·  12 min di lettura  ·  Bitcoin × Chess

Risposta rapida

Una posizione reale di scacchi con l'esercito standard di 32 pezzi porta circa 148 bit di informazione combinatoria. Due posizioni superano comodamente i 256 bit — la dimensione esatta di una chiave privata Bitcoin. La mappatura è una pulita biiezione combinatoria: ogni metà da 128 bit corrisponde a una sola posizione legale e viceversa.

Provalo dal vivo

Vedi la tua chiave Bitcoin come una posizione di scacchi

Apri il convertitore Bitcoin-scacchiera

100% lato browser · matematica aperta · solo per istruzione e arte

C'è qualcosa di silenziosamente perfetto nel fatto che il gioco da tavolo più popolare della storia e la criptovaluta di maggior successo condividano esattamente la stessa capacità di informazione. Questo articolo spiega perché — e ti mostra come convertire tra i due.

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.

log₂(positions per board) ≈ 148 bits   ·   2 boards ≈ 296 bits   ≥   256 bits = 1 Bitcoin private key ✓

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:

  • Tutti i 32 pezzi sono presenti (nessuna cattura, nessuna promozione).
  • I pedoni occupano caselle qualsiasi delle traverse 2-7 (mai sulle traverse di base).
  • I due alfieri di ciascun lato stanno su caselle di colore opposto (uno chiaro, uno scuro) — come in qualsiasi apertura standard.

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):

WIF = Base58Check(
    0x80 (network byte — mainnet)
    ‖ key (32 bytes)
    ‖ 0x01 (compressed flag)
    ‖ checksum (4 bytes = first 4 of double-SHA-256)
)

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ì:

pubkey = compress(k · G) # 33 bytes
hash160 = RIPEMD-160(SHA-256(pubkey)) # 20 bytes

legacy_address = Base58Check(0x00 ‖ hash160)
segwit_address = Bech32('bc', 0, hash160)

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.

// encode 128-bit BigInt x into a board
let rem = x;
for (const step of placementOrder) { // WK, BK, WQ, BQ, WR, BR, …
  const base = C(step.n, step.k);
  const digit = rem % base;
  rem = rem / base;
  placeOnSquares(unrankCombo(digit, step.n, step.k), step.piece);
}

// decode \u2014 Horner with the same bases in reverse
let x = 0n;
for (let i = steps.length - 1; i >= 0; i--) {
  x = steps[i].digit + steps[i].base * x;
}

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:

  • Bordo verde: la posizione ha tutti i 32 pezzi, pedoni sulle traverse 2\u20137 e alfieri su colori opposti \u2014 la chiave Bitcoin si aggiorna subito.
  • Bordo rosso: il FEN viene letto ma la posizione non può codificare una chiave (pezzi mancanti, pedone su traversa 1 o 8, due alfieri sullo stesso colore, ecc.). La scacchiera la mostra per ispezione. Solo la chiave resta invariata.

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

  • Non usare mai una chiave generata in uno strumento pubblico per fondi reali.
  • Ricorda che la chiave privata è lo stesso numero su mainnet e testnet — cambia solo la codifica visibile. Una scacchiera che deriva un indirizzo mainnet valido deriva anche il corrispondente indirizzo testnet.
  • Usa crypto.getRandomValues() (o RNG hardware) — mai Math.random() — per generare chiavi.
  • Tutta la crittografia deve girare lato client. Il server non deve mai vedere la chiave.

10. Domande frequenti

Due chiavi diverse possono produrre la stessa scacchiera?

No. La mappatura è una biiezione perfetta su 2256 elementi — ogni scacchiera corrisponde esattamente a un numero a 256 bit e viceversa. Unica eccezione: il piccolo insieme fuori da [1, n−1] non sono chiavi Bitcoin valide.

La posizione finale di una partita famosa potrebbe decodificare un indirizzo Bitcoin reale?

Matematicamente sì — ogni posizione legale decodifica un numero a 256 bit e quindi una chiave. Se controlla saldo è un problema di brute-force. Con ~10⁹ indirizzi attivi su 2160, la probabilità è astronomicamente piccola (~10⁻³⁹).

Quali librerie usa il convertitore?

Il convertitore carica @noble/secp256k1 e @noble/hashes — entrambe pure JS, senza dipendenze, auditate, di Paul Miller. Base58Check e Bech32 sono inline in ~80 righe.

Pronto a vedere la tua chiave come una posizione?

Apri il convertitore interattivo
♜ Ti piace giocare con posizioni e stringhe FEN?

Le nostre stanze gratuite di Vote Chess usano lo stesso rendering chessboard.js del convertitore sopra — vota le mosse insieme ad altri giocatori, dal vivo o ogni giorno.

Apri la lobby vote chess

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.


Commenti 0

Sii il primo a commentare!

Accedi per partecipare alla discussione.