News

Reilu palvelin ei luota keneenkään, ei meihinkään

Mitä palvelinauktoriteetti tarkoittaa: palvelin pitää lautaa, tarkistaa jokaisen siirron lähteellä, ja commit-reveal-nopat pitävät talonkin rehellisenä.

engineeringfairnessmultiplayer

Palvelinauktoriteetti tarkoittaa, että palvelin pitää hallussaan ainoaa pelin kopiota, jolla on merkitystä. Laitteesi lähettää siirron, jonka haluat pelata, palvelin koettelee sitä omia noppiaan ja omia sääntöjään vasten, ja vasta sitten lauta muuttuu. Muokattu sovellus voi väittää mitä tahansa: totuus asuu paikassa, johon se ei ylety.

Backgammon ansaitsee sen tiukkuuden. Se on noppapeli, jossa on tikkaat ja potti, mikä tarkoittaa että huijata voi kahdella tavalla: väärentämällä siirrot tai taivuttamalla heitot. Reilun palvelimen on suljettava molemmat ovet. Toinen ovi koskee meitä, ja siihen tullaan.

Mitä palvelinauktoriteetti oikeasti tarkoittaa?

Jokainen käynnissä oleva Orion-peli on olemassa yhdessä paikassa: palvelimellamme. Puhelimesi lauta on ikkuna, ei peli. Kun vedät kiekkoa, sovellus ei siirrä sitä. Se lähettää lyhyen viestin, joka sanoo: tämän haluan pelata. Palvelin toistaa tuon aikomuksen omalla laudallaan, omalla sääntömoottorillaan, niillä nopilla jotka se heitti sille vuorolle. Lailliset siirrot vievät peliä eteenpäin, ja molemmat pelaajat saavat saman uuden aseman. Laittomia siirtoja ei koskaan tapahtunut.

Se on yksi palvelin kaikille. iOS-sovellus on natiivi SwiftUI, Android-sovellus on natiivi Jetpack Compose, ja molemmat ovat ikkunoita samaan taustajärjestelmään ja samaan pelaajajoukkoon. Eri lasi, sama totuus.

Miksi asiakkaaseen luottavia pelejä huijataan?

Koska vastustajasi laite kuuluu vastustajallesi. Kaikkea siinä ajettavaa voi muuttaa. Paikattu asiakas voi lähettää siirtoja, jotka eivät koskaan olleet laillisia. Muistieditori voi kirjoittaa luvun uusiksi paikan päällä, ja näyttö esittää valheen uskollisesti. Mikään tästä ei ole eksoottista. Työkalut ovat ilmaisia, dokumentoituja ja vanhempia kuin älypuhelimet.

Asiakkaaseen luottava peli pyytää jokaista pelaajaa lupaamaan, ettei kurkista konepellin alle. Jotkut kurkistavat. Niinpä teimme asiakkaan mielipiteestä merkityksettömän. Orionissa sovelluksella on täsmälleen kolme tehtävää:

  • Piirtää: lauta, kiekot, kuutio, kello.
  • Pyytää: pyytää palvelinta pelaamaan siirto, tarjota tuplaus, luovuttaa.
  • Vastaanottaa: näyttää asema, jota palvelin kutsuu todelliseksi.

Noppien heittäminen, laillisuuden arviointi ja yhdenkään kolikon siirtäminen eivät ole tuolla listalla. Mikään lopputuloksen ratkaiseva ei synny laitteella.

Mitä tapahtuu, kun pelaan siirron?

Sinä pelaat.. Sovelluksesi lähettää aikomuksen: tämä kiekko, nämä pisteet. Mikään laitteessasi ei muuta oikeaa lautaa.

Palvelin toistaa sen.. Sääntömoottorimme ajaa siirron palvelimen lautaa ja palvelimen noppia vasten. Jos se on laillinen, peli etenee. Jos ei, se hylätään lähteellä riippumatta siitä, mikä sovellus sen lähetti.

Molemmat puolet saavat saman totuuden.. Uusi asema lähtee molemmille pelaajille. Jos yhteytesi katkeaa, vuorokellon uudelleenyhdistämisaika pitää paikkasi, ja palaat laudalle sellaisena kuin se todella on, ei sellaisena kuin puhelimesi sen viimeksi muisti.

Panokset noudattavat samaa sääntöä. Kun sisäänostopeli alkaa, palvelin pitää molemmat panokset sulkutilillä. Potti elää yhdessä kirjanpidossa, palvelimella, ja selvitetään siellä pelin päättyessä. Yhdeltäkään asiakkaalta ei koskaan kysytä, kuinka paljon se luulee voittaneensa. Kolikot ja jalokivet ovat virtuaalisia, ilman todellista arvoa ja ilman lunastusta, ja silti pidämme sitä kirjanpitoa kuin se sisältäisi jotain arvokasta, sillä niin se sisältääkin: sinun luottamuksesi asemaan.

Mikä estää palvelinta itseään huijaamasta?

Se on oikea kysymys, ja useimmat pelit toivovat, ettet koskaan esitä sitä. Palvelin, joka heittää noppia salassa, voisi heittää ystävällisesti sille jota se suosii, etkä sinä näkisi sitä koskaan. Jokainen heitto näyttää uskottavalta. Sellaisia nopat ovat.

Niinpä otimme tuon vallan itseltämme. Ennen pelin alkua palvelin luo salaisen siemenen ja julkaisee siitä SHA-256-sitoumuksen. Jokainen heitto johdetaan sitten tuosta siemenestä HMAC-SHA256:lla, yksi kerrallaan, järjestyksessä. Kun peli päättyy, palvelin paljastaa siemenen. Kuka tahansa voi tarkistaa, että siemen täsmää ennen ensimmäistä heittoa annettuun sitoumukseen ja että jokainen pelin heitto seuraa siitä. Kryptografisessa mielessä noppasi oli lyöty lukkoon ennen kuin kumpikaan pelaaja kosketti kiekkoa. Emme voisi taivuttaa heittoa kaksitoista rikkomatta lupausta, jonka julkaisimme heitolla nolla.

Sinun ei tarvitse uskoa mitään tästä meidän sanaamme. Varmennus osoitteessa orion.arthea.ai/verify laskee koko ketjun uudelleen selaimessasi, Web Cryptolla, sinun koneellasi, pelin julkisesta pöytäkirjasta. Ei tiliä, ei asennusta. Ovi osoitteessa orion.arthea.ai/go kantaa App Storen ja Google Playn linkit ja näyttää aina, mikä on juuri nyt saatavilla.