News

Un servidor just no es refia de ningú, ni de nosaltres

Què vol dir autoritat del servidor: guarda el tauler, valida cada moviment a l'origen, i els daus commit-reveal mantenen honesta la casa mateixa.

engineeringfairnessmultiplayer

Autoritat del servidor vol dir que el servidor guarda l'única còpia de la partida que compta. El teu dispositiu envia el moviment que vols jugar, el servidor el prova contra els seus propis daus i les seves pròpies regles, i només llavors canvia el tauler. Una app modificada pot afirmar el que vulgui: la veritat viu en un lloc on no arriba.

El backgammon mereix aquest rigor. És un joc de daus amb una escala i un pot, o sigui que hi ha dues maneres de fer trampes: falsificar els moviments o torçar les tirades. Un servidor just ha de tancar totes dues portes. La segona porta ens inclou a nosaltres, i hi arribarem.

Què vol dir realment autoritat del servidor?

Cada partida d'Orion en curs existeix en un sol lloc: al nostre servidor. El tauler del teu telèfon és una finestra, no la partida. Quan arrossegues una fitxa, l'app no la mou. Envia un missatge curt que diu: això és el que vull jugar. El servidor reprodueix aquella intenció al seu propi tauler, amb el seu propi motor de regles, amb els daus que va treure per a aquell torn. Els moviments legals fan avançar la partida, i tots dos jugadors reben la mateixa posició nova. Els moviments il·legals no van passar mai.

És un sol servidor per a tothom. L'app d'iOS és SwiftUI nativa, la d'Android és Jetpack Compose nativa, i totes dues són finestres al mateix backend i al mateix conjunt de jugadors. Vidre diferent, mateixa veritat.

Per què fan trampes als jocs que es refien del client?

Perquè el dispositiu del teu rival és del teu rival. Tot el que hi corre es pot modificar. Un client apedaçat pot enviar moviments que mai no van ser legals. Un editor de memòria pot reescriure un número al moment, i la pantalla mostrarà la mentida fidelment. Res d'això és exòtic. Les eines són gratuïtes, documentades i més antigues que els telèfons intel·ligents.

Un joc que es refia del client demana a cada jugador que prometi no mirar sota el capó. Alguns hi miren. Així que hem fet que l'opinió del client sigui irrellevant. A Orion, l'app té exactament tres feines:

  • Dibuixar: el tauler, les fitxes, el cub, el rellotge.
  • Demanar: demanar al servidor que jugui un moviment, oferir el doble, abandonar.
  • Rebre: mostrar la posició que el servidor considera real.

Tirar els daus, jutjar la legalitat i moure ni que sigui una moneda no són en aquesta llista. Res que decideixi un resultat no neix en un dispositiu.

Què passa quan jugo un moviment?

Tu jugues.. La teva app envia la intenció: aquesta fitxa, aquests punts. Res del teu dispositiu no canvia el tauler de debò.

El servidor el reprodueix.. El nostre motor de regles executa el moviment contra el tauler del servidor i els daus del servidor. Si és legal, la partida avança. Si no ho és, es rebutja a l'origen, tant se val quina app l'hagi enviat.

Tots dos bàndols reben la mateixa veritat.. La nova posició surt cap als dos jugadors. Si et cau la connexió, el termini de reconnexió del rellotge de torn et guarda el lloc, i tornes al tauler tal com és de debò, no tal com el teu telèfon el recordava per última vegada.

Les apostes segueixen la mateixa regla. Quan comença una partida amb entrada, el servidor guarda totes dues entrades en dipòsit. El pot viu en un sol llibre de comptes, al servidor, i s'hi liquida quan la partida s'acaba. A cap client no se li pregunta mai quant es pensa que ha guanyat. Les monedes i les gemmes són virtuals, sense valor al món real i sense rescat, i tot i així portem aquest llibre com si hi hagués una cosa preciosa, perquè n'hi ha: la teva confiança en la posició.

Què impedeix que el servidor mateix faci trampes?

Aquesta és la pregunta bona, i la majoria de jocs esperen que no la facis mai. Un servidor que tira daus en secret podria tirar amablement per a qui afavoreix, i tu no ho veuries mai. Cada tirada sembla plausible. Els daus són així.

Així que ens hem tret aquest poder a nosaltres mateixos. Abans que comenci una partida, el servidor genera una llavor secreta i en publica un compromís SHA-256. Després cada tirada es deriva d'aquella llavor amb HMAC-SHA256, una a una, en ordre. Quan la partida s'acaba, el servidor revela la llavor. Qualsevol pot comprovar que la llavor coincideix amb el compromís donat abans de la primera tirada i que cada tirada de la partida se'n deriva. En sentit criptogràfic, els teus daus estaven fixats abans que cap dels jugadors toqués una fitxa. No podríem torçar la tirada dotze sense trencar la promesa que vam publicar a la tirada zero.

No cal que et creguis res d'això per la nostra paraula. La verificació d'orion.arthea.ai/verify recalcula tota la cadena al teu navegador, amb Web Crypto, a la teva màquina, a partir del registre públic de la partida. Sense compte, sense instal·lació. La porta d'orion.arthea.ai/go duu els enllaços a l'App Store i a Google Play i sempre mostra què hi ha disponible ara mateix.