Como o provably fair funciona nos sites de Rust e como conferir suas rodadas
Hashes de server seed, client seeds, nonces e HMAC-SHA256 em palavras simples, com um exemplo que você pode reproduzir e uma rotina passo a passo para conferir qualquer rodada num site de skins de Rust.
Os dez sites do nosso ranking listam seus jogos como provably fair. A expressão tem um significado preciso, e a verificação por trás dela é algo que você mesmo pode fazer com uma ferramenta gratuita de hash ou algumas linhas de código. Pouquíssimos jogadores chegam a fazê-la. Este guia explica o que o sistema prova, o que ele deixa de fora e como verificar uma rodada do começo ao fim.
A versão curta: antes de você apostar, o site trava um valor secreto e mostra uma impressão digital dele. Você acrescenta uma entrada sua. Depois das apostas, o site revela o segredo, e você pode confirmar que a impressão digital bate e que cada resultado decorre das entradas. Se os números fecham, o site não poderia ter alterado um resultado depois de ver a sua aposta.
O problema que o provably fair resolve
Num site de skins, o servidor decide cada resultado. Quando você abre uma caixa, faz um flip ou espera um multiplicador de crash, está vendo a animação de um número produzido numa máquina que você não pode inspecionar. Sem alguma forma de prova, você confia que a operadora não está empurrando discretamente os sorteios contra você quando a sua aposta é grande.
Os cassinos online licenciados costumam responder a isso com órgãos reguladores e auditorias de terceiros nos geradores de números aleatórios. A maioria dos sites de skins se apoia numa abordagem criptográfica. Ela tem uma grande vantagem para os jogadores: você não precisa confiar num auditor, porque pode repetir o cálculo no seu próprio computador.
A ideia se chama esquema de commitment. Imagine o site escrevendo seu segredo num cartão, lacrando o cartão num envelope e entregando o envelope a você antes de o jogo começar. Ele não pode trocar o cartão depois sem que você perceba, e você não pode ler o cartão antes da hora.
As três entradas: server seed, client seed e nonce
Quase todo sistema provably fair dos sites de Rust usa os mesmos ingredientes. Os rótulos variam um pouco entre os sites, mas os papéis são os mesmos.
Server seed
Uma string aleatória longa, gerada pelo site. Fica secreta enquanto você joga, porque quem a soubesse poderia prever todos os resultados. O que você vê no lugar dela é o hash, normalmente produzido com SHA-256. Um hash é uma impressão digital unidirecional. A mesma entrada sempre dá a mesma saída de 64 caracteres, mudar um único caractere da entrada muda a saída por completo, e não há jeito prático de voltar do hash até a seed.
Client seed
Uma string que vem do seu lado. Os sites geram uma padrão para você, e a maioria deixa você editá-la no painel de fairness ou de configurações. A função dela é impedir que o site escolha uma server seed ruim para você em particular. O site se comprometeu com a seed antes de saber o que você digitaria, então não tinha como ajustar uma à outra.
Nonce
Um contador que começa em 0 ou 1 e sobe de um em um a cada aposta que você faz no mesmo par de seeds. Ele permite reutilizar uma server seed e uma client seed em centenas de apostas e ainda assim obter um resultado novo a cada vez.
Quando você quer conferir seus resultados, pede ao site que troque a seed (rotate). Ele revela a server seed antiga em texto puro, mostra o hash de uma nova e zera o nonce. Tudo o que você jogou na seed antiga agora pode ser verificado.
Como as entradas viram um resultado
A receita mais comum é o HMAC-SHA256. O HMAC é um jeito padrão de combinar uma chave secreta com uma mensagem para produzir um hash. Na maioria dos sites de Rust, a server seed é a chave, e a mensagem é a client seed e o nonce unidos, muitas vezes com dois-pontos, como clientseed:nonce. Alguns sites acrescentam um número de rodada ou o ID de um jogo, então leia sempre a fórmula exata na página de fairness do próprio site.
A saída é uma string hexadecimal de 64 caracteres. O site então transforma parte dessa string num número entre 0 e 1. Um método típico pega os primeiros oito caracteres hex (32 bits), converte em número inteiro e divide por 4.294.967.296, que é 2 elevado a 32. Esse decimal é então mapeado para o jogo:
- Dice e upgrader: multiplique por 100 para obter um sorteio de 0,00 a 99,99 e compare com o alvo.
- Roleta: multiplique pelo número de casas da roda e arredonde para baixo para escolher uma casa.
- Caixas: multiplique pelo número total de tickets da caixa, de modo que uma skin dona de 1% dos tickets ganhe em 1% dos sorteios.
- Crash: jogue o número numa fórmula que o transforma em multiplicador, com a vantagem da casa embutida. Nosso guia de estratégia de crash percorre essa fórmula e o que ela significa para as metas de cash out.
Um exemplo passo a passo que você pode reproduzir
As seeds abaixo são inventadas para este exemplo, para você conferir nossa aritmética com qualquer calculadora de HMAC-SHA256.
- Server seed: example-server-seed-01. O hash SHA-256 dela começa com a5275da7ccca3f73. É esse hash que o site mostraria a você antes de jogar.
- Client seed: my-own-client-seed. Nonce: 1. A mensagem é, portanto, my-own-client-seed:1.
- O HMAC-SHA256 com a server seed como chave e essa mensagem como entrada dá um resultado que começa com 4cdcf221.
- O hex 4cdcf221 é 1.289.548.321 em decimal. Dividido por 4.294.967.296, dá cerca de 0,30025.
- Numa escala de dice de 0 a 100, isso é um sorteio de 30,02. Numa roda de roleta de 15 casas, 0,30025 vezes 15 dá cerca de 4,5, que arredonda para baixo para a casa 4 (contando a primeira casa como 0).
Rode as mesmas seeds com o nonce 2 e você obtém um hash completamente diferente, começando com 6486ccbd, que dá cerca de 0,3927. Nada no primeiro sorteio diz algo sobre o segundo. Essa independência é todo o ponto: não há padrão num histórico de apostas para ler, porque cada resultado é um hash novo.
Como verificar uma rodada você mesmo, passo a passo
A primeira verificação completa leva um tempo. Depois, são alguns minutos de copiar e colar. Faça isso primeiro com um saldo pequeno, para conhecer o processo antes de um resultado realmente importar para você.
- Abra o painel de fairness antes de apostar. Em geral ele tem link na tela do jogo, no rodapé ou nas configurações do perfil. Salve o hash da server seed em algum lugar fora do site, como uma nota no celular ou uma captura de tela.
- Defina a sua própria client seed. Troque a padrão por algo que você digitou. Bata nas teclas à vontade. Não precisa ser memorável.
- Jogue e anote as apostas que importam para você. Anote o nonce mostrado em cada aposta, ou ache-o depois no histórico de apostas.
- Troque a seed. O site revela a server seed antiga. Copie-a.
- Confira o commitment. Passe a server seed revelada por qualquer ferramenta de SHA-256. A saída precisa bater com o hash que você salvou no passo 1, caractere por caractere.
- Recalcule o sorteio. Use HMAC-SHA256 com a server seed revelada, a sua client seed e o nonce e aplique a conversão que o site publica. Em PHP, é uma única chamada a hash_hmac, e o módulo hmac do Python faz o mesmo em duas linhas.
- Compare. O número que você calcula deve produzir o resultado registrado no seu histórico.
A maioria dos sites também oferece um verificador embutido, onde você cola as seeds. É prático, mas roda no código da própria operadora. Para uma conferência que não dependa do site, use uma ferramenta independente ou o seu próprio script pelo menos uma vez.
Os jogos compartilhados funcionam um pouco diferente
Os modos de um jogador, como dice, upgrader e aberturas de caixas solo, podem rodar no seu par de seeds pessoal. Jogos em que muitos jogadores dividem um só resultado, como jackpot, coinflip, case battles, rodadas de roleta e crash, não podem deixar a client seed de um jogador decidir o resultado de todos. Os sites tratam isso de algumas formas comuns.
- Uma cadeia de hashes. Comum no crash. O site gera antecipadamente uma longa cadeia de hashes, em que o hash de cada rodada é o SHA-256 do hash da rodada seguinte. Ele publica o último hash da cadeia antes de a primeira rodada ser jogada, e você pode conferir que cada rodada revelada gera, por hash, a que veio antes. Todos os resultados da cadeia foram fixados antes de alguém apostar.
- Uma seed pública de fora do site. O site se compromete com a server seed e depois mistura um valor que ninguém poderia saber antecipadamente, como o hash de um bloco futuro numa blockchain pública. Como esse bloco não existia quando o site se comprometeu, o site não poderia ajustar a seed a ele.
- Commitments por rodada. No jackpot e no coinflip, o hash da seed da rodada aparece quando a rodada abre, e a seed em texto puro mais o ticket vencedor aparecem quando ela termina.
A ideia de verificação é a mesma em cada caso. Ache o commitment que era público antes da rodada, confirme que o valor revelado bate com ele e depois recalcule o resultado. Para entender como um ticket vencedor vira um vencedor num pote compartilhado, veja nosso guia sobre odds de coinflip e jackpot. As case battles misturam as duas abordagens, o que tratamos em case battles explicadas.
O que o provably fair não prova
Um sorteio verificado prova uma única coisa estreita: o resultado veio de entradas com as quais o site se comprometeu antes de você apostar. É útil, mas os jogadores costumam ler no selo muito mais do que ele sustenta.
- Ele não diz nada sobre a vantagem da casa. Um jogo de crash com uma vantagem grande pode ser perfeitamente provably fair. A vantagem fica dentro da fórmula publicada que transforma o número aleatório num multiplicador ou numa chance de vitória. Justo quer dizer que o site seguiu as próprias regras, e essas regras ainda favorecem o site com o tempo.
- Ele não confere preços. Se uma caixa lista uma skin por um valor bem acima do que ela venderia no Mercado da Comunidade Steam, o sorteio pode ser justo e a caixa ainda assim ser um mau negócio. Nosso guia de upgrader mostra como a precificação dos itens desloca discretamente as odds reais.
- Ele não cobre saques. Um site pode rodar seeds impecáveis e ainda atrasar pagamentos, congelar contas ou reescrever os termos. É por isso que a fairness é só uma entrada em como avaliamos os sites, ao lado de velocidade de saque e confiança.
- Só funciona se alguém conferir. Um commitment que ninguém compara é só uma sequência de caracteres numa página.
Sinais de alerta numa página de fairness
Verificar seeds é uma etapa de rotina quando testamos um site. Estas são as coisas que nos deixam desconfiados, mais ou menos do leve ao grave.
| O que você vê | O que significa | O que fazer |
|---|---|---|
| Sem opção de mudar a client seed | O site controla todas as entradas dos seus sorteios pessoais | Trate os modos de um jogador com mais cautela |
| Um botão de verificador, mas nenhuma fórmula publicada | Você só consegue conferir resultados com o código do próprio site | Peça ao suporte a fórmula exata antes de depositar muito |
| O hash da server seed só aparece depois de você apostar | Não há commitment de verdade | Não trate o jogo como provably fair |
| As server seeds antigas nunca podem ser reveladas | Nada pode ser verificado | O mesmo de cima |
| A seed revelada não gera, por hash, o commitment salvo | A seed foi alterada, ou a página está quebrada | Pare de jogar, tire capturas de tudo e fale com o suporte |
Se algum dia você cair na última linha, guarde as provas: o hash salvo, a seed revelada, os IDs das apostas e o horário de cada aposta. Uma única divergência pode ser um bug de exibição, mas é exatamente o tipo de relato crível de jogador que nos faz reavaliar um site.
Uma rotina sensata para jogadores comuns
Você não precisa verificar todas as apostas. Uma rotina leve pega a maioria dos problemas sem transformar uma sessão em lição de casa.
- Defina uma client seed nova sempre que começar a jogar num site novo.
- Tire uma captura de tela do hash da server seed antes de jogar.
- Troque a seed depois da sessão e confira o commitment, que é um único cálculo de SHA-256.
- Recalcule o ou os dois resultados que mais importaram, como uma grande perda no upgrader ou uma battle que você tinha certeza de que deveria ter ganhado.
- De vez em quando, repita a verificação completa com uma ferramenta independente em vez do verificador do site.
Uma verificação limpa significa que as perdas que você sofre são as que a matemática publicada prevê, e nada além. A vantagem continua lá em cada sorteio. O próximo passo prático é decidir de antemão quanto dessas perdas esperadas você aceita pagar pelo entretenimento; nossa página de jogo responsável trata de limites simples e das ferramentas que ajudam a respeitá-los.
Perguntas frequentes
Um site provably fair ainda pode trapacear?
Ele não consegue alterar um resultado comprometido sem que a verificação do hash falhe. Mas pode manter uma vantagem da casa alta, superprecificar itens em caixas ou atrasar saques, porque o provably fair só cobre como o sorteio é produzido.
Preciso mudar a minha client seed?
Não é obrigatório, mas você deveria. Uma client seed escolhida por você depois de o hash da server seed ser mostrado significa que o site não poderia ter escolhido a própria seed com a sua entrada em mente.
Por que o site não mostra logo a server seed antes de eu jogar?
Quem conhece a server seed e a client seed pode calcular todos os próximos resultados. O hash permite que o site se comprometa com a seed sem revelar os sorteios futuros.
Que ferramenta posso usar para verificar sorteios?
Qualquer calculadora de SHA-256 e HMAC-SHA256 serve, inclusive ferramentas online gratuitas e as funções nativas de PHP, Python ou JavaScript. Use o verificador do site pela conveniência e uma ferramenta independente para a conferência que conta.
O SHA-256 é seguro o bastante para isso?
É. É um padrão amplamente usado, inclusive na mineração de Bitcoin, e não há forma prática conhecida de revertê-lo nem de achar uma segunda seed que produza o mesmo hash.
Continue lendo
Guias relacionados
Bônus de apostas em Rust, caixas grátis e códigos promocionais: quanto valem
Uma caixa grátis vale o drop médio dela, não o item de topo, e um saldo grátis vale o que sobrevive ao rollover. Como precificar cada bônus comum de sites de Rust antes de digitar um código.
Case battles de Rust explicadas: modos, odds e como escolher uma battle justa
Uma case battle não muda a vantagem da casa nas caixas que há dentro dela. Muda o tamanho do seu ganho ou da sua perda. Como os formatos funcionam, a matemática por trás deles e como achar uma battle que vale entrar.
Apostas responsáveis com skins: limites, sinais de alerta e onde buscar ajuda
Skins facilitam perder a noção do dinheiro de verdade. Este guia trata dos sinais de alerta, dos limites que realmente seguram, da autoexclusão e das ferramentas de bloqueio, e das linhas de ajuda gratuitas que você pode procurar hoje.