Verifiable Randomness Systems
Why neither the player nor the server should ever control randomness alone — and how combining secrets with public entropy fixes it.
Most randomness systems fail for the same fundamental reason:
Someone controls the entropy.
If a single party can influence, delay, or observe randomness before committing to an action, fairness collapses. This applies whether that party is:
Even well-intentioned systems fail under incentives.
The core question is:
How do you design randomness so that no participant can bias the outcome?
Let’s examine the usual approaches.
The server generates a random number and returns it.
Problems:
Even if the math is correct, trust is required.
The client generates randomness and submits it.
Problems:
This is especially dangerous in adversarial games.
Randomness comes from an external service.
Problems:
Trust is simply outsourced, not eliminated.
Fair randomness requires multiple independent entropy sources.
Specifically:
This leads to the double-blind entropy model.
In a double-blind randomness system:
Crucially:
Neither side is trusted. Both are constrained.
The player provides a secret value.
Properties:
This prevents the server from fully controlling outcomes.
The server provides its own secret.
Properties:
This prevents the player from brute-forcing outcomes.
A publicly verifiable entropy source, revealed later.
Examples:
Properties:
This locks the system in time.
At reveal time, all three inputs are combined deterministically.
Conceptually:
final_randomness = hash(player_secret, server_secret, public_entropy)
Important characteristics:
The system becomes self-auditing.
No one can predict outcomes in advance.
Cheating leaves fingerprints.
Anyone can:
Trust shifts from people to math.
The double-blind entropy model is essential in:
If incentives exist, this model is mandatory.
It does not:
It strictly guarantees unbiased randomness generation.
Nothing more. Nothing less.
If one party controls randomness, the system is unfair.
If multiple parties contribute entropy but can see each other’s inputs, the system is manipulable.
Only a double-blind, multi-entropy design produces truly verifiable randomness.
Everything else is a trust assumption in disguise. This Double-Blind Entropy Model with public (drand) entropy is the backbone of BlockRand