Bitcoin ako šachovnica

21 May 2026  ·  12 min čítania  ·  Bitcoin × Chess

Rýchla odpoveď

Reálna šachová pozícia so štandardnou 32-figúrovou armádou nesie približne 148 bitov kombinatorickej informácie. Dve pozície spolu pohodlne presahujú 256 bitov — presnú veľkosť Bitcoin súkromného kľúča. Mapovanie je čistá kombinatorická bijekcia: každá 128-bitová polovica zodpovedá práve jednej legálnej pozícii a naopak.

Vyskúšajte naživo

Pozrite si svoj Bitcoin kľúč ako šachovú pozíciu

Otvoriť prevodník Bitcoin-šachovnica

100 % v prehliadači · otvorená matematika · len na vzdelávanie a umenie

Je čosi tichú dokonalé v tom, že najpopulárnejšia stolová hra v dejinách a najúspešnejšia kryptomena majú presne rovnakú informačnú kapacitu. Tento článok vysvetľuje prečo — a ukáže vám, ako medzi nimi prevádzať.

1. Prečo sa 256 bitov zmestí na 64 polí

Bitcoin súkromné kľúče sú celé čísla na eliptickej krivke secp256k1. Platný rozsah je [1, n−1], kde n ≈ 2256 − 232 − 977. V praxi je takmer každý 256-bitový reťazec platný kľúč — pravdepodobnosť zlej hodnoty je 1 z 2224.

Šachovnica má 8 × 8 = 64 polí, ale nie každé rozloženie je legálna pozícia. Štandardná armáda má presne 32 figúr (2 krále, 2 dámy, 4 veže, 4 strelci — jeden každej farby na stranu — 4 jazdci, 16 pešiakov). Počet spôsobov, ako ich umiestniť na 64 polí s pešiakmi obmedzenými na rady 2 až 7, je približne 2148. Jedna tabuľa teda nesie 148 bitov; dve tabule približne 296 bitov, čo bohato pokrýva 256 bitov kľúča.

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

2. Schéma 32-figúrovej štandardnej armády

Namiesto vymýšľania nových figúr sa vizualizátor drží štandardnej 32-figúrovej armády, ktorú pozná každý šachista. Každá zakódovaná pozícia obsahuje presne: 1 bieleho a 1 čierneho kráľa, 1 bielu a 1 čiernu dámu, 2 veže každej farby, 2 strelcov každej farby (jeden na svetlom a jeden na tmavom poli), 2 jazdcov každej farby a 8 pešiakov každej farby. Obmedzenia:

  • Všetkých 32 figúr je prítomných (žiadne kapcie ani premeny).
  • Pešiaci sú na ľubovoľných poliach radov 2 až 7 (nikdy na krajných radoch).
  • Dvojica strelcov každej strany sedí na poliach opačnej farby (jeden na svetlom, jeden na tmavom) — ako v ľubovoľnom štandardnom otvorení.

Tieto tri obmedzenia definujú presnú množinu pozícií, nad ktorou je bijekcia postavená. Číselné poradie umiestňovania je pevné (králi, dámy, veže, strelci, jazdci, pešiaci), aby kódovač a dekódovač súhlasili na váhach.

3. Anatómia Bitcoin súkromného kľúča

Surový súkromný kľúč je len 32 náhodných bajtov. Aby sa dal jednoducho prenášať medzi peňaženkami, Bitcoin definuje 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 — časté nedorozumenie. Samotný 32-bajtový súkromný kľúč je len číslo; je rovnaký na každej Bitcoin sieti. Jediný rozdiel je viditeľné kódovanie: WIF používa prefix 0x80 na mainnete a 0xEF na testnete, adresy bc1… / 1… oproti tb1… / m… / n…. Šachovnica kóduje kľúč, nie sieť — rovnaké dve pozície dávajú obe adresy, záleží len od toho, ako ich vypíšeme. Náš prevodník ukáže mainnet, lebo to každý pozná.

Pre náš účel sú dôležité len stredné 32 bajty — to je to, čo nakreslíme na tabuľa. Prefix, vlajka a checksum sa pri zobrazení WIF doplnia automaticky.

4. Od kľúča k adrese: ECDSA → HASH160

Pre súkromný kľúč k je verejný kľúč bodom eliptickej krivky P = k · G, kde G je pevný generujúci bod secp256k1. Tento krok je jednosmerný: získať k z P je diskrétne logaritmus, výpočtovo nedosiahnuteľný.

Adresa sa vypočíta ako:

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. Kontrolné súčty: Base58Check vs Bech32

Base58Check (legacy adresy a WIF kľúče) pripája 4-bajtový skrátený dvojitý SHA-256 a všetko zakóduje v 58-znakovej abecede (bez 0, O, I, l). Akýkoľvek preklep má pravdepodobnosť asi 1 z 232, že dá platný reťazec — prakticky nulu.

Bech32 (BIP-173, SegWit) je výrazne sofistikovanejší: používa 30-bitový BCH polynomický kód nad GF(32). Detekuje akýkoľvek jednosymbolový chybu s pravdepodobnosťou 1, dve chyby s pravdepodobnosťou ≥ 1 − 2−30. Jeho 32-symbolová abeceda krásne sedí na 32 svetlých polí šachovnice — túto zhodu využívame nižšie.

6. Bijekcia v kóde

