fairnessprovably fairdice
Да, можно. Онлайн-кости бросаются на сервере, которого ты не видишь, и физически ничто не мешает оператору поменять число до того, как оно дойдёт до твоей доски. Одни результаты этого не докажут ни в ту, ни в другую сторону, поэтому честный вопрос не в том, возможна ли подтасовка, а в том, может ли игра доказать, что её не было.
Мы делаем игру в нарды, так что мы здесь не беспристрастны. Именно поэтому мы хотим ответить на этот вопрос как следует, включая неудобные части.
Почему на любом сайте кости кажутся подкрученными?
Потому что дисперсия в нардах беспощадна, а человеческая память пристрастна. Два кубика падают тридцатью шестью способами; серии это не сбой, это гарантия, и где-то сегодня вечером честный сервер выбросит четыре дубля подряд против того, кто сыграл каждую шашку правильно. Ты помнишь 5-5, который выбил твою шашку. Ты не помнишь чудесный бросок, который спас тебя в прошлый вторник. Поражения остаются, спасения испаряются, и после трёх плохих партий подряд кости становятся личными. Они становятся личными и за настоящей доской в настоящей кофейне. Спроси любого, кто сорок лет двигает деревянные шашки.
И вот ловушка. Подстроенная игра ощущалась бы точно так же. Серии не доказывают ничего ни в одну сторону, так что если твоё доказательство это ощущение от костей, ты не отличишь честный сервер от нечестного. И мы тоже. Это не защита онлайн-костей. Это их главная проблема.
А сайт действительно может подкрутить свои кости?
Технически да, и это было бы даже нетрудно. Сервер видит всю доску до броска. Оператор, решивший смошенничать, мог бы:
- Подправить несколько бросков из сотни в самые важные моменты: попадание, неудачный вход с бара, дубль, переворачивающий проигранную партию.
- Искусственно держать матчи близкими, чтобы сессии тянулись дольше, а поражения выглядели как почти победы.
- Тихо помогать той стороне, в которой у оператора есть интерес.
- Делать это достаточно редко, чтобы кости по-прежнему проходили любой статистический тест, который способен провести игрок.
Мы не утверждаем, что какой-то конкретный сайт так делает. Мы говорим, что архитектура это позволяет. Закрытый сервер это запертая комната: оператор бросает наедине, сообщает число и просит поверить на слово. Снаружи двери честный и нечестный операторы выглядят одинаково.
Разве сертифицированный ГСЧ не доказывает честность костей?
Прочитай, что именно покрывает сертификат. Лаборатория тестирует генератор: алгоритм на стенде, выдающий миллионы чисел, которые проходят статистические проверки. Это сертифицирует компонент. Это ничего не говорит о доставке, то есть о том, пришло ли на твою доску число именно от этого генератора, именно в тот момент и без изменений по пути. Сертифицированные весы в подсобке не доказывают, что твой хлеб взвесили на них.
Сертификация к тому же моментальный снимок. Живые серверы постоянно передеплоиваются, и путь кода между генератором и твоей игрой продолжает меняться ещё долго после того, как лаборатория ушла домой. Так что сертифицированный ГСЧ отвечает на вопрос, которого никто по-настоящему не задавал. Важен не тот вопрос, есть ли где-то в помещении хорошие кости. Важно, достались ли они твоей партии, каждому броску, сегодня вечером.
Что на самом деле меняет commit-reveal?
Он превращает честность из обещания в доказательство. До начала партии сервер берёт секретное зерно и публикует его отпечаток, хеш SHA-256, который называется обязательством. Каждый бросок в партии затем выводится из этого зерна, по одному вычислению HMAC-SHA256 на бросок, по порядку. Когда партия заканчивается, сервер раскрывает зерно.
Теперь любой может проверить две вещи. Захешируй раскрытое зерно: результат обязан совпасть с обязательством, опубликованным до первого хода. Пересчитай броски: они обязаны совпасть с каждым числом, появившимся на доске. Если бы сервер изменил хоть одну кость после того, как увидел твою позицию, математика не сошлась бы. Подтасовка перестаёт быть подозрением, которое нельзя проверить, и становится ложью, которую можно поймать.
Кости, запертые до партии, не могут на неё реагировать.
В этом вся суть. Полезная подтасовка реактивна: увидеть открытую шашку и выбросить попадание. Commit-reveal лишает сервер глаз, потому что вся последовательность зафиксирована до первого хода, а любое вмешательство после обязательства обнаруживается математически. Чего он не делает, так это не делает кости добрыми. Последовательность была честной, а не милосердной. Ты по-прежнему будешь сидеть на баре в самый неподходящий момент, и теперь сможешь доказать, что это было честно.
Как проверить партию на практике?
Вот как мы построили это в Orion. Каждая партия на наших серверах несёт обязательство, сделанное до первого броска, сервер проверяет каждый живой ход у источника, а проверка завершённой партии занимает около минуты:
Открой верификатор. Зайди на orion.arthea.ai/verify в любом браузере. Ничего устанавливать не нужно, аккаунт создавать не нужно.
Введи идентификатор партии. У каждой серверной партии в Orion он есть. Вставь его.
Пусть браузер посчитает сам. Страница пересчитывает обязательство и каждый бросок через Web Crypto, локально, в твоём браузере. Наше слово в проверке не участвует. Если бы хоть одно число было изменено, пересчёт это показал бы.
Верификатор работает уже сегодня. Сама игра готова, а дверь на orion.arthea.ai/go несёт ссылки на App Store и Google Play и всегда показывает то, что доступно прямо сейчас. Так или иначе, честный ответ остаётся прежним. Да, онлайн-нарды можно подстроить. Лекарство не в более красивом обещании. Лекарство в костях, которые показывают свою работу.