Что такое RNG и почему вокруг него столько разговоров
RNG (Random Number Generator, генератор случайных чисел) — это алгоритм, который выдаёт непредсказуемые числа. В контексте Lucky Jet и других crash-игр именно RNG определяет, в какой момент пилот «крашится» и каким будет финальный множитель раунда.
Чисто технически в компьютерах нет «настоящей» случайности — все алгоритмы детерминированы. То, что мы называем «случайным», на самом деле — псевдослучайные числа, выводимые из некоторого сида (seed). Если знать сид и алгоритм, результат становится предсказуемым. Поэтому ключевой вопрос для онлайн-казино: кто и как генерирует сид, и можно ли это контролировать или проверить.
Именно вокруг этого исторически крутится недоверие к онлайн-казино. Если казино контролирует сид целиком и единолично — теоретически оно может подбирать сиды, которые невыгодны для игроков. Долгое время доказать или опровергнуть это публично было невозможно. Provably Fair был придуман как ответ именно на эту проблему.
Старая модель: «доверяй казино и его аудитору»
Классические онлайн-казино работают по такой схеме:
- Казино получает лицензию у регулятора (Curaçao, Malta Gaming Authority, UK Gambling Commission и т. п.).
- Регулятор обязывает казино использовать сертифицированный РНГ.
- Сертификацию проводят независимые лаборатории: eCOGRA, GLI, iTech Labs, BMM Testlabs.
- Лаборатория получает большую выборку результатов и проверяет их статистически — на равномерность распределения, отсутствие закономерностей, соответствие заявленному RTP.
- Если всё в порядке — выдаётся сертификат, который казино показывает игрокам.
Это работает в среднем, но у этой модели есть фундаментальная проблема: игрок не может проверить конкретный раунд. Только лабораторию, только статистически, только постфактум. Если в одном конкретном раунде вы потеряли крупную ставку и подозреваете, что что-то не так — единственный путь это «оспорить» проходит через службу поддержки самого казино, его регулятора и, потенциально, суд. На практике — мало кто этим занимается.
Provably Fair убирает эту дыру. Вы можете проверить любой раунд прямо сейчас, в браузере, без помощи аудитора и регулятора.
Provably Fair: три ингредиента
Подход Provably Fair появился около 2014 года в крипто-казино (SatoshiDice, Bustabit и подобные), а позже стандартизировался в индустрии. В нём используется три ключевых компонента — все они видны игроку в специальном разделе настроек игры.
| Компонент | Кто генерирует | Когда виден игроку | Зачем нужен |
|---|---|---|---|
| server_seed | Сервер казино | SHA-256-хеш до раунда; сам сид — после | Основа случайности. Доказывает, что казино не подменило результат |
| client_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-игр одинаковый:
- Берётся
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×, а множители 100×+ случаются в тысячных долях процента раундов. Это не «несправедливо» — это математическое следствие формулы, которое и обеспечивает RTP 97 %.
Как самостоятельно проверить раунд
Допустим, вы сыграли серию раундов. После окончания серии (или после
смены клиентского сида — что обычно автоматически закрывает серию)
казино раскрывает server_seed. У вас на руках:
published_hash— SHA-256-хеш, который вы видели ДО серииserver_seed— раскрытый сервером после серииclient_seed— ваш клиентский сидnonce— номер конкретного раунда в серииactual_multiplier— фактический множитель этого раунда (видно в истории)
Вот минимальный Python-скрипт, который проверяет оба условия. Сохраните в
файл verify.py, заполните значения и запустите
python3 verify.py:
# verify.py — проверка одного раунда Provably Fair
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 проходят, и пересчитанный множитель совпадает с фактическим — раунд честный. Если что-то расходится — это серьёзное основание не играть в этом казино и опубликовать факт расхождения.
Важная оговорка про формулу: точный алгоритм преобразования хеша в множитель различается между играми. Lucky Jet от Gaming Corps не публикует свою формулу публично — её можно восстановить по реверс-инжинирингу клиентского кода или по документации операторов. Большинство crash-игр следуют шаблону, показанному выше, но конкретные константы (длина среза hex, формула преобразования, house edge) могут отличаться.
Чего 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-раундов — это обман.
Подробнее об этом — в материале
«Правда о сигналах».