📖 ¿Cómo Funciona?
🎰 ¿Qué es TransparentLotto?
TransparentLotto es una lotería digital donde cada sorteo es públicamente verificable. Usamos criptografía moderna — firmas Ed25519, árboles Merkle SHA-512 y aleatoriedad pública del NIST — para garantizar que nadie puede manipular el resultado.
🎴 Cartas de Lotería Mexicana
Cada boleto recibe una combinación única de 3 cartas de las 54 cartas clásicas de la Lotería Mexicana (El Gallo, La Dama, El Sol, etc.). Hay 24,804 combinaciones posibles. Tu trio de cartas es tu identidad visual en el sorteo.
🌐 NIST Randomness Beacon
El número aleatorio que decide al ganador proviene del NIST Randomness Beacon, un servicio público del gobierno de Estados Unidos que emite pulsos de aleatoriedad cada 60 segundos. Nadie — ni nosotros, ni tú — puede predecir el siguiente número. Como respaldo, usamos drand (League of Entropy).
🌳 Árbol Merkle SHA-512
Antes de cada sorteo, todos los boletos se congelan en un árbol Merkle. Cada hoja es el hash SHA-512 de la ronda, número de boleto, cartas y usuario. La raíz Merkle se publica antes de obtener el número aleatorio. Esto prueba que ningún boleto fue agregado o modificado después.
✍️ Firmas Ed25519
Cada boleto recibe un recibo firmado con Ed25519 al momento de la compra. El resultado del sorteo también se firma. La llave pública está disponible para que cualquiera verifique las firmas.
📜 Cadena de Auditoría
Mantenemos un log de auditoría encadenado por hashes. Cada entrada referencia el hash de la anterior, formando una cadena inmutable que no se puede alterar sin romper la secuencia. Puedes descargar el JSON de auditoría de cualquier ronda.
🔍 ¿Cómo Puedo Verificar?
En la página de Resultados, cada sorteo completado muestra:
- El URI del pulso NIST usado (puedes verificarlo en beacon.nist.gov)
- El valor de salida (output value) de 512 bits
- La raíz Merkle de todos los boletos congelados
- La firma Ed25519 del resultado
- La fórmula exacta:
winnerIndex = NIST_output mod totalTickets
También puedes descargar el JSON de auditoría completo y verificar la cadena de hashes de forma independiente.