News

Pošten poslužitelj ne vjeruje nikome, ni nama

Što znači vlast poslužitelja: poslužitelj drži ploču, provjerava svaki potez na izvoru, a commit-reveal kockice drže i samu kuću poštenom.

engineeringfairnessmultiplayer

Vlast poslužitelja znači da poslužitelj drži jedini primjerak partije koji vrijedi. Tvoj uređaj šalje potez koji želiš odigrati, poslužitelj ga iskušava naspram vlastitih kockica i vlastitih pravila, i tek se onda ploča mijenja. Izmijenjena aplikacija može tvrditi bilo što: istina živi ondje gdje ona ne doseže.

Backgammon zaslužuje tu strogost. To je igra kockicama s ljestvicom i potom, što znači da postoje dva načina varanja: krivotvoriti poteze ili savijati bacanja. Pošten poslužitelj mora zatvoriti oba vrata. Druga vrata uključuju nas, i do njih ćemo doći.

Što vlast poslužitelja zapravo znači?

Svaka partija Oriona koja je u tijeku postoji na jednom mjestu: na našem poslužitelju. Ploča na tvom telefonu je prozor, a ne partija. Kad povučeš žeton, aplikacija ga ne pomiče. Ona šalje kratku poruku koja kaže: ovo želim odigrati. Poslužitelj tu namjeru reproducira na vlastitoj ploči, vlastitim mehanizmom pravila, kockicama koje je bacio za taj potez. Dopušteni potezi guraju partiju naprijed i oba igrača dobiju istu novu poziciju. Nedopušteni potezi nikada se nisu dogodili.

To je jedan poslužitelj za sve. Aplikacija za iOS je izvorni SwiftUI, aplikacija za Android izvorni Jetpack Compose, a obje su prozori u isti backend i istu populaciju igrača. Drugo staklo, ista istina.

Zašto se u igrama koje vjeruju klijentu vara?

Zato što uređaj tvog protivnika pripada tvom protivniku. Sve što na njemu radi može se izmijeniti. Zakrpani klijent može slati poteze koji nikada nisu bili dopušteni. Uređivač memorije može na licu mjesta prepisati broj, a zaslon će laž vjerno prikazati. Ništa od toga nije egzotično. Alati su besplatni, dokumentirani i stariji od pametnih telefona.

Igra koja vjeruje klijentu traži od svakog igrača obećanje da neće zaviriti pod haubu. Neki zavire. Zato smo mišljenje klijenta učinili nevažnim. U Orionu aplikacija ima točno tri posla:

  • Crtati: ploču, žetone, kocku, sat.
  • Tražiti: tražiti od poslužitelja da odigra potez, ponuditi udvostručenje, predati se.
  • Primati: prikazati poziciju koju poslužitelj naziva stvarnom.

Bacanje kockica, prosuđivanje dopuštenosti i pomicanje makar jednog novčića nisu na tom popisu. Ništa što odlučuje ishod ne nastaje na uređaju.

Što se događa kad odigram potez?

Ti igraš.. Tvoja aplikacija šalje namjeru: ovaj žeton, ova polja. Ništa na tvom uređaju ne mijenja pravu ploču.

Poslužitelj ga reproducira.. Naš mehanizam pravila pokreće potez naspram poslužiteljeve ploče i poslužiteljevih kockica. Ako je dopušten, partija ide dalje. Ako nije, odbija se na izvoru, bez obzira na to koja ga je aplikacija poslala.

Obje strane dobivaju istu istinu.. Nova pozicija odlazi objema igračima. Ako ti veza padne, rok za ponovno spajanje na satu poteza čuva ti mjesto i vraćaš se na ploču onakvu kakva doista jest, a ne onakvu kakvu je tvoj telefon posljednji put pamtio.

Ulozi slijede isto pravilo. Kad partija s ulaznicom počne, poslužitelj drži obje ulaznice u pologu. Pot živi u jednoj knjizi, na poslužitelju, i ondje se namiruje kad partija završi. Nijednog klijenta nikad se ne pita koliko misli da je dobio. Novčići i dragulji su virtualni, bez vrijednosti u stvarnom svijetu i bez isplate, a mi tu knjigu ipak vodimo kao da u njoj stoji nešto dragocjeno, jer i stoji: tvoje povjerenje u poziciju.

Što priječi sam poslužitelj da vara?

To je pravo pitanje i većina se igara nada da ga nikada nećeš postaviti. Poslužitelj koji kockice baca u tajnosti mogao bi ljubazno bacati za onoga kome pogoduje, a ti to nikad ne bi vidio. Svako bacanje izgleda vjerojatno. Takve su kockice.

Zato smo tu moć oduzeli sami sebi. Prije nego što partija počne, poslužitelj stvara tajno sjeme i objavljuje SHA-256 obvezu na njega. Svako se bacanje potom iz tog sjemena izvodi pomoću HMAC-SHA256, jedno po jedno, redom. Kad partija završi, poslužitelj otkriva sjeme. Svatko može provjeriti da se sjeme podudara s obvezom danom prije prvog bacanja i da svako bacanje u partiji iz nje slijedi. U kriptografskom smislu tvoje su kockice bile utvrđene prije nego što je ijedan igrač dotaknuo žeton. Ne bismo mogli saviti dvanaesto bacanje bez kršenja obećanja koje smo objavili na nultom.

Ništa od toga ne moraš uzeti na našu riječ. Provjera na orion.arthea.ai/verify preračunava cijeli lanac u tvom pregledniku, pomoću Web Crypta, na tvom stroju, iz javnog zapisnika partije. Bez računa, bez instalacije. Vrata na orion.arthea.ai/go nose poveznice za App Store i Google Play i uvijek pokazuju što je upravo sada dostupno.