provably fairdiceguide
Os dados do gamão verificam-se com uma promessa feita antes da partida e conferida depois dela. O Orion publica um compromisso SHA-256 sobre uma semente secreta antes do seu primeiro lançamento, revela a semente quando a partida acaba, e deixa o seu navegador recalcular cada lançamento em orion.arthea.ai/verify apenas com o id da partida. Se tudo bate certo, os dados estavam fixados antes de o jogo começar, e ninguém, nós incluídos, os torceu.
Todo o jogador online conhece a sensação. Fica a dançar na barra durante três jogadas. O adversário encontra o único número que ao mesmo tempo acerta e tapa. Num tabuleiro de madeira encolhia os ombros, porque viu os dados sair do copo. Online pedem-lhe que confie num número cujo nascimento nunca viu. Essa confiança não a queríamos pedir. Queríamos torná-la verificável.
O que significa commit-reveal, afinal?
Imagine um envelope selado. Antes de se sentar, a casa escreve lá dentro os dados da noite, sela-o e entrega-lhe uma fotografia do selo. Quando o jogo acaba, o envelope abre-se. Se o conteúdo coincide com o selo, os lançamentos já existiam antes da partida, e pelo caminho nada podia ser escolhido a dedo para o prejudicar. O commit-reveal é esse envelope, feito de aritmética. O selo é um resumo SHA-256, e ninguém consegue fabricar outra semente que lhe encaixe. Quatro passos levam a prova do nosso servidor até ao seu navegador.
Antes da partida. O servidor tira uma semente aleatória secreta e faz-lhe o resumo com SHA-256. Esse resumo é o compromisso, e fica agregado à sua partida antes do primeiro lançamento. A partir desse instante, os dados de toda a partida já estão trancados. O servidor publicou uma promessa que já não pode editar.
Durante a partida. Cada lançamento é derivado da semente com HMAC-SHA256: entram a semente e o número do lançamento, saem dois dados. A posição do tabuleiro, o resultado do confronto, o cubo, quem está prestes a ganhar: nada disso entra no cálculo. O servidor não escolhe lançamentos. Está a ler em voz alta uma lista a que se vinculou antes de você jogar.
Quando a partida acaba. A semente é revelada e guardada com o registo da partida. É a abertura do envelope. Qualquer pessoa pode fazer o resumo da semente revelada e compará-lo com o compromisso publicado antes da primeira jogada, e os dois têm de ser idênticos.
Verifique você mesmo. Abra orion.arthea.ai/verify em qualquer navegador e introduza o id da partida. A página recalcula tudo localmente com a Web Crypto, a criptografia integrada no próprio navegador: primeiro o SHA-256 da semente revelada contra o compromisso original, depois cada lançamento da partida, dado a dado. Sem conta, sem aplicação, cerca de um minuto.
Uma correspondência completa estabelece três factos ao mesmo tempo:
- A semente revelada resume exatamente no compromisso publicado antes do primeiro lançamento
- Cada lançamento da partida é derivado dessa semente via HMAC-SHA256, ou seja, nada foi relançado nem substituído
- Os dados nunca foram adaptados à posição do tabuleiro, ao resultado do confronto ou ao jogador
O que provaria uma discrepância?
Uma discrepância não seria um erro de visualização. Seria uma prova. Se a semente revelada não resumir no compromisso, os dados foram alterados depois de a partida começar. Se um único lançamento falhar a verificação HMAC, os dados que viu não eram os dados a que se tinha assumido compromisso. As duas avarias são prova de adulteração que qualquer pessoa pode reproduzir a partir do mesmo registo, em qualquer máquina, para sempre.
E é precisamente por isso que nunca deveria ver nenhuma. O compromisso é publicado primeiro, antes de se mexer uma única pedra. Uma casa que quisesse manipular esta partida teria de publicar antecipadamente a prova da sua própria manipulação e depois entregar a cada jogador a ferramenta para a encontrar. Não lhe pedimos que acredite que somos honestos. Construímos o sistema para que não seja preciso.
Ninguém consegue apontar a um lançamento que ficou selado antes de a partida começar.
Se os dados são comprovadamente justos, porque é que lanço tão mal?
Porque dados justos continuam a ser dados. Vai ficar fechado na barra. Precisa de qualquer coisa que não seja 2-1, e depois sai 2-1. Ao longo de milhares de partidas os números achatam-se na direção da distribuição real, mas uma noite não promete nada. O que a verificação retira é a pergunta que está por baixo da irritação. Aquele lançamento milagroso estava fixado antes de qualquer um de vocês tocar numa pedra, e não estava a apontar-lhe. Sabê-lo não torna o lançamento mais suave. Mas deixa-o parar de investigar o universo e voltar à posição.
Os dados são a maior suspeita, mas não a única. O mesmo servidor que assume compromisso com os seus lançamentos também valida cada jogada na origem, por isso uma aplicação modificada não consegue meter uma pedra onde as regras não permitem. Lançamentos justos e jogadas legais vêm da mesma autoridade.
Posso experimentar a verificação já?
Pode. A verificação já está a funcionar hoje em orion.arthea.ai/verify e inclui uma reprodução de demonstração, portanto pode ver uma verificação completa a correr sobre uma partida de exemplo sem instalar nada e sem criar conta. A porta em orion.arthea.ai/go leva as ligações para a App Store e para a Google Play e mostra sempre o que está disponível neste momento.