Problem ze zwykłym RNG
W typowym slocie online generator liczb losowych (RNG) działa na serwerze operatora. Gracz widzi tylko wynik. Nawet uczciwy operator nie może udowodnić konkretnemu graczowi, że ten konkretny spin nie był zmanipulowany — trzeba polegać na certyfikatach i reputacji.
Provably-fair zamyka tę lukę: operator „zabezpiecza” swój sekret z góry, a po grze go ujawnia, więc każdy może niezależnie przeliczyć wynik.
schemat commit-reveal
Przed serią spinów serwer generuje serverSeed i publikuje tylko jego hash — SHA-256(serverSeed). To "zobowiązanie": serwer zobowiązał się, ale sam seed nie jest jeszcze ujawniony, więc nie można go zmienić wstecznie.
Gracz dodaje własny clientSeed — można go zmienić w dowolnym momencie. Każdy spin jest numerowany licznikiem nonce. Wynik jest obliczany deterministycznie z trzech wartości: serverSeed + clientSeed + nonce.
Gdy serverSeed się zmienia (rotacja), stary serverSeed zostaje ujawniony — "reveal". Gracz weryfikuje, że SHA-256(ujawniony seed) zgadza się z wcześniej opublikowanym hashem, i przelicza wszystkie swoje wcześniejsze spiny.
Dlaczego właśnie HMAC-SHA256
Z trzech seedów generowany jest strumień losowych bajtów przez HMAC-SHA256 — kryptograficznie bezpieczną funkcję: znając wynik, nie da się odwrotnie obliczyć serverSeed, a zmiana choćby jednego bitu seeda całkowicie zmienia rezultat.
Ważnym szczegółem jest brak „obciążenia modulo”. Jeśli po prostu weźmiesz resztę z dzielenia liczby losowej przez rozmiar bębna, częste symbole zyskają nieco większą wagę. Poprawna implementacja wykorzystuje próbkowanie z odrzucaniem: wartości z „nierównego ogona” zakresu są odrzucane, a rozkład pozostaje ściśle jednostajny.
Jak zweryfikować swój spin
W naszym silniku każdy spin ma panel uczciwości: nonce, clientSeed, hash(serverSeed) przed grą i ujawniony serverSeed po rundzie. Endpoint /api/fair/verify niezależnie przelicza wynik z tych wartości — otrzymujesz ten sam rezultat, który widziałeś w grze.
To właśnie znaczy „provably-fair”: nie bierzesz tego na wiarę — weryfikujesz. Ten sam mechanizm działa w trybie Megaways i w motywach kaskadowych.