Как работает provably fair на сайтах Rust и как проверить свои броски
Хеши server seed, client seed, nonce и HMAC-SHA256 простыми словами, с примером расчёта, который можно повторить, и пошаговым порядком проверки любого броска на скин-сайте Rust.
Все десять сайтов нашего рейтинга заявляют свои игры как provably fair. У этой фразы точный смысл, а проверка за ней такая, что вы можете выполнить её сами бесплатным инструментом для хеширования или несколькими строками кода. Делают это единицы. Этот гайд объясняет, что система доказывает, о чём умалчивает и как проверить бросок от начала до конца.
Коротко: до вашей ставки сайт фиксирует секретное значение и показывает вам его отпечаток. Вы добавляете собственный вход. После ставок сайт раскрывает секрет, и вы можете убедиться, что отпечаток совпадает и что каждый результат следует из входных данных. Если числа сходятся, сайт не мог изменить исход, увидев вашу ставку.
Проблема, которую решает provably fair
На скин-сайте каждый результат определяет сервер. Когда вы открываете кейс, подбрасываете монету или ждёте множитель краша, вы смотрите анимацию числа, полученного на машине, которую нельзя проверить. Без какого-либо доказательства вам остаётся верить, что оператор не подкручивает броски против вас тихо, когда ставка крупная.
Лицензированные онлайн-казино обычно отвечают на это регуляторами и аудитом генераторов случайных чисел третьей стороной. Большинство скин-сайтов вместо этого полагается на криптографический подход. У него есть большое преимущество для игроков: аудитору доверять не нужно, потому что расчёт можно повторить на собственном компьютере.
Идея называется схемой обязательств (commitment). Представьте, что сайт пишет секрет на карточке, запечатывает её в конверт и отдаёт вам конверт до начала игры. Подменить карточку позже без вашего ведома он не может, а прочесть её раньше времени не можете вы.
Три входа: server seed, client seed и nonce
Почти в каждой системе provably fair на сайтах Rust используются одни и те же ингредиенты. Названия на разных сайтах немного отличаются, а роли остаются теми же.
Server seed
Длинная случайная строка, сгенерированная сайтом. Пока вы играете, она остаётся секретной, потому что любой, кто её знает, мог бы предсказать каждый результат. Вместо неё вы видите её хеш, обычно полученный через SHA-256. Хеш это односторонний отпечаток. Один и тот же вход всегда даёт один и тот же 64-символьный выход, изменение одного символа входа полностью меняет выход, а вернуться от хеша к seed на практике невозможно.
Client seed
Строка с вашей стороны. Сайты генерируют стандартную за вас, и большинство позволяет менять её в панели честности или настройках. Её задача не дать сайту выбрать server seed, который плох именно для вас. Сайт зафиксировал свой seed до того, как узнал, что вы введёте, поэтому подогнать одно под другое он не мог.
Nonce
Счётчик, который начинается с 0 или 1 и растёт на единицу с каждой ставкой на одной паре seed. Благодаря ему один server seed и один client seed можно использовать для сотен ставок и каждый раз получать новый результат.
Когда вы хотите проверить результаты, вы просите сайт сменить seed. Он раскрывает старый server seed открытым текстом, показывает хеш нового и сбрасывает nonce. Всё, что вы сыграли на старом seed, теперь можно проверить.
Как входные данные становятся результатом
Самый распространённый рецепт это HMAC-SHA256. HMAC это стандартный способ объединить секретный ключ с сообщением, чтобы получить хеш. На большинстве сайтов Rust ключом служит server seed, а сообщением client seed и nonce, склеенные вместе, часто через двоеточие, например clientseed:nonce. Некоторые сайты добавляют номер раунда или ID игры, поэтому всегда читайте точную формулу на странице честности самого сайта.
На выходе получается 64-символьная шестнадцатеричная строка. Затем сайт превращает часть этой строки в число от 0 до 1. Типичный способ берёт первые восемь шестнадцатеричных символов (32 бита), переводит их в целое число и делит на 4 294 967 296, то есть на 2 в степени 32. Эта десятичная дробь затем накладывается на игру:
- Кости и апгрейдер: умножьте на 100, чтобы получить бросок от 0,00 до 99,99, затем сравните с целью.
- Рулетка: умножьте на число секторов колеса и округлите вниз, чтобы выбрать сектор.
- Кейсы: умножьте на общее число билетов в кейсе, так что скин, которому принадлежит 1% билетов, выигрывает в 1% бросков.
- Краш: подайте число в формулу, превращающую его в множитель, с заложенным house edge. Эту формулу и её смысл для целей вывода разбирает наш гайд по стратегии в краше.
Пример расчёта, который можно повторить
Seed ниже придуманы для этого примера, так что проверить нашу арифметику можно любым калькулятором HMAC-SHA256.
- Server seed: example-server-seed-01. Его хеш SHA-256 начинается с a5275da7ccca3f73. Именно этот хеш сайт показал бы вам до игры.
- Client seed: my-own-client-seed. Nonce: 1. Сообщение, таким образом, my-own-client-seed:1.
- HMAC-SHA256 с server seed в качестве ключа и этим сообщением на входе даёт результат, начинающийся с 4cdcf221.
- Шестнадцатеричное 4cdcf221 равно 1 289 548 321 в десятичной записи. Разделив на 4 294 967 296, получим около 0,30025.
- На шкале костей от 0 до 100 это бросок 30,02. На колесе рулетки из 15 секторов 0,30025, умноженное на 15, даёт около 4,5, что округляется вниз до сектора 4 (первый сектор считается нулевым).
Запустите те же seed с nonce 2, и получите совершенно другой хеш, начинающийся с 6486ccbd, что даёт около 0,3927. Первый бросок ничего не говорит о втором. В этой независимости и суть: в истории ставок нет закономерности, которую можно прочитать, потому что каждый результат это новый хеш.
Как самому проверить бросок, шаг за шагом
Первая полная проверка занимает время. Потом это несколько минут копирования и вставки. Сначала сделайте её на небольшом балансе, чтобы знать процесс, прежде чем результат станет для вас важным.
- Откройте панель честности до ставки. Ссылка на неё обычно есть на экране игры, в футере или в настройках профиля. Сохраните хешированный server seed вне сайта, например в заметке на телефоне или скриншотом.
- Задайте свой client seed. Замените стандартный чем-то, что вы набрали сами. Побейте по клавиатуре. Запоминать его не нужно.
- Играйте и отмечайте интересные ставки. Записывайте nonce, показанный у каждой ставки, или найдите его потом в истории ставок.
- Смените seed. Сайт раскроет старый server seed. Скопируйте его.
- Проверьте обязательство. Пропустите раскрытый server seed через любой инструмент SHA-256. Результат должен совпасть с хешем, сохранённым на шаге 1, символ в символ.
- Пересчитайте бросок. Используйте HMAC-SHA256 с раскрытым server seed, вашим client seed и nonce, затем примените преобразование, которое публикует сайт. В PHP это один вызов hash_hmac, а модуль hmac в Python делает то же самое в пару строк.
- Сравните. Число, которое вы рассчитали, должно давать исход, записанный в вашей истории.
На большинстве сайтов есть и встроенный верификатор, куда вставляются seed. Это удобно, но он работает на собственном коде оператора. Для проверки, не зависящей от сайта вообще, воспользуйтесь независимым инструментом или собственным скриптом хотя бы один раз.
Общие игры работают немного иначе
Одиночные режимы вроде костей, апгрейдера и одиночного открытия кейсов могут идти на вашей личной паре seed. Игры, где результат общий для многих игроков, такие как джекпот, коинфлип, кейс-баттлы, раунды рулетки и краш, не могут позволить client seed одного игрока определять исход для всех. Сайты решают это несколькими распространёнными способами.
- Цепочка хешей. Типична для краша. Сайт заранее генерирует длинную цепочку хешей, где хеш каждого раунда это SHA-256 следующего. Последний хеш цепочки публикуется до первого раунда, и вы можете проверить, что каждый раскрытый раунд хешируется в предыдущий. Все результаты в цепочке были определены до того, как кто-либо сделал ставку.
- Публичный seed вне сайта. Сайт фиксирует server seed, затем подмешивает значение, которое никто не мог знать заранее, например хеш будущего блока в публичном блокчейне. Поскольку этого блока на момент фиксации не существовало, подогнать под него свой seed сайт не мог.
- Обязательства для каждого раунда. В джекпоте и коинфлипе хешированный seed раунда появляется при открытии раунда, а открытый seed и выигрышный билет показываются по его окончании.
Идея проверки в каждом случае одна. Найдите обязательство, которое было публичным до раунда, убедитесь, что раскрытое значение ему соответствует, и пересчитайте результат. О том, как выигрышный билет превращается в победителя в общем банке, читайте в нашем гайде о шансах в коинфлипе и джекпоте. Кейс-баттлы сочетают оба подхода, о чём рассказано в разборе кейс-баттлов.
Чего provably fair не доказывает
Проверенный бросок доказывает одну узкую вещь: результат получен из входных данных, которые сайт зафиксировал до вашей ставки. Это полезно, но игроки часто читают в значке гораздо больше, чем он поддерживает.
- Он ничего не говорит о house edge. Краш с большим преимуществом казино может быть совершенно provably fair. Преимущество заложено в опубликованную формулу, превращающую случайное число в множитель или шанс выигрыша. Честно значит, что сайт следовал собственным правилам, а эти правила со временем всё равно в пользу сайта.
- Он не проверяет цены. Если кейс указывает скин по стоимости, намного выше той, за которую его можно продать на Торговой площадке Steam, бросок может быть честным, а кейс всё равно невыгодным. Как оценка предметов тихо сдвигает реальные шансы, показывает наш гайд по апгрейдеру.
- Он не охватывает выводы. Сайт может иметь безупречные seed и всё же задерживать выплаты, замораживать аккаунты или переписывать условия. Поэтому честность это лишь один из входов в то, как мы оцениваем сайты, рядом со скоростью выплат и доверием.
- Он работает, только если кто-то проверяет. Обязательство, которое никто не сверяет, это просто строка символов на странице.
Тревожные сигналы на странице честности
Проверка seed это обычный шаг при тестировании сайта. Вот что вызывает у нас подозрения, примерно от лёгких до серьёзных.
| Что вы видите | Что это значит | Что делать |
|---|---|---|
| Нельзя изменить client seed | Сайт контролирует все входные данные ваших личных бросков | Относитесь к одиночным режимам с большей осторожностью |
| Есть кнопка верификатора, но нет опубликованной формулы | Результаты можно проверить только кодом самого сайта | Попросите у поддержки точную формулу, прежде чем вносить много |
| Хеш server seed появляется только после ставки | Настоящего обязательства нет | Не считайте игру provably fair |
| Старые server seed нельзя раскрыть никогда | Проверить ничего нельзя | То же |
| Раскрытый seed не даёт сохранённый хеш | Seed изменили, или страница сломана | Прекратите играть, сохраните всё скриншотами и обратитесь в поддержку |
Если вы когда-нибудь окажетесь в последней строке, сохраните доказательства: сохранённый хеш, раскрытый seed, ID ставок и время каждой ставки. Единичное несовпадение может быть ошибкой отображения, но именно такие правдоподобные сообщения игроков заставляют нас перепроверять сайт.
Разумный порядок для обычных игроков
Проверять каждую ставку не нужно. Лёгкий порядок ловит большинство проблем, не превращая сессию в домашнее задание.
- Задавайте новый client seed каждый раз, когда начинаете играть на новом сайте.
- Делайте скриншот хешированного server seed до игры.
- Меняйте seed после сессии и проверяйте обязательство, а это один расчёт SHA-256.
- Пересчитайте один-два результата, которые важнее всего, например крупный проигрыш в апгрейдере или битву, которую вы были уверены, что должны были выиграть.
- Время от времени повторяйте полную проверку независимым инструментом, а не верификатором сайта.
Чистая проверка означает, что ваши потери именно те, которые предсказывает опубликованная математика, и не больше. Преимущество казино на каждом броске остаётся. Практический следующий шаг: заранее решить, какую часть этих ожидаемых потерь вы готовы заплатить за развлечение; простые лимиты и инструменты, помогающие их соблюдать, описаны на нашей странице об ответственной игре.
Частые вопросы
Может ли сайт provably fair всё равно обманывать?
Изменить зафиксированный результат так, чтобы проверка хеша прошла, он не может. Но он может держать высокий house edge, завышать цены предметов в кейсах или задерживать выводы, потому что provably fair охватывает только то, как получен бросок.
Обязательно ли менять client seed?
Нет, но стоит. Client seed, выбранный после показа хеша server seed, означает, что сайт не мог подбирать свой seed с учётом вашего ввода.
Почему сайт просто не покажет server seed до игры?
Любой, кто знает и server seed, и client seed, может рассчитать все предстоящие результаты. Хеш позволяет сайту зафиксировать seed, не раскрывая будущие броски.
Каким инструментом можно проверять броски?
Подойдёт любой калькулятор SHA-256 и HMAC-SHA256: бесплатные онлайн-инструменты и встроенные функции PHP, Python или JavaScript. Верификатором сайта пользуйтесь для удобства, а для проверки, которая действительно считается, независимым инструментом.
Достаточно ли надёжен для этого SHA-256?
Да. Это широко используемый стандарт, он применяется и в майнинге Bitcoin, и известного практического способа обратить его или найти второй seed с тем же хешем нет.
Читайте дальше
Похожие руководства
Бонусы, бесплатные кейсы и промокоды в гемблинге Rust: чего они стоят
Бесплатный кейс стоит среднего дропа, а не лучшего предмета, а бесплатный баланс стоит того, что переживёт отыгрыш. Как оценить любой типичный бонус сайта для Rust до ввода кода.
Кейс-баттлы в Rust: режимы, шансы и как выбрать честную битву
Кейс-баттл не меняет house edge кейсов внутри него. Он меняет то, насколько сильно вы выигрываете или проигрываете. Как устроены форматы, математика за ними и как заметить битву, в которую стоит войти.
Ответственный скин-гемблинг: лимиты, тревожные признаки и где получить помощь
Из-за скинов легко потерять счёт реальным деньгам. В этом гайде тревожные признаки, лимиты, которые действительно держатся, самоисключение и блокирующие программы, а также бесплатные линии помощи, куда можно обратиться уже сегодня.