fairnessprovably fairdice
Da, može. Kockice se na mreži bacaju na poslužitelju koji ne vidiš i ništa fizički ne priječi operatera da promijeni broj prije nego što stigne na tvoju ploču. Rezultati sami nikada neće ništa dokazati ni u jednom smjeru, pa pošteno pitanje nije je li namještanje moguće. Pitanje je može li neka igra dokazati da ga nije bilo.
I sami radimo igru backgammona, pa ovdje nismo neutralni. Upravo zato želimo odgovoriti kako treba, uključujući i neugodne dijelove.
Zašto kockice na svakoj stranici djeluju namješteno?
Zato što je varijanca u backgammonu nemilosrdna, a ljudsko pamćenje nakrivljeno. Dvije kockice mogu pasti na trideset šest načina; nizovi nisu kvar, oni su jamstvo, i negdje večeras pošten poslužitelj izbacit će četiri dvostruka zaredom protiv nekoga tko je svaki žeton odigrao ispravno. Pamtiš onaj 5-5 koji ti je pogodio usamljeni žeton. Ne pamtiš čudesno bacanje koje te spasilo prošli utorak. Porazi ostaju, spašavanja isparavaju, a nakon tri loše partije zaredom kockice postaju osobne. Postaju osobne i na pravoj ploči u pravom kafiću. Pitaj bilo koga tko četrdeset godina gura drvene žetone.
I tu je zamka. Namještena igra osjećala bi se posve jednako. Nizovi ne dokazuju ništa ni u jednom smjeru, pa ako je tvoj dokaz to kako su ti se kockice činile, ne možeš razlikovati pošten poslužitelj od nepoštenog. Ne možemo ni mi. To nije obrana kockica na mreži. To je upravo njihov problem.
Bi li neka stranica doista mogla savijati svoje kockice?
Tehnički da, i to ne bi bilo ni teško. Poslužitelj vidi cijelu ploču prije nego što baci. Operater koji bi htio varati mogao bi:
- Nagnuti tek nekoliko bacanja od stotinu u trenucima koji najviše teže: bacanje koje pogađa, ulazak s bara koji promašuje, dvostruki koji preokreće izgubljenu partiju.
- Držati mečeve umjetno tijesnima, pa da sesije traju dulje, a porazi djeluju kao gotovo pobjede.
- Tiho pogodovati onoj strani koja operateru odgovara.
- Činiti to dovoljno rijetko da kockice i dalje prođu svaki statistički test koji igrač ikada može pokrenuti.
Ne tvrdimo da to čini bilo koja određena stranica. Kažemo da arhitektura to dopušta. Zatvoreni poslužitelj je zaključana soba: operater baca sam, objavi broj i traži da mu vjeruješ. S vanjske strane vrata pošteni i nepošteni operateri izgledaju jednako.
Ne dokazuje li certificirani generator da su kockice poštene?
Pročitaj što certifikat zapravo pokriva. Laboratorij ispituje generator: algoritam na stolu koji proizvodi milijune brojeva što prolaze statističke provjere. On certificira komponentu. Ne govori ništa o isporuci, to jest o tome je li broj koji je stigao na tvoju ploču došao iz tog generatora, u tom trenutku, neizmijenjen usput. Baždarena vaga u skladištu ne dokazuje da je tvoj kruh na njoj vagan.
Osim toga, certifikacija je snimka trenutka. Produkcijski poslužitelji neprestano se ponovno postavljaju, a put koda između generatora i tvoje partije nastavlja se mijenjati dugo nakon što je laboratorij otišao kući. Certificirani generator stoga odgovara na pitanje koje zapravo nitko nije postavio. Nije važno postoje li negdje u zgradi dobre kockice. Važno je je li ih tvoja partija dobila, na svakom bacanju, večeras.
Što commit-reveal doista mijenja?
Premješta poštenje iz obećanja u dokaz. Prije nego što partija počne, poslužitelj izvuče tajno sjeme i objavi njegov otisak, SHA-256 sažetak koji se zove obveza. Svako bacanje u partiji potom se izvodi iz tog sjemena, jedan HMAC-SHA256 izračun po bacanju, redom. Kad partija završi, poslužitelj otkriva sjeme.
Sada svatko može provjeriti dvije stvari. Sažmi otkriveno sjeme: mora se podudarati s obvezom objavljenom prije prvog poteza. Preračunaj bacanja: moraju se podudarati sa svakim brojem koji se pojavio na ploči. Da je poslužitelj promijenio makar jednu kockicu nakon što je vidio tvoju poziciju, račun se ne bi slagao. Namještanje prestaje biti sumnja koju ne možeš iskušati i postaje laž koju možeš uhvatiti na djelu.
Kockice zaključane prije partije ne mogu na nju reagirati.
To je jezgra. Korisna vrsta namještanja je reaktivna: vidi usamljeni žeton, baci pogodak. Commit-reveal oduzima poslužitelju oči, jer je cijeli niz bio utvrđen prije uvodnog poteza, a svaki zahvat nakon obveze matematički je uočljiv. Ono što ne čini jest da kockice postanu ljubazne. Niz je bio pošten, a ne milosrdan. I dalje ćeš završiti na baru u najgorem mogućem trenutku, a sada ćeš moći dokazati da je to bilo pošteno.
Kako se partija provjerava u praksi?
Ovako smo to izgradili u Orionu. Svaka partija odigrana na našim poslužiteljima nosi obvezu danu prije prvog bacanja, poslužitelj provjerava svaki potez na izvoru, a provjera završene partije traje otprilike minutu:
Otvori provjeru. Idi na orion.arthea.ai/verify u bilo kojem pregledniku. Ništa se ne instalira, nikakav račun ne treba otvarati.
Upiši id partije. Svaka poslužiteljska partija u Orionu ima ga. Zalijepi ga.
Pusti preglednik da računa. Stranica preračunava obvezu i svako bacanje pomoću Web Crypta, lokalno, u tvome pregledniku. Naša riječ nije dio te provjere. Da je i jedan broj bio promijenjen, preračun bi to rekao.
Provjera radi već danas. Sama igra je gotova, a vrata na orion.arthea.ai/go nose poveznice za App Store i Google Play i uvijek pokazuju što je upravo sada dostupno. Kako god, pošten odgovor ostaje. Da, backgammon na mreži može biti namješten. Lijek nije ljepše obećanje. Lijek su kockice koje pokazuju svoj račun.