1. Warum 256 Bit auf 64 Felder passen
Bitcoin Private Keys sind ganze Zahlen auf der elliptischen Kurve secp256k1. Der gültige Bereich ist [1, n−1] mit n ≈ 2256 − 232 − 977. In der Praxis ist fast jede 256-Bit-Zeichenkette ein gültiger Schlüssel — die Wahrscheinlichkeit, in der verbotenen Zone zu landen, beträgt etwa 1 zu 2224.
Ein Schachbrett hat 8 × 8 = 64 Felder, doch nicht jede Anordnung ist eine legale Stellung. Die Standard-Armee hat genau 32 Figuren (2 Könige, 2 Damen, 4 Türme, 4 Läufer — je einer pro Feldfarbe — 4 Springer, 16 Bauern). Zählt man die Anordnungen auf 64 Feldern mit Bauern nur auf den Reihen 2–7, erhält man etwa 2148 Stellungen. Ein Brett trägt also 148 Bit; zwei Bretter rund 296 Bit — mehr als genügend für 256 Bit.
2. Das 32-Figuren-Standard-Armee-Schema
Statt neue Figuren zu erfinden bleibt der Visualiser bei der Standard-Armee aus 32 Figuren, die jeder Schachspieler kennt. Jede kodierte Stellung enthält genau: 1 weißen und 1 schwarzen König, 1 weiße und 1 schwarze Dame, 2 Türme pro Farbe, 2 Läufer pro Farbe (einer auf hellem, einer auf dunklem Feld), 2 Springer pro Farbe und 8 Bauern pro Farbe. Die Einschränkungen:
Diese drei Einschränkungen definieren die exakte Menge der Stellungen, über der die Bijektion aufgebaut ist. Die numerische Platzierungsreihenfolge ist fix (Könige, Damen, Türme, Läufer, Springer, Bauern), damit Encoder und Decoder bei den Stellenwerten übereinstimmen.
3. Anatomie eines Bitcoin Private Keys
Ein roher Private Key sind nur 32 zufällige Bytes. Damit er zwischen Wallets transportierbar ist, definiert Bitcoin das WIF (Wallet Import Format):
Mainnet vs Testnet — ein häufiger Irrtum. Der 32-Byte-Private-Key selbst ist nur eine Zahl; er ist auf jedem Bitcoin-Netzwerk identisch. Unterschiedlich ist nur die sichtbare Kodierung: WIF nutzt Präfix 0x80 im Mainnet und 0xEF im Testnet, Adressen bc1… / 1… statt tb1… / m… / n…. Das Brett kodiert den Schlüssel, nicht das Netzwerk — dieselben zwei Stellungen ergeben beide Adressen, je nachdem wie man sie ausdruckt. Unser Konverter zeigt Mainnet, weil das jeder kennt.
Für unsere Zwecke zählen nur die mittleren 32 Byte — das ist, was wir aufs Brett malen. Präfix, Flag und Prüfsumme werden bei der WIF-Anzeige automatisch ergänzt.
4. Vom Schlüssel zur Adresse: ECDSA → HASH160
Bei einem Private Key k ist der Public Key der Kurvenpunkt P = k · G, wobei G der feste Erzeugerpunkt von secp256k1 ist. Dieser Schritt ist eine Einbahnstraße: die Rückgewinnung von k aus P ist das diskrete-Logarithmus-Problem und praktisch nicht lösbar.
Die Adresse wird berechnet als:
5. Prüfsummen: Base58Check vs Bech32
Base58Check (Legacy-Adressen und WIF-Keys) hängt 4 Byte gekürztes Doppel-SHA-256 an die Nutzlast und kodiert alles in einem 58-Zeichen-Alphabet (ohne 0, O, I, l). Jeder Tippfehler hat etwa 1 zu 232 Wahrscheinlichkeit, einen gültigen String zu erzeugen.
Bech32 (BIP-173, SegWit) ist deutlich raffinierter: ein 30-Bit-BCH-Polynomcode über GF(32). Es erkennt jeden Einzel-Symbolfehler mit Wahrscheinlichkeit 1 und jeden Zwei-Symbol-Fehler mit Wahrscheinlichkeit ≥ 1 − 2−30. Sein 32-Symbol-Alphabet passt perfekt zu den 32 hellen Feldern des Schachbretts — ein Zufall, den wir unten nutzen.
6. Die Bijektion im Code
Jedes Brett kodiert eine 128-Bit-Hälfte des Schlüssels (untere Hälfte auf Brett 1, obere auf Brett 2). Da das Schema nur eine feste Menge legaler Stellungen zulässt, ist die Bijektion keine einfache Feld-Lookup-Tabelle \u2014 sondern ein kombinatorisches Unranking. Platziere die Figuren in fester Reihenfolge (Könige, Damen, Türme, Läufer, Springer, Bauern); in jedem Schritt wählst du k Felder aus den verbleibenden n leeren; der Auswahlindex ist eine Ziffer in einem gemischtradixen System mit Basis C(n, k) pro Schritt.
Läufer haben einen leicht anderen Schritt: jede Seite wählt einen Läufer auf einem hellen Feld aus den verfügbaren hellen und einen auf einem dunklen aus den dunklen, also Basis nL × nD. Bauern werden auf Reihen 2\u20137 beschränkt, indem die verbleibenden leeren Felder vor der Binomialwahl gefiltert werden. Der gesamte Algorithmus liegt in ca. 40 Zeilen reinem JavaScript mit BigInt; im Quelltext des Konverters direkt nachlesbar.
7. Der Visualiser: zwei Bretter, editierbare FENs
Der Konverter zeichnet beide Hälften als echte Schachdiagramme mit chessboard.js und dem Wikipedia-Figurensatz \u2014 derselben Bibliothek und Grafik wie der Vote-Chess-Raum der Liga. Das linke Brett trägt die unteren 128 Bit, das rechte die oberen 128 Bit. Unter jedem Brett steht die Stellung als FEN in einem editierbaren Eingabefeld.
Du kannst jeden beliebigen FEN einfügen. Das Brett zeichnet sich sofort neu, damit du die Stellung immer siehst, und der Rand des Eingabefelds wird grün oder rot, je nachdem ob die Stellung ins Bijektions-Schema passt:
Ein kleiner Kopier-Button neben jedem FEN-Input kopiert die Stellungs-Zeichenkette zum Teilen oder Speichern. Der "Berühmte Stellungen"-Picker, der Zufalls-Button und die PNG/Teilen-Buttons nutzen dieselbe Render-Pipeline \u2014 alles, was auf einem Brett erscheint, lässt sich jederzeit als FEN exportieren.
8. Anwendungen
- Schach-Paper-Wallet. Stellung ausdrucken und in ein Eröffnungsbuch legen. Glaubhafte Abstreitbarkeit + null Elektronik + lesbar.
- Generative Kunst. Schachbretter als NFTs prägen, die zugleich gültige Bitcoin-Schlüssel sind. Jede Stellung ist nachweislich einmalig.
- Vanity-Bretter. Bretter brute-forcen, deren Adressen mit gewünschten Buchstaben beginnen (bc1qchess…).
- Bildung. Ein Schachbrett ist die anschaulichste Methode, die Größe kryptografischer Schlüsselräume zu vermitteln.
- Memorisierung. Schachspieler merken sich Hunderte Stellungen mühelos. Ein Brett ist viel leichter zu merken als ein 52-Zeichen-WIF.
Sei der Erste, der kommentiert!