Seed Settings
Randomness Distribution
Each bar represents one of the 960 Freestyle (Chess960) positions. This chart reflects all generations across all users. The distribution should approach uniformity over time, confirming unbiased randomness.
Generation History
This history is saved locally in your browser (per device). It does not include generations from other users.
| Nonce | Client Seed | Index | FEN | Timestamp | Action |
|---|---|---|---|---|---|
| No generations yet. Click "Generate Random Position" to start. | |||||
How Provably Fair Randomization Works
This tool generates Freestyle (Chess960) positions in a way you can verify later. Think of it like a sealed envelope: the server commits to a secret first, then every result is derived deterministically from that secret plus your inputs.
- Server commitment: On page load the server creates a secret Server Seed, but only shows you its SHA-256 hash. That hash is the commitment: the server can’t change the seed later without the hash changing.
- Client seed: You provide a Client Seed (we generate one for you by default). This ensures the final results depend on something the server didn’t choose.
- How a position is picked (uniform): For each click, the server combines the Server Seed, your Client Seed, and the current nonce using HMAC-SHA256, then turns that into a number from 0–959. We use a tiny extra step (rejection sampling) to guarantee every one of the 960 positions is exactly equally likely.
- Nonce stays in order: Each click uses the next nonce number (0, 1, 2…). If your browser ever sends a nonce out of order (for example from a double-click or a delayed request), the server rejects it and the page resyncs to the correct next nonce.
- Race-proof updates: When the server advances the nonce, it does so with a “write only if nothing changed” safeguard (ETag / If-Match). So if two requests happen at the same time, only one can succeed.
- Verify anytime: Click Reveal & Rotate to reveal the Server Seed for the current session. You can then recompute every result yourself and confirm the server didn’t tamper with anything. After revealing, the server rotates to a fresh seed for future generations.
Use the revealed Server Seed, your Client Seed, the nonce, and (if shown) the retryCounter. The Copy Verification String button includes everything needed.