Честные кости, честная игра

Каждый игрок в нарды, проигравший из-за дубля на последнем броске, задавался этим вопросом: честны ли эти кости? Это правильный вопрос к любому приложению для нард. Вот как именно генерируются наши кости, почему никто, включая нас, не может их наклонить, и как остальная часть игры тоже остаётся честной.

Проверьте любую завершённую игру сами

Слова ничего не стоят, поэтому вот та часть, которую вы можете выполнить сами. Когда партия заканчивается, мы раскрываем её серверное зерно, обязательство, опубликованное до первого броска, и все звенья, которые каждая сторона публиковала по ходу игры. Вставьте пакет раскрытия ниже или найдите игру по её идентификатору: страница заново выведет каждую кость из этой записи, тем же самым вычислением, что выполнили наши серверы, и покажет бросок за броском, совпадают ли сохранённые значения. Верить нам при этом не нужно нигде: вычисление открыто, и повторить его может кто угодно. Единственное, чего эта страница намеренно не делает, это не выдаёт зелёный значок «доказуемо честно», потому что честно заслужить его она не может. Она никогда не видит значения, которые ваше устройство записало и заблокировало до первого броска, а запись, в которой цепочка целиком заменена аккуратной подделкой, выводится здесь столь же безупречно. Исключить это может лишь побайтовое сравнение с тем, что заблокировало ваше устройство, а эти значения хранит только ваше приложение. Поэтому честный потолок этой страницы, это «согласовано», а самый сильный вердикт вам даст экран «Проверить» в приложении.

Пакет раскрывает только данные о честности: зёрна, обязательство, значения nonce и кости. Никаких имён игроков или аккаунтов в нём нет.

или

Мы обращаемся только к полям честности этой игры, никогда к личности игрока.

Когда ссылка «Проверить» в приложении открывает эту страницу, она приносит обязательство с собой, чтобы вы могли сверить его с тем, что лежит в записи. На результат ниже оно не влияет: копия, заблокированная до первого броска, есть только на вашем устройстве, и сверяет с ней проверка внутри приложения.

Клиентское зерно, которое ваше приложение записало в начале игры; оно перенесено сюда, чтобы вы могли сверить его с зёрнами из записи. Как и обязательство, на результат ниже оно не влияет: заблокированная копия хранится только на вашем устройстве, и сопоставляет с ней проверка в приложении.

Кости: доказуемо честны, бросаются на сервере

Каждый бросок в завершённой онлайн-партии производится на наших игровых серверах и доказуемо честен, причём верить нам на слово для этого не нужно. До первого броска мы публикуем обязательство к секретному зерну, из которого выйдут кости, а приложения обоих игроков привязываются к собственной цепочке; всё это замораживается в одной записи ещё до того, как кто-то бросит. Дальше каждый бросок расходует по свежему звену из цепочки каждой стороны: игрок, чей ход, публикует своё звено в начале хода, соперник отпускает своё только после того, как оно зафиксировано, и кость выводится последней. Поэтому последний неизвестный вход любой кости всегда находится по другую сторону доски. Начальные кости не исключение: ни одной из них не существует, пока обе стороны не внесли свой вклад. Значит, каждая кость, это детерминированный результат заранее зафиксированных значений: никто, включая нас, не может выбрать кость, подменить её или тихо перебросить. Это утверждение о значении уже состоявшегося броска, и дальше оно не идёт: отменена ли партия, дошло ли сообщение и у кого истекло время, остаётся за его пределами. Инструмент выше заново выводит каждую кость завершённой игры из опубликованной записи, и этот расчёт может повторить кто угодно. Чего он не может, так это подтвердить, что запись, это ваша партия: для этого нужны значения, которые ваше устройство заблокировало до игры, а их хранит только ваше приложение, поэтому последний шаг делается на экране «Проверить» в приложении.

Не менее важно и то, где происходит бросок. Кости никогда не генерируются на вашем устройстве, ваш телефон лишь показывает бросок, который сервер уже сделал. Это единственное проектное решение уничтожает целое семейство мошенничеств с костями: изменённое приложение не может перебросить, скачок задержки не может продублировать бросок, и никакая уловка на стороне клиента не может подсмотреть следующее число, потому что следующего числа нет на вашем телефоне, чтобы его прочитать: оно выводится на сервере и только после того, как обе стороны отпустили своё звено для этого хода.

И броски никогда не корректируются. Нет никакой «кривой вовлечённости», нет механик возвращения, нет поддержки для игроков в серии поражений. Генератор не знает и не заботится о том, кто выигрывает.

Доска: проверяется на каждом ходу

Честные кости мало что значили бы, если бы сама доска могла смещаться или быть подделана, поэтому игра работает по строгой модели серверного авторитета. Ваше устройство никогда не сообщает серверу, как выглядит доска, оно отправляет только ваше намерение («передвинь эту шашку с пункта 13 на пункт 8»). Сервер проверяет этот ход по официальным правилам и официальной доске; недопустимые ходы просто отклоняются, что бы ни утверждал изменённый клиент.

Затем идёт двойная проверка: с каждым обновлением состояния сервер рассылает компактный отпечаток (хеш) истинной позиции на доске. Ваше устройство вычисляет тот же отпечаток из своей локальной доски и сравнивает. Если различается хотя бы одна шашка, клиент выбрасывает свою копию и заново синхронизируется с сервером. Поэтому оба игрока в любой момент доказуемо смотрят на одну и ту же игру, рассинхронизации сами исцеляются за один цикл обмена, и нет окна, в котором можно было бы играть на устаревшей или изменённой доске.

