Técnico: a matemática, para quem quiser conferir
Tudo aqui é reproduzível fora do app — a credibilidade vem de "aqui está a conta, confira você mesmo", não de um botão que diz "confie em nós".
Os três valores
- Semente da partida — sorteada na hora com um gerador criptográfico (32 bytes), mantida em segredo durante o jogo e revelada no fim.
- Chave pública da partida — o
SHA-256 da semente, publicado antes da primeira carta e visível em toda a partida. É o compromisso: o servidor fica preso àquela semente.
- A ordem do baralho — deriva da semente pelo algoritmo abaixo; qualquer pessoa re-deriva.
Conferindo o compromisso
Pegue a semente revelada no fim e a chave que você viu no começo. Com ferramentas comuns:
printf %s "<semente>" | shasum -a 256
# precisa bater com a chave pública mostrada antes da partida
A chave é um SHA-256 simples da semente — nada com sal ou tempero — justamente pra esse comando de uma linha funcionar.
O algoritmo do embaralhamento (o contrato)
A ordem do baralho é uma função pura da semente, por um Fisher–Yates movido por um keystream HMAC-SHA256 — de propósito não é o RNG padrão da linguagem, pra ser estável entre versões e portável (o app refaz o cálculo carta por carta).
chave = bytes UTF-8 da semente.
- Keystream = a concatenação de
HMAC_SHA256(chave, be32(bloco)) para bloco = 0, 1, 2, … (32 bytes por bloco; be32 é o contador em 4 bytes big-endian).
- Para sortear um inteiro em
[0, n): leia 4 bytes big-endian como inteiro de 32 bits sem sinal; descarte e sorteie de novo enquanto cair na cauda enviesada; senão devolva resto da divisão por n.
- Fisher–Yates: de
i = n-1 até 1, troque baralho[i] com baralho[sorteio(i+1)].
Vetor de conferência (uma semente de teste): a chave de jogada-kat-1 é fixa e qualquer um reproduz —
printf %s "jogada-kat-1" | shasum -a 256
# → 7fe94372ef6d950cf384dda65a505e4dd61baa062cb54e1f24a68b475caa7b3c
O que isso prova — e o que ainda não
Este é um embaralhamento verificável: prova que a mão veio da semente comprometida e que ninguém trocou a semente depois — é à prova de adulteração. Ele não, sozinho, impede o servidor de gerar muitas sementes e escolher uma antes de se comprometer; fechar essa brecha (uma fonte de aleatoriedade pública, ou uma semente do seu aparelho) é um reforço planejado para se um dia a aposta subir. Como aqui não há dinheiro nem fichas valendo, tamper-evidence é a régua certa.