Sprawdź wynik gry Crash: algorytm, bezpieczeństwo

1) Cel weryfikacji: co dokładnie potwierdzasz

Niezmienność: operator nie mógł zmienić wyniku po zakładzie (ze względu na popełnienie hash nasion serwera).
Odtwarzalność: po wejściu otrzymujesz ten sam mnożnik, jaki pokazała gra.
Integralność procedury: format wiadomości, przyrostek 'nonce', reguła zaokrąglania i „krawędź domu” są ściśle stosowane zgodnie ze specyfikacją.

2) Dane, bez których weryfikacja jest niemożliwa

1. Server Seed Hash (commit) - opublikowane przed użyciem odpowiedniego 'Seed Server'.
2. Nasiona serwera (ujawnione później/na koniec okresu).
3. Nasiona klienta (Twoje ziarno; sam ją ustawiasz lub platforma generuje).
4. Nonce (licznik zakładów w ramach bieżącego 'Seed serwera').
5. Algorytm hash (zwykle 'HMAC-SHA256' lub 'SHA-256').
6. Format wiadomości (przykład: ': '), dokładne delimitery/case/encoding.
7. Wzór mapowania skrótu → mnożnik (i reguła zaokrąglania/minimalna).

💡Cała specyfikacja powinna znajdować się w sekcji Fair/Fairly Fair operatora. Jeśli czegoś tam nie ma, jest to czerwona flaga (patrz § 10).

3) Algorytm weryfikacji (7 kroków)

1. Porównaj commit: policz 'SHA-256 (ServerSeed)' i porównaj z opublikowanym 'ServerNa Hash'.
2. Zbierz wiadomość: ściśle w formacie platformy (na przykład 'msg = ClientSeed +': '+ Nonce').
3. Policz okrągły hash:
  • ра „HMAC-SHA256”: „RoundHash = HMAC_SHA256 (key = ServerSeed, msg = message)”;
kiedy „SHA-256”: „RoundHash = SHA256 (komunikat ServerSeed)” lub zgodnie ze specyfikacją.
4. Losowość ekstraktu: weź pierwsze 'k' bity (często 52) → integer 'r', następnie'u = r/2 ^ k '.
5. Zastosuj wzór mapowania: konwertuj'u 'na mnożnik (krawędź domu/specjalne przypadki są brane pod uwagę zgodnie z dokumentacją gry).
6. Runda zgodnie z zasadami gry (na przykład do 2 znaków, co najmniej 1. 00 × itd.).
7. Porównaj z rundą w historii. Zbieg okoliczności = poprawna szczerość.

4) Pseudokoda (może być dostosowany do Pythona/JS)

„” python
Wstaw tutaj dokładną formułę mapowania z platformy zamiast stub_mapping ()

import hmac, hashlib, matematyka

def round_hash (server_seed: bajty, client_seed: str, nonce: int) -> bajty:
  • komunikat = f „{client _ seed}: {nonce}”. format kodu („utf-8”) patrz specyfikacja
  • powrót hmac. nowy (server_seed, wiadomość, hashlib. sha256). trawić () lub hashlib. sha256 (...)