Соперники: подбор по Glicko-2

Честность связана и с тем, против кого вы играете. Рейтинги здесь используют Glicko-2, современного преемника Эло, который отслеживает и вашу игровую силу, и уверенность системы в этой оценке, поэтому новые игроки быстро сходятся к своему истинному уровню, а не проводят пятьдесят игр ступеньками для других. Подбор соединяет вас с соперниками сопоставимого рейтинга, а рейтинговые результаты возвращаются в систему после каждой игры.

Итог: когда вы выигрываете, вы переиграли равного. Когда проигрываете, есть чему по-настоящему научиться, обычно в руководствах по стратегии.

Как на самом деле ощущаются честные кости

Вот неудобная правда: по-настоящему случайные кости ощущаются более полосатыми, чем ожидает большинство. Настоящая случайность даёт четыре дубля подряд, танцы захода против доски с одним пунктом и чудеса на последнем броске, ровно с теми частотами, которые предсказывает теория вероятностей. Бросок с шансом 17/36 промахивается два раза подряд чаще, чем в четверти случаев. Память хранит возмутительное и отбрасывает рутину, вот почему у каждого опытного онлайн-игрока есть история о «подкрученных костях», и ни один статистический аудит здесь ни разу её не подтвердил.

Если хотите откалибровать свои инстинкты, руководство по основам вероятности раскладывает настоящие числа: 36 комбинаций, шансы попадания на каждой дистанции, шансы захода с бара. Понимание того, что любое конкретное число выпадает 11 раз из 36, превращает «невозможное невезение» во «вторник».

Хотите более глубокую техническую версию, классы генераторов, то, как работает доказательство commit-reveal, и психологию «подкрученных» полос? Об этом есть в блоге: как на самом деле работает серверный ГСЧ.

Наше обязательство

  • Кости, созданные на сервере и доказуемо честные: никогда не бросаются на устройстве, никогда не подстраиваются под игрока или ситуацию и выводятся из входных данных, которые обе стороны фиксируют до первого броска; по окончании игры каждая кость заново выводится из опубликованной записи, а принадлежность партии именно вам подтверждает приложение.
  • Применение правил в источнике: каждый ход проверяется сервером; изменённые клиенты ничего не получают.
  • Непрерывная проверка доски: сверка хешем при каждом обновлении, самоисцеление при любом несоответствии.
  • Подбор на основе мастерства: рейтинги Glicko-2 и подбор по рейтингу.

Честные кости означают, что единственное преимущество, остающееся за столом, это мастерство, а мастерству можно научиться. Начните с правил, оттачивайте его стратегией и проверьте вживую: стол ниже бесплатный, в вашем браузере, без установки.

Часто задаваемые вопросы

Подкручены ли кости в онлайн-нардах?

Нет, и верить нам на слово для этого не нужно. В завершённой онлайн-партии каждый бросок выходит из данных, зафиксированных до игры: мы публикуем обязательство к нашему секретному зерну, приложения обоих игроков привязываются к собственной цепочке, и дальше каждый бросок расходует по свежему звену с каждой стороны; тот, чей ход, публикует первым, а соперник отпускает своё звено только после того, как первое зафиксировано. Ни одной кости не существует, пока обе стороны не внесли вклад, поэтому никто, включая нас, не может выбрать кость, подменить её или тихо перебросить; это касается значения уже состоявшегося броска и не идёт дальше: отменённая партия, недоставленное сообщение и то, у кого истекло время, лежат за пределами этого доказательства. Каждый бросок завершённой игры может заново вывести кто угодно из опубликованной записи на этой странице, а подтверждение, что запись это именно ваша партия, шаг для приложения: у него есть значения, которые ваше устройство заблокировало до игры. Кости никогда не создаются на вашем телефоне и никогда не подстраиваются, чтобы помочь игроку или навредить ему, управлять играми или влиять на исход.

Почему мне кажется, что мне выпадают кости хуже, чем сопернику?

Потому что человеческая память необъективна: болезненные удары запоминаются, обычные броски забываются. В одной партии удача с костями действительно колеблется, это и есть нарды. Но на многих партиях всё выравнивается в точности, и те, кто выигрывает стабильно, принимают лучшие решения при том же распределении бросков. Наш справочник вероятностей показывает, как выглядят настоящие шансы.

Может ли соперник смошенничать или изменить доску?

Нет. Единственная инстанция в партии, это сервер: он создаёт кости, проверяет, что каждый пробуемый ход допустим, и применяет его к официальной доске. Изменённый клиент не может отправить недопустимый ход, сервер просто отклоняет всё, что не разрешено правилами, а доски обоих игроков при каждом обновлении непрерывно сверяются с доской сервера с помощью криптографического хеша.

Как подбор соперников остаётся честным?

Рейтинги используют систему Glicko-2, современное развитие Elo, которое отслеживает не только вашу силу, но и то, насколько система в ней уверена. Подбор сводит вас с соперниками сопоставимого рейтинга, так что победы приходят от превосходства над равными, а не от охоты на новичков.

Примените знания на практике

Быстрее всего нарды осваиваются в игре. Сыграйте с реальными соперниками прямо в браузере: бесплатно, без установки и без регистрации.

Играть в нарды бесплатноВ браузере · без установки