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.
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:
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):
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:
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).
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:
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.
Buďte prvý, kto okomentuje!