def take_u_from_hash (h: bajty, k_bits=52) -> float:
  • Bierzemy k najważniejsze bity jako całość r
  • r = int. from_bytes (h, „duże”)>> (256 - k_bits)
  • zwrot r/( 1 <

def stub_mapping (u: float) -> float:
  • STUB! Zastąpić wzorem z dokumentacji gry
  • Na przykład czasami stosuje się transformację formy: crash = floor ((const/( r + 1)) 100 )/100
  • i/lub „krawędź domu” jako rzadki wymuszony 1. 00 ×. Nie używać tego stubu w prawdziwym czeku.
  • powrót max (1. 00, runda (1. 0/max (1e-12, 1. 0 - u), 2))

def verify (server_seed_hex, server_seed_hash_hex, client_seed, nonce, shown_multiplier):
  • server_seed = bajty. fromhex (server_seed_hex)
  • 1) Popełnić
  • assert hashlib. sha256 (server_seed). heksdigest () = = server_seed_hash_hex. niżej ()
  • 2-3) Okrągły hash
  • h = round_hash (server_seed, client_seed, nonce)
  • 4) u
  • u = take_u_from_hash (h)
  • 5-6) odwzorowanie + zaokrąglanie
  • calc_mult = stub_mapping (u)
  • 7) porównanie
  • abs zwrotny (calc_mult - shown_multiplier) <1e-9
  • ```

Ważne: zamiast „stub _ mapping” zastosuj dokładną formułę z sekcji Sprawiedliwość platformy; w przeciwnym razie kontrola będzie nieprawidłowa.

5) Przypadki szczególne i pułapki

Dwa zakłady w jednej rundzie: wiele platform ma 'nonce' przyrosty dla każdego z zakładów, nawet jeśli są one umieszczone w tej samej rundzie (przykład: zakład A → 'nonce = 42', zakład B → 'nonce = 43'). Sprawdź według historii.
Zmiana 'Klient Seed': Podczas zmiany nasion 'nonce' jest zwykle resetowane (lub zaczyna się nowy strumień). Porównaj zasady swojej platformy.
Batchy 'Seed Server': Jeden 'Seed Server' działa na serii rund, a następnie opublikowano nowe commit; nie mylić nasion z różnych okresów.
Zaokrąglanie/minimum: niedopasowanie drugiego znaku - w 90% przypadków błąd w zaokrągleniu/regułach minimalnych (na przykład ustalony 1. 00 × w szczególnych warunkach).
Kodowanie/przestrzenie: dodatkowa przestrzeń/kanał liniowy, niewłaściwy przypadek, non-UTF-8 sprawdza przerwy.

6) Szybka lista kontrolna

1. Czy 'SHA-256 (ServerSeed)' pasuje do opublikowanego 'Server, Hash'?
2. Czy format 'message' i 'nonce' jest prawidłowo utworzony?
3. Algorytm („HMAC-SHA256 ”/„ SHA-256”) i zamówienie klucza/pola stosowane ściśle zgodnie ze specyfikacją?
4. Czy mapowanie i zaokrąglanie są identyczne z dokumentacją?
5. Czy specjalne przypadki (rzadki „błyskawiczny wypadek”, minimum 1. 00 ×, ustniki)?
6. Czy wynik pokrywa się z historią gry do grosza?

7) Automatyzacja kontroli (praktyka)

Kłody: przechowywać 'client _ seed', sekwencję 'nonce', znacznik czasu, końcowy mnożnik.
Pobieranie próbek: po „ryku” 'Server Seed', uruchom skrypt przez losowe 20-50 rundy; Ustaw procent meczu (musi być 100%).
Regresja: podczas zmiany wersji gry/dostawcy, uruchom ten sam zestaw.
Eksport: sklep CSV/JSON ze źródłami - to twój „ścieżka audytu”.

8) Bezpieczeństwo: Jak nie popełnić błędów i pozwolić się oszukać

Sprawdź lokalnie/offline: nie polegaj tylko na walidatorze sieciowym operatora; Zachowaj własny scenariusz.
Nie ufaj rundom bez kompletnego pakietu danych: brak formuły/formatu - brak weryfikacji.
Strong 'Client Seed': Zapytaj losowo, zmień się okresowo (to nie zwiększa RTP, ale wyklucza pytania dotyczące odtwarzalności).
TLS/sesje: logowanie tylko HTTPS, 2FA, śledzenie logowań historii i przesyłania.
Nie podawać „nasion serwera” nikomu: jest on publikowany przez operatora po upływie okresu; Twoim zadaniem jest zweryfikować, a nie „dostać” to z góry.

9) Typowe „błędy rookie”

Mieszane zamówienie polowe („Nonce: ClientSeed” zamiast „ClientSeed: Nonce”).
Count 'nonce' od zera zamiast jednego (lub odwrotnie).
Zastosowano hash całej rundy platformy (global nonce), ale potrzebujesz swojego osobistego 'nonce'.
Zaokrąglanie bankiera kontra podłoga/sufit.
Sprawdź aktywne, nie wyeksponowane 'Seed Server'.

10) „Czerwone flagi” u operatora

Przed rozpoczęciem okresu brak publicznego Hash nasion serwera.
Nie można ustawić nasienia klienta ani wyświetlać nonce.
Nie istnieje publiczna formuła mapowania skrótu mnożnika.
Historia rund nie dostarcza minimalnych danych do pojednania.
Format i algorytm zostały zmienione bez powiadomienia/archiwum specyfikacji.

11) Kontekst australijski (UA)

Waluta: przechowywać zapisy wygranych/zakładów w AUD, przechowywać przesyłki historii (wsparcie, kontrowersyjne kwestie).
Responsible Play (RG): Depozyt/terminy, pauzy i samodzielne wykluczenie - dostępne w aplikacjach bona fide; Użyj ich.
Praktyki platformowe: dla podmiotów działających w dobrej wierze blok Fair/Fairly Fair zawiera kompletny opis i przykłady weryfikacji; brak szczegółów jest powodem do wyboru innej usługi.

12) Najważniejsze

Sprawdzenie wyniku gry Crash jest jasna procedura:
  • weryfikacja zobowiązania „Server Seed Hash”,
  • przywracanie 'RoundHash' przez 'Seed Server', 'Seed Client', 'nonce' i algorytm,
  • Zastosuj opublikowany wzór mapowania i zasady zaokrąglania
  • identyczny mnożnik w recenzji i historii gry.

Zachowaj własny skrypt, logowanie i okresowo sprawdzaj losowe rundy. Więc potwierdzasz uczciwość nie słowami, ale matematycznie.