RustGamblingReviews

Poradniki

Jak działa provably fair na stronach Rust i jak sprawdzić swoje rzuty

Hasze server seed, client seedy, nonce i HMAC-SHA256 prostymi słowami, z przykładem do odtworzenia i rutyną krok po kroku do sprawdzania dowolnego rzutu na stronie ze skinami do Rusta.

Dwóch graczy Rusta w goglach noktowizyjnych celujących z karabinów z laserowymi celownikami w ciemności

Wszystkie dziesięć stron z naszego rankingu deklaruje, że jego gry są provably fair. To określenie ma precyzyjne znaczenie, a stojącą za nim kontrolę możesz wykonać samodzielnie za pomocą darmowego narzędzia do haszowania lub kilku linijek kodu. Bardzo niewielu graczy kiedykolwiek to robi. Ten poradnik wyjaśnia, co system dowodzi, czego nie obejmuje i jak zweryfikować rzut od początku do końca.

W skrócie: zanim postawisz zakład, strona zamyka tajną wartość i pokazuje jej odcisk. Dodajesz własne dane wejściowe. Po zakładach strona ujawnia sekret, a ty możesz potwierdzić, że odcisk się zgadza i że każdy wynik wynika z danych wejściowych. Jeśli liczby się zgadzają, strona nie mogła zmienić wyniku po zobaczeniu twojego zakładu.

Problem, który rozwiązuje provably fair

Na stronie ze skinami o każdym wyniku decyduje serwer. Gdy otwierasz skrzynkę, rzucasz monetą albo czekasz na mnożnik crash, oglądasz animację liczby, która powstała na maszynie, której nie możesz sprawdzić. Bez jakiejś formy dowodu musisz ufać, że operator po cichu nie przesuwa rzutów przeciwko tobie, gdy zakład jest duży.

Licencjonowane kasyna online zwykle odpowiadają na to regulatorami i audytami generatorów liczb losowych przez strony trzecie. Większość stron ze skinami opiera się zamiast tego na podejściu kryptograficznym. Ma ono jedną dużą zaletę dla graczy: nie musisz ufać audytorowi, bo możesz powtórzyć obliczenie na własnym komputerze.

Ten pomysł nazywa się schematem zobowiązania. Wyobraź sobie, że strona zapisuje sekret na kartce, zamyka ją w kopercie i wręcza ci kopertę przed grą. Nie może później podmienić kartki bez twojej wiedzy, a ty nie możesz przeczytać jej wcześniej.

Trzy dane wejściowe: server seed, client seed i nonce

Prawie każdy system provably fair na stronach Rust używa tych samych składników. Etykiety trochę się różnią między stronami, ale role pozostają te same.

Server seed

Długi losowy ciąg generowany przez stronę. Pozostaje tajny podczas gry, bo każdy, kto go zna, mógłby przewidzieć każdy wynik. Zamiast niego widzisz jego hash, zwykle wytworzony za pomocą SHA-256. Hash to jednokierunkowy odcisk. To samo wejście zawsze daje to samo 64-znakowe wyjście, zmiana jednego znaku wejścia całkowicie zmienia wyjście, a nie ma praktycznego sposobu, by od hasha cofnąć się do seeda.

Client seed

Ciąg pochodzący z twojej strony. Strony generują dla ciebie domyślny, a większość pozwala go edytować w panelu uczciwości lub ustawień. Jego zadaniem jest powstrzymać stronę przed wybraniem server seeda, który jest zły akurat dla ciebie. Strona zobowiązała się do swojego seeda, zanim wiedziała, co wpiszesz, więc nie miała jak dostroić jednego do drugiego.

Nonce

Licznik, który zaczyna od 0 lub 1 i rośnie o jeden z każdym zakładem postawionym na tej samej parze seedów. Pozwala używać jednego server seeda i jednego client seeda do setek zakładów i za każdym razem dostawać nowy wynik.

Gdy chcesz sprawdzić swoje wyniki, prosisz stronę o rotację seeda. Ujawnia stary server seed jawnym tekstem, pokazuje hash nowego i zeruje nonce. Wszystko, co zostało zagrane na starym seedzie, można teraz zweryfikować.

Jak dane wejściowe stają się wynikiem

