Como funciona a verificação
A maioria dos sites de roleta pede que você confie neles. O SpinProof dá a você um jeito de conferir. Cada resultado é fixado e lacrado antes de a roleta girar, e a página de prova permite que qualquer pessoa refaça o cálculo.
A versão curta
- Você clica em Girar. Nosso servidor congela suas entradas e cria um segredo aleatório.
- O servidor envia ao seu navegador uma trava: uma impressão digital do segredo. A trava aparece na tela enquanto a roleta gira.
- O segredo decide o vencedor. Depois do giro, o segredo é revelado.
- Qualquer pessoa pode conferir que o segredo revelado bate com a trava e que ele escolhe exatamente esse vencedor.
Como a trava existe antes de o resultado aparecer, o segredo não pode ser trocado depois por outro que escolha um vencedor diferente. Essa técnica se chama compromisso e revelação (commit and reveal).
A matemática exata
Cada passo usa SHA-256, uma função de hash padrão que qualquer linguagem de programação e muitas ferramentas on-line conseguem calcular.
- Impressão digital = SHA-256 de todas as entradas unidas por uma quebra de linha, na ordem da roleta.
- Segredo = 32 bytes aleatórios de um gerador criptográfico de números aleatórios, escritos como 64 caracteres hexadecimais minúsculos.
- Trava = SHA-256 desses 64 caracteres.
- Vencedor j (contando a partir de 0): calcule o SHA-256 de
secret:fingerprint:j, leia os 12 primeiros caracteres hexadecimais como um número e divida pelo número de entradas que ainda estão no sorteio. O resto é a posição do vencedor entre as entradas restantes, contando a partir de 0. Essa entrada então sai do sorteio antes de o próximo vencedor ser escolhido. - Roletas ligadas: a roleta 2 (prêmios, tarefas…) tem a sua própria impressão digital e é sorteada do mesmo jeito com o mesmo segredo, usando o SHA-256 de
secret:wheel-2-fingerprint:j. O vencedor j fica com o sorteio j da roleta 2, então uma única trava cobre as duas roletas e nenhuma pode ser girada de novo sozinha.
A página de prova executa esses passos no seu próprio navegador assim que abre, e de novo quando você clica em Conferir de novo. Ela não pergunta ao nosso servidor se o resultado está certo.
Giros repetidos ficam visíveis
Uma trava impede que um resultado seja alterado, mas alguém poderia girar muitas vezes e mostrar só o resultado de que gosta. Para evitar isso, cada giro é salvo no nosso servidor com um número, e cada página de prova lista todos os giros da mesma roleta. "Giro 1 de 1" significa que houve exatamente um giro.
Quem gira uma roleta que alguém compartilhou recebe a própria cópia, então não consegue adicionar giros ao histórico do dono.
Sorteios agendados: decididos por aleatoriedade pública
Em sorteios, o anfitrião pode agendar o sorteio para um horário definido. A trava é publicada assim que o sorteio é agendado, as entradas podem mudar até a hora do sorteio e nunca depois, e o vencedor sai de SHA-256(secret:randomness), em que a aleatoriedade é a rodada do beacon drand publicada na hora do sorteio. O drand é mantido por um grupo independente de organizações e ninguém pode conhecer uma rodada antes de ela ser publicada, então nem o anfitrião nem o SpinProof podem escolher ou prever o vencedor. A página de prova compara a rodada com a própria rede drand.
Resultados que ninguém revelou
Se um anfitrião trava um giro e fecha a página antes da revelação, a página de prova revela o resultado automaticamente cinco minutos depois de ele ter sido travado. Um resultado não pode ser travado e depois escondido.
Privacidade
As entradas são salvas com o giro para que o resultado possa ser conferido depois. Nas páginas de prova públicas, elas aparecem parcialmente ocultas, como A•••a, a menos que o anfitrião escolha mostrá-las por completo. Os vencedores sempre aparecem.
Quando os nomes estão ocultos, os visitantes ainda podem conferir a trava e os vencedores com a impressão digital. Conferir se a própria lista estava completa exige os nomes completos.
O que o SpinProof não afirma
O SpinProof comprova que um resultado foi fixado antes do giro e não foi alterado depois. Ele não pode comprovar que o anfitrião incluiu todo mundo que deveria estar no sorteio, então em sorteios ajuda mostrar a lista completa. Nos giros instantâneos, nosso servidor cria o segredo; os sorteios agendados também misturam aleatoriedade pública da rede drand, para que nem o SpinProof consiga prever o resultado.