Kruna
Fairness

The winner is picked before you click.

  1. 1We pick a secret number and show you a locked copy of it — before you open anything.
  2. 2You have your own number. Change it whenever you like.
  3. 3The two together decide the result. Neither side can move it alone.

Every open you've made is listed under Verify, with the numbers that produced it.

How an open is decided

This is the full method, with one open worked through using real numbers. Anyone can redo it with a few lines of code.

The method

  1. Before you open anything, KRUNA generates a secret server seed and shows you its SHA-256 hash. The hash commits to the seed without revealing it.
  2. You have a client seed. It is yours: change it whenever you like.
  3. Each open on a seed pair has a counter, the nonce, which goes up by one per open.
  4. The roll is HMAC-SHA256 with the server seed as the key and "clientSeed:nonce" as the message. The first 8 hex characters of the result, read as a number and divided by 4,294,967,295, give a roll between 0 and 1.
  5. The pack's items are lined up in a fixed order, each owning a slice of the 0-to-1 line as wide as its chance. The roll lands in exactly one slice. That item is the result.
  6. When you start a new seed pair, KRUNA reveals the old server seed. Hash it and compare with the fingerprint you were shown; then recompute any open made with it.

One open, worked through

These are example seeds, not anyone's real ones. The numbers below are computed by the same code that runs every open.

Server seed (secret until you rotate)
6b72756e612d6578616d706c652d7365727665722d736565642d303030303031
Its SHA-256 hash (shown before you open)
c4664b5b0fee5ebf9869b8a23036fb42b52eb1a06b41000d2f0621ed19de69ef
Client seed (yours)
my-own-seed
Nonce
1
HMAC-SHA256(server seed, "client seed:nonce")
c43dce5360d1608b94a73f0af228442b8647ad043e2eb884a6d55edb49d5a958
First 8 hex characters
c43dce53
As a number
3,292,384,851
Roll (number ÷ 4,294,967,295)
0.7665680842
Ticket in a pack with 1,000,000 tickets
766,569

The item sheet on every pack page shows which ticket numbers each item owns. Ticket = floor(roll × total tickets) + 1.

Recompute it yourself

Node.js, no dependencies. Paste your own revealed server seed, client seed and nonce:

const crypto = require("crypto");

const serverSeed = "6b72756e612d6578616d706c652d7365727665722d736565642d303030303031";
const clientSeed = "my-own-seed";
const nonce = 1;

// 1. The fingerprint you were shown before opening
console.log(crypto.createHash("sha256").update(serverSeed).digest("hex"));

// 2. The roll
const hmac = crypto.createHmac("sha256", serverSeed).update(`${clientSeed}:${nonce}`).digest("hex");
const roll = parseInt(hmac.slice(0, 8), 16) / 0xffffffff;
console.log(roll);

Why neither side can cheat

KRUNA cannot change its seed after seeing your open, because the hash it published first would no longer match.

KRUNA cannot pick a seed that beats you in advance, because the result also depends on your client seed, which you can change at any time before an open.

You cannot steer the result either, because you do not know the server seed until it is retired.

What this does and does not prove

It proves each result was fixed before you clicked and was not altered afterwards. It does not make the odds better: the chances are whatever the pack's table says, and the house edge is listed pack by pack.

House edge of every packIs KRUNA legit?