Najpopularniejszy przepis to HMAC-SHA256. HMAC to standardowy sposób łączenia tajnego klucza z wiadomością w celu uzyskania hasha. Na większości stron Rust server seed jest kluczem, a wiadomością jest połączony client seed i nonce, często dwukropkiem, jak clientseed:nonce. Niektóre strony dodają numer rundy lub ID gry, więc zawsze czytaj dokładny wzór na stronie uczciwości serwisu.

Wyjściem jest 64-znakowy ciąg szesnastkowy. Strona zamienia potem część tego ciągu na liczbę między 0 a 1. Typowa metoda bierze pierwsze osiem znaków hex (32 bity), zamienia je na liczbę całkowitą i dzieli przez 4 294 967 296, czyli 2 do potęgi 32. Ten ułamek jest następnie mapowany na grę:

  • Dice i upgrader: pomnóż przez 100, by dostać rzut od 0,00 do 99,99, a potem porównaj go z celem.
  • Ruletka: pomnóż przez liczbę pól na kole i zaokrąglij w dół, by wybrać pole.
  • Skrzynki: pomnóż przez łączną liczbę losów w skrzynce, więc skin posiadający 1% losów wygrywa w 1% rzutów.
  • Crash: wprowadź liczbę do wzoru, który zamienia ją w mnożnik, z wbudowaną przewagą kasyna. Nasz poradnik o strategii w crash omawia ten wzór i to, co oznacza dla celów wypłaty.

Przykład do odtworzenia

Poniższe seedy są wymyślone na potrzeby przykładu, więc możesz sprawdzić nasz rachunek w dowolnym kalkulatorze HMAC-SHA256.

  1. Server seed: example-server-seed-01. Jego hash SHA-256 zaczyna się od a5275da7ccca3f73. Ten hash strona pokazałaby ci przed grą.
  2. Client seed: my-own-client-seed. Nonce: 1. Wiadomość to zatem my-own-client-seed:1.
  3. HMAC-SHA256 z server seedem jako kluczem i tą wiadomością jako wejściem daje wynik zaczynający się od 4cdcf221.
  4. Hex 4cdcf221 to w systemie dziesiętnym 1 289 548 321. Podzielone przez 4 294 967 296 daje około 0,30025.
  5. Na skali dice od 0 do 100 to rzut 30,02. Na kole ruletki z 15 polami 0,30025 razy 15 to około 4,5, co zaokrągla się w dół do pola 4 (licząc pierwsze pole jako 0).

Uruchom te same seedy z nonce 2, a dostaniesz zupełnie inny hash, zaczynający się od 6486ccbd, co daje około 0,3927. Nic w pierwszym rzucie nie mówi niczego o drugim. Ta niezależność jest sednem sprawy: w historii zakładów nie ma wzorca do odczytania, bo każdy wynik to świeży hash.

Jak samodzielnie zweryfikować rzut, krok po kroku

Pierwsza pełna kontrola trwa chwilę. Potem to kilka minut kopiowania i wklejania. Zrób ją najpierw na małym saldzie, żeby proces był znany, zanim wynik naprawdę zacznie mieć dla ciebie znaczenie.

  1. Otwórz panel uczciwości przed zakładem. Zwykle jest linkowany z ekranu gry, stopki albo ustawień profilu. Zapisz zahaszowany server seed gdzieś poza stroną, na przykład w notatce w telefonie lub na zrzucie ekranu.
  2. Ustaw własny client seed. Zamień domyślny na coś, co wpiszesz samodzielnie. Wystukaj cokolwiek na klawiaturze. Nie musi być łatwy do zapamiętania.
  3. Graj i notuj zakłady, na których ci zależy. Zapisz nonce widoczny przy każdym zakładzie albo znajdź go potem w historii zakładów.
  4. Zrotuj seed. Strona ujawnia stary server seed. Skopiuj go.
  5. Sprawdź zobowiązanie. Przepuść ujawniony server seed przez dowolne narzędzie SHA-256. Wynik musi zgadzać się z haszem zapisanym w kroku 1, znak w znak.
  6. Przelicz rzut ponownie. Użyj HMAC-SHA256 z ujawnionym server seedem, swoim client seedem i nonce, a potem zastosuj przeliczenie publikowane przez stronę. W PHP to pojedyncze wywołanie hash_hmac, a moduł hmac w Pythonie robi to samo w kilku linijkach.
  7. Porównaj. Obliczona liczba musi dawać wynik zapisany w twojej historii.

