[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-article-client-seed-vs-server-seed-en":3,"mdc-mm5his-key":78},{"id":4,"slug":5,"status":6,"section":7,"category":8,"author":9,"publish_date":10,"read_time":11,"image":12,"embedded_components":13,"related_calculators":13,"related_articles":14,"title":15,"description":16,"keywords":17,"content":26,"faq":27,"availableLocales":73},"16bb80ab-3e21-4169-adcf-94ed24287f21","client-seed-vs-server-seed","published","casino","guides","Evgeniy Volkov","2026-04-22",14,"\u002Fimages\u002Fblog\u002Fclient-seed-vs-server-seed.webp","[]",[],"Client Seed vs Server Seed: Full Technical Guide (2026)","Client seed vs server seed — how the commit-reveal protocol pairs them to prevent rigging. Full math, rotation guide, verifier (2026).",[18,19,20,21,22,23,24,25],"client seed vs server seed","what is a server seed","what is a client seed","how to find server seed","provably fair seeds","seed rotation casino","hmac-sha256 casino","server seed hash","# Client Seed vs Server Seed: Full Technical Guide (2026)\n\nPicture this: you just lost eight dice rolls in a row on a provably fair casino. You open the fairness panel, half-hoping to find proof the site is rigged. You see two fields — **Server Seed Hash: `a3f79b21...`** and **Client Seed: `bG7yxQ2pR`** — plus a counter labeled Nonce that keeps ticking up. Most players glance at the numbers and close the panel, because nothing in the game explained what any of them actually do.\n\nHere's the thing: those two seeds are the *entire* reason you can trust the round. One of them is the casino's secret, committed before you bet. The other is yours, controllable at any time. Together they make it mathematically impossible for the casino to rig the outcome after seeing your wager. Miss how they pair, and you're trusting the site blindly. Understand the pair, and you can verify every single bet in under a minute.\n\nThis guide breaks down **client seed vs server seed** the way a player actually uses them in 2026: what each one does, who controls it, when it's revealed, what happens when you change it, and the one attack the whole system can't stop unless you rotate regularly. We'll walk the math step-by-step with a real dice example, compare how Stake, BC.Game, and Roobet display the panel, and end with a live verifier so you can drop in your own seeds and see the outcome reproduced.\n\n## TL;DR — The 60-Second Answer\n\nEvery provably fair round needs three inputs. The casino controls one, you control another, and the third is a simple counter. None of them alone determines the outcome — all three must combine.\n\n| Input | Who controls it | When revealed | Changeable mid-session? |\n|---|---|---|---|\n| **Server seed** | Casino | After seed rotation | No, but you can rotate |\n| **Client seed** | You | Always visible to you | Yes, anytime |\n| **Nonce** | Protocol | Always visible | No (auto-increments) |\n\nThe math works like this:\n\n$$\\text{outcome} = \\text{HMAC-SHA256}(\\text{server\\_seed},\\; \\text{client\\_seed} : \\text{nonce})$$\n\nIn plain English: the casino takes its secret seed, keyed against your public seed plus the round number, runs them through a one-way cryptographic function, and maps the result to a dice roll, crash multiplier, or card. You can't predict it (you don't know the server seed), and the casino can't fake it (they committed to the server seed's hash before you bet).\n\n### Who Controls Each Seed\n\n- **Casino controls the server seed** — it's generated on their server and hidden until you rotate it\n- **You control the client seed** — usually auto-generated by your browser, but editable in the fairness panel\n- **Both are required** — the casino can't compute your outcome without both seeds\n\n### What to Actually Change\n\n- **Rotate your server seed every 50-100 bets** — forces the casino to commit to a new seed they can't have pre-optimized\n- **Change your client seed occasionally** — once every session is plenty, it doesn't improve odds\n- **Never change the nonce manually** — it's a simple counter, tampering breaks verification\n\nIf you take nothing else away from this page: the client seed is your *leverage*. The server seed is the casino's *commitment*. Rotating the server seed periodically is what stops a dishonest operator from gaming the math. For a broader primer, our [what is provably fair gambling](\u002Fblog\u002Fwhat-is-provably-fair-gambling) explainer covers the full system; this guide zooms in on the seeds themselves.\n\n## What Each Seed Actually Does\n\nBefore we compare them, each seed deserves its own breakdown. They look similar in the UI — both are long random strings — but they play opposite roles in the protocol.\n\n### The Server Seed (Casino's Secret)\n\nThe **server seed** is a random string (usually 32 or 64 bytes, hex-encoded) generated by the casino before your round begins. Think of it as the casino's locked envelope: they write the contents down, seal it, and show you the fingerprint (the SHA-256 hash). The seal guarantees they can't change what's inside — but you don't get to peek until after your bet.\n\nKey facts about server seeds:\n\n- **Always hashed** before exposure: you see `SHA-256(server_seed)` as a 64-character hex string\n- **Single seed covers many rounds**: the same server seed stays active for dozens or thousands of bets, with the nonce incrementing per round\n- **Rotates on demand**: clicking \"Rotate\" reveals the old seed and commits a new hash\n- **Never reused across players**: each account has its own active server seed\n\nThe reason the server seed is hidden is simple — if you could see it before betting, you could compute the exact outcome in advance and cheat the casino. The hash is a commitment device: it locks the casino into one specific seed without revealing it.\n\n### The Client Seed (Your Input)\n\nThe **client seed** is the string *you* contribute. On Stake, BC.Game, Roobet, and every mainstream PF casino, your browser generates a random one by default — usually a 10-20 character alphanumeric string — and lets you edit it in the fairness panel.\n\nKey facts about client seeds:\n\n- **You control it**, the casino cannot see what your next one will be until you submit it\n- **Visible to you at all times** in the fairness panel\n- **Changeable anytime**, but changes don't affect bets already placed\n- **Often auto-generated** — your browser randomizes a fresh one per session\n\nThe client seed is the mechanism that stops the casino from pre-computing outcomes. Since the server seed is committed via hash *before* you submit your next client seed, the casino genuinely can't know what result HMAC will produce. This is why changing your client seed occasionally — or letting the browser auto-rotate — is a key defense, even though any single client seed is just as \"lucky\" as any other on average.\n\n### The Nonce (Round Counter)\n\nThe **nonce** is the simplest of the three. It's just a counter that increments with every bet — round 1, round 2, round 3, and so on. You can't set it, change it, or skip it. If you bet 50 times with the same server seed and client seed, the nonce goes from 0 to 49 and every outcome is different because the nonce changes.\n\nWhy have a nonce at all? Without one, every round with the same server seed and client seed would produce the *exact same outcome* — hitting the same dice number every time. The nonce is what makes each round unique while still keeping the math reproducible. If a casino ever shows a nonce that skipped a number (0, 1, 3, 4 — where's 2?), that's a sign of tampering.\n\n## How They Combine to Produce an Outcome\n\nThis is where the three inputs stop being data and start being math. Every provably fair casino runs the same core formula, even though the output mapping differs by game.\n\n### The HMAC Formula in Plain English\n\nHere's what every PF casino actually computes:\n\n$$\\text{hex\\_output} = \\text{HMAC-SHA256}(\\text{server\\_seed},\\; \\text{client\\_seed} \\; : \\; \\text{nonce})$$\n\nPlain-English translation:\n\n- **HMAC-SHA256**: a keyed cryptographic hash function — like SHA-256, but \"signed\" with a key\n- **server_seed** (the key): the casino's hidden value, locking the function to one specific seed\n- **client_seed:nonce** (the message): your seed joined to the round counter with a colon\n\nThe output is a 64-character hex string. Different games interpret it differently: dice games take the first few characters and map them to 0-99.99, crash games use a different slice and formula, blackjack games chain multiple HMAC calls (one per card) and usually switch to HMAC-SHA512 for 128-character outputs. The exact mapping matters, but the *commit-reveal structure is identical* across all of them.\n\n### Worked Example: One Dice Roll Step by Step\n\nLet's do one full round with real (example) values so you can see exactly how the seeds combine.\n\n**Given:**\n\n- server_seed = `f4a9c2e1b7d8e3c5a1b9f6d2e8c4a7b3e9d1c6a2b5f8e4c7a3b6e1d9c2a5b8f4`\n- client_seed = `player-xyz-42`\n- nonce = `7`\n\n**Step 1 — Compute HMAC-SHA256:**\n\n```\nHMAC-SHA256(server_seed, \"player-xyz-42:7\")\n= 8b2d4a1f9c6e7b3d5a8f2c9e4b1d7a6f3e8c5b2d9a4f7e1c8b3d6a2f9e5c4b7d\n```\n\n**Step 2 — Map hex to dice roll (Stake-style):**\n\nTake the first 5 hex chars: `8b2d4` → convert to decimal = `569,300`. Mod 1,000,000 = 569,300 → divide by 10,000 = **56.93**.\n\n**Step 3 — Compare to your bet:**\n\nIf you bet \"roll under 50\" — you lose (56.93 > 50). If you bet \"roll under 60\" — you win. The exact outcome was determined by three inputs, none of which either party could manipulate after commitment.\n\n**Step 4 — Verify:**\n\nAfter rotating your server seed, you get the raw value. You hash it yourself: does SHA-256 match the hash you saw before the round? Then rerun the HMAC with the same inputs: does the output match? Both match = round is cryptographically proven fair. For a full walkthrough with copy-paste values, see [how to verify a provably fair round](\u002Fblog\u002Fhow-to-verify-provably-fair).\n\n### Why the Math Can't Be Faked\n\nThree cryptographic properties make the protocol rigging-resistant:\n\n1. **Hash commitment**: SHA-256 has no practical preimage attacks, so the casino can't find a different server seed that produces the same pre-committed hash after seeing your bet.\n2. **HMAC output opacity**: You can't reverse the HMAC output to infer the server seed — needed because otherwise knowing one outcome would reveal the key.\n3. **Mutual ignorance at commit time**: The casino doesn't know your future client seeds, so they can't pre-optimize server seed choice for specific client values.\n\nIf any of those three properties breaks, the protocol breaks. In 2026 none of them has broken for SHA-256, so the math is solid. The real attacks all live in *implementation* — which we cover in the rotation section below. Our [provably fair vs RNG certified](\u002Fblog\u002Fprovably-fair-vs-rng-certified) comparison digs deeper into how this math stacks up against traditional lab audits.\n\n## Client Seed vs Server Seed — Side-by-Side\n\nSame protocol, opposite roles. Here's the head-to-head.\n\n::chart-client-server-seed\n::\n\n### Who Controls What\n\n| Property | Server Seed | Client Seed |\n|---|---|---|\n| **Owner** | Casino | You |\n| **Visible raw?** | Only after rotation | Always |\n| **Visible hashed?** | Always (pre-round) | Never hashed — shown raw |\n| **Generated by** | Casino's RNG | Your browser (or you manually) |\n| **Length** | Typically 64 hex chars | Typically 10-20 chars, user-set |\n| **Can other players see it?** | No (scoped to your account) | No (scoped to your account) |\n\nThe asymmetry is intentional. If both seeds were public, either side could manipulate. By keeping the server seed hidden (via hash) and the client seed known only to you, the protocol creates a genuine two-party commitment where neither can cheat the other.\n\n### When Each Is Revealed\n\nThe reveal timing is what separates a working PF casino from a fake one:\n\n- **Server seed hash**: visible *before* every round — check it before you bet\n- **Client seed**: visible *always* — you typed or generated it\n- **Server seed (raw)**: visible *only after seed rotation* — either you click \"Rotate\" or end your session\n\nA legitimate casino will never refuse to rotate. If you click \"Rotate seed\" and the old seed doesn't appear within seconds — or worse, if the casino says \"seeds rotate automatically every 24 hours and you'll see history tomorrow\" — that's a red flag. The seed reveal should be instant and cryptographically provable.\n\n### What Happens If You Change Each One\n\nHere's the practical impact table you actually need:\n\n| Action | Mid-round effect | Next-round effect | Long-term effect |\n|---|---|---|---|\n| Rotate server seed | None (current round unaffected) | New server seed used from next bet | Resets biased-seed risk |\n| Change client seed | None (can't change retroactively) | New client seed used from next bet | Forces casino to recompute all outcomes |\n| Reset nonce | Impossible — protocol-enforced | Nonce continues from where it was | N\u002FA |\n\nThe takeaway: changing either seed is a forward-looking protection, not a way to retroactively dispute lost rounds. If you're about to start a long dice session on a new casino, rotate both seeds immediately so the casino commits to values *after* your client seed is set. That ordering matters more than any specific seed value.\n\n## Seed Rotation — When and Why to Change Them\n\nIf you read nothing else on this page, read this section. Rotation is the one player-side action that actually changes your cryptographic security posture.\n\n### The Biased-Seed Attack (And Why Rotation Stops It)\n\nHere's the one theoretical weakness provably fair can't rule out without rotation: **biased seed generation**.\n\nImagine a dishonest casino that generates thousands of server seeds in advance. For each one, they pre-compute outcomes against common client seed patterns (default browser formats, frequently-used words, patterns they've seen before). They then selectively deploy seeds that happen to produce more losses than wins for the expected client seeds.\n\nBecause the casino still publishes a valid server seed hash — and the revealed seed still hashes to that commitment — the verification math passes. The protocol \"works.\" But the seed itself was cherry-picked from a biased pool, and your long-term house edge is worse than advertised.\n\nThe defense is simple: **rotate often enough that pre-computation becomes useless**.\n\n- Rotate after every 50-100 bets → the casino must commit new seeds they haven't pre-optimized\n- Change your client seed at the same time → invalidates any pattern-based pre-computation\n- Both together make biased-seed attacks statistically infeasible at scale\n\nThis attack is extremely rare at reputable casinos — the reputational cost of getting caught vastly outweighs the EV gained — but it's the one reason rotation matters at all. Our [provably fair Bitcoin games](\u002Fblog\u002Fprovably-fair-bitcoin-games) ranking filters specifically for casinos with published rotation workflows.\n\n### Rotation Frequency on Popular Casinos\n\nDifferent sites use different default intervals. Here's what each platform actually does:\n\n| Casino | Default rotation | Manual rotation | Recommended setting |\n|---|---|---|---|\n| **Stake** | Never auto-rotates | Anytime, instant | Every 50-100 bets |\n| **BC.Game** | Never auto-rotates | Anytime, instant | Every 50-100 bets |\n| **Roobet** | Rotates on session end | Anytime, instant | Every 50-100 bets |\n| **Rainbet** | Never auto-rotates | Anytime, instant | Every 100 bets |\n| **Primedice** | Never auto-rotates | Anytime, instant | Every 50-100 bets |\n\n\"Never auto-rotates\" is actually the honest default — it forces the player to choose. If a site aggressively auto-rotates, it may be trying to obscure individual seed histories.\n\n#### Quick Rotation Checklist\n\nUse this before any long session:\n\n1. Open the game's fairness panel\n2. Copy the current server seed hash (for later verification if you want)\n3. Click \"Rotate Server Seed\" — old seed is revealed, new hash commits\n4. Change your client seed (click refresh, or type a new random string)\n5. Note your starting nonce (usually 0 after rotation)\n6. Bet as usual; rotate again after ~50-100 bets\n\nTakes 30 seconds. Protects against the only non-cryptographic attack on provably fair.\n\n### What You Can't Rotate Mid-Round\n\nOne important constraint: you can't rotate *during* a round. Once you've placed a bet with a given server_seed + client_seed + nonce, those values are locked for that specific round. Rotating only affects bets placed *after* the rotation.\n\nThis is also why \"retroactively rotating to undo a loss\" is impossible. The commit was fixed before you bet — the only way to change what's already happened is to verify it was honest. Since PF lets you do that in 60 seconds, that's usually enough.\n\n## Common Mistakes with Seeds\n\nPlayers coming to provably fair from regular online casinos consistently make the same four mistakes. None of them are dangerous — but they all waste time.\n\n### \"Changing Client Seed Changes My Luck\"\n\nIt doesn't. Every HMAC output is statistically random regardless of input. Changing your client seed from `abc123` to `xyz789` gives you different outcomes, not better ones. The expected value is identical.\n\nWhat the client seed *actually* does: it prevents biased-seed pre-computation by making your inputs unpredictable to the casino before each round. That's a security property, not a luck property.\n\n### \"Casinos Can See My Client Seed in Advance\"\n\nNot for future seeds. The casino sees your current client seed (you submitted it), but has no way to know what you'll set next. That's the whole point — the casino commits to a server seed *hash* before knowing your next client seed. Once they commit, they can't change the seed behind the hash.\n\nIf someone claims \"the casino reads your keyboard and knows your next seed before you hit enter\" — they're describing a client-side malware attack, not a protocol weakness. Use a reputable browser and you're fine.\n\n### \"Rotating Too Often Breaks the Proof\"\n\nIt doesn't. Rotating just retires one server seed and commits a new one — both still verifiable independently. You can rotate every single bet if you want (slow but harmless).\n\nThe common concern is about seed history getting \"messy\" — but every PF casino keeps a full history of retired seeds keyed to the bet ranges they covered. Rotating 50 times creates 50 verifiable history entries, not a tangled mess.\n\n#### Quick Sanity Check\n\nIf any of these apply, your provably fair flow is wrong:\n\n- [ ] You never clicked \"Rotate\" in your first 200 bets → rotate now, you may be exposed to biased seeds\n- [ ] You can't find a \"Rotate Server Seed\" button → casino's PF implementation is broken\n- [ ] You've never verified a single round → try one with our [provably fair verifier](\u002Fcasino\u002Fprovably-fair) to get familiar\n- [ ] You share seeds with friends → no benefit, small risk — generate your own\n\n### \"All Casinos Use the Same Seed Format\"\n\nThey don't. Stake and Primedice use HMAC-SHA256 with dice-specific mapping. BC.Game's blackjack uses HMAC-SHA512 with card-specific logic. Spribe's Aviator uses a different nonce strategy. A generic verifier will get the *hash match* right across all of them, but the reproduced outcome number may differ unless you use the casino's exact mapping formula.\n\nAlways read the casino's fairness docs for the exact game you're playing. For Aviator specifically, our [Aviator provably fair calculator](\u002Fblog\u002Fprovably-fair-aviator-calculator) implements Spribe's formula directly. For blackjack, the [provably fair blackjack guide](\u002Fblog\u002Fprovably-fair-blackjack) covers the card-by-card HMAC chain.\n\n## How to Find Your Seeds on Real Casinos\n\nWords are easy. Showing you exactly where the buttons live is more useful. Here's the actual path on the top three PF casinos as of 2026.\n\n### On Stake \u002F Primedice\n\n1. Open any casino Original (Dice, Crash, Plinko, Mines)\n2. Click the **shield icon** in the top-right of the game panel\n3. A \"Fairness\" modal opens with four fields:\n   - Active Server Seed (Hashed) — 64-char SHA-256 hex\n   - Active Client Seed — editable string\n   - Total Bets Made With Pair — current nonce\n   - \"Change Seeds\" button at the bottom\n4. Click **\"Change Seeds\"** — old server seed is revealed immediately, new hash commits\n\nStake's interface is the cleanest of the three. Everything you need is on one screen, rotation is instant, and the seed history shows every retired server seed with its associated bet range.\n\n### On BC.Game\n\n1. Open any in-house Original (Crash, Dice, Ring, Limbo)\n2. Click the **three-dot menu** in the top-right of the game\n3. Select **\"Provably Fair\"** from the dropdown\n4. Fairness modal shows: Hashed Server Seed, Client Seed (editable), Nonce, Algorithm\n5. Click **\"Change\"** next to the server seed → rotation confirmation → old seed revealed\n\nBC.Game uses HMAC-SHA512 for most games (not SHA-256), so the hashes are 128 characters instead of 64. The verification math is the same, just with a longer output.\n\n### On Roobet\n\n1. Open any Roobet Originals game (Mines, Crash, Dice, Towers)\n2. Click the **padlock icon** next to the game title\n3. A side panel slides out with the fairness data\n4. \"Seed History\" tab at the bottom shows all retired seeds\n5. \"Randomize Client Seed\" and \"Rotate Server Seed\" buttons are both visible\n\nRoobet uniquely auto-rotates server seeds at session-end, which is slightly aggressive — rotate manually if you want to verify rounds later, so you're not surprised by the auto-rotation closing off future verification. Their [PF Originals are ranked](\u002Fblog\u002Fprovably-fair-bitcoin-games) against Stake and BC.Game in our Bitcoin casino guide.\n\n### Universal Workflow\n\nAny legitimate PF casino will follow this pattern:\n\n1. **Find the shield\u002Flock\u002Fpadlock** — standard icon for fairness panels\n2. **Locate the active server seed hash, client seed, and nonce** — all three must be visible\n3. **Test rotation** — click the rotate button; if the old server seed doesn't appear in under a second, the implementation is broken\n4. **Note the algorithm** — SHA-256 (64-char) or SHA-512 (128-char); you need this for verification\n5. **Verify at least one round** — use a calculator to confirm hash match + HMAC output\n\nIf any of those five steps fail, the casino's \"provably fair\" claim is marketing only. Cross-check against our [hub with current PF implementations](\u002Fcasino\u002Fprovably-fair) before depositing.\n\n## Interactive: Verify a Round with Your Own Seeds\n\nPaste the four values from your casino's fairness panel into the verifier below. Everything runs locally in your browser via the Web Crypto API — no data is sent to our server, and the computation is the same HMAC-SHA256 (or SHA-512) your casino uses.\n\n::inline-provably-fair-verifier\n::\n\nTwo things to watch for when you verify:\n\n1. **Hash Match = PASS** — your revealed server seed, when hashed, matches the pre-round hash. This proves the casino didn't swap seeds after you bet.\n2. **Dice\u002FCrash output matches the screen** — the HMAC output, mapped through the game's formula, reproduces the exact number the game showed. This proves the outcome wasn't altered.\n\nIf both pass, your round is cryptographically fair. If hash match fails, file a complaint — you have proof the casino swapped seeds. For broader bankroll-math context around verified play, pair this with our [house edge calculator](\u002Fcasino\u002Fhouse-edge-calculator), our [RTP calculator](\u002Fcasino\u002Frtp-calculator), and the [bankroll calculator](\u002Fcasino\u002Fbankroll-calculator) so you can size bets honestly alongside per-round verification. If you're running longer sessions, our [bankroll management guide](\u002Fblog\u002Fbankroll-management-guide) covers the math on how often rotation intersects with session-sizing decisions.\n\n**One more thing:** not every \"provably fair\" casino handles seeds the way we just described. Before trusting your bankroll to one, cross-check it against the [provably fair hub](\u002Fcasino\u002Fprovably-fair) — it flags venues where the server seed hash is not committed before the round starts.\n\n## FAQ",[28,31,34,37,40,43,46,49,52,55,58,61,64,67,70],{"answer":29,"question":30},"The server seed is a random string the casino generates before your round — you only see its SHA-256 hash until the round ends. The client seed is a string you (or your browser) provide before betting. The casino combines both with a nonce (round counter) through HMAC-SHA256 to compute the outcome. Pairing them means neither side can rig the result alone.","What is client seed and server seed?",{"answer":32,"question":33},"A server seed is a random 32-64 byte string generated by the casino's server before you bet. The casino commits to it by publishing its SHA-256 hash (a 64-character fingerprint) before the round starts. After your round — or after you rotate seeds — the raw seed is revealed so you can hash it yourself and confirm it matches the pre-game hash. If it matches, the casino couldn't have swapped seeds mid-round.","What is a server seed?",{"answer":35,"question":36},"Server seeding is the process where a provably fair casino generates a fresh server seed, publishes its hash before any round, and reveals the raw seed on demand. It's half of the commit-reveal protocol — the other half is your client seed. Together they guarantee that the outcome was fixed before your bet and can be independently checked after.","What does server seeding mean?",{"answer":38,"question":39},"Open the game, click the shield, lock, or 'Fairness' icon (usually top-right of the game panel). You'll see the active server seed hash, current client seed, current nonce, and a 'Rotate seed' button. The raw server seed only appears after you rotate — at that point the old seed is revealed and a new hashed seed takes over. On Stake the panel is under Settings → Fairness; on BC.Game it's under the game's three-dot menu.","How do I find my server seed?",{"answer":41,"question":42},"No — that's the whole point of the commit-reveal protocol. The casino publishes the SHA-256 hash of the server seed before your first bet. If they change the seed afterwards, your locally-computed hash of the revealed seed won't match the pre-committed hash. If a casino ever publishes a revealed seed whose hash doesn't match what you saw before betting, it's cryptographic proof of rigging.","Can the casino change the server seed mid-game?",{"answer":44,"question":45},"No — every combination of server_seed + client_seed + nonce produces a statistically random outcome. Changing your client seed doesn't give you better odds, it just produces different results. The only strategic reason to change it is to defeat the biased-seed attack, where a dishonest casino pre-computes outcomes for common client seeds. Rotating every 50-100 bets makes pre-computation useless.","Does changing my client seed change my odds?",{"answer":47,"question":48},"Nothing in the cryptography breaks — your bets are still verifiable with the same server seed across thousands of rounds, because the nonce increments every bet. But you lose the main defense against biased-seed attacks. If the casino happened to choose a server seed that produces unfavorable outcomes against your specific client seed, you'll absorb that bias for the entire session. Rotate every 50-100 bets to reset this risk.","What happens if I never rotate seeds?",{"answer":50,"question":51},"You can, but there's no benefit and one small risk. Seeds are scoped to each casino — your Stake client seed has no meaning on BC.Game. Using a predictable, reused client seed slightly helps a dishonest casino pre-compute outcomes for you. Best practice: let each casino auto-generate a new random client seed, then rotate it every 50-100 bets.","Can I use the same client seed across casinos?",{"answer":53,"question":54},"Because a raw server seed would let you reverse-engineer the outcome before betting, and the casino could swap seeds after seeing your bet. The SHA-256 hash solves both: it proves the seed existed before you bet (commitment), without revealing the seed itself. After the round, the casino publishes the raw seed, you hash it, and confirm it matches. This is a standard cryptographic commit-reveal.","Why is the server seed hashed before the round?",{"answer":56,"question":57},"Your client seed is visible only in your own fairness panel — the casino sees it when you submit it, but other players don't. Server seed hashes are usually visible per-user (not public), and the raw server seed is released to you after seed rotation. Nothing about provably fair requires the seeds to be broadcast publicly, just that they're committed before the round and revealed afterwards to you.","Are all client seeds public?",{"answer":59,"question":60},"That casino isn't actually provably fair, regardless of marketing claims. Legitimate PF implementations include a 'Rotate seed' button in every game's fairness panel — clicking it instantly reveals the old server seed and commits a new hashed one. If the button doesn't work, the seed never appears, or the casino delays reveal for hours, treat the PF badge as fake and file a chargeback if you have disputed rounds.","What if a casino won't reveal the server seed?",{"answer":62,"question":63},"Yes, but only for seeds that have already been rotated or that you explicitly retired. Active server seeds stay hidden (you only see the hash) until you rotate them. Most casinos keep a 'seed history' in the fairness panel showing every retired server seed paired with its bets, client seed, and final nonce — enough data to re-verify every bet from that seed period.","Can I see past rounds' server seeds?",{"answer":65,"question":66},"In 2026 yes, for the purposes of provably fair gambling. SHA-256 has no practical preimage or collision attacks, and HMAC-SHA256 adds a second layer of authentication that makes length-extension attacks irrelevant. Breaking it would require ~2^256 operations, which isn't feasible with current or near-future classical computers. The realistic threats aren't cryptographic — they're weak seed generation, missing seed rotation, or fake verifiers.","Is HMAC-SHA256 really unbreakable?",{"answer":68,"question":69},"No. Dice games on Stake use HMAC-SHA256 with outputs mapped to 0-99.99. Crash games map the same HMAC output to a multiplier using a different formula. Provably fair blackjack often uses HMAC-SHA512 and generates one random number per card. Always check the specific casino's fairness docs to get the exact mapping — a generic verifier will get the hash match right but may display a different outcome number than the game screen.","Do all games use the same seed format?",{"answer":71,"question":72},"Copying a seed that's already been burned on another account produces no advantage — the nonce and client seed are unique to that account's history. Worse, if someone posts a 'lucky seed' on a forum, they likely posted it after it already produced the wins. Generate your own random client seed and trust the math: over long enough play, no seed is luckier than any other.","Should I copy seeds from another player?",[74,75,76,77],"en","ru","de","tr",{"data":79,"body":80},{},{"type":81,"children":82},"root",[83,91,125,138,149,155,160,275,280,509,514,521,556,562,595,623,629,634,640,652,657,708,713,719,737,742,785,797,803,813,825,831,836,842,847,1056,1061,1092,1104,1110,1115,1123,1159,1167,1179,1187,1215,1223,1228,1236,1248,1254,1259,1293,1313,1319,1324,1328,1334,1484,1489,1495,1500,1550,1555,1561,1566,1667,1679,1685,1690,1696,1707,1712,1717,1728,1746,1759,1765,1770,1921,1926,1933,1938,1971,1976,1982,2000,2005,2011,2016,2022,2043,2055,2061,2073,2078,2084,2089,2094,2100,2105,2158,2164,2176,2197,2203,2208,2214,2274,2279,2285,2332,2337,2343,2377,2389,2395,2400,2453,2465,2471,2476,2480,2485,2508,2545,2562],{"type":84,"tag":85,"props":86,"children":88},"element","h2",{"id":87},"client-seed-vs-server-seed-full-technical-guide-2026",[89],{"type":90,"value":15},"text",{"type":84,"tag":92,"props":93,"children":94},"p",{},[95,97,110,112,123],{"type":90,"value":96},"Picture this: you just lost eight dice rolls in a row on a provably fair casino. You open the fairness panel, half-hoping to find proof the site is rigged. You see two fields — ",{"type":84,"tag":98,"props":99,"children":100},"strong",{},[101,103],{"type":90,"value":102},"Server Seed Hash: ",{"type":84,"tag":104,"props":105,"children":107},"code",{"className":106},[],[108],{"type":90,"value":109},"a3f79b21...",{"type":90,"value":111}," and ",{"type":84,"tag":98,"props":113,"children":114},{},[115,117],{"type":90,"value":116},"Client Seed: ",{"type":84,"tag":104,"props":118,"children":120},{"className":119},[],[121],{"type":90,"value":122},"bG7yxQ2pR",{"type":90,"value":124}," — plus a counter labeled Nonce that keeps ticking up. Most players glance at the numbers and close the panel, because nothing in the game explained what any of them actually do.",{"type":84,"tag":92,"props":126,"children":127},{},[128,130,136],{"type":90,"value":129},"Here's the thing: those two seeds are the ",{"type":84,"tag":131,"props":132,"children":133},"em",{},[134],{"type":90,"value":135},"entire",{"type":90,"value":137}," reason you can trust the round. One of them is the casino's secret, committed before you bet. The other is yours, controllable at any time. Together they make it mathematically impossible for the casino to rig the outcome after seeing your wager. Miss how they pair, and you're trusting the site blindly. Understand the pair, and you can verify every single bet in under a minute.",{"type":84,"tag":92,"props":139,"children":140},{},[141,143,147],{"type":90,"value":142},"This guide breaks down ",{"type":84,"tag":98,"props":144,"children":145},{},[146],{"type":90,"value":18},{"type":90,"value":148}," the way a player actually uses them in 2026: what each one does, who controls it, when it's revealed, what happens when you change it, and the one attack the whole system can't stop unless you rotate regularly. We'll walk the math step-by-step with a real dice example, compare how Stake, BC.Game, and Roobet display the panel, and end with a live verifier so you can drop in your own seeds and see the outcome reproduced.",{"type":84,"tag":85,"props":150,"children":152},{"id":151},"tldr-the-60-second-answer",[153],{"type":90,"value":154},"TL;DR — The 60-Second Answer",{"type":84,"tag":92,"props":156,"children":157},{},[158],{"type":90,"value":159},"Every provably fair round needs three inputs. The casino controls one, you control another, and the third is a simple counter. None of them alone determines the outcome — all three must combine.",{"type":84,"tag":161,"props":162,"children":163},"table",{},[164,192],{"type":84,"tag":165,"props":166,"children":167},"thead",{},[168],{"type":84,"tag":77,"props":169,"children":170},{},[171,177,182,187],{"type":84,"tag":172,"props":173,"children":174},"th",{},[175],{"type":90,"value":176},"Input",{"type":84,"tag":172,"props":178,"children":179},{},[180],{"type":90,"value":181},"Who controls it",{"type":84,"tag":172,"props":183,"children":184},{},[185],{"type":90,"value":186},"When revealed",{"type":84,"tag":172,"props":188,"children":189},{},[190],{"type":90,"value":191},"Changeable mid-session?",{"type":84,"tag":193,"props":194,"children":195},"tbody",{},[196,223,249],{"type":84,"tag":77,"props":197,"children":198},{},[199,208,213,218],{"type":84,"tag":200,"props":201,"children":202},"td",{},[203],{"type":84,"tag":98,"props":204,"children":205},{},[206],{"type":90,"value":207},"Server seed",{"type":84,"tag":200,"props":209,"children":210},{},[211],{"type":90,"value":212},"Casino",{"type":84,"tag":200,"props":214,"children":215},{},[216],{"type":90,"value":217},"After seed rotation",{"type":84,"tag":200,"props":219,"children":220},{},[221],{"type":90,"value":222},"No, but you can rotate",{"type":84,"tag":77,"props":224,"children":225},{},[226,234,239,244],{"type":84,"tag":200,"props":227,"children":228},{},[229],{"type":84,"tag":98,"props":230,"children":231},{},[232],{"type":90,"value":233},"Client seed",{"type":84,"tag":200,"props":235,"children":236},{},[237],{"type":90,"value":238},"You",{"type":84,"tag":200,"props":240,"children":241},{},[242],{"type":90,"value":243},"Always visible to you",{"type":84,"tag":200,"props":245,"children":246},{},[247],{"type":90,"value":248},"Yes, anytime",{"type":84,"tag":77,"props":250,"children":251},{},[252,260,265,270],{"type":84,"tag":200,"props":253,"children":254},{},[255],{"type":84,"tag":98,"props":256,"children":257},{},[258],{"type":90,"value":259},"Nonce",{"type":84,"tag":200,"props":261,"children":262},{},[263],{"type":90,"value":264},"Protocol",{"type":84,"tag":200,"props":266,"children":267},{},[268],{"type":90,"value":269},"Always visible",{"type":84,"tag":200,"props":271,"children":272},{},[273],{"type":90,"value":274},"No (auto-increments)",{"type":84,"tag":92,"props":276,"children":277},{},[278],{"type":90,"value":279},"The math works like this:",{"type":84,"tag":92,"props":281,"children":282},{},[283],{"type":84,"tag":284,"props":285,"children":288},"span",{"className":286},[287],"katex",[289,373],{"type":84,"tag":284,"props":290,"children":293},{"className":291},[292],"katex-mathml",[294],{"type":84,"tag":295,"props":296,"children":298},"math",{"xmlns":297},"http:\u002F\u002Fwww.w3.org\u002F1998\u002FMath\u002FMathML",[299],{"type":84,"tag":300,"props":301,"children":302},"semantics",{},[303,366],{"type":84,"tag":304,"props":305,"children":306},"mrow",{},[307,313,319,324,330,335,341,346,351,356,361],{"type":84,"tag":308,"props":309,"children":310},"mtext",{},[311],{"type":90,"value":312},"outcome",{"type":84,"tag":314,"props":315,"children":316},"mo",{},[317],{"type":90,"value":318},"=",{"type":84,"tag":308,"props":320,"children":321},{},[322],{"type":90,"value":323},"HMAC-SHA256",{"type":84,"tag":314,"props":325,"children":327},{"stretchy":326},"false",[328],{"type":90,"value":329},"(",{"type":84,"tag":308,"props":331,"children":332},{},[333],{"type":90,"value":334},"server_seed",{"type":84,"tag":314,"props":336,"children":338},{"separator":337},"true",[339],{"type":90,"value":340},",",{"type":84,"tag":308,"props":342,"children":343},{},[344],{"type":90,"value":345},"  ",{"type":84,"tag":308,"props":347,"children":348},{},[349],{"type":90,"value":350},"client_seed",{"type":84,"tag":314,"props":352,"children":353},{},[354],{"type":90,"value":355},":",{"type":84,"tag":308,"props":357,"children":358},{},[359],{"type":90,"value":360},"nonce",{"type":84,"tag":314,"props":362,"children":363},{"stretchy":326},[364],{"type":90,"value":365},")",{"type":84,"tag":367,"props":368,"children":370},"annotation",{"encoding":369},"application\u002Fx-tex",[371],{"type":90,"value":372},"\\text{outcome} = \\text{HMAC-SHA256}(\\text{server\\_seed},\\; \\text{client\\_seed} : \\text{nonce})",{"type":84,"tag":284,"props":374,"children":377},{"className":375,"ariaHidden":337},[376],"katex-html",[378,415,485],{"type":84,"tag":284,"props":379,"children":382},{"className":380},[381],"base",[383,389,399,405,411],{"type":84,"tag":284,"props":384,"children":388},{"className":385,"style":387},[386],"strut","height:0.6151em;",[],{"type":84,"tag":284,"props":390,"children":393},{"className":391},[392,90],"mord",[394],{"type":84,"tag":284,"props":395,"children":397},{"className":396},[392],[398],{"type":90,"value":312},{"type":84,"tag":284,"props":400,"children":404},{"className":401,"style":403},[402],"mspace","margin-right:0.2778em;",[],{"type":84,"tag":284,"props":406,"children":409},{"className":407},[408],"mrel",[410],{"type":90,"value":318},{"type":84,"tag":284,"props":412,"children":414},{"className":413,"style":403},[402],[],{"type":84,"tag":284,"props":416,"children":418},{"className":417},[381],[419,424,433,439,448,454,458,463,472,476,481],{"type":84,"tag":284,"props":420,"children":423},{"className":421,"style":422},[386],"height:1.06em;vertical-align:-0.31em;",[],{"type":84,"tag":284,"props":425,"children":427},{"className":426},[392,90],[428],{"type":84,"tag":284,"props":429,"children":431},{"className":430},[392],[432],{"type":90,"value":323},{"type":84,"tag":284,"props":434,"children":437},{"className":435},[436],"mopen",[438],{"type":90,"value":329},{"type":84,"tag":284,"props":440,"children":442},{"className":441},[392,90],[443],{"type":84,"tag":284,"props":444,"children":446},{"className":445},[392],[447],{"type":90,"value":334},{"type":84,"tag":284,"props":449,"children":452},{"className":450},[451],"mpunct",[453],{"type":90,"value":340},{"type":84,"tag":284,"props":455,"children":457},{"className":456,"style":403},[402],[],{"type":84,"tag":284,"props":459,"children":462},{"className":460,"style":461},[402],"margin-right:0.1667em;",[],{"type":84,"tag":284,"props":464,"children":466},{"className":465},[392,90],[467],{"type":84,"tag":284,"props":468,"children":470},{"className":469},[392],[471],{"type":90,"value":350},{"type":84,"tag":284,"props":473,"children":475},{"className":474,"style":403},[402],[],{"type":84,"tag":284,"props":477,"children":479},{"className":478},[408],[480],{"type":90,"value":355},{"type":84,"tag":284,"props":482,"children":484},{"className":483,"style":403},[402],[],{"type":84,"tag":284,"props":486,"children":488},{"className":487},[381],[489,494,503],{"type":84,"tag":284,"props":490,"children":493},{"className":491,"style":492},[386],"height:1em;vertical-align:-0.25em;",[],{"type":84,"tag":284,"props":495,"children":497},{"className":496},[392,90],[498],{"type":84,"tag":284,"props":499,"children":501},{"className":500},[392],[502],{"type":90,"value":360},{"type":84,"tag":284,"props":504,"children":507},{"className":505},[506],"mclose",[508],{"type":90,"value":365},{"type":84,"tag":92,"props":510,"children":511},{},[512],{"type":90,"value":513},"In plain English: the casino takes its secret seed, keyed against your public seed plus the round number, runs them through a one-way cryptographic function, and maps the result to a dice roll, crash multiplier, or card. You can't predict it (you don't know the server seed), and the casino can't fake it (they committed to the server seed's hash before you bet).",{"type":84,"tag":515,"props":516,"children":518},"h3",{"id":517},"who-controls-each-seed",[519],{"type":90,"value":520},"Who Controls Each Seed",{"type":84,"tag":522,"props":523,"children":524},"ul",{},[525,536,546],{"type":84,"tag":526,"props":527,"children":528},"li",{},[529,534],{"type":84,"tag":98,"props":530,"children":531},{},[532],{"type":90,"value":533},"Casino controls the server seed",{"type":90,"value":535}," — it's generated on their server and hidden until you rotate it",{"type":84,"tag":526,"props":537,"children":538},{},[539,544],{"type":84,"tag":98,"props":540,"children":541},{},[542],{"type":90,"value":543},"You control the client seed",{"type":90,"value":545}," — usually auto-generated by your browser, but editable in the fairness panel",{"type":84,"tag":526,"props":547,"children":548},{},[549,554],{"type":84,"tag":98,"props":550,"children":551},{},[552],{"type":90,"value":553},"Both are required",{"type":90,"value":555}," — the casino can't compute your outcome without both seeds",{"type":84,"tag":515,"props":557,"children":559},{"id":558},"what-to-actually-change",[560],{"type":90,"value":561},"What to Actually Change",{"type":84,"tag":522,"props":563,"children":564},{},[565,575,585],{"type":84,"tag":526,"props":566,"children":567},{},[568,573],{"type":84,"tag":98,"props":569,"children":570},{},[571],{"type":90,"value":572},"Rotate your server seed every 50-100 bets",{"type":90,"value":574}," — forces the casino to commit to a new seed they can't have pre-optimized",{"type":84,"tag":526,"props":576,"children":577},{},[578,583],{"type":84,"tag":98,"props":579,"children":580},{},[581],{"type":90,"value":582},"Change your client seed occasionally",{"type":90,"value":584}," — once every session is plenty, it doesn't improve odds",{"type":84,"tag":526,"props":586,"children":587},{},[588,593],{"type":84,"tag":98,"props":589,"children":590},{},[591],{"type":90,"value":592},"Never change the nonce manually",{"type":90,"value":594}," — it's a simple counter, tampering breaks verification",{"type":84,"tag":92,"props":596,"children":597},{},[598,600,605,607,612,614,621],{"type":90,"value":599},"If you take nothing else away from this page: the client seed is your ",{"type":84,"tag":131,"props":601,"children":602},{},[603],{"type":90,"value":604},"leverage",{"type":90,"value":606},". The server seed is the casino's ",{"type":84,"tag":131,"props":608,"children":609},{},[610],{"type":90,"value":611},"commitment",{"type":90,"value":613},". Rotating the server seed periodically is what stops a dishonest operator from gaming the math. For a broader primer, our ",{"type":84,"tag":615,"props":616,"children":618},"a",{"href":617},"\u002Fblog\u002Fwhat-is-provably-fair-gambling",[619],{"type":90,"value":620},"what is provably fair gambling",{"type":90,"value":622}," explainer covers the full system; this guide zooms in on the seeds themselves.",{"type":84,"tag":85,"props":624,"children":626},{"id":625},"what-each-seed-actually-does",[627],{"type":90,"value":628},"What Each Seed Actually Does",{"type":84,"tag":92,"props":630,"children":631},{},[632],{"type":90,"value":633},"Before we compare them, each seed deserves its own breakdown. They look similar in the UI — both are long random strings — but they play opposite roles in the protocol.",{"type":84,"tag":515,"props":635,"children":637},{"id":636},"the-server-seed-casinos-secret",[638],{"type":90,"value":639},"The Server Seed (Casino's Secret)",{"type":84,"tag":92,"props":641,"children":642},{},[643,645,650],{"type":90,"value":644},"The ",{"type":84,"tag":98,"props":646,"children":647},{},[648],{"type":90,"value":649},"server seed",{"type":90,"value":651}," is a random string (usually 32 or 64 bytes, hex-encoded) generated by the casino before your round begins. Think of it as the casino's locked envelope: they write the contents down, seal it, and show you the fingerprint (the SHA-256 hash). The seal guarantees they can't change what's inside — but you don't get to peek until after your bet.",{"type":84,"tag":92,"props":653,"children":654},{},[655],{"type":90,"value":656},"Key facts about server seeds:",{"type":84,"tag":522,"props":658,"children":659},{},[660,678,688,698],{"type":84,"tag":526,"props":661,"children":662},{},[663,668,670,676],{"type":84,"tag":98,"props":664,"children":665},{},[666],{"type":90,"value":667},"Always hashed",{"type":90,"value":669}," before exposure: you see ",{"type":84,"tag":104,"props":671,"children":673},{"className":672},[],[674],{"type":90,"value":675},"SHA-256(server_seed)",{"type":90,"value":677}," as a 64-character hex string",{"type":84,"tag":526,"props":679,"children":680},{},[681,686],{"type":84,"tag":98,"props":682,"children":683},{},[684],{"type":90,"value":685},"Single seed covers many rounds",{"type":90,"value":687},": the same server seed stays active for dozens or thousands of bets, with the nonce incrementing per round",{"type":84,"tag":526,"props":689,"children":690},{},[691,696],{"type":84,"tag":98,"props":692,"children":693},{},[694],{"type":90,"value":695},"Rotates on demand",{"type":90,"value":697},": clicking \"Rotate\" reveals the old seed and commits a new hash",{"type":84,"tag":526,"props":699,"children":700},{},[701,706],{"type":84,"tag":98,"props":702,"children":703},{},[704],{"type":90,"value":705},"Never reused across players",{"type":90,"value":707},": each account has its own active server seed",{"type":84,"tag":92,"props":709,"children":710},{},[711],{"type":90,"value":712},"The reason the server seed is hidden is simple — if you could see it before betting, you could compute the exact outcome in advance and cheat the casino. The hash is a commitment device: it locks the casino into one specific seed without revealing it.",{"type":84,"tag":515,"props":714,"children":716},{"id":715},"the-client-seed-your-input",[717],{"type":90,"value":718},"The Client Seed (Your Input)",{"type":84,"tag":92,"props":720,"children":721},{},[722,723,728,730,735],{"type":90,"value":644},{"type":84,"tag":98,"props":724,"children":725},{},[726],{"type":90,"value":727},"client seed",{"type":90,"value":729}," is the string ",{"type":84,"tag":131,"props":731,"children":732},{},[733],{"type":90,"value":734},"you",{"type":90,"value":736}," contribute. On Stake, BC.Game, Roobet, and every mainstream PF casino, your browser generates a random one by default — usually a 10-20 character alphanumeric string — and lets you edit it in the fairness panel.",{"type":84,"tag":92,"props":738,"children":739},{},[740],{"type":90,"value":741},"Key facts about client seeds:",{"type":84,"tag":522,"props":743,"children":744},{},[745,755,765,775],{"type":84,"tag":526,"props":746,"children":747},{},[748,753],{"type":84,"tag":98,"props":749,"children":750},{},[751],{"type":90,"value":752},"You control it",{"type":90,"value":754},", the casino cannot see what your next one will be until you submit it",{"type":84,"tag":526,"props":756,"children":757},{},[758,763],{"type":84,"tag":98,"props":759,"children":760},{},[761],{"type":90,"value":762},"Visible to you at all times",{"type":90,"value":764}," in the fairness panel",{"type":84,"tag":526,"props":766,"children":767},{},[768,773],{"type":84,"tag":98,"props":769,"children":770},{},[771],{"type":90,"value":772},"Changeable anytime",{"type":90,"value":774},", but changes don't affect bets already placed",{"type":84,"tag":526,"props":776,"children":777},{},[778,783],{"type":84,"tag":98,"props":779,"children":780},{},[781],{"type":90,"value":782},"Often auto-generated",{"type":90,"value":784}," — your browser randomizes a fresh one per session",{"type":84,"tag":92,"props":786,"children":787},{},[788,790,795],{"type":90,"value":789},"The client seed is the mechanism that stops the casino from pre-computing outcomes. Since the server seed is committed via hash ",{"type":84,"tag":131,"props":791,"children":792},{},[793],{"type":90,"value":794},"before",{"type":90,"value":796}," you submit your next client seed, the casino genuinely can't know what result HMAC will produce. This is why changing your client seed occasionally — or letting the browser auto-rotate — is a key defense, even though any single client seed is just as \"lucky\" as any other on average.",{"type":84,"tag":515,"props":798,"children":800},{"id":799},"the-nonce-round-counter",[801],{"type":90,"value":802},"The Nonce (Round Counter)",{"type":84,"tag":92,"props":804,"children":805},{},[806,807,811],{"type":90,"value":644},{"type":84,"tag":98,"props":808,"children":809},{},[810],{"type":90,"value":360},{"type":90,"value":812}," is the simplest of the three. It's just a counter that increments with every bet — round 1, round 2, round 3, and so on. You can't set it, change it, or skip it. If you bet 50 times with the same server seed and client seed, the nonce goes from 0 to 49 and every outcome is different because the nonce changes.",{"type":84,"tag":92,"props":814,"children":815},{},[816,818,823],{"type":90,"value":817},"Why have a nonce at all? Without one, every round with the same server seed and client seed would produce the ",{"type":84,"tag":131,"props":819,"children":820},{},[821],{"type":90,"value":822},"exact same outcome",{"type":90,"value":824}," — hitting the same dice number every time. The nonce is what makes each round unique while still keeping the math reproducible. If a casino ever shows a nonce that skipped a number (0, 1, 3, 4 — where's 2?), that's a sign of tampering.",{"type":84,"tag":85,"props":826,"children":828},{"id":827},"how-they-combine-to-produce-an-outcome",[829],{"type":90,"value":830},"How They Combine to Produce an Outcome",{"type":84,"tag":92,"props":832,"children":833},{},[834],{"type":90,"value":835},"This is where the three inputs stop being data and start being math. Every provably fair casino runs the same core formula, even though the output mapping differs by game.",{"type":84,"tag":515,"props":837,"children":839},{"id":838},"the-hmac-formula-in-plain-english",[840],{"type":90,"value":841},"The HMAC Formula in Plain English",{"type":84,"tag":92,"props":843,"children":844},{},[845],{"type":90,"value":846},"Here's what every PF casino actually computes:",{"type":84,"tag":92,"props":848,"children":849},{},[850],{"type":84,"tag":284,"props":851,"children":853},{"className":852},[287],[854,925],{"type":84,"tag":284,"props":855,"children":857},{"className":856},[292],[858],{"type":84,"tag":295,"props":859,"children":860},{"xmlns":297},[861],{"type":84,"tag":300,"props":862,"children":863},{},[864,920],{"type":84,"tag":304,"props":865,"children":866},{},[867,872,876,880,884,888,892,896,900,904,908,912,916],{"type":84,"tag":308,"props":868,"children":869},{},[870],{"type":90,"value":871},"hex_output",{"type":84,"tag":314,"props":873,"children":874},{},[875],{"type":90,"value":318},{"type":84,"tag":308,"props":877,"children":878},{},[879],{"type":90,"value":323},{"type":84,"tag":314,"props":881,"children":882},{"stretchy":326},[883],{"type":90,"value":329},{"type":84,"tag":308,"props":885,"children":886},{},[887],{"type":90,"value":334},{"type":84,"tag":314,"props":889,"children":890},{"separator":337},[891],{"type":90,"value":340},{"type":84,"tag":308,"props":893,"children":894},{},[895],{"type":90,"value":345},{"type":84,"tag":308,"props":897,"children":898},{},[899],{"type":90,"value":350},{"type":84,"tag":308,"props":901,"children":902},{},[903],{"type":90,"value":345},{"type":84,"tag":314,"props":905,"children":906},{},[907],{"type":90,"value":355},{"type":84,"tag":308,"props":909,"children":910},{},[911],{"type":90,"value":345},{"type":84,"tag":308,"props":913,"children":914},{},[915],{"type":90,"value":360},{"type":84,"tag":314,"props":917,"children":918},{"stretchy":326},[919],{"type":90,"value":365},{"type":84,"tag":367,"props":921,"children":922},{"encoding":369},[923],{"type":90,"value":924},"\\text{hex\\_output} = \\text{HMAC-SHA256}(\\text{server\\_seed},\\; \\text{client\\_seed} \\; : \\; \\text{nonce})",{"type":84,"tag":284,"props":926,"children":928},{"className":927,"ariaHidden":337},[376],[929,960,1034],{"type":84,"tag":284,"props":930,"children":932},{"className":931},[381],[933,938,947,951,956],{"type":84,"tag":284,"props":934,"children":937},{"className":935,"style":936},[386],"height:1.0044em;vertical-align:-0.31em;",[],{"type":84,"tag":284,"props":939,"children":941},{"className":940},[392,90],[942],{"type":84,"tag":284,"props":943,"children":945},{"className":944},[392],[946],{"type":90,"value":871},{"type":84,"tag":284,"props":948,"children":950},{"className":949,"style":403},[402],[],{"type":84,"tag":284,"props":952,"children":954},{"className":953},[408],[955],{"type":90,"value":318},{"type":84,"tag":284,"props":957,"children":959},{"className":958,"style":403},[402],[],{"type":84,"tag":284,"props":961,"children":963},{"className":962},[381],[964,968,977,982,991,996,1000,1004,1013,1017,1021,1026,1030],{"type":84,"tag":284,"props":965,"children":967},{"className":966,"style":422},[386],[],{"type":84,"tag":284,"props":969,"children":971},{"className":970},[392,90],[972],{"type":84,"tag":284,"props":973,"children":975},{"className":974},[392],[976],{"type":90,"value":323},{"type":84,"tag":284,"props":978,"children":980},{"className":979},[436],[981],{"type":90,"value":329},{"type":84,"tag":284,"props":983,"children":985},{"className":984},[392,90],[986],{"type":84,"tag":284,"props":987,"children":989},{"className":988},[392],[990],{"type":90,"value":334},{"type":84,"tag":284,"props":992,"children":994},{"className":993},[451],[995],{"type":90,"value":340},{"type":84,"tag":284,"props":997,"children":999},{"className":998,"style":403},[402],[],{"type":84,"tag":284,"props":1001,"children":1003},{"className":1002,"style":461},[402],[],{"type":84,"tag":284,"props":1005,"children":1007},{"className":1006},[392,90],[1008],{"type":84,"tag":284,"props":1009,"children":1011},{"className":1010},[392],[1012],{"type":90,"value":350},{"type":84,"tag":284,"props":1014,"children":1016},{"className":1015,"style":403},[402],[],{"type":84,"tag":284,"props":1018,"children":1020},{"className":1019,"style":403},[402],[],{"type":84,"tag":284,"props":1022,"children":1024},{"className":1023},[408],[1025],{"type":90,"value":355},{"type":84,"tag":284,"props":1027,"children":1029},{"className":1028,"style":403},[402],[],{"type":84,"tag":284,"props":1031,"children":1033},{"className":1032,"style":403},[402],[],{"type":84,"tag":284,"props":1035,"children":1037},{"className":1036},[381],[1038,1042,1051],{"type":84,"tag":284,"props":1039,"children":1041},{"className":1040,"style":492},[386],[],{"type":84,"tag":284,"props":1043,"children":1045},{"className":1044},[392,90],[1046],{"type":84,"tag":284,"props":1047,"children":1049},{"className":1048},[392],[1050],{"type":90,"value":360},{"type":84,"tag":284,"props":1052,"children":1054},{"className":1053},[506],[1055],{"type":90,"value":365},{"type":84,"tag":92,"props":1057,"children":1058},{},[1059],{"type":90,"value":1060},"Plain-English translation:",{"type":84,"tag":522,"props":1062,"children":1063},{},[1064,1073,1082],{"type":84,"tag":526,"props":1065,"children":1066},{},[1067,1071],{"type":84,"tag":98,"props":1068,"children":1069},{},[1070],{"type":90,"value":323},{"type":90,"value":1072},": a keyed cryptographic hash function — like SHA-256, but \"signed\" with a key",{"type":84,"tag":526,"props":1074,"children":1075},{},[1076,1080],{"type":84,"tag":98,"props":1077,"children":1078},{},[1079],{"type":90,"value":334},{"type":90,"value":1081}," (the key): the casino's hidden value, locking the function to one specific seed",{"type":84,"tag":526,"props":1083,"children":1084},{},[1085,1090],{"type":84,"tag":98,"props":1086,"children":1087},{},[1088],{"type":90,"value":1089},"client_seed:nonce",{"type":90,"value":1091}," (the message): your seed joined to the round counter with a colon",{"type":84,"tag":92,"props":1093,"children":1094},{},[1095,1097,1102],{"type":90,"value":1096},"The output is a 64-character hex string. Different games interpret it differently: dice games take the first few characters and map them to 0-99.99, crash games use a different slice and formula, blackjack games chain multiple HMAC calls (one per card) and usually switch to HMAC-SHA512 for 128-character outputs. The exact mapping matters, but the ",{"type":84,"tag":131,"props":1098,"children":1099},{},[1100],{"type":90,"value":1101},"commit-reveal structure is identical",{"type":90,"value":1103}," across all of them.",{"type":84,"tag":515,"props":1105,"children":1107},{"id":1106},"worked-example-one-dice-roll-step-by-step",[1108],{"type":90,"value":1109},"Worked Example: One Dice Roll Step by Step",{"type":84,"tag":92,"props":1111,"children":1112},{},[1113],{"type":90,"value":1114},"Let's do one full round with real (example) values so you can see exactly how the seeds combine.",{"type":84,"tag":92,"props":1116,"children":1117},{},[1118],{"type":84,"tag":98,"props":1119,"children":1120},{},[1121],{"type":90,"value":1122},"Given:",{"type":84,"tag":522,"props":1124,"children":1125},{},[1126,1137,1148],{"type":84,"tag":526,"props":1127,"children":1128},{},[1129,1131],{"type":90,"value":1130},"server_seed = ",{"type":84,"tag":104,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":90,"value":1136},"f4a9c2e1b7d8e3c5a1b9f6d2e8c4a7b3e9d1c6a2b5f8e4c7a3b6e1d9c2a5b8f4",{"type":84,"tag":526,"props":1138,"children":1139},{},[1140,1142],{"type":90,"value":1141},"client_seed = ",{"type":84,"tag":104,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":90,"value":1147},"player-xyz-42",{"type":84,"tag":526,"props":1149,"children":1150},{},[1151,1153],{"type":90,"value":1152},"nonce = ",{"type":84,"tag":104,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":90,"value":1158},"7",{"type":84,"tag":92,"props":1160,"children":1161},{},[1162],{"type":84,"tag":98,"props":1163,"children":1164},{},[1165],{"type":90,"value":1166},"Step 1 — Compute HMAC-SHA256:",{"type":84,"tag":1168,"props":1169,"children":1173},"pre",{"className":1170,"code":1172,"language":90},[1171],"language-text","HMAC-SHA256(server_seed, \"player-xyz-42:7\")\n= 8b2d4a1f9c6e7b3d5a8f2c9e4b1d7a6f3e8c5b2d9a4f7e1c8b3d6a2f9e5c4b7d\n",[1174],{"type":84,"tag":104,"props":1175,"children":1177},{"__ignoreMap":1176},"",[1178],{"type":90,"value":1172},{"type":84,"tag":92,"props":1180,"children":1181},{},[1182],{"type":84,"tag":98,"props":1183,"children":1184},{},[1185],{"type":90,"value":1186},"Step 2 — Map hex to dice roll (Stake-style):",{"type":84,"tag":92,"props":1188,"children":1189},{},[1190,1192,1198,1200,1206,1208,1213],{"type":90,"value":1191},"Take the first 5 hex chars: ",{"type":84,"tag":104,"props":1193,"children":1195},{"className":1194},[],[1196],{"type":90,"value":1197},"8b2d4",{"type":90,"value":1199}," → convert to decimal = ",{"type":84,"tag":104,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":90,"value":1205},"569,300",{"type":90,"value":1207},". Mod 1,000,000 = 569,300 → divide by 10,000 = ",{"type":84,"tag":98,"props":1209,"children":1210},{},[1211],{"type":90,"value":1212},"56.93",{"type":90,"value":1214},".",{"type":84,"tag":92,"props":1216,"children":1217},{},[1218],{"type":84,"tag":98,"props":1219,"children":1220},{},[1221],{"type":90,"value":1222},"Step 3 — Compare to your bet:",{"type":84,"tag":92,"props":1224,"children":1225},{},[1226],{"type":90,"value":1227},"If you bet \"roll under 50\" — you lose (56.93 > 50). If you bet \"roll under 60\" — you win. The exact outcome was determined by three inputs, none of which either party could manipulate after commitment.",{"type":84,"tag":92,"props":1229,"children":1230},{},[1231],{"type":84,"tag":98,"props":1232,"children":1233},{},[1234],{"type":90,"value":1235},"Step 4 — Verify:",{"type":84,"tag":92,"props":1237,"children":1238},{},[1239,1241,1247],{"type":90,"value":1240},"After rotating your server seed, you get the raw value. You hash it yourself: does SHA-256 match the hash you saw before the round? Then rerun the HMAC with the same inputs: does the output match? Both match = round is cryptographically proven fair. For a full walkthrough with copy-paste values, see ",{"type":84,"tag":615,"props":1242,"children":1244},{"href":1243},"\u002Fblog\u002Fhow-to-verify-provably-fair",[1245],{"type":90,"value":1246},"how to verify a provably fair round",{"type":90,"value":1214},{"type":84,"tag":515,"props":1249,"children":1251},{"id":1250},"why-the-math-cant-be-faked",[1252],{"type":90,"value":1253},"Why the Math Can't Be Faked",{"type":84,"tag":92,"props":1255,"children":1256},{},[1257],{"type":90,"value":1258},"Three cryptographic properties make the protocol rigging-resistant:",{"type":84,"tag":1260,"props":1261,"children":1262},"ol",{},[1263,1273,1283],{"type":84,"tag":526,"props":1264,"children":1265},{},[1266,1271],{"type":84,"tag":98,"props":1267,"children":1268},{},[1269],{"type":90,"value":1270},"Hash commitment",{"type":90,"value":1272},": SHA-256 has no practical preimage attacks, so the casino can't find a different server seed that produces the same pre-committed hash after seeing your bet.",{"type":84,"tag":526,"props":1274,"children":1275},{},[1276,1281],{"type":84,"tag":98,"props":1277,"children":1278},{},[1279],{"type":90,"value":1280},"HMAC output opacity",{"type":90,"value":1282},": You can't reverse the HMAC output to infer the server seed — needed because otherwise knowing one outcome would reveal the key.",{"type":84,"tag":526,"props":1284,"children":1285},{},[1286,1291],{"type":84,"tag":98,"props":1287,"children":1288},{},[1289],{"type":90,"value":1290},"Mutual ignorance at commit time",{"type":90,"value":1292},": The casino doesn't know your future client seeds, so they can't pre-optimize server seed choice for specific client values.",{"type":84,"tag":92,"props":1294,"children":1295},{},[1296,1298,1303,1305,1311],{"type":90,"value":1297},"If any of those three properties breaks, the protocol breaks. In 2026 none of them has broken for SHA-256, so the math is solid. The real attacks all live in ",{"type":84,"tag":131,"props":1299,"children":1300},{},[1301],{"type":90,"value":1302},"implementation",{"type":90,"value":1304}," — which we cover in the rotation section below. Our ",{"type":84,"tag":615,"props":1306,"children":1308},{"href":1307},"\u002Fblog\u002Fprovably-fair-vs-rng-certified",[1309],{"type":90,"value":1310},"provably fair vs RNG certified",{"type":90,"value":1312}," comparison digs deeper into how this math stacks up against traditional lab audits.",{"type":84,"tag":85,"props":1314,"children":1316},{"id":1315},"client-seed-vs-server-seed-side-by-side",[1317],{"type":90,"value":1318},"Client Seed vs Server Seed — Side-by-Side",{"type":84,"tag":92,"props":1320,"children":1321},{},[1322],{"type":90,"value":1323},"Same protocol, opposite roles. Here's the head-to-head.",{"type":84,"tag":1325,"props":1326,"children":1327},"chart-client-server-seed",{},[],{"type":84,"tag":515,"props":1329,"children":1331},{"id":1330},"who-controls-what",[1332],{"type":90,"value":1333},"Who Controls What",{"type":84,"tag":161,"props":1335,"children":1336},{},[1337,1358],{"type":84,"tag":165,"props":1338,"children":1339},{},[1340],{"type":84,"tag":77,"props":1341,"children":1342},{},[1343,1348,1353],{"type":84,"tag":172,"props":1344,"children":1345},{},[1346],{"type":90,"value":1347},"Property",{"type":84,"tag":172,"props":1349,"children":1350},{},[1351],{"type":90,"value":1352},"Server Seed",{"type":84,"tag":172,"props":1354,"children":1355},{},[1356],{"type":90,"value":1357},"Client Seed",{"type":84,"tag":193,"props":1359,"children":1360},{},[1361,1380,1401,1422,1443,1464],{"type":84,"tag":77,"props":1362,"children":1363},{},[1364,1372,1376],{"type":84,"tag":200,"props":1365,"children":1366},{},[1367],{"type":84,"tag":98,"props":1368,"children":1369},{},[1370],{"type":90,"value":1371},"Owner",{"type":84,"tag":200,"props":1373,"children":1374},{},[1375],{"type":90,"value":212},{"type":84,"tag":200,"props":1377,"children":1378},{},[1379],{"type":90,"value":238},{"type":84,"tag":77,"props":1381,"children":1382},{},[1383,1391,1396],{"type":84,"tag":200,"props":1384,"children":1385},{},[1386],{"type":84,"tag":98,"props":1387,"children":1388},{},[1389],{"type":90,"value":1390},"Visible raw?",{"type":84,"tag":200,"props":1392,"children":1393},{},[1394],{"type":90,"value":1395},"Only after rotation",{"type":84,"tag":200,"props":1397,"children":1398},{},[1399],{"type":90,"value":1400},"Always",{"type":84,"tag":77,"props":1402,"children":1403},{},[1404,1412,1417],{"type":84,"tag":200,"props":1405,"children":1406},{},[1407],{"type":84,"tag":98,"props":1408,"children":1409},{},[1410],{"type":90,"value":1411},"Visible hashed?",{"type":84,"tag":200,"props":1413,"children":1414},{},[1415],{"type":90,"value":1416},"Always (pre-round)",{"type":84,"tag":200,"props":1418,"children":1419},{},[1420],{"type":90,"value":1421},"Never hashed — shown raw",{"type":84,"tag":77,"props":1423,"children":1424},{},[1425,1433,1438],{"type":84,"tag":200,"props":1426,"children":1427},{},[1428],{"type":84,"tag":98,"props":1429,"children":1430},{},[1431],{"type":90,"value":1432},"Generated by",{"type":84,"tag":200,"props":1434,"children":1435},{},[1436],{"type":90,"value":1437},"Casino's RNG",{"type":84,"tag":200,"props":1439,"children":1440},{},[1441],{"type":90,"value":1442},"Your browser (or you manually)",{"type":84,"tag":77,"props":1444,"children":1445},{},[1446,1454,1459],{"type":84,"tag":200,"props":1447,"children":1448},{},[1449],{"type":84,"tag":98,"props":1450,"children":1451},{},[1452],{"type":90,"value":1453},"Length",{"type":84,"tag":200,"props":1455,"children":1456},{},[1457],{"type":90,"value":1458},"Typically 64 hex chars",{"type":84,"tag":200,"props":1460,"children":1461},{},[1462],{"type":90,"value":1463},"Typically 10-20 chars, user-set",{"type":84,"tag":77,"props":1465,"children":1466},{},[1467,1475,1480],{"type":84,"tag":200,"props":1468,"children":1469},{},[1470],{"type":84,"tag":98,"props":1471,"children":1472},{},[1473],{"type":90,"value":1474},"Can other players see it?",{"type":84,"tag":200,"props":1476,"children":1477},{},[1478],{"type":90,"value":1479},"No (scoped to your account)",{"type":84,"tag":200,"props":1481,"children":1482},{},[1483],{"type":90,"value":1479},{"type":84,"tag":92,"props":1485,"children":1486},{},[1487],{"type":90,"value":1488},"The asymmetry is intentional. If both seeds were public, either side could manipulate. By keeping the server seed hidden (via hash) and the client seed known only to you, the protocol creates a genuine two-party commitment where neither can cheat the other.",{"type":84,"tag":515,"props":1490,"children":1492},{"id":1491},"when-each-is-revealed",[1493],{"type":90,"value":1494},"When Each Is Revealed",{"type":84,"tag":92,"props":1496,"children":1497},{},[1498],{"type":90,"value":1499},"The reveal timing is what separates a working PF casino from a fake one:",{"type":84,"tag":522,"props":1501,"children":1502},{},[1503,1519,1534],{"type":84,"tag":526,"props":1504,"children":1505},{},[1506,1511,1513,1517],{"type":84,"tag":98,"props":1507,"children":1508},{},[1509],{"type":90,"value":1510},"Server seed hash",{"type":90,"value":1512},": visible ",{"type":84,"tag":131,"props":1514,"children":1515},{},[1516],{"type":90,"value":794},{"type":90,"value":1518}," every round — check it before you bet",{"type":84,"tag":526,"props":1520,"children":1521},{},[1522,1526,1527,1532],{"type":84,"tag":98,"props":1523,"children":1524},{},[1525],{"type":90,"value":233},{"type":90,"value":1512},{"type":84,"tag":131,"props":1528,"children":1529},{},[1530],{"type":90,"value":1531},"always",{"type":90,"value":1533}," — you typed or generated it",{"type":84,"tag":526,"props":1535,"children":1536},{},[1537,1542,1543,1548],{"type":84,"tag":98,"props":1538,"children":1539},{},[1540],{"type":90,"value":1541},"Server seed (raw)",{"type":90,"value":1512},{"type":84,"tag":131,"props":1544,"children":1545},{},[1546],{"type":90,"value":1547},"only after seed rotation",{"type":90,"value":1549}," — either you click \"Rotate\" or end your session",{"type":84,"tag":92,"props":1551,"children":1552},{},[1553],{"type":90,"value":1554},"A legitimate casino will never refuse to rotate. If you click \"Rotate seed\" and the old seed doesn't appear within seconds — or worse, if the casino says \"seeds rotate automatically every 24 hours and you'll see history tomorrow\" — that's a red flag. The seed reveal should be instant and cryptographically provable.",{"type":84,"tag":515,"props":1556,"children":1558},{"id":1557},"what-happens-if-you-change-each-one",[1559],{"type":90,"value":1560},"What Happens If You Change Each One",{"type":84,"tag":92,"props":1562,"children":1563},{},[1564],{"type":90,"value":1565},"Here's the practical impact table you actually need:",{"type":84,"tag":161,"props":1567,"children":1568},{},[1569,1595],{"type":84,"tag":165,"props":1570,"children":1571},{},[1572],{"type":84,"tag":77,"props":1573,"children":1574},{},[1575,1580,1585,1590],{"type":84,"tag":172,"props":1576,"children":1577},{},[1578],{"type":90,"value":1579},"Action",{"type":84,"tag":172,"props":1581,"children":1582},{},[1583],{"type":90,"value":1584},"Mid-round effect",{"type":84,"tag":172,"props":1586,"children":1587},{},[1588],{"type":90,"value":1589},"Next-round effect",{"type":84,"tag":172,"props":1591,"children":1592},{},[1593],{"type":90,"value":1594},"Long-term effect",{"type":84,"tag":193,"props":1596,"children":1597},{},[1598,1621,1644],{"type":84,"tag":77,"props":1599,"children":1600},{},[1601,1606,1611,1616],{"type":84,"tag":200,"props":1602,"children":1603},{},[1604],{"type":90,"value":1605},"Rotate server seed",{"type":84,"tag":200,"props":1607,"children":1608},{},[1609],{"type":90,"value":1610},"None (current round unaffected)",{"type":84,"tag":200,"props":1612,"children":1613},{},[1614],{"type":90,"value":1615},"New server seed used from next bet",{"type":84,"tag":200,"props":1617,"children":1618},{},[1619],{"type":90,"value":1620},"Resets biased-seed risk",{"type":84,"tag":77,"props":1622,"children":1623},{},[1624,1629,1634,1639],{"type":84,"tag":200,"props":1625,"children":1626},{},[1627],{"type":90,"value":1628},"Change client seed",{"type":84,"tag":200,"props":1630,"children":1631},{},[1632],{"type":90,"value":1633},"None (can't change retroactively)",{"type":84,"tag":200,"props":1635,"children":1636},{},[1637],{"type":90,"value":1638},"New client seed used from next bet",{"type":84,"tag":200,"props":1640,"children":1641},{},[1642],{"type":90,"value":1643},"Forces casino to recompute all outcomes",{"type":84,"tag":77,"props":1645,"children":1646},{},[1647,1652,1657,1662],{"type":84,"tag":200,"props":1648,"children":1649},{},[1650],{"type":90,"value":1651},"Reset nonce",{"type":84,"tag":200,"props":1653,"children":1654},{},[1655],{"type":90,"value":1656},"Impossible — protocol-enforced",{"type":84,"tag":200,"props":1658,"children":1659},{},[1660],{"type":90,"value":1661},"Nonce continues from where it was",{"type":84,"tag":200,"props":1663,"children":1664},{},[1665],{"type":90,"value":1666},"N\u002FA",{"type":84,"tag":92,"props":1668,"children":1669},{},[1670,1672,1677],{"type":90,"value":1671},"The takeaway: changing either seed is a forward-looking protection, not a way to retroactively dispute lost rounds. If you're about to start a long dice session on a new casino, rotate both seeds immediately so the casino commits to values ",{"type":84,"tag":131,"props":1673,"children":1674},{},[1675],{"type":90,"value":1676},"after",{"type":90,"value":1678}," your client seed is set. That ordering matters more than any specific seed value.",{"type":84,"tag":85,"props":1680,"children":1682},{"id":1681},"seed-rotation-when-and-why-to-change-them",[1683],{"type":90,"value":1684},"Seed Rotation — When and Why to Change Them",{"type":84,"tag":92,"props":1686,"children":1687},{},[1688],{"type":90,"value":1689},"If you read nothing else on this page, read this section. Rotation is the one player-side action that actually changes your cryptographic security posture.",{"type":84,"tag":515,"props":1691,"children":1693},{"id":1692},"the-biased-seed-attack-and-why-rotation-stops-it",[1694],{"type":90,"value":1695},"The Biased-Seed Attack (And Why Rotation Stops It)",{"type":84,"tag":92,"props":1697,"children":1698},{},[1699,1701,1706],{"type":90,"value":1700},"Here's the one theoretical weakness provably fair can't rule out without rotation: ",{"type":84,"tag":98,"props":1702,"children":1703},{},[1704],{"type":90,"value":1705},"biased seed generation",{"type":90,"value":1214},{"type":84,"tag":92,"props":1708,"children":1709},{},[1710],{"type":90,"value":1711},"Imagine a dishonest casino that generates thousands of server seeds in advance. For each one, they pre-compute outcomes against common client seed patterns (default browser formats, frequently-used words, patterns they've seen before). They then selectively deploy seeds that happen to produce more losses than wins for the expected client seeds.",{"type":84,"tag":92,"props":1713,"children":1714},{},[1715],{"type":90,"value":1716},"Because the casino still publishes a valid server seed hash — and the revealed seed still hashes to that commitment — the verification math passes. The protocol \"works.\" But the seed itself was cherry-picked from a biased pool, and your long-term house edge is worse than advertised.",{"type":84,"tag":92,"props":1718,"children":1719},{},[1720,1722,1727],{"type":90,"value":1721},"The defense is simple: ",{"type":84,"tag":98,"props":1723,"children":1724},{},[1725],{"type":90,"value":1726},"rotate often enough that pre-computation becomes useless",{"type":90,"value":1214},{"type":84,"tag":522,"props":1729,"children":1730},{},[1731,1736,1741],{"type":84,"tag":526,"props":1732,"children":1733},{},[1734],{"type":90,"value":1735},"Rotate after every 50-100 bets → the casino must commit new seeds they haven't pre-optimized",{"type":84,"tag":526,"props":1737,"children":1738},{},[1739],{"type":90,"value":1740},"Change your client seed at the same time → invalidates any pattern-based pre-computation",{"type":84,"tag":526,"props":1742,"children":1743},{},[1744],{"type":90,"value":1745},"Both together make biased-seed attacks statistically infeasible at scale",{"type":84,"tag":92,"props":1747,"children":1748},{},[1749,1751,1757],{"type":90,"value":1750},"This attack is extremely rare at reputable casinos — the reputational cost of getting caught vastly outweighs the EV gained — but it's the one reason rotation matters at all. Our ",{"type":84,"tag":615,"props":1752,"children":1754},{"href":1753},"\u002Fblog\u002Fprovably-fair-bitcoin-games",[1755],{"type":90,"value":1756},"provably fair Bitcoin games",{"type":90,"value":1758}," ranking filters specifically for casinos with published rotation workflows.",{"type":84,"tag":515,"props":1760,"children":1762},{"id":1761},"rotation-frequency-on-popular-casinos",[1763],{"type":90,"value":1764},"Rotation Frequency on Popular Casinos",{"type":84,"tag":92,"props":1766,"children":1767},{},[1768],{"type":90,"value":1769},"Different sites use different default intervals. Here's what each platform actually does:",{"type":84,"tag":161,"props":1771,"children":1772},{},[1773,1798],{"type":84,"tag":165,"props":1774,"children":1775},{},[1776],{"type":84,"tag":77,"props":1777,"children":1778},{},[1779,1783,1788,1793],{"type":84,"tag":172,"props":1780,"children":1781},{},[1782],{"type":90,"value":212},{"type":84,"tag":172,"props":1784,"children":1785},{},[1786],{"type":90,"value":1787},"Default rotation",{"type":84,"tag":172,"props":1789,"children":1790},{},[1791],{"type":90,"value":1792},"Manual rotation",{"type":84,"tag":172,"props":1794,"children":1795},{},[1796],{"type":90,"value":1797},"Recommended setting",{"type":84,"tag":193,"props":1799,"children":1800},{},[1801,1827,1850,1874,1898],{"type":84,"tag":77,"props":1802,"children":1803},{},[1804,1812,1817,1822],{"type":84,"tag":200,"props":1805,"children":1806},{},[1807],{"type":84,"tag":98,"props":1808,"children":1809},{},[1810],{"type":90,"value":1811},"Stake",{"type":84,"tag":200,"props":1813,"children":1814},{},[1815],{"type":90,"value":1816},"Never auto-rotates",{"type":84,"tag":200,"props":1818,"children":1819},{},[1820],{"type":90,"value":1821},"Anytime, instant",{"type":84,"tag":200,"props":1823,"children":1824},{},[1825],{"type":90,"value":1826},"Every 50-100 bets",{"type":84,"tag":77,"props":1828,"children":1829},{},[1830,1838,1842,1846],{"type":84,"tag":200,"props":1831,"children":1832},{},[1833],{"type":84,"tag":98,"props":1834,"children":1835},{},[1836],{"type":90,"value":1837},"BC.Game",{"type":84,"tag":200,"props":1839,"children":1840},{},[1841],{"type":90,"value":1816},{"type":84,"tag":200,"props":1843,"children":1844},{},[1845],{"type":90,"value":1821},{"type":84,"tag":200,"props":1847,"children":1848},{},[1849],{"type":90,"value":1826},{"type":84,"tag":77,"props":1851,"children":1852},{},[1853,1861,1866,1870],{"type":84,"tag":200,"props":1854,"children":1855},{},[1856],{"type":84,"tag":98,"props":1857,"children":1858},{},[1859],{"type":90,"value":1860},"Roobet",{"type":84,"tag":200,"props":1862,"children":1863},{},[1864],{"type":90,"value":1865},"Rotates on session end",{"type":84,"tag":200,"props":1867,"children":1868},{},[1869],{"type":90,"value":1821},{"type":84,"tag":200,"props":1871,"children":1872},{},[1873],{"type":90,"value":1826},{"type":84,"tag":77,"props":1875,"children":1876},{},[1877,1885,1889,1893],{"type":84,"tag":200,"props":1878,"children":1879},{},[1880],{"type":84,"tag":98,"props":1881,"children":1882},{},[1883],{"type":90,"value":1884},"Rainbet",{"type":84,"tag":200,"props":1886,"children":1887},{},[1888],{"type":90,"value":1816},{"type":84,"tag":200,"props":1890,"children":1891},{},[1892],{"type":90,"value":1821},{"type":84,"tag":200,"props":1894,"children":1895},{},[1896],{"type":90,"value":1897},"Every 100 bets",{"type":84,"tag":77,"props":1899,"children":1900},{},[1901,1909,1913,1917],{"type":84,"tag":200,"props":1902,"children":1903},{},[1904],{"type":84,"tag":98,"props":1905,"children":1906},{},[1907],{"type":90,"value":1908},"Primedice",{"type":84,"tag":200,"props":1910,"children":1911},{},[1912],{"type":90,"value":1816},{"type":84,"tag":200,"props":1914,"children":1915},{},[1916],{"type":90,"value":1821},{"type":84,"tag":200,"props":1918,"children":1919},{},[1920],{"type":90,"value":1826},{"type":84,"tag":92,"props":1922,"children":1923},{},[1924],{"type":90,"value":1925},"\"Never auto-rotates\" is actually the honest default — it forces the player to choose. If a site aggressively auto-rotates, it may be trying to obscure individual seed histories.",{"type":84,"tag":1927,"props":1928,"children":1930},"h4",{"id":1929},"quick-rotation-checklist",[1931],{"type":90,"value":1932},"Quick Rotation Checklist",{"type":84,"tag":92,"props":1934,"children":1935},{},[1936],{"type":90,"value":1937},"Use this before any long session:",{"type":84,"tag":1260,"props":1939,"children":1940},{},[1941,1946,1951,1956,1961,1966],{"type":84,"tag":526,"props":1942,"children":1943},{},[1944],{"type":90,"value":1945},"Open the game's fairness panel",{"type":84,"tag":526,"props":1947,"children":1948},{},[1949],{"type":90,"value":1950},"Copy the current server seed hash (for later verification if you want)",{"type":84,"tag":526,"props":1952,"children":1953},{},[1954],{"type":90,"value":1955},"Click \"Rotate Server Seed\" — old seed is revealed, new hash commits",{"type":84,"tag":526,"props":1957,"children":1958},{},[1959],{"type":90,"value":1960},"Change your client seed (click refresh, or type a new random string)",{"type":84,"tag":526,"props":1962,"children":1963},{},[1964],{"type":90,"value":1965},"Note your starting nonce (usually 0 after rotation)",{"type":84,"tag":526,"props":1967,"children":1968},{},[1969],{"type":90,"value":1970},"Bet as usual; rotate again after ~50-100 bets",{"type":84,"tag":92,"props":1972,"children":1973},{},[1974],{"type":90,"value":1975},"Takes 30 seconds. Protects against the only non-cryptographic attack on provably fair.",{"type":84,"tag":515,"props":1977,"children":1979},{"id":1978},"what-you-cant-rotate-mid-round",[1980],{"type":90,"value":1981},"What You Can't Rotate Mid-Round",{"type":84,"tag":92,"props":1983,"children":1984},{},[1985,1987,1992,1994,1998],{"type":90,"value":1986},"One important constraint: you can't rotate ",{"type":84,"tag":131,"props":1988,"children":1989},{},[1990],{"type":90,"value":1991},"during",{"type":90,"value":1993}," a round. Once you've placed a bet with a given server_seed + client_seed + nonce, those values are locked for that specific round. Rotating only affects bets placed ",{"type":84,"tag":131,"props":1995,"children":1996},{},[1997],{"type":90,"value":1676},{"type":90,"value":1999}," the rotation.",{"type":84,"tag":92,"props":2001,"children":2002},{},[2003],{"type":90,"value":2004},"This is also why \"retroactively rotating to undo a loss\" is impossible. The commit was fixed before you bet — the only way to change what's already happened is to verify it was honest. Since PF lets you do that in 60 seconds, that's usually enough.",{"type":84,"tag":85,"props":2006,"children":2008},{"id":2007},"common-mistakes-with-seeds",[2009],{"type":90,"value":2010},"Common Mistakes with Seeds",{"type":84,"tag":92,"props":2012,"children":2013},{},[2014],{"type":90,"value":2015},"Players coming to provably fair from regular online casinos consistently make the same four mistakes. None of them are dangerous — but they all waste time.",{"type":84,"tag":515,"props":2017,"children":2019},{"id":2018},"changing-client-seed-changes-my-luck",[2020],{"type":90,"value":2021},"\"Changing Client Seed Changes My Luck\"",{"type":84,"tag":92,"props":2023,"children":2024},{},[2025,2027,2033,2035,2041],{"type":90,"value":2026},"It doesn't. Every HMAC output is statistically random regardless of input. Changing your client seed from ",{"type":84,"tag":104,"props":2028,"children":2030},{"className":2029},[],[2031],{"type":90,"value":2032},"abc123",{"type":90,"value":2034}," to ",{"type":84,"tag":104,"props":2036,"children":2038},{"className":2037},[],[2039],{"type":90,"value":2040},"xyz789",{"type":90,"value":2042}," gives you different outcomes, not better ones. The expected value is identical.",{"type":84,"tag":92,"props":2044,"children":2045},{},[2046,2048,2053],{"type":90,"value":2047},"What the client seed ",{"type":84,"tag":131,"props":2049,"children":2050},{},[2051],{"type":90,"value":2052},"actually",{"type":90,"value":2054}," does: it prevents biased-seed pre-computation by making your inputs unpredictable to the casino before each round. That's a security property, not a luck property.",{"type":84,"tag":515,"props":2056,"children":2058},{"id":2057},"casinos-can-see-my-client-seed-in-advance",[2059],{"type":90,"value":2060},"\"Casinos Can See My Client Seed in Advance\"",{"type":84,"tag":92,"props":2062,"children":2063},{},[2064,2066,2071],{"type":90,"value":2065},"Not for future seeds. The casino sees your current client seed (you submitted it), but has no way to know what you'll set next. That's the whole point — the casino commits to a server seed ",{"type":84,"tag":131,"props":2067,"children":2068},{},[2069],{"type":90,"value":2070},"hash",{"type":90,"value":2072}," before knowing your next client seed. Once they commit, they can't change the seed behind the hash.",{"type":84,"tag":92,"props":2074,"children":2075},{},[2076],{"type":90,"value":2077},"If someone claims \"the casino reads your keyboard and knows your next seed before you hit enter\" — they're describing a client-side malware attack, not a protocol weakness. Use a reputable browser and you're fine.",{"type":84,"tag":515,"props":2079,"children":2081},{"id":2080},"rotating-too-often-breaks-the-proof",[2082],{"type":90,"value":2083},"\"Rotating Too Often Breaks the Proof\"",{"type":84,"tag":92,"props":2085,"children":2086},{},[2087],{"type":90,"value":2088},"It doesn't. Rotating just retires one server seed and commits a new one — both still verifiable independently. You can rotate every single bet if you want (slow but harmless).",{"type":84,"tag":92,"props":2090,"children":2091},{},[2092],{"type":90,"value":2093},"The common concern is about seed history getting \"messy\" — but every PF casino keeps a full history of retired seeds keyed to the bet ranges they covered. Rotating 50 times creates 50 verifiable history entries, not a tangled mess.",{"type":84,"tag":1927,"props":2095,"children":2097},{"id":2096},"quick-sanity-check",[2098],{"type":90,"value":2099},"Quick Sanity Check",{"type":84,"tag":92,"props":2101,"children":2102},{},[2103],{"type":90,"value":2104},"If any of these apply, your provably fair flow is wrong:",{"type":84,"tag":522,"props":2106,"children":2109},{"className":2107},[2108],"contains-task-list",[2110,2123,2132,2149],{"type":84,"tag":526,"props":2111,"children":2114},{"className":2112},[2113],"task-list-item",[2115,2121],{"type":84,"tag":2116,"props":2117,"children":2120},"input",{"disabled":2118,"type":2119},true,"checkbox",[],{"type":90,"value":2122}," You never clicked \"Rotate\" in your first 200 bets → rotate now, you may be exposed to biased seeds",{"type":84,"tag":526,"props":2124,"children":2126},{"className":2125},[2113],[2127,2130],{"type":84,"tag":2116,"props":2128,"children":2129},{"disabled":2118,"type":2119},[],{"type":90,"value":2131}," You can't find a \"Rotate Server Seed\" button → casino's PF implementation is broken",{"type":84,"tag":526,"props":2133,"children":2135},{"className":2134},[2113],[2136,2139,2141,2147],{"type":84,"tag":2116,"props":2137,"children":2138},{"disabled":2118,"type":2119},[],{"type":90,"value":2140}," You've never verified a single round → try one with our ",{"type":84,"tag":615,"props":2142,"children":2144},{"href":2143},"\u002Fcasino\u002Fprovably-fair",[2145],{"type":90,"value":2146},"provably fair verifier",{"type":90,"value":2148}," to get familiar",{"type":84,"tag":526,"props":2150,"children":2152},{"className":2151},[2113],[2153,2156],{"type":84,"tag":2116,"props":2154,"children":2155},{"disabled":2118,"type":2119},[],{"type":90,"value":2157}," You share seeds with friends → no benefit, small risk — generate your own",{"type":84,"tag":515,"props":2159,"children":2161},{"id":2160},"all-casinos-use-the-same-seed-format",[2162],{"type":90,"value":2163},"\"All Casinos Use the Same Seed Format\"",{"type":84,"tag":92,"props":2165,"children":2166},{},[2167,2169,2174],{"type":90,"value":2168},"They don't. Stake and Primedice use HMAC-SHA256 with dice-specific mapping. BC.Game's blackjack uses HMAC-SHA512 with card-specific logic. Spribe's Aviator uses a different nonce strategy. A generic verifier will get the ",{"type":84,"tag":131,"props":2170,"children":2171},{},[2172],{"type":90,"value":2173},"hash match",{"type":90,"value":2175}," right across all of them, but the reproduced outcome number may differ unless you use the casino's exact mapping formula.",{"type":84,"tag":92,"props":2177,"children":2178},{},[2179,2181,2187,2189,2195],{"type":90,"value":2180},"Always read the casino's fairness docs for the exact game you're playing. For Aviator specifically, our ",{"type":84,"tag":615,"props":2182,"children":2184},{"href":2183},"\u002Fblog\u002Fprovably-fair-aviator-calculator",[2185],{"type":90,"value":2186},"Aviator provably fair calculator",{"type":90,"value":2188}," implements Spribe's formula directly. For blackjack, the ",{"type":84,"tag":615,"props":2190,"children":2192},{"href":2191},"\u002Fblog\u002Fprovably-fair-blackjack",[2193],{"type":90,"value":2194},"provably fair blackjack guide",{"type":90,"value":2196}," covers the card-by-card HMAC chain.",{"type":84,"tag":85,"props":2198,"children":2200},{"id":2199},"how-to-find-your-seeds-on-real-casinos",[2201],{"type":90,"value":2202},"How to Find Your Seeds on Real Casinos",{"type":84,"tag":92,"props":2204,"children":2205},{},[2206],{"type":90,"value":2207},"Words are easy. Showing you exactly where the buttons live is more useful. Here's the actual path on the top three PF casinos as of 2026.",{"type":84,"tag":515,"props":2209,"children":2211},{"id":2210},"on-stake-primedice",[2212],{"type":90,"value":2213},"On Stake \u002F Primedice",{"type":84,"tag":1260,"props":2215,"children":2216},{},[2217,2222,2234,2262],{"type":84,"tag":526,"props":2218,"children":2219},{},[2220],{"type":90,"value":2221},"Open any casino Original (Dice, Crash, Plinko, Mines)",{"type":84,"tag":526,"props":2223,"children":2224},{},[2225,2227,2232],{"type":90,"value":2226},"Click the ",{"type":84,"tag":98,"props":2228,"children":2229},{},[2230],{"type":90,"value":2231},"shield icon",{"type":90,"value":2233}," in the top-right of the game panel",{"type":84,"tag":526,"props":2235,"children":2236},{},[2237,2239],{"type":90,"value":2238},"A \"Fairness\" modal opens with four fields:\n",{"type":84,"tag":522,"props":2240,"children":2241},{},[2242,2247,2252,2257],{"type":84,"tag":526,"props":2243,"children":2244},{},[2245],{"type":90,"value":2246},"Active Server Seed (Hashed) — 64-char SHA-256 hex",{"type":84,"tag":526,"props":2248,"children":2249},{},[2250],{"type":90,"value":2251},"Active Client Seed — editable string",{"type":84,"tag":526,"props":2253,"children":2254},{},[2255],{"type":90,"value":2256},"Total Bets Made With Pair — current nonce",{"type":84,"tag":526,"props":2258,"children":2259},{},[2260],{"type":90,"value":2261},"\"Change Seeds\" button at the bottom",{"type":84,"tag":526,"props":2263,"children":2264},{},[2265,2267,2272],{"type":90,"value":2266},"Click ",{"type":84,"tag":98,"props":2268,"children":2269},{},[2270],{"type":90,"value":2271},"\"Change Seeds\"",{"type":90,"value":2273}," — old server seed is revealed immediately, new hash commits",{"type":84,"tag":92,"props":2275,"children":2276},{},[2277],{"type":90,"value":2278},"Stake's interface is the cleanest of the three. Everything you need is on one screen, rotation is instant, and the seed history shows every retired server seed with its associated bet range.",{"type":84,"tag":515,"props":2280,"children":2282},{"id":2281},"on-bcgame",[2283],{"type":90,"value":2284},"On BC.Game",{"type":84,"tag":1260,"props":2286,"children":2287},{},[2288,2293,2304,2316,2321],{"type":84,"tag":526,"props":2289,"children":2290},{},[2291],{"type":90,"value":2292},"Open any in-house Original (Crash, Dice, Ring, Limbo)",{"type":84,"tag":526,"props":2294,"children":2295},{},[2296,2297,2302],{"type":90,"value":2226},{"type":84,"tag":98,"props":2298,"children":2299},{},[2300],{"type":90,"value":2301},"three-dot menu",{"type":90,"value":2303}," in the top-right of the game",{"type":84,"tag":526,"props":2305,"children":2306},{},[2307,2309,2314],{"type":90,"value":2308},"Select ",{"type":84,"tag":98,"props":2310,"children":2311},{},[2312],{"type":90,"value":2313},"\"Provably Fair\"",{"type":90,"value":2315}," from the dropdown",{"type":84,"tag":526,"props":2317,"children":2318},{},[2319],{"type":90,"value":2320},"Fairness modal shows: Hashed Server Seed, Client Seed (editable), Nonce, Algorithm",{"type":84,"tag":526,"props":2322,"children":2323},{},[2324,2325,2330],{"type":90,"value":2266},{"type":84,"tag":98,"props":2326,"children":2327},{},[2328],{"type":90,"value":2329},"\"Change\"",{"type":90,"value":2331}," next to the server seed → rotation confirmation → old seed revealed",{"type":84,"tag":92,"props":2333,"children":2334},{},[2335],{"type":90,"value":2336},"BC.Game uses HMAC-SHA512 for most games (not SHA-256), so the hashes are 128 characters instead of 64. The verification math is the same, just with a longer output.",{"type":84,"tag":515,"props":2338,"children":2340},{"id":2339},"on-roobet",[2341],{"type":90,"value":2342},"On Roobet",{"type":84,"tag":1260,"props":2344,"children":2345},{},[2346,2351,2362,2367,2372],{"type":84,"tag":526,"props":2347,"children":2348},{},[2349],{"type":90,"value":2350},"Open any Roobet Originals game (Mines, Crash, Dice, Towers)",{"type":84,"tag":526,"props":2352,"children":2353},{},[2354,2355,2360],{"type":90,"value":2226},{"type":84,"tag":98,"props":2356,"children":2357},{},[2358],{"type":90,"value":2359},"padlock icon",{"type":90,"value":2361}," next to the game title",{"type":84,"tag":526,"props":2363,"children":2364},{},[2365],{"type":90,"value":2366},"A side panel slides out with the fairness data",{"type":84,"tag":526,"props":2368,"children":2369},{},[2370],{"type":90,"value":2371},"\"Seed History\" tab at the bottom shows all retired seeds",{"type":84,"tag":526,"props":2373,"children":2374},{},[2375],{"type":90,"value":2376},"\"Randomize Client Seed\" and \"Rotate Server Seed\" buttons are both visible",{"type":84,"tag":92,"props":2378,"children":2379},{},[2380,2382,2387],{"type":90,"value":2381},"Roobet uniquely auto-rotates server seeds at session-end, which is slightly aggressive — rotate manually if you want to verify rounds later, so you're not surprised by the auto-rotation closing off future verification. Their ",{"type":84,"tag":615,"props":2383,"children":2384},{"href":1753},[2385],{"type":90,"value":2386},"PF Originals are ranked",{"type":90,"value":2388}," against Stake and BC.Game in our Bitcoin casino guide.",{"type":84,"tag":515,"props":2390,"children":2392},{"id":2391},"universal-workflow",[2393],{"type":90,"value":2394},"Universal Workflow",{"type":84,"tag":92,"props":2396,"children":2397},{},[2398],{"type":90,"value":2399},"Any legitimate PF casino will follow this pattern:",{"type":84,"tag":1260,"props":2401,"children":2402},{},[2403,2413,2423,2433,2443],{"type":84,"tag":526,"props":2404,"children":2405},{},[2406,2411],{"type":84,"tag":98,"props":2407,"children":2408},{},[2409],{"type":90,"value":2410},"Find the shield\u002Flock\u002Fpadlock",{"type":90,"value":2412}," — standard icon for fairness panels",{"type":84,"tag":526,"props":2414,"children":2415},{},[2416,2421],{"type":84,"tag":98,"props":2417,"children":2418},{},[2419],{"type":90,"value":2420},"Locate the active server seed hash, client seed, and nonce",{"type":90,"value":2422}," — all three must be visible",{"type":84,"tag":526,"props":2424,"children":2425},{},[2426,2431],{"type":84,"tag":98,"props":2427,"children":2428},{},[2429],{"type":90,"value":2430},"Test rotation",{"type":90,"value":2432}," — click the rotate button; if the old server seed doesn't appear in under a second, the implementation is broken",{"type":84,"tag":526,"props":2434,"children":2435},{},[2436,2441],{"type":84,"tag":98,"props":2437,"children":2438},{},[2439],{"type":90,"value":2440},"Note the algorithm",{"type":90,"value":2442}," — SHA-256 (64-char) or SHA-512 (128-char); you need this for verification",{"type":84,"tag":526,"props":2444,"children":2445},{},[2446,2451],{"type":84,"tag":98,"props":2447,"children":2448},{},[2449],{"type":90,"value":2450},"Verify at least one round",{"type":90,"value":2452}," — use a calculator to confirm hash match + HMAC output",{"type":84,"tag":92,"props":2454,"children":2455},{},[2456,2458,2463],{"type":90,"value":2457},"If any of those five steps fail, the casino's \"provably fair\" claim is marketing only. Cross-check against our ",{"type":84,"tag":615,"props":2459,"children":2460},{"href":2143},[2461],{"type":90,"value":2462},"hub with current PF implementations",{"type":90,"value":2464}," before depositing.",{"type":84,"tag":85,"props":2466,"children":2468},{"id":2467},"interactive-verify-a-round-with-your-own-seeds",[2469],{"type":90,"value":2470},"Interactive: Verify a Round with Your Own Seeds",{"type":84,"tag":92,"props":2472,"children":2473},{},[2474],{"type":90,"value":2475},"Paste the four values from your casino's fairness panel into the verifier below. Everything runs locally in your browser via the Web Crypto API — no data is sent to our server, and the computation is the same HMAC-SHA256 (or SHA-512) your casino uses.",{"type":84,"tag":2477,"props":2478,"children":2479},"inline-provably-fair-verifier",{},[],{"type":84,"tag":92,"props":2481,"children":2482},{},[2483],{"type":90,"value":2484},"Two things to watch for when you verify:",{"type":84,"tag":1260,"props":2486,"children":2487},{},[2488,2498],{"type":84,"tag":526,"props":2489,"children":2490},{},[2491,2496],{"type":84,"tag":98,"props":2492,"children":2493},{},[2494],{"type":90,"value":2495},"Hash Match = PASS",{"type":90,"value":2497}," — your revealed server seed, when hashed, matches the pre-round hash. This proves the casino didn't swap seeds after you bet.",{"type":84,"tag":526,"props":2499,"children":2500},{},[2501,2506],{"type":84,"tag":98,"props":2502,"children":2503},{},[2504],{"type":90,"value":2505},"Dice\u002FCrash output matches the screen",{"type":90,"value":2507}," — the HMAC output, mapped through the game's formula, reproduces the exact number the game showed. This proves the outcome wasn't altered.",{"type":84,"tag":92,"props":2509,"children":2510},{},[2511,2513,2519,2521,2527,2529,2535,2537,2543],{"type":90,"value":2512},"If both pass, your round is cryptographically fair. If hash match fails, file a complaint — you have proof the casino swapped seeds. For broader bankroll-math context around verified play, pair this with our ",{"type":84,"tag":615,"props":2514,"children":2516},{"href":2515},"\u002Fcasino\u002Fhouse-edge-calculator",[2517],{"type":90,"value":2518},"house edge calculator",{"type":90,"value":2520},", our ",{"type":84,"tag":615,"props":2522,"children":2524},{"href":2523},"\u002Fcasino\u002Frtp-calculator",[2525],{"type":90,"value":2526},"RTP calculator",{"type":90,"value":2528},", and the ",{"type":84,"tag":615,"props":2530,"children":2532},{"href":2531},"\u002Fcasino\u002Fbankroll-calculator",[2533],{"type":90,"value":2534},"bankroll calculator",{"type":90,"value":2536}," so you can size bets honestly alongside per-round verification. If you're running longer sessions, our ",{"type":84,"tag":615,"props":2538,"children":2540},{"href":2539},"\u002Fblog\u002Fbankroll-management-guide",[2541],{"type":90,"value":2542},"bankroll management guide",{"type":90,"value":2544}," covers the math on how often rotation intersects with session-sizing decisions.",{"type":84,"tag":92,"props":2546,"children":2547},{},[2548,2553,2555,2560],{"type":84,"tag":98,"props":2549,"children":2550},{},[2551],{"type":90,"value":2552},"One more thing:",{"type":90,"value":2554}," not every \"provably fair\" casino handles seeds the way we just described. Before trusting your bankroll to one, cross-check it against the ",{"type":84,"tag":615,"props":2556,"children":2557},{"href":2143},[2558],{"type":90,"value":2559},"provably fair hub",{"type":90,"value":2561}," — it flags venues where the server seed hash is not committed before the round starts.",{"type":84,"tag":85,"props":2563,"children":2565},{"id":2564},"faq",[2566],{"type":90,"value":2567},"FAQ"]