Skip to content
LAB
← All tools

Keno Verifier

Keno is a lottery-style draw game that predates most of the internet — yet its online version hides some neat cryptography. To sharpen your number selections first, see our Keno Strategy Guide. This Keno Verifier replays the cryptographic Fisher-Yates shuffle casinos use to draw winning numbers, so you can confirm each round was settled fairly before your picks were locked.

Keno Verifier

Reproduces the K drawn numbers from a pool of N using Fisher-Yates over the HMAC stream.
Drawn numbers

How an online Keno draw actually works

The format is familiar: pick a set of numbers (most games cap it at 10 or 15) out of a pool of 80. The house then draws 20 winners. Your payout depends on how many of your picks land among those 20 — the hit ratio, checked against the game’s paytable.

Instant digital draws invite suspicion, particularly after you miss by one number on a big match. A provably fair Keno verifier (or our general universal verifier) removes the guesswork: it reruns the exact shuffle using your seeds and confirms the draw was fixed before the round began.

No Duplicates: A valid draw is sampling without replacement. Simply generating 20 random values would occasionally produce repeats — imagine the board spitting out 47 twice. The correct method shuffles a full array of 80 numbers and takes the first 20.

The math: Fisher-Yates Keno shuffling

For a random, duplicate-free result, the verifier applies the standard **Fisher-Yates Shuffle**, driven entirely by your seeds:

1. Initializing the board array

First, the verifier builds a sorted array holding every number on a standard Keno board:

Board = [1, 2, 3, ..., 80]

2. Running the HMAC-driven shuffle

Working from index 79 down to index 60 (20 steps for 20 numbers), the verifier pulls a random float U from the HMAC-SHA256 seed stream:

U = Hex_To_Decimal(4_Bytes_i) / 4294967296

That float maps to an integer index j somewhere between 0 and the current position i:

j = Floor(U * (i + 1))

3. Swapping the elements

Elements at positions i and j then trade places:

Temp = Board[i]; Board[i] = Board[j]; Board[j] = Temp;

After exactly 20 iterations, the last 20 slots in the shuffled array hold the winning Keno numbers.

Data Sandwich: Auditing a 20-number Keno draw

Time to audit a real round. You played 5 spots: [12, 24, 38, 45, 72]. Four of them hit — a solid 4-match payout.

Want proof the draw was genuinely random? Rotate your seeds and feed the details into the verifier:

  • Server Seed: c18f2d...
  • Client Seed: keno_player_luck
  • Nonce: 54

The verifier rebuilds the array [1..80] and starts the HMAC shuffle.

On the first step (index 79), the HMAC stream produces a decimal float of 0.154283.

Target index: Floor(0.154283 * 80) = 12.

So Board[79] (80) swaps with Board[12] (13), making 13 the first drawn number.

Twenty steps later, the verifier has reproduced the identical 20-number list sitting in your game history. Cryptographically validated — the draw was fair.

Frequently asked questions

What is the house edge in online Keno?

Depending on the casino and its payout matrix, online Keno typically runs a house edge of 1% to 5%. That’s far kinder than physical state lottery Keno, where edges above 25% to 30% are routine.

Can I predict which Keno numbers will hit?

No. Each draw stands alone. A “cold” number absent from the last 20 rounds carries exactly the same probability next round as any other — past draws don’t move the odds.

How does the Fisher-Yates shuffle guarantee no duplicates?

It works inside a fixed array. Once a number is drawn, it gets swapped out of the active range, so it physically cannot be selected again within the same round.