Większość stron oferuje też wbudowany weryfikator, do którego wklejasz seedy. Jest wygodny, ale działa na własnym kodzie operatora. Dla kontroli, która w ogóle nie zależy od strony, użyj niezależnego narzędzia albo własnego skryptu przynajmniej raz.

Dlaczego krok 2 ma znaczenie: jeśli nigdy nie zmieniasz domyślnego client seeda, obydwa seedy wygenerowała strona. Teoretycznie mogła szukać server seeda, który daje słabą serię właśnie przy tym client seedzie. Wybranie własnego client seeda po tym, jak hash server seeda jest już na ekranie, zamyka tę lukę.

Gry wspólne działają trochę inaczej

Tryby dla jednego gracza, takie jak dice, upgrader i solo otwieranie skrzynek, mogą działać na twojej osobistej parze seedów. Gry, w których wielu graczy dzieli jeden wynik, takie jak jackpot, coinflip, case battle, rundy ruletki i crash, nie mogą pozwolić, by client seed jednego gracza decydował o wyniku wszystkich. Strony radzą sobie z tym na kilka popularnych sposobów.

  • Łańcuch haszy. Częsty w crash. Strona generuje z góry długi łańcuch haszy, w którym hash każdej rundy to SHA-256 hasha następnej rundy. Publikuje ostatni hash łańcucha przed rozegraniem pierwszej rundy, a ty możesz sprawdzić, że każda ujawniona runda daje po haszowaniu hash poprzedniej. Każdy wynik w łańcuchu ustalono, zanim ktokolwiek postawił zakład.
  • Publiczny seed spoza strony. Strona zobowiązuje się do swojego server seeda, a potem domieszkowuje wartość, której nikt nie mógł znać z góry, na przykład hash przyszłego bloku w publicznym blockchainie. Ponieważ ten blok nie istniał, gdy strona składała zobowiązanie, nie mogła dostroić do niego swojego seeda.
  • Zobowiązania na rundę. W jackpocie i coinflipie zahaszowany seed rundy pojawia się, gdy runda się otwiera, a jawny seed i zwycięski los są pokazywane, gdy się kończy.

Idea weryfikacji jest w każdym przypadku taka sama. Znajdź zobowiązanie, które było publiczne przed rundą, potwierdź, że ujawniona wartość mu odpowiada, a potem przelicz wynik. O tym, jak zwycięski los staje się zwycięzcą we wspólnej puli, przeczytasz w naszym poradniku o szansach w coinflipie i jackpocie. Case battle łączą oba podejścia, co omawiamy w wyjaśnieniu case battle.

Czego provably fair nie dowodzi

Zweryfikowany rzut dowodzi jednej wąskiej rzeczy: wynik pochodził z danych, do których strona zobowiązała się przed twoim zakładem. To przydatne, ale gracze często wyczytują z odznaki znacznie więcej, niż ona obsługuje.

  • Nic nie mówi o przewadze kasyna. Gra crash z dużą przewagą może być w pełni provably fair. Przewaga siedzi w opublikowanym wzorze, który zamienia liczbę losową w mnożnik lub szansę wygranej. Uczciwie znaczy, że strona trzymała się własnych zasad, a te zasady nadal faworyzują stronę z czasem.
  • Nie sprawdza cen. Jeśli skrzynka wycenia skina znacznie powyżej tego, za ile sprzeda się na Rynku Społeczności Steam, rzut może być uczciwy, a skrzynka nadal słabo wartościowa. Nasz poradnik o upgraderze pokazuje, jak wycena przedmiotów po cichu przesuwa realne szanse.
  • Nie obejmuje wypłat. Strona może mieć bezbłędne seedy i nadal opóźniać wypłaty, zamrażać konta albo przepisywać regulamin. Dlatego uczciwość to tylko jeden z elementów w tym, jak oceniamy strony, obok szybkości wypłat i zaufania.
  • Działa tylko wtedy, gdy ktoś sprawdza. Zobowiązanie, którego nikt nie porównuje, to tylko ciąg znaków na stronie.

Czerwone flagi na stronie uczciwości

