Fairness Proof

Fairness Proof Guide

Every FairPicker draw uses SHA-256 cryptographic hashing and Fisher-Yates shuffling. All inputs are publicly disclosed so anyone can independently verify the draw.

Pre-manipulation Impossible

A nanosecond-precision server timestamp is included in the seed at draw time, making it impossible to predict or manipulate the result in advance.

Full Transparency

All inputs (Project ID, Timestamp, Client Seed) and the final hash are disclosed on the certificate.

Independent Verification

Anyone can compute the same SHA-256 hash from the published values to mathematically verify the result.

How the Seed is Formed

The final SHA-256 hash is generated from three combined values.

Project ID

Unique draw identifier

proj_demo_20260226

+

Server Timestamp

Nanosecond timestamp at draw time

1740534312193847623

+

Client Seed

Entered by the host

Event-2026ABCD7F3E

SHA-256 해시 적용

Final Hash (예시)

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Draw Algorithm (Pseudocode)

Fisher-Yates Shuffle is performed using the final hash as the seed. The hash is recomputed at every step to maximize unpredictability.

// 1. 시드 생성
seed_string = project_id + "-" + server_timestamp_ns + "-" + client_seed
final_hash  = SHA256(seed_string)

// 2. 시드 숫자화 (BigInt)
seed_number = BigInt("0x" + final_hash)

// 3. Fisher-Yates Shuffle
participants = [p1, p2, p3, ..., pN]   // 중복 제거 후 정렬
for i from N-1 down to 1:
    j = seed_number % (i + 1)
    swap(participants[i], participants[j])
    seed_number = SHA256(seed_number)   // 매 스텝마다 해시 갱신

// 4. 당첨자 선정
winners = participants[0 .. winnerCount-1]

* The actual implementation follows this logic. Open-sourcing is under consideration.

What is the Client Seed?

The Client Seed is a string entered directly by the host before the draw. Including it in the seed meansthe server cannot manipulate the result on its own.

FairPicker auto-generates a Client Seed (16 random characters), but hosts can enter any meaningful string they prefer.

⚠️ Important: The Client Seed is published on the certificate after the draw. Revealing it beforehand could theoretically allow result prediction, so we recommend keeping it private until the draw.

Frequently Asked Questions

Can the draw result be changed or re-drawn afterward?

I want to verify the hash myself.

Can't FairPicker manipulate the server timestamp?

Why is Fisher-Yates Shuffle fair?