Spinvolta

Como garantimos a imparcialidade

Primeiro o acaso. Depois a animação. Verificável quando importa.

1. Cada resultado vem de um gerador aleatório criptográfico

O Spinvolta sorteia com crypto.getRandomValues(), o gerador de números aleatórios criptograficamente seguro incluído em todos os navegadores e sistemas operativos modernos — a mesma fonte usada para criar chaves de cifragem. Nunca usamos Math.random() para decidir nada. (Coisas puramente decorativas, como a direção de um confete, podem usá-lo.)

2. Sem enviesamento de módulo

Um número aleatório de 32 bits nem sempre se divide de forma igual por, digamos, 7 opções: 4 294 967 296 não é múltiplo de 7, por isso o ingénuo número % 7 torna algumas opções ligeiramente mais prováveis. O Spinvolta usa amostragem por rejeição: se um número cai no resto desigual do topo do intervalo, é descartado e sorteia-se outro. Assim, cada opção tem exatamente a mesma probabilidade, seja qual for o número de opções.

3. Os pesos são exatos

No modo com pesos, valores como 1, 2,5 ou 0,125 são convertidos em números inteiros numa escala comum e somados de forma exata. Um único sorteio uniforme sobre o total escolhe o vencedor, por isso uma opção com peso 2 tem exatamente o dobro da probabilidade de uma com peso 1 — e o tamanho das fatias mostra essas probabilidades exatas.

4. Vários vencedores sem repetição

Vários vencedores, equipas, ordem aleatória, cartas e passatempos usam o algoritmo de Fisher–Yates sem enviesamento (com a mesma amostragem por rejeição), por isso cada ordem ou grupo de vencedores possível tem a mesma probabilidade.

5. Primeiro o resultado, depois a animação

Quando prime Girar, o vencedor é decidido antes de a roda se mexer. Depois, um solucionador calcula um movimento — balanço, velocidade, número de voltas, a ligeira oscilação final — que para exatamente dentro da fatia vencedora, num ponto aleatório longe das margens. Lançar com mais força, escolher um giro mais longo ou usar a paragem manual só muda o aspeto do giro. Os nossos testes automáticos verificam milhares de giros aleatórios para garantir que a animação para sempre no resultado sorteado antes e nunca escorrega para a fatia vizinha.

6. Sorteios comprovadamente justos para passatempos e salas

Nos passatempos (e em qualquer sorteio em que a confiança importe), o Spinvolta vai mais longe para que não tenha de confiar nem em nós nem em quem organiza:

  1. Antes do sorteio, o seu navegador fixa a lista exata de participantes e as definições e publica uma impressão digital: um hash SHA-256 da lista, das definições e de uma semente secreta. O nosso servidor regista quando a recebeu.
  2. A impressão digital indica uma ronda futura do farol de aleatoriedade drand League of Entropy, um valor público produzido de 3 em 3 segundos por organizações independentes de todo o mundo, que ninguém consegue prever nem escolher.
  3. Quando essa ronda é publicada, os vencedores são calculados a partir da impressão digital, do valor do farol e da semente.
  4. A página da prova mostra tudo. Qualquer pessoa pode premir Verificar para recalcular no próprio navegador, incluindo a assinatura criptográfica do farol.

Quem organiza não pode escolher o vencedor, porque o valor do farol não existia quando a lista foi fixada. Nós também não, porque nunca vemos a semente antes de a impressão digital estar fixada e não controlamos o drand. Se o farol não estiver acessível, o sorteio passa para um método de compromisso e revelação claramente identificado.

7. Testado estatisticamente

A nossa bateria de testes executa testes qui-quadrado de ajustamento sobre centenas de milhares de sorteios simulados a cada alteração, e sobre mais de um milhão na bateria completa: sorteios uniformes, com pesos, baralhações e posições com vários vencedores. Pode executar a sua própria versão na página da auditoria de imparcialidade.

O que não conseguimos provar

Num giro do dia a dia, confia que o código a ser executado no seu navegador é o que descrevemos. É executado inteiramente no seu dispositivo e pode inspecioná-lo com as ferramentas de programador do navegador. Quando há mais em jogo — prémios, sorteios públicos —, use um sorteio comprovadamente justo, que não exige confiar em ninguém.

Perguntas frequentes

A roda pode ser manipulada?

Não através da animação: o resultado é primeiro sorteado de forma justa e o movimento é calculado para o mostrar. A única forma de alterar as probabilidades é o modo com pesos, que mostra a etiqueta “Roda com pesos” e desenha as fatias à escala.

Porque é que o mesmo nome saiu duas vezes seguidas?

Porque o acaso real tem sequências. Com 10 opções, a mesma sai duas vezes seguidas em 10% dos casos. Use o modo eliminação se quiser que cada opção saia apenas uma vez.

O que é o drand?

O drand é um farol de aleatoriedade distribuído, gerido pela League of Entropy, um grupo de universidades, empresas e organizações independentes. Publica um novo valor aleatório verificável a cada poucos segundos.