Provably Fair DnD Dice Roller: Verify Roll Randomness
How do I know if my online dice roller is actually random?
You rolled a natural 1 on your death save. Again. Third time in a row. Your character is dead, and now you're staring at the screen wondering if that online dice roller just decided your fate unfairly.
It's a valid concern. Most digital dice rollers are black boxes. You click, a number appears, and you just have to trust it. But some rollers use something called provably fair randomness, a system that lets you mathematically prove the roll wasn't tampered with. The problem? Almost nobody explains how to actually check it.
So let's fix that. We're going to walk through one complete verification workflow, from the moment before you roll to the moment you confirm the result was honest. No abstract theory, no jargon dumps. Just a straight path from suspicion to certainty.
What does "provably fair" actually mean for a dice roller?
Think of it like this. Imagine your DM secretly writes down a number, locks it in a box, and hands you the key. You roll. After the result is shown, the DM opens the box to reveal the number they wrote down before you rolled. If it matches what was used to generate your result, you know they didn't change their mind mid-roll.
That's the core idea. A provably fair dice roller commits to its randomness before you roll, and it gives you the tools to check that commitment afterward. The "fair" part isn't about luck distribution. It's about verifiable honesty. You can't be cheated, and you can prove it.
For DnD players, this matters more than people realize. When you're using an online roller for ability scores, attack rolls, or saving throws, a rigged generator could quietly bias outcomes. Maybe it favors low rolls to inflate difficulty. Maybe it avoids crits to slow down combat. You'd never notice from playing alone. Provably fair systems make that kind of manipulation impossible to hide.
How does a provably fair dice roller work behind the scenes?
Every provably fair roll relies on three pieces of information working together:
The server seed
This is the number the dice roller generates and locks in before you roll. It's the DM's number in the locked box. The roller doesn't show you this seed directly. Instead, it shows you a hash, a scrambled fingerprint of the seed. This hash lets you confirm later that the seed never changed, without revealing the seed itself ahead of time.
The client seed
This is your contribution. You provide it, or the roller generates one on your behalf that you can see and change. Think of it as you adding your own ingredient to the recipe. The roller can't predict what you'll choose, so it can't pre-plan a result.
The nonce
This is just a counter. First roll? Nonce is 1. Second roll? Nonce is 2. It ensures every roll produces a different result even if the seeds stay the same.
Here's the beautiful part: the final roll result comes from combining all three. The roller can't change the server seed because you've already seen its hash. It can't control your client seed. And the nonce just counts up honestly. Fairness is baked into the math, not promised by the website.
What information do I need before I can verify a roll?
Before you roll, you need to grab two things from the roller interface:
1. The hashed server seed. This is usually shown as a long string of letters and numbers, something like a3f5b8e9c2d1.... It's the SHA-256 hash of the real server seed. Save it. Screenshot it. Write it down. You'll need it after the roll to confirm nothing changed.
2. Your client seed. Some rollers let you type your own. Others auto-generate one but let you see it. Either way, note what it is. If you want to be extra careful, type something personal and memorable, like StraxTheBold47. This guarantees the roller had no way to know your input in advance.
That's it. Two pieces of information. Once you have them, you're ready to roll.
How do I verify the DnD dice roll step by step?
Let's walk through a real example. Say you're rolling a d20 for an attack roll.
Step 1: Note the pre-roll information
Before clicking roll, you see:
- Hashed server seed:
9e1b3a7f4c2d8b6e5a0f1c3d2b4e6a8f0d2c4b6e8a0f2d4c6b8e0a2f4d6c8b0e - Client seed:
StraxTheBold47 - Nonce:
1(first roll of the session)
Screenshot this. Now roll.
Step 2: Get the revealed server seed
After the roll, a properly built provably fair roller will reveal the actual server seed it used. Let's say it shows:
Server seed: 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b
Step 3: Hash the revealed seed yourself
Take that revealed server seed and run it through a SHA-256 hash calculator. You can find free ones online. Paste 7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b into the input field.
If the roller was honest, the hash output will match exactly what you saved before rolling: 9e1b3a7f4c2d.... If even one character is different, the roller changed its seed after seeing your client seed. That's cheating. You caught it.
Step 4: Recompute the roll result
Now combine all three pieces: server seed, client seed, and nonce. The standard method uses HMAC-SHA256. The roller combines them as HMAC-SHA256(server_seed, client_seed:nonce), which produces a hex string. That hex string gets converted to a number, and then modulo 20 gives you your d20 result.
Let's say the HMAC output starts with 0x4f2a.... Converting that to a decimal gives a large number. Take that number mod 20, add 1, and you get your roll. If the roller said you rolled a 12, and your calculation also produces 12, the roll was fair. Period.
You don't need to do the math by hand. Most provably fair rollers have a verification tool built in, or you can use standalone verifiers. The point is: the math is checkable, and the result is reproducible.
What tools can I use to check the hash myself?
You don't need to be a cryptographer. Here's what to use:
For SHA-256 hashing: Any reputable online SHA-256 calculator works. Just paste the revealed server seed, hit generate, and compare the output to the pre-roll hash. This is the single most important check. If the hashes match, the roller committed to its seed before you rolled.
For full roll verification: Some DnD-focused dice rollers include a built-in verifier where you paste the three inputs and it shows you the calculation. If yours doesn't, you can use a generic HMAC-SHA256 calculator. Combine your client seed and nonce with a colon, like StraxTheBold47:1, use the revealed server seed as the HMAC key, and convert the output.
For converting hex to a dice number: Take the first 8 characters of the HMAC output, convert from hex to decimal, then apply modulo 20 (for a d20) and add 1. So 0x4f2a1b3c becomes 1329435964 in decimal. 1329435964 % 20 = 4. Add 1. Your verified roll is 5.
If the roller showed 5, you've confirmed it yourself. No trust required.
Should I worry if my dice roller doesn't show any seeds?
Yes. And here's why, from the fairness angle we've been holding throughout.
A dice roller without provably fair verification is asking you to trust it blindly. It might use JavaScript's Math.random(), which is fine for casual use but isn't cryptographically secure. It might have hidden bias. It might be perfectly honest. You simply can't tell.
That uncertainty is the whole problem provably fair systems solve. When a roller shows you the hashed server seed before the roll and reveals it after, it's making a specific, checkable promise: "I committed to this randomness before you participated, and here's the proof."
A roller that doesn't show seeds is making a vaguer promise: "Trust me." For rolling a d20 to decide if your rogue picks a lock, maybe that's fine. For rolling stats, death saves, or anything that shapes a character's entire arc, verification is worth the extra thirty seconds.
The next time you're about to roll something that matters, check the screen. Is there a server seed hash visible? Can you set a client seed? Is there a verification panel? If yes, you're looking at a roller that respects your right to confirm fairness. If no, you're rolling on faith.
And after going through this workflow once, you'll never look at a digital dice roller the same way again. That natural 1 might still sting. But at least you'll know it was honestly earned.
Frequently Asked Questions
What does "provably fair" mean for an online dice roller?
A provably fair system uses cryptographic algorithms to ensure that the outcome of a dice roll is genuinely random and wasn't tampered with by the site or player. It allows users to independently verify each roll after it happens using provided seeds and hashes. This transparency builds trust in digital tabletop gaming.
How can I tell if an online D&D dice roller is rigged?
If a dice roller is provably fair, it will provide you with a server seed hash before you roll and reveal the actual server seed afterward. You can use an external hash calculator to check if the revealed seed matches the original hash, proving the outcome was predetermined and not altered. If a site doesn't offer these seeds, there is no way to guarantee it isn't rigged.
How do I verify a provably fair dice roll?
To verify a roll, combine the revealed server seed, your client seed, and the nonce (roll number) into a SHA256 hash generator. Compare the output to the server seed hash given to you before the roll to ensure they match. Many provably fair sites also offer a built-in verifier tool to automate this process for you.
What is a server seed and client seed in online dice rolling?
The server seed is a secret random number generated by the website to determine the outcome, while the client seed is a random number generated by your browser or input by you. By combining these two seeds, neither the player nor the site can manipulate the result independently. The server seed is hashed and shown before the roll to prove it wasn't changed afterward.
Are online dice rollers truly random?
Most online dice rollers use pseudo-random number generators (PRNGs) which are statistically random but can be predictable if the internal state is known. However, provably fair rollers add cryptographic layers to standard PRNGs, making it mathematically impossible to predict or alter outcomes without detection. This ensures a level of randomness comparable to physical dice.
Why should I use a provably fair dice roller for D&D?
Using a provably fair roller eliminates any doubt among players and Dungeon Masters that the digital dice are biased against them. It ensures that critical hits and fumbles are entirely up to chance, preserving the integrity of the game. This is especially important for high-stakes campaigns or online D&D tournaments.
Can a provably fair system be hacked to roll natural 20s?
No, because the player does not know the server seed until after the roll is completed, making it impossible to reverse-engineer the outcome in advance. Even if a player manipulates their client seed, the server seed ensures the final result remains unpredictable. Any attempt to alter the seeds post-roll will invalidate the cryptographic hash.
Do popular D&D Virtual Tabletops (VTTs) use provably fair dice?
Not all popular VTTs use provably fair systems, as many rely on standard PRNGs without offering cryptographic verification. However, as players demand more transparency, an increasing number of independent dice rollers and newer VTTs are adopting provably fair technology. You should check the platform's documentation to see if they provide seed hashes.
What is a nonce in provably fair dice rolling?
A nonce is a simple counter that increases by one for every roll you make, ensuring that each roll is unique even if you use the same server and client seeds. It is a critical component of the verification formula, preventing the system from reusing the same random output. When verifying a roll, you must include the correct nonce number for that specific bet.