← All tools

Keno Verifier

Keno is a classic casino game of lottery-style draws. To optimize your selections, read our Keno Strategy Guide. This Keno Verifier walks you through the cryptographic Fisher-Yates shuffle that online casinos use to draw their winning numbers, proving every round was fair.

Keno Verifier

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

The mechanics of digital Keno draws

Online Keno requires you to select a set of numbers (typically up to 10 or 15) from a pool of 80 options. The casino then draws 20 winning numbers. If your selected numbers match the drawn numbers, you win a payout based on your hit ratio.

Because the draw happens instantly in a digital environment, it is easy to feel skeptical, especially when you miss a high-match draw. A provably fair Keno verifier (or our general universal verifier) reproduces the exact drawing sequence by running your seeds through a standard shuffling algorithm, confirming that the drawn numbers were locked in before the round started.

No Duplicates: Drawing numbers requires a sampling-without-replacement protocol. The game cannot just generate 20 random numbers, as it would occasionally draw duplicate numbers. Instead, it must shuffle a full array of 80 numbers and select the first 20.

The math: Fisher-Yates Keno shuffling

To ensure a completely random, duplicate-free draw, the verifier uses the standard **Fisher-Yates Shuffle** powered by your seeds:

1. Initializing the board array

The verifier first creates a sorted array containing all 80 numbers on a standard Keno board:

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

2. Running the HMAC-driven shuffle

Starting from the end of the array (index 79) down to index 60 (to get 20 numbers), the verifier extracts a random float U from the HMAC-SHA256 seed stream:

U = Hex_To_Decimal(4_Bytes_i) / 4294967296

It then maps this float to an integer index j between 0 and the current index i:

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

3. Swapping the elements

The verifier swaps the element at the current index i with the element at the random index j:

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

This shuffle is repeated exactly 20 times. The final 20 shuffled numbers at the end of the array represent the winning Keno draw.

Data Sandwich: Auditing a 20-number Keno draw

Let’s audit a Keno draw. You bet on 5 numbers: [12, 24, 38, 45, 72]. The casino draws their 20 numbers, and you hit a solid 4-match payout.

To verify the draw was random, you rotate your seeds and paste the details into the verifier:

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

The verifier initializes the array [1..80] and runs the HMAC shuffle.

For the first draw (index 79), the HMAC stream yields a decimal float of 0.154283.

The target index is calculated as: Floor(0.154283 * 80) = 12.

The verifier swaps Board[79] (80) with Board[12] (13). The number 13 becomes the first drawn number.

This loop continues for 20 steps, yielding the exact drawing list of 20 numbers shown in your game history. The draw is cryptographically validated as fair.

Frequently asked questions

What is the house edge in online Keno?

Online Keno usually carries a house edge of 1% to 5% depending on the specific casino and payout matrix. This is significantly better than physical state lottery Keno games, which routinely feature house edges exceeding 25% to 30%.

Can I predict which Keno numbers will hit?

No. Keno draws are completely independent of one another. The fact that a number has not appeared in the last 20 draws (a “cold” number) does not increase its probability of appearing in the next draw.

How does the Fisher-Yates shuffle guarantee no duplicates?

Because it swaps elements within a fixed array. By taking a number that has been selected and swapping it out of the active drawing range, the algorithm mathematically guarantees that a number can never be drawn twice in a single round.