engineeringfairnessmultiplayer
Autoridade no servidor significa que o servidor guarda a única cópia da partida que conta. Seu aparelho envia a jogada que você quer fazer, o servidor confere contra os próprios dados e as próprias regras, e só então o tabuleiro muda. Um aplicativo modificado pode alegar o que quiser: a verdade mora onde ele não alcança.
O gamão merece esse rigor. É um jogo de dados com escada e bolo, o que significa que há duas formas de trapacear: forjar suas jogadas ou torcer os lances. Um servidor justo tem de fechar as duas portas. A segunda porta inclui a nós, e já chegamos lá.
O que autoridade no servidor significa de fato?
Toda partida ao vivo do Orion existe em exatamente um lugar: no nosso servidor. O tabuleiro no seu celular é uma janela, não a partida. Quando você arrasta uma pedra, o aplicativo não a move. Ele envia uma mensagem curta que diz: é isto que eu quero jogar. O servidor repete essa intenção no próprio tabuleiro, com o próprio motor de regras, usando os dados que ele lançou naquele turno. Jogadas legais avançam a partida, e os dois jogadores recebem a mesma nova posição. Jogadas ilegais nunca aconteceram.
É um servidor para todo mundo. O aplicativo de iOS é SwiftUI nativo, o de Android é Jetpack Compose nativo, e os dois são janelas para o mesmo backend e o mesmo conjunto de jogadores. Vidro diferente, mesma verdade.
Por que jogos que confiam no cliente são trapaceados?
Porque o aparelho do seu adversário pertence ao seu adversário. Tudo o que roda nele pode ser alterado. Um cliente modificado pode enviar jogadas que nunca foram legais. Um editor de memória pode reescrever um número no lugar, e a tela vai exibir a mentira com toda fidelidade. Nada disso é exótico. As ferramentas são gratuitas, documentadas e mais velhas que os smartphones.
Um jogo que confia no cliente está pedindo a cada jogador que prometa não olhar debaixo do capô. Alguns vão olhar. Então tornamos a opinião do cliente irrelevante. No Orion o aplicativo tem exatamente três tarefas:
- Desenhar: o tabuleiro, as pedras, o cubo, o cronômetro.
- Pedir: pedir ao servidor para jogar uma jogada, oferecer o dobro, desistir.
- Receber: exibir a posição que o servidor disser que é real.
Lançar dados, julgar legalidade e mover uma única ficha não estão nessa lista. Nada que decida um resultado nasce num aparelho.
O que acontece quando eu faço uma jogada?
Você joga.. Seu aplicativo envia a intenção: esta pedra, estas casas. Nada no seu aparelho altera o tabuleiro real.
O servidor repete.. Nosso motor de regras roda a jogada contra o tabuleiro do servidor e os dados do servidor. Se for legal, a partida avança. Se não for, é recusada na origem, venha de qual aplicativo vier.
Os dois lados recebem a mesma verdade.. A nova posição vai para os dois jogadores. Se a sua conexão cair, a tolerância de reconexão do cronômetro segura o seu lugar, e você volta ao tabuleiro como ele realmente está, não como o seu celular lembrava.
As apostas seguem a mesma regra. Quando uma partida com entrada começa, o servidor retém as duas apostas. O bolo vive num único livro, no servidor, e é liquidado lá quando a partida acaba. Nenhum cliente é consultado sobre quanto acha que ganhou. Moedas e gemas são virtuais, sem valor no mundo real e sem saque, e ainda assim tratamos esse livro como se guardasse algo precioso, porque guarda: a sua confiança no placar.
O que impede o próprio servidor de trapacear?
Essa é a pergunta certa, e a maioria dos jogos torce para você nunca fazê-la. Um servidor que lança dados em segredo poderia lançá-los com gentileza para quem favorece, e você nunca veria. Todo lance parece plausível. É o que dados fazem.
Então tiramos esse poder de nós mesmos. Antes de a partida começar, o servidor gera uma semente secreta e publica um compromisso SHA-256 sobre ela. Cada lance é então derivado dessa semente com HMAC-SHA256, um por vez, em ordem. Quando a partida acaba, o servidor revela a semente. Qualquer pessoa pode conferir que a semente bate com o compromisso feito antes do primeiro lance, e que cada lance da partida decorre dela. No sentido criptográfico, os seus dados estavam fixados antes de qualquer jogador tocar numa pedra. Não poderíamos torcer o lance doze sem quebrar a promessa publicada no lance zero.
Você não precisa acreditar na nossa palavra em nada disso. O verificador em orion.arthea.ai/verify recalcula a cadeia inteira no seu navegador, com Web Crypto, na sua máquina, a partir do registro público da partida. Sem conta, sem instalação. A porta em orion.arthea.ai/go carrega os links da App Store e do Google Play e sempre mostra o que está disponível agora.