Protocol Architecture

The Deterministic Pipeline

Information → Ciphertext → Integer → Move Sequence

A comprehensive breakdown of the symbolic steganography protocol. Tracing the transformation of entropy into rule-constrained chess notation.

1. Input & Authentication

Input data is hardened via AES-256-GCM. Optional password derivation uses PBKDF2-HMAC-SHA256 (100k iterations) to generate key material, establishing a cryptographically secure foundation.

2. Integer Conversion

The encrypted binary blob is treated as a single large integer. This value serves as the seed for the navigational path through the chess game tree, converting binary entropy into numerical coordinates.

3. Move Selection

For any given board state, legal moves are sorted lexicographically (UCI). The integer is 'mod' mapped to selectable moves, creating a deterministic isomorphism between data and game state.

4. Variation Scaling

When the integer exceeds the mainline capacity, the protocol branches. Variations act as recursive storage buckets, theoretically offering unbounded capacity constrained only by PGN file size limits.

Cryptographic
Security Model

Confidentiality

AES-256-GCM ensures that without the key, the PGN is statistically indistinguishable from random noise. The ciphertext entropy is masked by the complexity of the game tree.

Integrity

GCM authentication tags (128-bit) guarantee that any bit-flip in the PGN structure causes immediate decryption failure. The structure itself enforces the validity of the content.

Deniability

The output is valid PGN. There is no "hidden" file, only a specific selection of legal moves from the realm of all possible legal games.

2256

Key Space Complexity

Protocol Deep Dive

We treat chess as a dynamic base number system where Base = Count(Legal Moves).

Binary Payload Structure

Before encoding into chess moves, data is packed into a strict binary format. This structure ensures that even if the PGN metadata is stripped, the core message remains self-contained and identifiable.

[1 byte: flag][16 bytes: salt][12 bytes: nonce][encrypted_payload]

Deterministic Move Selection

The "Integer Conversion" step treats the encrypted blob as a massive base-N number. We sort moves lexicographically to ensure 100% determinism across all clients, regardless of engine implementation details.

function encode_move(num, board):
  legal_moves = sort_uci(board.moves())
  base = length(legal_moves)
  index = (num - 1) % base
  return legal_moves[index]