Compromisso de baralho e privacidade
Nas mesas cash, o servidor publica um compromisso hash antes da mão. As sementes permanecem privadas, inclusive depois do encerramento: reconstruir o baralho revelaria cartas de quem deu fold ou escolheu MUCK. Não há revelação automática nem publicação posterior dessas sementes.
O que o compromisso permite conferir
O compromisso é SHA-256("serverSeed:clientSeed"). Ele registra um hash
das sementes sem revelá-las. Sozinho, não permite reconstruir o baralho nem verificar
publicamente uma mão completa. Também não comprova que as cartas distribuídas
seguiram esse baralho ou que o compromisso foi recebido antes da distribuição.
O verificador manual abaixo compara dados fornecidos voluntariamente e reproduz
um baralho de 52 cartas. Ele não se conecta a partidas, não busca sementes de mãos
reais e não certifica a operação. A demonstração usa as sementes fictícias
server e client.
O algoritmo, em detalhe
O embaralhamento é determinístico a partir das sementes e do nonce da mão:
- Baralho inicial (52 cartas, ordem canônica): naipes para cada valor, na
ordem dos valores
2 3 4 5 6 7 8 9 T J Q K Ae dos naipess h d c, ou seja2s, 2h, 2d, 2c, 3s, …, As, Ah, Ad, Ac. - Keystream: blocos de 32 bytes de
HMAC-SHA256(chave = serverSeed, mensagem = "clientSeed:nonce:counter"), com ocountercomeçando em 0 e incrementando a cada bloco. Consumimos o keystream em pedaços de 4 bytes (uint32 big-endian). - Inteiro sem viés em
[0, max]: amostragem por rejeição:range = max + 1,limit = floor(2³² / range) × range; sorteia uint32 até obter um valor< limite devolvevalor % range. - Fisher-Yates: para
ide 51 até 1, sorteiajem[0, i]e troca as posiçõesiej.
O verificador abaixo é uma reimplementação fiel, byte a byte, do algoritmo do motor em
packages/core-poker (src/rng.ts, src/deck.ts e
src/verify.ts). Roda 100% no seu navegador usando crypto.subtle.
Verificador manual de sementes
Use o exemplo ou sementes de teste que você queira fornecer. O cálculo ocorre localmente no navegador; os valores não são enviados por esta ferramenta. Uma correspondência confirma apenas o hash informado, não a justiça de uma partida.