Každá tabuľa reprezentuje 128-bitovú polovicu kľúča (nízka polovica na tabuli 1, vysoká na tabuli 2). Keďže schéma povoľuje iba pevnú množinu legálnych pozícií, bijekcia nie je jednoduché hľadanie podľa poľa \u2014 je to kombinatorická unranking. Umiestňujte figúry v pevnom poradí (králi, dámy, veže, strelci, jazdci, pešiaci); v každom kroku vyberte k polí zo zvyšných n prázdnych; index výberu funguje ako číslica v systéme so zmiešaným základom, kde základ pri kroku je C(n, k).

// 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;
}

Strelci majú mierne odlišný krok: každá strana vyberie jedného svetlopolného strelca zo svetlých polí a jedného tmavopolného z tmavých, takže základ je nL × nD. Pešiaci sú obmedzení na rady 2\u20137 filtrovaním prázdnych polí pred binomickou voľbou. Celý algoritmus má asi 40 riadkov čistého JavaScriptu s BigInt; nájdete ho priamo v zdrojovom kóde prevodníka.

7. Vizualizátor: dve tabule, editovateľné FEN

Prevodník zobrazí obe polovice ako reálne šachové diagramy pomocou chessboard.js so sadou figúr Wikipedia \u2014 tej istej knižnice a grafiky, akú používa miestnosť Vote Chess. Ľavá tabuľa nesie nízkych 128 bitov, pravá vysokých 128 bitov. Pod každou tabuľou je pozícia vo formáte FEN v editovateľnom poli.

Môžete vložiť ľubovoľný FEN. Tabuľa sa hneď prekreslí, aby ste pozíciu vždy videli, a okraj poľa zozelenie alebo sčervenie podľa toho, či pozícia spĺňa schému bijekcie:

  • Zelený okraj: pozícia má všetkých 32 figúr, pešiakov na radoch 2\u20137 a strelcov na opačných farbách \u2014 Bitcoin kľúč sa hneď aktualizuje.
  • Červený okraj: FEN sa rozparsuje, no pozícia nevie zakódovať kľúč (chýbajúce figúry, pešiak na rade 1 alebo 8, dvaja strelci rovnakej farby a pod.). Tabuľa pozíciu zobrazí na nahliadnutie; len kľúč zostane nezmenený.

Malé tlačidlo kopírovania pri každom poli skopíruje FEN reťazec na zdieľanie alebo uloženie. Výber slávnych pozícií, náhodná tabuľa aj PNG/zdieľanie idú cez ten istý pipeline, takže čokoľvek na tabuli sa dá kedykoľvek exportovať ako FEN.

8. Aplikácie

  • Šachová papierová peňaženka. Vytlačte pozíciu, vložte ju medzi listy knihy o otvoreniach. Hodnoverné popretie + nula elektroniky + čitateľné človekom.
  • Generatívne umenie. Razte šachovnice ako NFT, ktoré sú zároveň platnými kľúčmi. Každé rozloženie je preukázateľne jedinečné.
  • Vanity tabule. Hľadajte tabule, ktoré dekódujú na adresy začínajúce zvolenými znakmi (bc1qchess…).
  • Vzdelávanie. Šachovnica je najnázornejší spôsob, ako vysvetliť veľkosť kryptografického priestoru kľúčov.
  • Zapamätanie. Šachisti si zapamätajú stovky pozícií bez námahy. Tabuľa je oveľa ľahšia na zapamätanie ako 52-znakový WIF.

9. Bezpečnostné úvahy

  • Nikdy nepoužívajte kľúč vygenerovaný vo verejnom nástroji pre reálne prostriedky.
  • Pamätajte, že súkromný kľúč je rovnaké číslo na mainnete aj testnete — mení sa len viditeľné kódovanie. Tabuľa, ktorá odvodí platnú mainnet adresu, odvodí aj zodpovedajúcu testnet adresu.
  • Použite crypto.getRandomValues() (alebo hardvérový RNG) — nikdy Math.random() — na generovanie kľúčov.
  • Všetka kryptografia musí bežať na strane klienta. Server nesmie vidieť kľúč.

10. Často kladené otázky

Môžu dva rôzne kľúče produkovať rovnakú tabuľa?

Nie. Mapovanie je dokonalá bijekcia nad 2256 prvkami — každá tabuľa zodpovedá presne jednému 256-bitovému číslu a naopak. Jediná výnimka je malá množina mimo [1, n−1], čo nie sú platné Bitcoin kľúče.

Mohla by konečná pozícia slávnej partie dekódovať na reálnu Bitcoin adresu?

Matematicky áno — každá legálna pozícia dekóduje na nejaké 256-bitové číslo a teda nejaký súkromný kľúč. Či riadi nenulový zostatok je otázka hrubá sila. S ~10⁹ aktívnych adries z 2160 je šanca astronomicky malá (~10⁻³⁹).

Aké knižnice používa prevodník?

Prevodník načítava @noble/secp256k1 a @noble/hashes — oboje sú čisto JS, bez závislostí, auditované knižnice od Paula Millera. Base58Check a Bech32 sú implementované priamo v ~80 riadkoch.

Pripravení vidieť svoj kľúč ako pozíciu?

Otvoriť interaktívny prevodník

Komentáre 0

Buďte prvý, kto okomentuje!

Prihláste sa a zapojte sa do diskusie.