News

Czy tryktrak online może być ustawiony?

Może. Zamknięty serwer potrafi ustawić kości, a same wyniki tego nie dowiodą. Jak wygląda ustawianie i dlaczego commit-reveal czyni je wykrywalnym.

fairnessprovably fairdice

Może. Kości online rzucane są na serwerze, którego nie widzisz, i nic fizycznie nie powstrzymuje operatora przed zmianą liczby, zanim dotrze ona na twoją planszę. Same wyniki nigdy niczego nie dowiodą w żadną stronę, więc uczciwe pytanie nie brzmi, czy ustawianie jest możliwe. Brzmi ono: czy gra potrafi udowodnić, że do niego nie doszło.

Robimy grę w tryktraka, więc nie jesteśmy tu bezstronni. Właśnie dlatego chcemy odpowiedzieć na to porządnie, łącznie z niewygodnymi fragmentami.

Dlaczego na każdej stronie kości wydają się ustawione?

Bo zmienność w tryktraku jest bezlitosna, a ludzka pamięć stronnicza. Dwie kości układają się na trzydzieści sześć sposobów; serie nie są usterką, są gwarancją, i dziś wieczorem gdzieś uczciwy serwer wyrzuci cztery dublety z rzędu przeciwko komuś, kto zagrał każdy pionek poprawnie. Pamiętasz 5-5, które zbiło twój odsłonięty pionek. Nie pamiętasz cudownego rzutu, który uratował cię w zeszły wtorek. Porażki zostają, ratunki wyparowują, a po trzech złych partiach z rzędu kości robią się osobiste. Robią się osobiste także przy prawdziwej planszy w prawdziwej kawiarni. Zapytaj kogoś, kto od czterdziestu lat przesuwa drewniane pionki.

I tu jest pułapka. Ustawiona gra dawałaby dokładnie takie samo wrażenie. Serie nie dowodzą niczego w żadną stronę, więc jeśli twoim dowodem jest to, jak kości się czuły, nie odróżnisz uczciwego serwera od nieuczciwego. My też nie. To nie jest obrona kości online. To właśnie ich problem.

Czy strona naprawdę mogłaby ustawić swoje kości?

Technicznie tak, i nie byłoby to nawet trudne. Serwer widzi całą planszę przed rzutem. Operator, który chciałby oszukiwać, mógłby:

  • Przechylić kilka rzutów na sto w momentach, które ważą najwięcej: rzut, który trafia, wejście z bandy, które się nie udaje, dublet odwracający przegraną partię.
  • Sztucznie utrzymywać wyrównane mecze, żeby sesje trwały dłużej, a porażki wyglądały na o włos przegrane.
  • Po cichu faworyzować stronę, w której operator ma interes.
  • Robić to na tyle rzadko, żeby kości nadal przechodziły każdy test statystyczny, jaki gracz mógłby wykonać.

Nie twierdzimy, że robi to jakaś konkretna strona. Mówimy, że architektura na to pozwala. Zamknięty serwer to zamknięty pokój: operator rzuca na osobności, podaje liczbę i prosi, żebyś uwierzył. Zza drzwi uczciwi i nieuczciwi operatorzy wyglądają identycznie.

Czy certyfikowany generator nie dowodzi, że kości są uczciwe?

Przeczytaj, co ten certyfikat naprawdę obejmuje. Laboratorium testuje generator: algorytm na stanowisku, produkujący miliony liczb przechodzących kontrole statystyczne. To certyfikuje podzespół. Nie mówi nic o dostarczeniu, czyli o tym, czy liczba, która trafiła na twoją planszę, pochodziła z tamtego generatora, w tamtej chwili, niezmieniona po drodze. Legalizowana waga na zapleczu nie dowodzi, że twój chleb na niej zważono.

Certyfikacja jest też migawką. Działające serwery są nieustannie wdrażane na nowo, a ścieżka kodu między generatorem a twoją partią zmienia się jeszcze długo po tym, jak laboratorium poszło do domu. Certyfikowany generator odpowiada więc na pytanie, którego nikt naprawdę nie zadawał. Liczy się nie to, czy gdzieś w budynku istnieją dobre kości. Liczy się, czy twoja partia je dostała, przy każdym rzucie, dziś wieczorem.

Co właściwie zmienia commit-reveal?

Przenosi uczciwość z obietnicy na dowód. Zanim partia się zacznie, serwer losuje tajne ziarno i publikuje jego odcisk, skrót SHA-256 zwany zobowiązaniem. Każdy rzut w partii jest potem wyprowadzany z tego ziarna, jedno obliczenie HMAC-SHA256 na rzut, po kolei. Gdy partia się kończy, serwer ujawnia ziarno.

Teraz każdy może sprawdzić dwie rzeczy. Zahaszuj ujawnione ziarno: musi zgodzić się z zobowiązaniem opublikowanym przed pierwszym ruchem. Przelicz rzuty: muszą zgadzać się z każdą liczbą, która pojawiła się na planszy. Gdyby serwer zmienił choć jedną kość po zobaczeniu twojej pozycji, rachunek by się nie zgadzał. Ustawianie przestaje być podejrzeniem, którego nie da się sprawdzić, a staje się kłamstwem, które można złapać.

Kości zamknięte przed partią nie mogą na nią zareagować.

To jest sedno. Użyteczne ustawianie jest reaktywne: zobaczyć odsłonięty pionek, wyrzucić trafienie. Commit-reveal odbiera serwerowi oczy, bo cała sekwencja została ustalona przed ruchem otwierającym, a każda ingerencja po zobowiązaniu jest matematycznie wykrywalna. Czego nie robi, to nie czyni kości łaskawymi. Sekwencja była uczciwa, nie miłosierna. Nadal utkniesz na bandzie w najgorszym możliwym momencie, a teraz będziesz mógł udowodnić, że było to uczciwe.

Jak w praktyce zweryfikować partię?

Tak to zbudowaliśmy w Orionie. Każda partia rozegrana na naszych serwerach niesie zobowiązanie złożone przed pierwszym rzutem, serwer weryfikuje każdy ruch u źródła, a sprawdzenie zakończonej partii zajmuje około minuty:

Otwórz weryfikator. Wejdź na orion.arthea.ai/verify w dowolnej przeglądarce. Nic do instalowania, żadnego konta do zakładania.

Wpisz identyfikator partii. Każda serwerowa partia w Orionie go ma. Wklej go.

Niech przeglądarka policzy. Strona przelicza zobowiązanie i każdy rzut przy użyciu Web Crypto, lokalnie, w twojej przeglądarce. Nasze słowo nie bierze udziału w sprawdzeniu. Gdyby zmieniono choć jedną liczbę, przeliczenie by to powiedziało.

Weryfikator działa już dziś. Sama gra jest gotowa, a drzwi pod orion.arthea.ai/go niosą odnośniki do App Store i Google Play i zawsze pokazują, co jest dostępne w tej chwili. Tak czy inaczej uczciwa odpowiedź pozostaje. Tak, tryktrak online może być ustawiony. Lekarstwem nie jest ładniejsza obietnica. Są nim kości, które pokazują swoje obliczenia.