News

Een eerlijke server vertrouwt niemand, ook ons niet

Wat gezag bij de server betekent: de server houdt het bord, valideert elke zet bij de bron, en commit-reveal-stenen houden zelfs het huis eerlijk.

engineeringfairnessmultiplayer

Gezag bij de server betekent dat de server de enige kopie van de partij bewaart die telt. Jouw toestel stuurt de zet die je wilt spelen, de server toetst hem aan zijn eigen stenen en zijn eigen regels, en pas daarna verandert het bord. Een aangepaste app kan beweren wat hij wil: de waarheid woont waar hij niet bij kan.

Backgammon verdient die strengheid. Het is een dobbelspel met een ladder en een pot, wat betekent dat er twee manieren zijn om vals te spelen: zetten vervalsen of worpen buigen. Een eerlijke server moet beide deuren sluiten. De tweede deur betreft ook ons, en daar komen we zo op.

Wat betekent gezag bij de server eigenlijk?

Elke lopende Orion-partij bestaat op precies één plek: op onze server. Het bord op je telefoon is een venster, niet de partij. Als je een schijf versleept, verplaatst de app hem niet. Hij stuurt een kort bericht dat zegt: dit wil ik spelen. De server speelt die bedoeling opnieuw af op zijn eigen bord, met zijn eigen regelmotor, met de stenen die hij voor die beurt wierp. Legale zetten brengen de partij verder, en beide spelers krijgen dezelfde nieuwe stelling. Illegale zetten hebben nooit plaatsgevonden.

Dit is één server voor iedereen. De iOS-app is native SwiftUI, de Android-app is native Jetpack Compose, en beide zijn vensters op dezelfde achterkant en dezelfde spelerspoel. Ander glas, dezelfde waarheid.

Waarom worden spellen die de client vertrouwen bedrogen?

Omdat het toestel van je tegenstander van je tegenstander is. Alles wat erop draait kan gewijzigd worden. Een aangepaste client kan zetten sturen die nooit legaal waren. Een geheugeneditor kan een getal ter plaatse herschrijven, en het scherm toont de leugen trouw. Niets hiervan is exotisch. Het gereedschap is gratis, gedocumenteerd en ouder dan smartphones.

Een spel dat de client vertrouwt vraagt elke speler te beloven niet onder de motorkap te kijken. Sommigen kijken. Dus maakten we de mening van de client irrelevant. In Orion heeft de app precies drie taken:

  • Tekenen: het bord, de schijven, de kubus, de klok.
  • Vragen: de server vragen een zet te spelen, te verdubbelen, op te geven.
  • Ontvangen: de stelling tonen die de server echt noemt.

Dobbelen, legaliteit beoordelen en ook maar één munt verplaatsen staan niet op die lijst. Niets wat een uitkomst bepaalt ontstaat op een toestel.

Wat gebeurt er als ik een zet speel?

Jij speelt.. Je app stuurt de bedoeling: deze schijf, deze punten. Niets op je toestel verandert het echte bord.

De server speelt hem opnieuw af.. Onze regelmotor draait de zet tegen het bord van de server en de stenen van de server. Is hij legaal, dan gaat de partij verder. Is hij dat niet, dan wordt hij bij de bron geweigerd, ongeacht welke app hem stuurde.

Beide kanten krijgen dezelfde waarheid.. De nieuwe stelling gaat naar beide spelers. Valt je verbinding weg, dan houdt de herverbindingsmarge van de klok je stoel vast, en kom je terug op het bord zoals het werkelijk is, niet zoals je telefoon het zich laatst herinnerde.

Inzetten volgen dezelfde regel. Als een partij met inleg begint, houdt de server beide inzetten in bewaring. De pot leeft in één grootboek, op de server, en wordt daar verrekend als de partij eindigt. Aan geen enkele client wordt ooit gevraagd hoeveel hij denkt gewonnen te hebben. Munten en edelstenen zijn virtueel, zonder waarde in de echte wereld en zonder uitbetaling, en toch voeren we dat grootboek alsof er iets kostbaars in zit, want dat is ook zo: jouw vertrouwen in de stand.

Wat weerhoudt de server zelf van valsspelen?

Dat is de juiste vraag, en de meeste spellen hopen dat je hem nooit stelt. Een server die in het geheim dobbelt zou vriendelijk kunnen gooien voor wie hij bevoordeelt, en jij zou het nooit zien. Elke worp ziet er plausibel uit. Dat is wat dobbelstenen doen.

Dus namen we die macht van onszelf af. Voordat een partij begint genereert de server een geheim zaad en publiceert er een SHA-256-toezegging op. Elke worp wordt daarna uit dat zaad afgeleid met HMAC-SHA256, één voor één, op volgorde. Als de partij eindigt onthult de server het zaad. Iedereen kan nagaan dat het zaad overeenkomt met de toezegging die vóór de eerste worp werd gedaan, en dat elke worp van de partij eruit volgt. In cryptografische zin lagen jouw stenen vast voordat een van beide spelers een schijf aanraakte. We zouden worp twaalf niet kunnen buigen zonder de belofte te breken die we bij worp nul publiceerden.

Je hoeft ons hierin nergens op ons woord te geloven. De verificatie op orion.arthea.ai/verify herberekent de hele keten in jouw browser, met Web Crypto, op jouw machine, uit het openbare verslag van de partij. Geen account, geen installatie. De deur op orion.arthea.ai/go draagt de links naar de App Store en Google Play en toont altijd wat er op dit moment beschikbaar is.