Честные кости, честная игра
Каждый игрок в нарды, проигравший из-за дубля на последнем броске, задавался этим вопросом: честны ли эти кости? Это правильный вопрос к любому приложению для нард. Вот как именно генерируются наши кости, почему никто, включая нас, не может их наклонить, и как остальная часть игры тоже остаётся честной.
Проверьте любую завершённую игру сами
Слова ничего не стоят, поэтому вот доказательство, которое вы можете запустить сами. Когда партия заканчивается, мы раскрываем её серверное зерно и обязательство, которое опубликовали до первого броска. Вставьте этот пакет раскрытия ниже, и эта страница заново выведет каждую кость с нуля, ровно те же вычисления, что выполнили наши серверы, и скажет вам, совпадают ли кости. Она открыто воспроизводит математику наших костей: чистый повторный вывод доказывает, что каждая кость следует из раскрытого зерна, а значит ни один бросок не был подменён или переброшен. Чтобы получить полный зелёный результат «доказуемо честно», добавьте клиентское зерно, которое ваше приложение записало в начале игры: это доказывает, что была подмешана ваша собственная энтропия, а значит кости не могли быть выбраны и заранее.
Кости: доказуемо честны, бросаются на сервере
Каждый бросок в каждой игре создаётся генератором случайных чисел, работающим на наших игровых серверах, и он доказуемо честен. Перед самым первым броском мы публикуем обязательство, криптографический отпечаток секретного зерна, из которого возьмутся кости. Когда партия заканчивается, мы раскрываем это зерно, и любой может заново вывести из него каждую кость и сверить её с обязательством, которое мы зафиксировали заранее. Не верьте нам, проверьте сами: инструмент выше делает именно это. Поскольку подмешано и ваше собственное клиентское зерно, кости не могут быть выбраны, подменены или переброшены никем, включая нас.
Не менее важно и то, где происходит бросок. Кости никогда не генерируются на вашем устройстве, ваш телефон лишь показывает бросок, который сервер уже сделал. Это единственное проектное решение уничтожает целое семейство мошенничеств с костями: изменённое приложение не может перебросить, скачок задержки не может продублировать бросок, и никакая уловка на стороне клиента не может подсмотреть следующее число, потому что следующего числа нигде не существует, пока сервер его не создаст.
И броски никогда не корректируются. Нет никакой «кривой вовлечённости», нет механик возвращения, нет поддержки для игроков в серии поражений. Генератор не знает и не заботится о том, кто выигрывает.
Доска: проверяется на каждом ходу
Честные кости мало что значили бы, если бы сама доска могла смещаться или быть подделана, поэтому игра работает по строгой модели серверного авторитета. Ваше устройство никогда не сообщает серверу, как выглядит доска, оно отправляет только ваше намерение («передвинь эту шашку с пункта 13 на пункт 8»). Сервер проверяет этот ход по официальным правилам и официальной доске; недопустимые ходы просто отклоняются, что бы ни утверждал изменённый клиент.
Затем идёт двойная проверка: с каждым обновлением состояния сервер рассылает компактный отпечаток (хеш) истинной позиции на доске. Ваше устройство вычисляет тот же отпечаток из своей локальной доски и сравнивает. Если различается хотя бы одна шашка, клиент выбрасывает свою копию и заново синхронизируется с сервером. Поэтому оба игрока в любой момент доказуемо смотрят на одну и ту же игру, рассинхронизации сами исцеляются за один цикл обмена, и нет окна, в котором можно было бы играть на устаревшей или изменённой доске.
Соперники: подбор по Glicko-2
Честность связана и с тем, против кого вы играете. Рейтинги здесь используют Glicko-2, современного преемника Эло, который отслеживает и вашу игровую силу, и уверенность системы в этой оценке, поэтому новые игроки быстро сходятся к своему истинному уровню, а не проводят пятьдесят игр ступеньками для других. Подбор соединяет вас с соперниками сопоставимого рейтинга, а рейтинговые результаты возвращаются в систему после каждой игры.
Итог: когда вы выигрываете, вы переиграли равного. Когда проигрываете, есть чему по-настоящему научиться, обычно в руководствах по стратегии.
Как на самом деле ощущаются честные кости
Вот неудобная правда: по-настоящему случайные кости ощущаются более полосатыми, чем ожидает большинство. Настоящая случайность даёт четыре дубля подряд, танцы захода против доски с одним пунктом и чудеса на последнем броске, ровно с теми частотами, которые предсказывает теория вероятностей. Бросок с шансом 17/36 промахивается два раза подряд чаще, чем в четверти случаев. Память хранит возмутительное и отбрасывает рутину, вот почему у каждого опытного онлайн-игрока есть история о «подкрученных костях», и ни один статистический аудит здесь ни разу её не подтвердил.
Если хотите откалибровать свои инстинкты, руководство по основам вероятности раскладывает настоящие числа: 36 комбинаций, шансы попадания на каждой дистанции, шансы захода с бара. Понимание того, что любое конкретное число выпадает 11 раз из 36, превращает «невозможное невезение» во «вторник».
Хотите более глубокую техническую версию, классы генераторов, то, как работает доказательство commit-reveal, и психологию «подкрученных» полос? Об этом есть в блоге: как на самом деле работает серверный ГСЧ.
Наше обязательство
- Кости, генерируемые на сервере, доказуемо честные: никогда не бросаются на устройстве, никогда не корректируются под игрока или ситуацию, и могут быть проверены кем угодно после окончания игры.
- Применение правил в источнике: каждый ход проверяется сервером; изменённые клиенты ничего не получают.
- Непрерывная проверка доски: сверка хешем при каждом обновлении, самоисцеление при любом несоответствии.
- Подбор на основе мастерства: рейтинги Glicko-2 и подбор по рейтингу.
Честные кости означают, что единственное преимущество, остающееся за столом, это мастерство, а мастерству можно научиться. Начните с правил, оттачивайте его стратегией и проверьте вживую: стол ниже бесплатный, в вашем браузере, без установки.