Что такое RNG и почему вокруг него столько разговоров
RNG (Random Number Generator, генератор случайных чисел) — это алгоритм, который выдаёт непредсказуемые числа. В Rocket X именно RNG определяет, в какой момент ракета крашится и каким окажется финальный множитель.
Технически в компьютерах нет «настоящей» случайности — все алгоритмы детерминированы. То, что мы называем случайным, на самом деле — псевдослучайные числа, выводимые из исходного значения, которое называют сидом (seed). Если знать сид и алгоритм, результат становится полностью предсказуемым. Поэтому ключевой вопрос для онлайн-казино: кто и как генерирует сид, и можно ли это контролировать или проверить.
Исторически вокруг этого крутилось всё недоверие к онлайн-казино. Если оператор полностью контролирует сид и алгоритм — теоретически он может подбирать сиды, невыгодные для игроков. Доказать или опровергнуть это публично было невозможно. Provably Fair был придуман именно как ответ на эту проблему.
До Provably Fair: классическая модель «доверяй аудитору»
Классические онлайн-казино работают по такой схеме:
- Оператор получает лицензию у регулятора: Curaçao Gaming Authority, Malta Gaming Authority, UK Gambling Commission, Kahnawake Gaming Commission и подобные.
- Регулятор обязывает использовать сертифицированный RNG.
- Сертификацию проводят независимые лаборатории: eCOGRA, GLI, iTech Labs, BMM Testlabs.
- Лаборатория получает большую выборку результатов, проверяет их статистически — на равномерность распределения, отсутствие закономерностей, соответствие заявленному RTP.
- Если всё в порядке — выдаётся сертификат, который казино показывает игрокам.
1win Gaming как разработчик Rocket X тоже проходит эту процедуру у профильных лабораторий. Это работает в среднем, но у такой модели есть фундаментальный изъян: игрок не может проверить конкретный раунд. Только лабораторию, только статистически, только постфактум.
Если в одном конкретном раунде вы потеряли крупную ставку и подозреваете, что что-то не так — единственный путь это оспорить проходит через службу поддержки самого казино, его регулятора и, потенциально, суд. На практике этим почти никто не занимается. Provably Fair убирает эту дыру: вы можете проверить любой раунд прямо сейчас, в браузере, без помощи аудитора и регулятора.
Provably Fair: три ингредиента
Подход Provably Fair появился около 2014 года в крипто-казино (SatoshiDice, Bustabit и подобные), а позже стал индустриальным стандартом для crash-игр. Он использует три ключевых компонента, каждый из которых виден игроку в специальном разделе настроек.
| Компонент | Кто генерирует | Когда виден игроку | Для чего |
|---|---|---|---|
| server_seed | Сервер казино | SHA-256-хеш до серии раундов; сам сид — после | Основа случайности. Доказывает, что результат не подменяли |
| client_seed | Игрок (или авто) | В любой момент в настройках | Гарантирует, что казино не выбрало server_seed под клиента |
| nonce | Сервер автоматически | Открыто, увеличивается на 1 каждый раунд | Делает каждый раунд серии уникальным, при том же server_seed |
Идея проста. Перед началом серии раундов сервер генерирует
server_seed (длинная случайная строка), считает с
неё SHA-256-хеш и публикует только хеш.
Сам сид остаётся секретным до конца серии. Поскольку SHA-256
необратима, по хешу узнать сид невозможно — но он зафиксирован.
Игрок может задать любой client_seed своими руками
(или принять автоматически сгенерированный). После окончания
серии раундов сервер раскрывает server_seed. После
этого игрок может:
- Посчитать SHA-256 раскрытого
server_seedи сравнить с заранее опубликованным хешем — это доказывает, что сид не меняли в процессе серии. - Самостоятельно пересчитать множитель каждого раунда из
server_seed,client_seedиnonce, и сравнить с реально показанным.
Если оба условия выполнены — раунд честен.
Как из хеша получается множитель
Конкретная формула преобразования хеша в множитель краша различается между crash-играми. 1win Gaming, как и другие провайдеры, не публикует точный алгоритм Rocket X — это типичная практика, чтобы усложнить эксплойтинг возможных ошибок реализации. Но общий шаблон для жанра crash-игр публично известен и устроен почти везде одинаково.
Базовая логика:
- Берётся
HMAC-SHA256(server_seed, client_seed + ":" + nonce)— это даёт 64-символьную hex-строку. - От её первой части (обычно 8 или 13 hex-символов) берётся целое число.
- Это число делится на максимальное возможное значение — получается дробь от 0 до 1.
- Дробь преобразуется в множитель краша по формуле вида
(1 / (1 − x)) × (1 − house_edge), что даёт распределение Парето: большинство раундов получают низкие множители, редкие — очень высокие. - Если результат меньше 1.00 — раунд считается мгновенным крашем (множитель 1.00×). Доля таких раундов соответствует домовому преимуществу казино (около 3 %).
Распределение множителей — не равномерное, а сильно скошенное вправо (распределение Парето). Это значит: большинство раундов краша случается до 2.00×, множители 10× — реже одного из десяти раундов, а 100×+ — в тысячных долях процента раундов. Это не «несправедливо» — это математическое следствие формулы, которое и обеспечивает RTP 97 %.
Как самостоятельно проверить раунд
Допустим, вы сыграли серию раундов в Rocket X. После окончания
серии (или смены клиентского сида) казино раскрывает
server_seed. У вас на руках:
published_hash— SHA-256-хеш, который вы видели ДО серииserver_seed— раскрытый сервером после серииclient_seed— ваш клиентский сидnonce— номер конкретного раунда в серииactual_multiplier— фактический множитель этого раунда (из истории)
Минимальный Python-скрипт, который проверяет оба условия — что
хеш не подменён и что множитель действительно вычислен из
раскрытого сида. Сохраните в файл verify.py, замените
значения на свои и запустите командой python3 verify.py:
# verify.py — проверка одного раунда Provably Fair в Rocket X
import hashlib, hmac, math
# 1. То, что мы получили от казино:
published_hash = "a3f5...e91d" # SHA-256 от server_seed, опубликован до серии
server_seed = "7b2c...43a8" # раскрыт казино после серии
client_seed = "my_random_seed"
nonce = 42 # номер раунда в серии
actual_multiplier = 2.47 # из истории раундов
# 2. Проверка №1: казино не подменило server_seed
recalculated = hashlib.sha256(server_seed.encode()).hexdigest()
assert recalculated == published_hash, "❌ Хеш не сходится — казино меняло сид!"
print("✓ Хеш совпадает: server_seed не подменяли")
# 3. Проверка №2: пересчитываем множитель
message = f"{client_seed}:{nonce}".encode()
key = server_seed.encode()
h = hmac.new(key, message, hashlib.sha256).hexdigest()
# Берём первые 13 hex-символов (52 бита), переводим в число
x = int(h[:13], 16)
e = 2 ** 52
# Формула множителя (типичная для crash-игр)
if x == 0:
multiplier = 1.00
else:
multiplier = math.floor((100 * e - x) / (e - x)) / 100
print(f"Пересчитанный множитель: {multiplier}×")
print(f"Фактический множитель: {actual_multiplier}×")
Если оба assert проходят и пересчитанный множитель
совпадает с фактическим — раунд честен. Если что-то расходится,
это серьёзное основание не играть в этом казино и опубликовать
факт расхождения.
Точная формула преобразования хеша в множитель в Rocket X публично не документирована. Скрипт выше использует стандартный шаблон crash-игр и работает для большинства реализаций жанра. Если хеш сходится, а множитель — нет, это не обязательно значит обман: возможно, у 1win Gaming своя константа среза или своя формула преобразования.
Чего Provably Fair не гарантирует
Provably Fair — мощная защита от одного конкретного типа мошенничества: подкрутки результата конкретного раунда постфактум. Но это не панацея. Вот чего эта система не делает.
Не уменьшает домовое преимущество
RTP остаётся 97 %, в среднем игрок теряет 3 % от каждой ставки. Provably Fair гарантирует честность процесса, а не выгодность результата. Если вы сыграете тысячу честно сгенерированных раундов с отрицательным математическим ожиданием — вы потеряете деньги. Так же, как в честной лотерее с RTP 50 %.
Не защищает от выбора «плохого» серверного сида
Технически казино перед серией может сгенерировать тысячу
кандидатов в server_seed, посмотреть, какие
распределения множителей они дают, и выбрать наименее выгодный
для игрока. Хеш будет от выбранного сида — формально всё
«честно», но казино использовало предзнание. Эта атака
называется selection attack.
Защита от неё — задавать собственный client_seed
вручную. Если клиентский сид задан игроком (а не сервером),
казино заранее не знает, какой получится итоговый множитель,
и не может его «подобрать».
Не отменяет лицензию регулятора
Provably Fair решает только задачу математической проверки раунда. Все остальные аспекты (выплаты, защита данных, борьба с зависимостью, KYC, AML) лежат в плоскости регуляторов и лицензий. Можно иметь Provably Fair и при этом отказывать в выплате выигрыша по надуманным причинам — это разные вещи.
Не делает игру «умнее»
То, что вы можете проверить результат раунда после его
окончания, никак не помогает предсказать следующий
раунд. Для предсказания нужен server_seed,
который раскрывается только после серии. Любые «сигналы»,
«прогнозы» и «алгоритмы», претендующие на предсказание
Provably Fair-раундов — это обман. Подробнее в материале
«Правда о сигналах».