engineeringfairnessmultiplayer
Autorità sul server significa che il server conserva l'unica copia della partita che conta. Il tuo dispositivo invia la mossa che vuoi giocare, il server la verifica contro i propri dadi e le proprie regole, e solo allora il tavoliere cambia. Un'app modificata può sostenere quello che vuole: la verità abita dove non può arrivare.
Il backgammon si merita questo rigore. È un gioco di dadi con una scala e un piatto, il che significa che ci sono due modi di barare: falsificare le mosse o piegare i tiri. Un server leale deve chiudere entrambe le porte. La seconda porta comprende noi, e ci arriviamo.
Che cosa significa davvero autorità sul server?
Ogni partita dal vivo di Orion esiste in un solo posto: sul nostro server. Il tavoliere sul tuo telefono è una finestra, non la partita. Quando trascini una pedina, l'app non la muove. Invia un messaggio breve che dice: ecco che cosa voglio giocare. Il server riesegue quell'intenzione sul proprio tavoliere, con il proprio motore di regole, usando i dadi che ha tirato per quel turno. Le mosse legali fanno avanzare la partita, ed entrambi i giocatori ricevono la stessa nuova posizione. Le mosse illegali non sono mai avvenute.
È un solo server per tutti. L'app iOS è SwiftUI nativa, quella Android è Jetpack Compose nativa, ed entrambe sono finestre sullo stesso backend e sullo stesso bacino di giocatori. Vetro diverso, stessa verità.
Perché i giochi che si fidano del client vengono imbrogliati?
Perché il dispositivo del tuo avversario appartiene al tuo avversario. Tutto ciò che vi gira sopra può essere modificato. Un client con una patch può inviare mosse mai state legali. Un editor di memoria può riscrivere un numero sul posto, e lo schermo mostrerà fedelmente la bugia. Niente di esotico. Gli strumenti sono gratuiti, documentati e più vecchi degli smartphone.
Un gioco che si fida del client sta chiedendo a ogni giocatore di promettere di non guardare sotto il cofano. Qualcuno guarderà. Perciò abbiamo reso irrilevante l'opinione del client. In Orion l'app ha esattamente tre compiti:
- Disegnare: il tavoliere, le pedine, il cubo, il cronometro.
- Chiedere: chiedere al server di giocare una mossa, offrire il raddoppio, abbandonare.
- Ricevere: mostrare la posizione che il server dichiara reale.
Tirare i dadi, giudicare la legalità e muovere una sola pedina non sono in quell'elenco. Nulla che decida un esito nasce su un dispositivo.
Che cosa succede quando gioco una mossa?
Tu giochi.. La tua app invia l'intenzione: questa pedina, questi punti. Nulla sul tuo dispositivo modifica il tavoliere vero.
Il server la riesegue.. Il nostro motore di regole esegue la mossa contro il tavoliere del server e i dadi del server. Se è legale, la partita avanza. Se non lo è, viene rifiutata alla fonte, qualunque app l'abbia inviata.
Entrambe le parti ricevono la stessa verità.. La nuova posizione va a entrambi i giocatori. Se la tua connessione cade, la tolleranza di riconnessione del cronometro tiene il tuo posto, e torni al tavoliere com'è davvero, non come se lo ricordava il tuo telefono.
Le poste seguono la stessa regola. Quando comincia una partita con quota d'ingresso, il server trattiene entrambe le puntate. Il piatto vive in un solo registro, sul server, e lì viene liquidato a fine partita. A nessun client viene mai chiesto di riferire quanto crede di aver vinto. Monete e gemme sono virtuali, senza valore reale e senza incasso, e gestiamo comunque quel registro come se contenesse qualcosa di prezioso, perché lo contiene: la tua fiducia nel punteggio.
Che cosa impedisce al server stesso di barare?
È la domanda giusta, e la maggior parte dei giochi spera che tu non la faccia mai. Un server che tira i dadi in segreto potrebbe tirarli con gentilezza per chi preferisce, e tu non lo vedresti mai. Ogni tiro sembra plausibile. È quello che fanno i dadi.
Perciò quel potere ce lo siamo tolto da soli. Prima che una partita cominci, il server genera un seme segreto e ne pubblica un impegno SHA-256. Ogni tiro viene poi derivato da quel seme con HMAC-SHA256, uno alla volta, in ordine. Quando la partita finisce, il server rivela il seme. Chiunque può verificare che il seme corrisponda all'impegno preso prima del primo tiro, e che ogni tiro della partita ne discenda. In senso crittografico, i tuoi dadi erano fissati prima che uno dei due giocatori toccasse una pedina. Non potremmo piegare il tiro dodici senza rompere la promessa pubblicata al tiro zero.
Non devi credere alla nostra parola su nulla di tutto questo. Il verificatore su orion.arthea.ai/verify ricalcola l'intera catena nel tuo browser, con Web Crypto, sulla tua macchina, a partire dal registro pubblico della partita. Nessun account, nessuna installazione. La porta su orion.arthea.ai/go porta i link ad App Store e Google Play e mostra sempre che cosa è disponibile in questo momento.