Verifiable Randomness Systems
When platforms claim they are provably fair, they often stop at saying:
“The server can’t change the outcome after the fact.”
That’s necessary — but not sufficient.
True verification requires three guarantees:
This is where commit–reveal and double-blind randomness come in.
Randomness failures usually come from timing asymmetry:
So the solution must ensure:
A commitment is a cryptographic promise.
Instead of revealing a secret value, a party publishes its hash.
Example:
server_seed = “S3cr3tServerSeed” commitment = SHA256(server_seed)
At this point:
Once published, the server cannot change the seed without breaking the hash.
Later, the original value is revealed.
Anyone can verify:
SHA256(revealed_server_seed) == original_commitment
If it matches:
If it doesn’t:
A basic commit–reveal scheme still has a weakness:
Whoever reveals last can bias the outcome.
Example:
Server commits → User reveals seed → Server sees user seed and aborts if result is unfavorable
This is subtle — but real.
To fully eliminate bias, both sides must commit first.
No one gets the last move.
A common, verifiable combination method:
| combined_seed = SHA256(server_seed | user_seed) |
Key properties:
Because every claim can be checked:
Fairness is no longer a promise — it’s a math proof.
❌ Server reveals seed before user commits
❌ Server can cancel rounds silently
❌ Randomness mixed with hidden server logic
❌ “Provably fair” without public commitments
If any step cannot be independently verified, the system is not provably fair — regardless of marketing claims.
With commit–reveal + double-blind design:
That’s the real point.