Provably fair краш-игры: проверьте любой раунд сами
Краш-множитель ползёт вверх, вы медлите, и меньше чем через три секунды его уже нет. Ничего на экране не говорит, было ли это число зафиксировано до раунда или выбрано в тот момент, когда дрогнул ваш палец. Краш-игры provably fair закрывают этот разрыв: оператор публикует криптографическое обязательство до раунда, а стоящие за ним значения после него, так что результат вы восстанавливаете сами.
Что доказуемая честность доказывает на самом деле
Краш-игра provably fair выводит результат из значений, которые оператор публично фиксирует до открытия приёма ставок, поэтому любой игрок потом пересчитывает множитель и убеждается, что его не меняли. В этом всё утверждение, и оно уже, чем кажется.
Оно доказывает две вещи: исход был зафиксирован до вашей ставки и не изменился после. Оно не доказывает, что шансы хорошие, что константа отдачи совпадает с заявленной в игре или что вывод проходит быстро.
Идея старше онлайн-казино. Мануэль Блум описал тот же протокол фиксации с последующим раскрытием в работе Coin Flipping by Telephone на конференции CRYPTO 1981, чтобы двое не доверяющих друг другу людей могли разыграть монетку по телефону.
Три входных значения за каждым краш-раундом
Серверный сид и хеш, который вы видите первым
Оператор генерирует серверный сид, длинную случайную строку, и держит её скрытой. До раунда он публикует вместо неё хеш SHA-256. SHA-256 выдаёт 256-битный дайджест, записываемый 64 шестнадцатеричными символами, а найти сообщение под заданный дайджест вычислительно невозможно, и то и другое изложено в документе NIST FIPS 180-4. Хеш не выдаёт ничего и при этом привязывает оператора к одному значению.
Клиентский сид, ваша половина входных данных
Клиентский сид, это строка, которую контролируете вы. Ваше значение попадает в расчёт после того, как оператор уже зафиксировался, поэтому подобрать серверный сид под ваш ввод он не может. Замените значение по умолчанию, которое подставляет игра: именно оно и есть та часть, которую оператор уже знает.
Нонс, счётчик, который движется
Нонс растёт на единицу каждый раунд: 1, 2, 3 и так далее. Он позволяет одной зафиксированной паре сидов выдавать в каждом раунде другой множитель, притом что ни один сид не меняется.
Обязательство: почему один хеш связывает оператора
Измените один символ серверного сида, и дайджест SHA-256 изменится полностью. Как только хеш опубликован, воспроизвести его может ровно одна строка, а после раунда вы сами хешируете раскрытый сид и сверяете.
Одна деталь топит большинство ручных проверок. Обязательство использует простой SHA-256 от одного лишь серверного сида. Результат раунда использует HMAC-SHA256, конструкцию с ключом, определённую в документе RFC 2104, где серверный сид, это ключ, а клиентский сид плюс нонс, сообщение. Ключ и сообщение делают разную работу, и если поменять их местами, получится дайджест, который выглядит правильным и не совпадает ни с чем.
Проверьте краш-раунд сами
Цепочка ниже прогоняет пять раундов от одного обязательства. Любой инструмент HMAC, позволяющий задать ключ и сообщение по отдельности, её воспроизведёт.
До начала цепочки оператор публикует одно обязательство: 0830995119d4ba5a65f48d3d5c60ba852e8a72ad94649196988c3a2b3280406c. Когда сид выходит из использования, оператор раскрывает серверный сид b7a1f0c3d9e2481a5f6c0b3d7e9a2c48. Прогоните SHA-256 по этому сиду, и обязательство вернётся обратно. Если нет, всё, что ниже, не имеет значения.
Второй шаг восстанавливает каждый раунд. Посчитайте HMAC-SHA256, где ключом служит серверный сид, а сообщением, клиентский сид, двоеточие и нонс. При клиентском сиде tbilisi-2026 и нонсе 2 это сообщение выглядит как tbilisi-2026:2, а дайджест равен cfa2152aecdf09fc1eb234fc08956d3d8683644230680ccb8909e7794166d103.
Третий шаг переводит дайджест в множитель. Прочитайте первые 13 шестнадцатеричных символов как одно целое число, 52 бита случайности. Назовите его H. Возьмите 2 в степени 52, разделите на то же число минус H, умножьте на константу отдачи R и на 100, округлите вниз, затем разделите на 100. Ни одна студия не публикует RTP для Aviator и большинства краш-тайтлов. R, равная 0.97, это та величина, на которой работает рынок, она задаёт преимущество казино в 3 процента, и все числа ниже посчитаны от неё.
| Нонс | Первые 13 шестнадцатеричных | H как целое число | Точка краша |
|---|---|---|---|
| 1 | 2083b04b903c1 | 571,999,528,747,969 | 1.11x |
| 2 | cfa2152aecdf0 | 3,652,720,748,580,336 | 5.13x |
| 3 | 95a4e240790bd | 2,632,566,448,820,413 | 2.33x |
| 4 | 388fb05278c0b | 995,036,634,778,635 | 1.24x |
| 5 | fa5454ec4749d | 4,403,841,743,484,061 | 43.79x |
Один зафиксированный сид выдал 1.11x, 5.13x, 2.33x, 1.24x и 43.79x, и все они были определены до открытия первого раунда. Константы отдачи и длина среза различаются между тайтлами, поэтому те же три входных значения при другой R дают другую точку краша, и именно эта константа управляет математикой множителя Aviator.
Обычное онлайн-поле SHA-256 это не повторит. Оно считает хеш без ключа, а многие такие поля дописывают перевод строки в конец вставленного текста, что меняет дайджест. Берите инструмент, который умеет HMAC и позволяет задать точные байты.
Где в этой формуле живёт преимущество казино
Посмотрите на R ещё раз. При 0.97 игра возвращает 97 процентов и оставляет себе 3. Эта константа сидит внутри того расчёта, который вы только что проделали, и проверка подтверждает, что она была применена.
Формула даёт чистое правило выживания: шанс, что раунд дойдёт до множителя m, равен R, делённой на m. Кэшаут на m, соответственно, возвращает m, умноженное на R и делённое на m, то есть просто R.
Ожидаемая отдача одинакова при любой цели кэшаута. При R 0.97 вы в среднем получаете назад 0.97 своей ставки, стоит автокэшаут на 1.20x или на 40x. Дисперсия меняется колоссально. Ожидание стоит на месте.
В лари: при ставке 20 GEL ожидаемая отдача составляет 19.40 GEL, а ожидаемый проигрыш 0.60 GEL за раунд, при любой цели. Сыграйте 200 раундов, и вы поставите 4,000 GEL против примерно 120 GEL ожидаемого проигрыша. Ровно в эти 120 GEL и обходится отыгрыш бонуса, какая бы цифра ни стояла в заголовке, и поэтому множитель 35x перевешивает большое число рядом с ним.
Чего один проверенный раунд вам не скажет
Пересчёт раунда доказывает этот раунд. Он ничего не доказывает про константу, которую оператор подставил в формулу, а именно там и пряталась бы нечестная игра. Распределение при 0.97 определено полностью, поэтому свою историю можно измерить относительно него.
| Краш достигает | Шанс при R 0.97 |
|---|---|
| 1.50x | 64.67% |
| 2.00x | 48.50% |
| 3.00x | 32.33% |
| 5.00x | 19.40% |
| 10.00x | 9.70% |
| 50.00x | 1.94% |
| 100.00x | 0.97% |
Медианная точка краша равна 1.94x, а 51.50 процента раундов заканчиваются ниже 2.00x. Задайте R как 100, делённое на 101, и преимущество падает до 0.99 процента, медиана смещается к 1.98x, а шанс дойти до 2.00x становится 49.50 процента. Читать краш-игру честно значит читать её константу отдачи и её распределение вместе, и поэтому настраиваемая версия JetX меняет сразу обе величины.
Поймать неверную константу можно только на дистанции. Посчитайте, сколько ваших раундов доходит до 2.00x, и сверьте эту долю с 48.50 процента выше. При 5 процентах значимости и 80 процентах мощности игра, заявляющая 0.97, а работающая на 0.90, вскрывается примерно за 1,260 раундов, а 0.96 под видом 0.97, примерно за 61,700. Проверка хешей ловит подмену в одном раунде; неверную константу ловит только распределение.
Чего provably fair не доказывает
Не доказывает, что серверный сид выбрали честно
Один сид покрывает целую цепочку раундов, а нонс движется предсказуемо, поэтому оператор может посчитать все множители до публикации обязательства. Хеш скрывает, сколько цепочек было сгенерировано и какую из них оставили. В этом и состоит практическая причина задавать свой клиентский сид: значение, которого оператор не видел, нельзя подобрать заранее. Проверка сверяет выход с заявленным методом, поэтому версия, обслуживающая вашу сессию, и любая ошибка в том, как она создаёт сиды, остаются вне досягаемости.
Не покрывает всё лобби
Только собственные игры оператора несут цепочку сидов, которую можно пересчитать. Слоты сторонних студий работают на собственном генераторе студии по её же схеме: документация BGaming описывает хеш результата плюс секретную строку, раскрываемую по завершении раунда. Большинство тайтлов на слот-сайте нельзя восстановить раунд за раундом, а столы с живыми дилерами раздаются перед камерой, поэтому раунд с живым дилером опирается на шуз и трансляцию, а не на дайджест.
Не доказывает, что деньги двигаются
Проверенный раунд ничего не говорит о том, как быстро проходит вывод. Скорость выплат измеряется отдельно, и разброс здесь широкий: Stake обрабатывает вывод в крипте мгновенно, пять операторов из нашего рейтинга укладываются в диапазон от 0 до 24 часов, а 7Slots работает в диапазоне от 0 до 3 дней.
Почему ваш клиентский сид может не менять множитель
Provably fair называют сразу две архитектуры. В одиночных играх вроде Dice или Limbo результат, это HMAC от вашего личного клиентского сида и нонса, поэтому ваш сид действительно двигает ваш исход. В многопользовательском краше все игроки за столом смотрят на один и тот же множитель, и один общий результат не может зависеть от десятка разных клиентских сидов.
Общие раунды обычно выводятся из общей цепочки, а в некоторых схемах из такой, где сид каждого раунда, это прообраз SHA-256 от сида предыдущего. Это позволяет проверить всю историю в обратную сторону от одного раскрытого сида, что даёт гарантию сильнее, чем отдельная цепочка на игрока.
Так что в общем краш-раунде ваш клиентский сид может лишь питать публичную соль или вовсе не входить в раунд. Проверьте, какую модель использует игра, прежде чем считать, что ваш сид что-то изменил.
Как проверить заявку на provably fair до игры
Проверяемую игру от значка-картинки отличают шесть вещей.
- Хеш серверного сида следующего раунда виден до того, как вы ставите, а не только после.
- Поле клиентского сида принимает значение, которое вы вводите сами.
- Смена сида сразу раскрывает выведенный из использования серверный сид открытым текстом.
- На странице назван точный алгоритм и формат сообщения, включая разделители. Одно упоминание SHA-256, это ещё не спецификация.
- Верификатор принимает ваши собственные входные данные, и числа сходятся, когда вы считаете их независимо.
- Константа отдачи указана, так что вы знаете, какую R проверяете.
Собственная серия говорит вам, что игру написал оператор. Несёт ли каждый раунд восстановимую цепочку сидов, это отдельный вопрос, и наши данные фиксируют Originals у Setanta только как собственную серию.
Среди операторов, работающих в Грузии, Stake, это тот, чья собственная серия Originals, охватывающая Plinko, Mines, Crash и Dice, описана как работающая на механике provably fair, поэтому тот же пересчёт применим и к падению шарика в Plinko, где ячейка, в которую попадает шарик определена до начала движения. Его криптосчета в BTC, ETH, USDT и LTC повторяют картину, общую для криптосайтов, построенных вокруг собственных игр. Наши данные не фиксируют модель проверки ни в ту, ни в другую сторону для 1win, где есть Aviator, для Crystalbet, чья краш-секция стоит внутри более чем 4,220 игр, и для Betlive, который держит JetX и Aviatrix на счетах в лари. Пройдите шесть проверок в лобби сами, потому что рейтинг краш-игр построен на скорости выплат и охвате игр.
Главные выводы
- Опубликованное обязательство SHA-256 привязывает оператора к одному серверному сиду, а его последующее раскрытие и делает раунд проверяемым.
- Результат считается через HMAC-SHA256, где сид, это ключ, а клиентский сид плюс нонс, сообщение; эти двое делают разную работу.
- Константа отдачи R сидит внутри формулы. Проверка подтверждает, что её применили, но не двигает её.
- Ожидаемая отдача одинакова при любой цели кэшаута: 19.40 GEL при ставке 20 GEL и R 0.97.
- Один проверенный раунд доказывает один раунд. На вскрытие неверной константы уходит примерно 1,260 раундов в лучшем случае и 61,700 в худшем.
- Проверка ничего не говорит о скорости выплат.
Частые вопросы
Что на самом деле доказывает provably fair?
Он доказывает, что исход раунда был зафиксирован до вашей ставки и не изменился после. Оператор публикует хеш своего скрытого серверного сида до раунда, а затем раскрывает этот сид, как только тот выходит из использования, так что результат можно пересчитать. О том, хорошие ли шансы и как быстро оператор платит, это не говорит ничего.
Как проверить краш-раунд самому?
Прогоните SHA-256 по раскрытому серверному сиду и сверьте результат с хешем, опубликованным до раунда. Затем посчитайте HMAC-SHA256, где ключом служит этот сид, а сообщением, ваш клиентский сид плюс нонс, прочитайте первые 13 шестнадцатеричных символов как целое число и примените опубликованную формулу краша. Если сходятся оба шага, раунд был честным.
Чем серверный сид отличается от клиентского?
Серверный сид, это скрытая случайная строка оператора, зафиксированная заранее в виде хеша. Клиентский сид, это ваша собственная строка, добавляемая после того, как оператор уже зафиксировался, поэтому подобрать сид под ваш ввод он не может. Вместе они делают результат таким, каким ни одна из сторон не управляет в одиночку.
Почему казино показывает хеш вместо серверного сида?
Потому что публикация самого сида позволила бы кому угодно посчитать будущие множители до раунда. Хеш SHA-256 нельзя прогнать в обратную сторону, поэтому он не раскрывает ничего и при этом привязывает оператора к одной точной строке. Сид становится вам полезен только после окончания раунда, тогда его и раскрывают.
Нужно ли менять сид, прежде чем что-то проверять?
Обычно да. Серверный сид остаётся скрытым, пока он в работе, поэтому большинство игр раскрывают его только после перехода на новый. Смена выводит текущий сид из использования, публикует его открытым текстом и фиксирует свежий хеш для следующих раундов.
Означает ли provably fair лучшие шансы?
Нет. Константа отдачи встроена в формулу краша, а проверка лишь подтверждает, что её применили. При константе отдачи 0.97 игра в среднем оставляет себе 3 процента каждой ставки, проверяли её или нет.
Может ли краш-игра provably fair всё же быть нечестной?
Да, и так, что проверка одного раунда этого не покажет. Серверный сид оператор выбирает сам и может посчитать всю цепочку до того, как зафиксирует её, а константа отдачи может оказаться ниже заявленной. Свой клиентский сид закрывает первую проблему, а вторую ловит сравнение тысячи раундов с ожидаемым распределением.
Можно ли проверить краш-раунд, если депозит в лари?
Да. Валюта в расчёт не входит вообще. Хеш питают только серверный сид, клиентский сид и нонс, поэтому раунд со ставкой в лари проверяется ровно так же, как раунд в крипте. Валюта масштабирует выплату и не трогает множитель.
Какие доступные в Грузии казино запускают краш-игры provably fair?
Stake, чья собственная серия Originals с Plinko, Mines, Crash и Dice описана как работающая на механике provably fair. Ещё несколько операторов держат краш-лобби, модель проверки которых наши данные не фиксируют, среди них 1win, Crystalbet и Betlive. Собственная серия сама по себе не доказывает наличие восстановимой цепочки сидов.
Ведёт ли себя ставка 20 GEL иначе, чем ставка 200 GEL в том же раунде?
Нет. Множитель считается из сидов и нонса до того, как сделана хоть одна ставка, поэтому её размер на него не влияет. При константе отдачи 0.97 ожидаемая отдача составляет 19.40 GEL при ставке 20 GEL и 194 GEL при ставке 200 GEL. Процент одинаковый, масштабируются только суммы.
Слоты provably fair, это то же самое, что краш-игры provably fair?
У них общий шаг обязательства и разный способ получения результата. Краш-раунды обычно общие для всех игроков за столом и часто идут на одном цепочечном сиде, а слоты и кости разыгрываются для каждого игрока отдельно, против вашего клиентского сида и нонса. Студии публикуют и собственные схемы обязательств, поэтому набор проверяемых значений и порядок проверки различаются от игры к игре.