Feel free to donate to help keep this project live and running ❤️   Support here
// 01 — Steganographic Engine

Hide Messages in Chess Games

Convert any text into a legally playable chess game. Play it anywhere — then decode the hidden message.

Encode a Message
PGN Channel
Public — no key, anyone can decode this
Generated PGN
0 moves
PGN Output
Your encoded PGN will appear here. Tip: Copy and paste into Chess.com, Lichess, or any chess platform to play the game naturally.
// 02 — Cinematic Decode

Decode the Hidden Message

Paste any PGN from Chess.com, Lichess, or any platform. Watch the game replay as the message is extracted.

🔍
Decode Input
PGN Channel
Leave blank if this was encoded in public mode
Speed:
Sound
Live Decode
PGN Channel
Awaiting input...
Decoded Message
Message will appear here with typing animation...
♪ off
// 03 — Covert Channel

Create a Dead Drop

Generate a reference card. Share only the pointer — the data lives on the chess platform.

Dead Drop Configuration
// 04 — Field Guide

How It Works

Chess steganography — mathematically concealing information inside legally playable games.

01 · PGN Channel

Text is converted to binary. At each position, legal moves are sorted alphabetically (deterministic). k = floor(log₂(N)) bits are encoded by choosing move index. The game looks natural: pawn moves, development, castling, captures. Works cross-platform — import into Chess.com, Lichess, or any PGN viewer.

02 · Random FEN Secret Key

The FEN channel never hides messages — it generates a random, fully legal chess position to use as a portable encryption key instead of a typed password. Only the visual arrangement of pieces matters for the key: whose turn it is, castling rights, en passant, and move counters are all ignored, since none of that is visible on a static picture of a board. Two people who independently arrive at the same-looking position, by any means (ChessCipher, Lichess, a printed diagram), always derive the exact same key — even if they typed or exported the rest of the FEN differently. Paste a generated FEN into the Key field on either the Encode or Decode page — the app detects it automatically and hashes the piece placement into the encryption key.

🔑 03 · Key System

There's no separate mode switch to remember — it's entirely driven by the Key field. Leave it blank and the message encodes in public mode: no key, anyone can decode it. Type or paste anything into it — a password, or a FEN from the Random FEN Secret Key generator — and that's used to encrypt the message. The app checks automatically whether what you entered contains a recognizable FEN piece placement and, if so, derives the key from just that placement; otherwise it uses the text directly as a password. The same key field, checked the same way, is used on both the Encode and Decode page, so there's nothing that can get out of sync between them.

🎭 04 · Decoy System

Wrong or missing key returns a plausible chess commentary message — never an error. Decoys are deterministic: hash(PGN + wrong_key) → same decoy every time. Three tiers: normal chess commentary (60%), mildly suspicious (30%), subtle troll (10%).

05 · Encoding Math

At each chess position with N legal moves: k = ⌊log₂(N)⌋ bits can be encoded by choosing a move index in [0, 2^k). This guarantees all chosen indices are valid moves. Moves are sorted by SAN notation to ensure identical ordering at encode and decode time. A 2-byte length prefix is prepended to the payload before bit-encoding, enabling exact message reconstruction regardless of trailing bits.

Copied!