Comprovadamente justo, explicado
Como o dond.win prova que nenhuma rodada de Deal or No Deal é manipulada: um compromisso SHA-256 publicado antes de você escolher, a sua semente de cliente misturada no embaralhamento, as duas sementes reveladas no fim e uma página de verificação que recalcula as 25 maletas.
O problema que o sistema comprovadamente justo resolve
Em um jogo online comum você precisa confiar que o operador embaralhou com honestidade e não mudou o prêmio grande de lugar depois da sua escolha. O sistema comprovadamente justo (provably fair) troca essa confiança por aritmética. O operador se compromete com o embaralhamento antes de você agir, deixa você influenciar o resultado com um dado seu e revela tudo no fim para você conferir.
O que acontece em uma rodada
- Compromisso. Antes de você escolher uma maleta, o servidor sorteia uma semente do servidor secreta e publica o hash SHA-256 dela. Esse hash aparece no jogo como o compromisso (na interface, commitment). O servidor não consegue trocar a semente depois sem que o hash mude.
- A sua parte. Você tem uma semente de cliente (na interface, seed do cliente). Por padrão ela é aleatória; você pode digitar a sua no painel de entrada antes de a rodada começar. O servidor não tem como prevê-la.
- O embaralhamento. A escada de 25 prêmios é embaralhada com Fisher-Yates, usando bytes aleatórios gerados por HMAC-SHA256, com a semente do servidor como chave e a sua semente de cliente como mensagem. Nenhum dos lados escolhe a disposição sozinho.
- A revelação. Quando a rodada termina, a semente do servidor é revelada ao lado do compromisso e da sua semente de cliente.
- A verificação. Calcule o hash da semente do servidor e compare com o compromisso. Refaça o embaralhamento com as duas sementes e compare cada maleta com o que você viu. A página de verificação faz as duas coisas no seu navegador; nada é enviado a lugar nenhum.
O algoritmo exato
- commitment = SHA-256(utf8(serverSeed)), em hexadecimal.
- block[i] = HMAC-SHA256(key = serverSeed, msg = clientSeed + “:” + i), para i = 0, 1, 2 …
- Cada bloco gera oito inteiros de 32 bits em big-endian; r = valor / 2^32. Quando um bloco acaba, usa-se o seguinte.
- Fisher-Yates sobre a escada fixa: para i de 24 até 1, j = floor(r × (i + 1)), troca-se ladder[i] com ladder[j]. A maleta k recebe ladder[k].
Qualquer pessoa pode implementar isso em poucas linhas, em qualquer linguagem, e chegar à mesma disposição.
O que isso prova e o que não prova
Prova que a disposição foi fixada antes da sua escolha e que não foi definida só pelo servidor. Prova que cada oferta que você viu foi calculada a partir do painel real. Não muda as probabilidades: a escada de prêmios e as taxas são o que são, e também são públicas. Justo, aqui, significa que o jogo mostrado a você é o jogo que está de fato sendo jogado.
Como conferir uma rodada antiga
As sementes e o compromisso aparecem na tela de fim de rodada e no seu histórico. Cole tudo na página de verificação quando quiser.
Perguntas frequentes
O Deal or No Deal no dond.win é manipulado?
A disposição de cada rodada é comprometida com um hash SHA-256 antes de você escolher a maleta, misturada com a sua própria semente de cliente e revelada quando a rodada termina. Você mesmo pode recalcular as 25 maletas na página de verificação. Uma disposição manipulada não passaria nesse teste.
O que é a semente de cliente? Devo trocá-la?
É a sua contribuição para o embaralhamento. A padrão é aleatória e já impede o servidor de escolher a disposição. Definir a sua torna a rodada reproduzível com um valor que só você escolheu.
O servidor pode escolher uma semente que favoreça a casa?
Ele não tem como saber a disposição final no momento do compromisso, porque a sua semente de cliente entra na mistura depois. Também não pode trocar a semente mais tarde, porque o hash deixaria de bater.
Preciso de algum programa para verificar uma rodada?
Não. A página de verificação executa SHA-256 e HMAC-SHA256 no seu navegador. Você também pode usar qualquer linguagem de programação que tenha essas duas funções.