fair playengineeringprovably fair
Serveur autoritaire signifie que le serveur garde la seule copie de la partie qui compte. Votre appareil envoie le coup que vous voulez jouer, le serveur le contrôle avec ses propres dés et ses propres règles, et c'est seulement alors que le plateau change. Une appli modifiée peut affirmer ce qu'elle veut : la vérité vit quelque part où elle ne peut pas atteindre.
Le backgammon mérite cette discipline. C'est un jeu de dés avec une échelle et un pot, ce qui veut dire qu'il y a deux façons de tricher : falsifier ses coups, ou tordre les lancers. Un serveur équitable doit fermer les deux portes. La seconde porte nous inclut, et nous y venons.
Que veut dire serveur autoritaire, concrètement ?
Chaque partie Orion en direct existe à exactement un endroit : sur notre serveur. Le plateau sur votre téléphone est une fenêtre, pas le jeu. Quand vous déplacez un pion, l'appli ne le déplace pas. Elle envoie un petit message qui dit : voilà ce que je veux jouer. Le serveur rejoue cette intention contre son propre plateau, avec son propre moteur de règles, en utilisant les dés qu'il a lancés pour ce tour. Les coups légaux font avancer la partie, et les deux joueurs reçoivent la même nouvelle position. Les coups illégaux n'ont jamais eu lieu.
C'est un seul serveur pour tout le monde. L'appli iOS est en SwiftUI natif, l'appli Android en Jetpack Compose natif, et les deux sont des fenêtres sur le même backend et le même vivier de joueurs. Des verres différents, la même vérité.
Pourquoi les jeux qui font confiance au client se font-ils tricher ?
Parce que l'appareil de votre adversaire appartient à votre adversaire. Tout ce qui y tourne peut être modifié. Un client patché peut envoyer des coups qui n'ont jamais été légaux. Un éditeur de mémoire peut réécrire un nombre sur place, et l'écran affichera fidèlement le mensonge. Rien de tout cela n'est exotique. Les outils sont gratuits, documentés, et plus vieux que les smartphones.
Un jeu qui fait confiance au client demande à chaque joueur de promettre de ne pas regarder sous le capot. Certains regarderont. Nous avons donc rendu l'avis du client sans importance. Dans Orion, l'appli a exactement trois tâches :
- Afficher : dessiner le plateau, les pions, le videau, le chrono.
- Demander : prier le serveur de jouer un coup, proposer un double, abandonner.
- Recevoir : afficher la position que le serveur déclare réelle.
Lancer les dés, juger de la légalité et déplacer une seule pièce ne sont pas sur cette liste. Rien de ce qui décide d'une issue ne naît sur un appareil.
Que se passe-t-il quand je joue un coup ?
Vous jouez.. Votre appli envoie l'intention : ce pion, ces flèches. Rien sur votre appareil ne modifie le vrai plateau.
Le serveur le rejoue.. Notre moteur de règles exécute le coup contre le plateau du serveur et les dés du serveur. S'il est légal, la partie avance. Sinon, il est refusé à la source, quelle que soit l'appli qui l'a envoyé.
Les deux camps reçoivent la même vérité.. La nouvelle position part vers les deux joueurs. Si votre connexion tombe, le délai de grâce de reconnexion du chrono garde votre siège, et vous revenez au plateau tel qu'il est réellement, pas tel que votre téléphone s'en souvenait.
Les mises suivent la même règle. Quand une partie avec buy-in commence, le serveur met les deux antes sous séquestre. Le pot vit dans un seul registre, sur le serveur, et il se solde là quand la partie se termine. On ne demande jamais à un client de rapporter ce qu'il croit avoir gagné. Les pièces et les gemmes sont virtuelles, sans valeur réelle et sans retrait possible, et nous tenons ce registre comme s'il contenait quelque chose de précieux, parce que c'est le cas : votre confiance dans le score.
Qu'est-ce qui empêche le serveur lui-même de tricher ?
C'est la bonne question, et la plupart des jeux espèrent que vous ne la poserez jamais. Un serveur qui lance les dés en secret pourrait les lancer avec bienveillance pour qui il favorise, et vous ne le verriez jamais. Chaque lancer paraît plausible. C'est ce que font les dés.
Nous nous sommes donc retiré ce pouvoir. Avant qu'une partie commence, le serveur génère une graine secrète et publie un engagement SHA-256 sur elle. Chaque lancer est ensuite dérivé de cette graine par HMAC-SHA256, un lancer à la fois, dans l'ordre. Quand la partie se termine, le serveur révèle la graine. N'importe qui peut vérifier que la graine correspond à l'engagement pris avant le premier lancer, et que chaque lancer de la partie en découle. Au sens cryptographique, vos dés étaient fixés avant qu'aucun joueur ne touche un pion. Nous ne pourrions pas tordre le lancer numéro douze sans briser la promesse publiée au lancer zéro.
Vous n'avez à nous croire sur parole pour rien de tout cela. Le vérificateur sur orion.arthea.ai/verify recalcule toute la chaîne dans votre navigateur, avec Web Crypto, sur votre machine, à partir du dossier public de la partie. Aucun compte requis. Aucune appli requise.
Comment les deux moitiés s'emboîtent-elles ?
L'autorité du serveur et les dés commit-reveal sont deux moitiés d'un même dessin, et chacune couvre l'angle mort de l'autre. Un serveur qui valide les coups mais lance en secret vous demande de faire confiance à la maison. Des dés engagés sur un serveur confiant vous demandent de faire confiance à l'appli de chaque inconnu. Ensemble, elles ferment la boucle. Le client ne peut pas falsifier un coup, parce que le serveur rejoue chaque coup à la source. Le serveur ne peut pas truquer un lancer, parce que chaque lancer est enchaîné à un engagement publié avant la partie. Personne à la table, y compris ceux qui l'ont construite, ne détient un pouvoir non vérifié sur le résultat.
Le client ne peut pas falsifier un coup. Le serveur ne peut pas falsifier un lancer. Tout le reste est décoration.
La porte orion.arthea.ai/go porte les liens App Store et Google Play et montre toujours ce qui est disponible en ce moment. Le vérificateur est venu en premier, délibérément : la preuve de l'équité doit exister avant que le premier vrai pot ne soit joué.