fairnessprovably fairdice
Meg. Az online kockákat olyan szerveren dobják, amit nem látsz, és semmi sem akadályozza fizikailag az üzemeltetőt abban, hogy megváltoztasson egy számot, mielőtt az a te tábládra érne. Önmagában az eredmény soha semmit nem bizonyít egyik irányba sem, így a becsületes kérdés nem az, hogy lehetséges-e a bunda. Hanem az, hogy egy játék be tudja-e bizonyítani, hogy nem történt meg.
Mi ostáblajátékot készítünk, tehát itt nem vagyunk pártatlanok. Éppen ezért akarunk erre rendesen válaszolni, a kényelmetlen részekkel együtt.
Miért tűnik minden oldalon bundásnak a kocka?
Mert az ostábla szórása kegyetlen, az emberi emlékezet pedig elfogult. Két kocka harminchatféleképpen eshet; a sorozatok nem hibák, hanem garanciák, és ma este valahol egy becsületes szerver négy dupla egymás utánit dob valakivel szemben, aki minden bábut jól lépett. Emlékszel az 5-5-re, ami leütötte a fedetlen bábudat. Nem emlékszel a csodadobásra, ami múlt kedden megmentett. A vereségek megragadnak, a menekülések elpárolognak, és három rossz parti után a kocka személyes üggyé válik. Igazi táblán, igazi kávéházban is személyes üggyé válik. Kérdezz meg bárkit, aki negyven éve tologat fabábukat.
És itt a csapda. Egy bundás játék pontosan ugyanígy érződne. A sorozatok semmit nem bizonyítanak egyik irányba sem, tehát ha a bizonyítékod az, ahogy a kocka érződött, nem tudod megkülönböztetni a becsületes szervert a becstelentől. Mi sem tudjuk. Ez nem az online kocka védelme. Éppen ez a problémája.
Tényleg alakíthatná egy oldal a kockáit?
Technikailag igen, és még csak nem is lenne nehéz. A szerver dobás előtt látja az egész táblát. Egy csalni akaró üzemeltető megtehetné, hogy:
- Száz dobásból néhányat megbillent a legfontosabb pillanatokban: a dobást, ami üt, a sávról való belépést, ami nem sikerül, a duplát, ami visszafordít egy elveszett partit.
- Mesterségesen szorosan tartja a meccseket, hogy a szakaszok tovább tartsanak és a vereségek épphogy elvesztettnek tűnjenek.
- Csendben azt az oldalt segíti, amelyikben az üzemeltetőnek érdeke van.
- Elég ritkán teszi ahhoz, hogy a kocka továbbra is átmenjen minden statisztikai próbán, amit egy játékos valaha lefuttathat.
Nem állítjuk, hogy bármelyik konkrét oldal ezt tenné. Azt mondjuk, hogy az architektúra megengedi. A zárt szerver bezárt szoba: az üzemeltető egyedül dob, bemond egy számot, és arra kér, hogy hidd el. Az ajtón kívülről a becsületes és a becstelen üzemeltető pontosan egyformán néz ki.
Nem bizonyítja a tanúsított generátor, hogy tiszta a kocka?
Olvasd el, mit fed le valójában az a tanúsítvány. A labor egy generátort tesztel: egy algoritmust a próbapadon, amely több millió számot állít elő, és ezek átmennek a statisztikai ellenőrzéseken. Ez az alkatrészt tanúsítja. A kézbesítésről semmit nem mond, vagyis arról, hogy a tábládra érkezett szám abból a generátorból jött-e, abban a pillanatban, és útközben változatlanul. A raktárban hitelesített mérleg nem bizonyítja, hogy a te kenyeredet azon mérték.
A tanúsítás ráadásul pillanatfelvétel. A futó szervereket folyamatosan újratelepítik, és a generátor meg a te partid közötti kódút még jóval azután is változik, hogy a labor hazament. A tanúsított generátor tehát olyan kérdésre válaszol, amit senki nem tett fel igazán. Nem az számít, van-e valahol az épületben jó kocka. Az számít, hogy a te partid megkapta-e, minden egyes dobásnál, ma este.
Mit változtat valójában a commit-reveal?
Az ígéretből bizonyítékká teszi a tisztességet. Mielőtt a parti elkezdődne, a szerver húz egy titkos magot, és közzéteszi annak ujjlenyomatát, egy SHA-256 hasítóértéket, amit elköteleződésnek hívunk. A parti minden dobása ezután ebből a magból származik, dobásonként egy HMAC-SHA256 számítással, sorrendben. Amikor a parti véget ér, a szerver felfedi a magot.
Most már bárki két dolgot ellenőrizhet. Hasítsd a felfedett magot: egyeznie kell az első lépés előtt közzétett elköteleződéssel. Számold újra a dobásokat: egyezniük kell minden számmal, ami a táblán megjelent. Ha a szerver a te állásod megtekintése után akár egyetlen kockát is megváltoztatott volna, a számítás nem jönne ki. A bunda megszűnik olyan gyanú lenni, amit nem lehet próbára tenni, és olyan hazugsággá válik, amin rajta lehet kapni.
A parti előtt lezárt kocka nem tud reagálni a partira.
Ez a lényeg. A hasznos bunda reaktív: meglátni a fedetlen bábut, és kidobni az ütő számot. A commit-reveal elveszi a szerver szemét, mert a teljes sorozat a nyitólépés előtt rögzült, és az elköteleződés utáni bármilyen beavatkozás matematikailag kimutatható. Amit nem tesz: nem teszi kedvessé a kockát. A sorozat becsületes volt, nem irgalmas. Továbbra is a sávon fogsz ülni a lehető legrosszabb pillanatban, és most már be tudod bizonyítani, hogy ez tisztességes volt.
A gyakorlatban hogyan ellenőrzöl egy partit?
Az Orionban így építettük meg. A szervereinken lejátszott minden parti visel egy elköteleződést, amit az első dobás előtt tettünk, a szerver a forrásnál hitelesít minden lépést, egy befejezett parti ellenőrzése pedig körülbelül egy percbe telik:
Nyisd meg az ellenőrzőt. Menj az orion.arthea.ai/verify címre bármelyik böngészőben. Nincs mit telepíteni, nincs fiók, amit létre kellene hozni.
Írd be a parti azonosítóját. Az Orion minden szerveres partijának van ilyen. Illeszd be.
Hagyd, hogy a böngésző számoljon. Az oldal a Web Crypto segítségével, helyben, a te böngésződben számolja újra az elköteleződést és minden dobást. A mi szavunk nem része az ellenőrzésnek. Ha akár egyetlen számot is megváltoztattak volna, az újraszámolás megmondaná.
Az ellenőrző ma már működik. Maga a játék elkészült, az orion.arthea.ai/go ajtó pedig viszi az App Store és a Google Play hivatkozásait, és mindig azt mutatja, ami épp most elérhető. Így vagy úgy, a becsületes válasz marad. Igen, az online ostáblát meg lehet bundázni. A gyógymód nem szebb ígéret. Olyan kocka, amely megmutatja a számítását.