Guía de prueba de imparcialidad
Cada sorteo de FairPicker usa hash criptográfico SHA-256 y barajado Fisher-Yates. Todos los datos de entrada se divulgan públicamente para que cualquiera pueda verificar el sorteo de forma independiente.
Manipulación previa imposible
Una marca de tiempo del servidor con precisión de nanosegundos se incluye en la semilla al momento del sorteo, haciendo imposible predecir o manipular el resultado de antemano.
Transparencia total
Todos los datos (ID de proyecto, marca de tiempo, Client Seed) y el hash final se publican en el certificado.
Verificación independiente
Cualquier persona puede calcular el mismo hash SHA-256 a partir de los valores publicados para verificar matemáticamente el resultado.
Cómo se forma la semilla
El hash SHA-256 final se genera a partir de tres valores combinados.
Project ID
Identificador único del sorteo
proj_demo_20260226
Server Timestamp
Marca de tiempo en nanosegundos al momento del sorteo
1740534312193847623
Client Seed
Ingresado por el organizador
Event-2026ABCD7F3E
Final Hash (예시)
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Algoritmo de sorteo (Pseudocódigo)
Se realiza un Fisher-Yates Shuffle usando el hash final como semilla. El hash se recalcula en cada paso para maximizar la impredecibilidad.
// 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]* La implementación real sigue esta lógica. Se está considerando publicarlo como código abierto.
¿Qué es el Client Seed?
El Client Seed es una cadena ingresada directamente por el organizador antes del sorteo. Al incluirlo en la semilla,el servidor no puede manipular el resultado por sí solo.
FairPicker genera automáticamente un Client Seed (16 caracteres aleatorios), pero los organizadores pueden ingresar cualquier cadena significativa que prefieran.
Preguntas frecuentes
¿Se puede cambiar el resultado o re-sortear después?
Quiero verificar el hash yo mismo.
¿No puede FairPicker manipular la marca de tiempo del servidor?
¿Por qué Fisher-Yates Shuffle es justo?