Weryfikacja seedów to rutynowy krok, gdy testujemy stronę. Oto rzeczy, które budzą nasze podejrzenia, mniej więcej od łagodnych do poważnych.

Co widziszCo to oznaczaCo zrobić
Brak opcji zmiany client seedaStrona kontroluje wszystkie dane wejściowe twoich osobistych rzutówTraktuj tryby dla jednego gracza z większą ostrożnością
Przycisk weryfikatora, ale brak opublikowanego wzoruWyniki możesz sprawdzić tylko kodem stronyZapytaj wsparcie o dokładny wzór, zanim wpłacisz dużo
Hash server seeda pojawia się dopiero po zakładzieNie ma prawdziwego zobowiązaniaNie traktuj gry jako provably fair
Stare server seedy nigdy nie mogą zostać ujawnioneNic nie da się zweryfikowaćJak wyżej
Ujawniony seed nie daje hasha zapisanego zobowiązaniaSeed zmieniono albo strona jest zepsutaPrzestań grać, zrób zrzuty wszystkiego i skontaktuj się ze wsparciem

Jeśli kiedykolwiek trafisz na ostatni wiersz, zachowaj dowody: zapisany hash, ujawniony seed, ID zakładów i czas każdego zakładu. Pojedyncza niezgodność może być błędem wyświetlania, ale to dokładnie ten rodzaj wiarygodnego zgłoszenia od gracza, który skłania nas do ponownego sprawdzenia strony.

Rozsądna rutyna dla zwykłych graczy

Nie musisz weryfikować każdego zakładu. Lekka rutyna wychwytuje większość problemów, nie zamieniając sesji w pracę domową.

  • Ustaw świeży client seed, ilekroć zaczynasz grać na nowej stronie.
  • Zrób zrzut zahaszowanego server seeda przed grą.
  • Zrotuj po sesji i sprawdź zobowiązanie, czyli jedno obliczenie SHA-256.
  • Przelicz ponownie jeden lub dwa wyniki, które miały największe znaczenie, jak duża strata w upgraderze albo bitwa, której wynik wydawał się pewny.
  • Co jakiś czas powtórz pełną kontrolę niezależnym narzędziem zamiast weryfikatorem strony.

Czysta weryfikacja oznacza, że straty, które ponosisz, to te, które przewiduje opublikowana matematyka, i nic ponadto. Przewaga nadal działa na każdym rzucie. Praktyczny następny krok to zdecydować z góry, ile z tych oczekiwanych strat chcesz zapłacić za rozrywkę; nasza strona o odpowiedzialnej grze omawia proste limity i narzędzia pomagające się ich trzymać.

  • #provably fair
  • #szanse
  • #bezpieczeństwo
  • #poradniki

Najczęściej zadawane pytania

Czy strona provably fair nadal może oszukiwać?

Nie może zmienić zobowiązanego wyniku, żeby kontrola hasha nie zawiodła. Może jednak utrzymywać wysoką przewagę kasyna, zawyżać wyceny przedmiotów w skrzynkach lub opóźniać wypłaty, bo provably fair obejmuje tylko sposób powstawania rzutu.

Czy muszę zmieniać client seed?

Nie, ale warto. Client seed wybrany po pokazaniu hasha server seeda oznacza, że strona nie mogła wybrać swojego seeda z myślą o twoim wkładzie.

Dlaczego strona nie pokaże po prostu server seeda przed grą?

Każdy, kto zna i server seed, i client seed, może obliczyć wszystkie nadchodzące wyniki. Hash pozwala stronie zobowiązać się do seeda bez zdradzania przyszłych rzutów.

Jakiego narzędzia mogę użyć do weryfikacji rzutów?

Działa każdy kalkulator SHA-256 i HMAC-SHA256, w tym darmowe narzędzia online i wbudowane funkcje PHP, Pythona czy JavaScriptu. Weryfikatora strony używaj dla wygody, a niezależnego narzędzia do kontroli, która się liczy.

Czy SHA-256 jest wystarczająco bezpieczny?

Tak. To powszechnie używany standard, stosowany też w kopaniu Bitcoina, i nie ma znanego praktycznego sposobu, by go odwrócić albo znaleźć drugi seed dający ten sam hash.

Czytaj dalej

Powiązane poradniki

Wszystkie poradniki