НардыКак это устроено

Подкручены ли кости в нардах онлайн? Мы посчитали 438 679 бросков

За все приложения ручаться не можем, но в Boardgammon, где онлайн играют в короткие нарды, кости не подкручены: в коде сервера нет ничего, что выбирало бы бросок или меняло его. А чувство, что у соперника одни дубли, понятно: честные кости сами ложатся сериями, а неудача задевает сильнее удачи. Наш подсчёт 438 679 бросков не вышел за рамки того, что дают честные кости, хотя шестёрок чуть больше среднего; а каждый бросок онлайн-партии можно пересчитать по его записи — с оговорками, о которых ниже.

Автор: Boardgammon12 мин чтения

Деревянная доска для коротких нард в начале партии: светлые шашки стоят в начальной расстановке, тёмные уже заняли свой 5-й пункт, а на доске лежат четыре кости, и на каждой выпала шестёрка.
Дубль 6-6 играют четыре раза, поэтому и костей на доске четыре. У честных костей такой дубль выпадает в среднем раз в 36 бросков.Изображение: Boardgammon

«Эх, зарики-кошмарики, что ж вы валитесь дублями, окаянные, да не мне, а сопернику?» Так в 2016 году начиналась заметка «Кто кидает кости в нардах?» в новостях Мини-игр Mail.ru. Объяснение в ней было простое: броски выдаёт генератор случайных чисел, а кто сомневается в его честности, пусть сыграет 200–300 партий, записывая все ходы, или, если лень, поверит на слово[1].

Вопрос этот задают давно. В 1991 году Джим Хёрли писал в группе новостей rec.games.backgammon о программе Gammontool, что ему всегда казалось, будто она жульничает, хотя исходный код у него есть и никакого перекоса в пользу бросающего в нём нет[2]. В 1997 году Джерри Тезауро, подписавшийся как автор программы TD-Gammon, заметил, что подозревают не только её, но и, по сути, любую программу, которая играет достаточно сильно, чтобы часто выигрывать[3]. А в руководстве к GNU Backgammon есть отдельный раздел для тех, кому кажется, что бот жульничает и ему всегда идут хорошие кости. Ответ там короткий: в настройках по умолчанию генератор костей не жульничает[4].

Онлайн-партии в Boardgammon — это короткие нарды (бэкгаммон), с боем, баром и кубом удвоения. Для них ответ такой: кости не подкручены. Это наше утверждение, и опирается оно на код: в нём нет ничего, что выбирало бы бросок, меняло его или перебрасывало, а позиция, счёт и сами игроки в расчёт не попадают[5]. Код у нас закрытый, поэтому одного нашего слова мало. Ниже — цифры и способ проверки: наш подсчёт 438 679 бросков и запись каждого броска онлайн-партии, по которой его может пересчитать любой желающий. У обоих есть пределы, о них мы тоже скажем. Коротко весь метод описан на странице о том, как проверяется честность бросков.

Почему кажется, что у соперника одни дубли?

Первая причина — серии. Честные кости не раздают удачу по очереди, а в сериях человеку видится умысел. Бар-Хиллел и Вагенаар, подводя в 1991 году итог исследованиям о том, как люди оценивают и сами составляют случайные ряды, писали: в по-настоящему случайных рядах люди видят скопления и серии и ждут больше чередования и более коротких серий, чем там есть[6].

Это хорошо видно по исследованию Гиловича, Валлоне и Тверски, опубликованному в 1985 году. Авторы показали 100 болельщикам баскетбола по шесть рядов из попаданий и промахов и попросили отнести каждый к одному из трёх видов: случайные броски, серия или чередование. Ряд, где попадание и промах сменяли друг друга так же часто, как орёл и решка при подбрасывании монеты (вероятность смены 0,5), случайным назвали только 32% болельщиков, а серией — 62%. Лучшими образцами случайности им показались ряды, где смена шла куда чаще, с вероятностью 0,7 и 0,8[7].

Это исследование о бросках по кольцу в баскетболе, а не о костях. Его главный вывод о самих баскетболистах (что сериями они на самом деле не попадают) в 2018 году оспорили Миллер и Санхурхо. Они доказали, что мера, которой пользовались авторы, даёт систематический перекос, а после поправки давние выводы той работы переворачиваются[8]. Нам из неё нужно только то, как болельщики оценивали ряды.

Вторая причина — то, как мы понимаем справедливость. Канеман и Тверски ещё в 1972 году писали, что люди считают случай непредсказуемым, но в сущности справедливым: даже от короткой серии подбрасываний монеты ждут примерно поровну орлов и решек[9]. Партия в нарды — как раз такая короткая серия. Если за несколько ходов у соперника два дубля, а у вас ни одного, кажется, что справедливость нарушена, хотя кости никому ничего не должны.

Третья причина — неудача весит больше удачи. В 2001 году Баумайстер и его соавторы свели вместе исследования по психологии и пришли к выводу: плохие события действуют на человека сильнее хороших того же рода — в повседневной жизни, в отношениях, в учёбе, а критика задевает сильнее похвалы[10]. О нардах и костях в этом обзоре нет ни слова. Но один пример из него очень похож на игру. Люди ставили на спортивные матчи, выигрывали или проигрывали деньги, а примерно через неделю дольше обсуждали матчи, на которых проиграли, чем те, на которых выиграли (это исследование Гиловича, и мы знаем его по пересказу в обзоре)[10]. Если за доской всё устроено так же, понятно, почему дубль соперника, который вас добил, помнится дольше собственного.

Сколько дублей выпадает на честных костях

У двух костей 36 равновероятных исходов. Шесть из них — дубли, поэтому дубль выпадает в среднем раз в шесть бросков (16,67%), а какой-то определённый, скажем 6-6, — раз в 36 бросков (2,78%). Каждый бросок не зависит от предыдущих: у костей нет памяти, и после трёх неудачных бросков удачный вероятнее не становится[11]. А по правилам коротких нард дубль играется четыре раза[12], так что не заметить его трудно.

Возьмём для примера партию, в которой каждый бросает кости 25 раз (число условное). Тогда у одного игрока:

  • в среднем выпадет около четырёх дублей (4,17);
  • хотя бы один дубль будет почти наверняка, с вероятностью 98,95%;
  • два дубля подряд хотя бы раз случатся с вероятностью 44,78%, то есть почти в каждой второй партии;
  • три дубля подряд — с вероятностью 8,67%, примерно в одной партии из 12.

А шанс, что у соперника за его 25 бросков окажется хотя бы на два дубля больше, чем у вас, — 28,28%. Ровно такой же шанс у вас против него[11]. Всё это не моделирование, а точный расчёт по всем возможным последовательностям из 25 бросков[11].

Теперь представьте 20 таких партий. Вероятность, что хотя бы один соперник хоть раз выбросит три дубля подряд, — 83,68%[11]. Скорее всего, такой соперник вам встретится, и запомнится, вероятно, именно он.

Столбчатая диаграмма для партии, в которой каждый бросает кости 25 раз. У игрока хотя бы один дубль выпадет с вероятностью 99%, два дубля подряд хотя бы раз — 45%, три подряд — 9%; у соперника окажется хотя бы на два дубля больше, чем у него, — 28%.
У одного игрока два дубля подряд бывают почти в каждой второй партии, три подряд — примерно в одной партии из 12. Так ведут себя честные кости.Изображение: Boardgammon · Можно использовать свободно, со ссылкой на эту страницу (CC BY 4.0).

Что показали 438 679 бросков

Ощущение можно сверить с подсчётом. Мы взяли все броски, которые есть в записи сервера, из всех онлайн-партий Boardgammon, в которых играл человек, — броски обеих сторон, с первого такого броска 18 мая 2026 года до конца 10 октября (по UTC). Считали 11 октября 2026 года. Получилось 438 679 бросков, то есть 877 358 костей, и все они получены по одному и тому же опубликованному алгоритму. Все эти партии — короткие нарды по стандартным правилам, с обычной начальной расстановкой; других вариантов игры среди них нет[13].

Дублей среди них 73 179, или 16,68%. Честные кости дают 16,67%[13]. По отдельности дубли выпадали от 12 053 раз (1-1) до 12 447 (6-6), а честные кости дали бы в среднем по 12 186 каждого. Дубль 6-6 оказался самым частым из всех 36 исходов, на 2,15% чаще среднего, а дубль 1-1 выпадал на 1,09% реже среднего. Остальные ближе к среднему: 2-2 на 0,48% выше, 3-3 на 0,19% выше, 4-4 на 0,18% ниже, 5-5 на 1,01% ниже[13]. Так что одинаково часто дубли не выпадали.

Столбчатая диаграмма: сколько раз выпал каждый из шести дублей среди 438 679 бросков, от 12 053 для 1-1 до 12 447 для 6-6; честные кости дали бы в среднем по 12 186.
Столбцы почти одинаковой длины: самый частый дубль, 6-6, выпадал на 2,1% чаще среднего, самый редкий, 1-1, на 1,1% реже.Изображение: Boardgammon · Можно использовать свободно, со ссылкой на эту страницу (CC BY 4.0).

Много это или мало, показывает стандартный тест хи-квадрат. По всем 36 исходам он даёт 42,25 при 35 степенях свободы (p = 0,19): с честными костями таблица с таким же или ещё большим разбросом выходит примерно в 19 случаях из 100[13]. К тому же какой-то из 36 исходов обязательно окажется самым частым. При честных костях и подсчёте такого объёма самый частый исход уходит от среднего не меньше, чем наш дубль 6-6, примерно в одном подсчёте из четырёх[13].

Теперь грани. Среди 877 358 костей единицы составили 16,62%, двойки — 16,71%, тройки — 16,67%, четвёрки — 16,60%, пятёрки — 16,64%, шестёрки — 16,76%. У честной кости на каждую грань приходится 16,67%. Чаще всего выпадала шестёрка, реже всего — четвёрка[13].

Столбчатая диаграмма: доля каждой грани среди 877 358 костей, от 16,60% у четвёрок до 16,76% у шестёрок; у честной кости на каждую грань приходится 16,67%.
Шестёрок больше всего, четвёрок меньше всего. Тест по шести граням показывает: у честных костей разброс не меньше этого бывает примерно 9 раз из 100.Изображение: Boardgammon · Можно использовать свободно, со ссылкой на эту страницу (CC BY 4.0).

Тест по шести граням даёт 9,62 при 5 степенях свободы (p = 0,09): у честных костей разброс не меньше этого бывает примерно 9 раз из 100. Это нечасто, но и редкостью такое не назовёшь[13].

Если смотреть на одни шестёрки, картина кажется тревожнее. У честных костей грань, названная до подсчёта, уходит от своей доли не меньше, чем шестёрки (в ту или другую сторону), примерно 2 раза из 100. Но шестёрки мы выделили уже после подсчёта, потому что они вышли вперёд, а это другой вопрос: какая-то грань всегда окажется дальше всех от своей доли, и у честных костей она уходит так же далеко или дальше примерно в 11 случаях из 100[13]. Выбрать подозрительную грань задним числом и проверить её отдельно — значит преувеличить. Подсчёт не показывает, что кости тянут к шестёркам, но и не исключает этого[13].

Вот все 36 исходов, чтобы вы могли повторить тест сами. По строкам — первая кость, по столбцам — вторая. Ожидаемое число в каждой клетке — 12 185,5 (438 679 : 36), степеней свободы — 35[13].

Первая / вторая 1 2 3 4 5 6
1 12 053 12 005 12 222 12 134 12 225 12 188
2 12 049 12 244 12 386 12 165 12 256 12 299
3 12 193 12 311 12 209 11 973 12 178 12 082
4 12 242 12 303 12 207 12 163 12 161 12 127
5 12 268 12 053 12 008 12 015 12 063 12 389
6 12 179 12 311 12 301 11 993 12 277 12 447

Такие подсчёты делали и раньше. В апреле 1997 года Стивен Тёрнер, подписавший сообщение адресом Статистической лаборатории в Кембридже, разобрал 10 593 121 бросок на сервере FIBS, где играли в короткие нарды. Собирать броски он начал незадолго до того, как в меньшей выборке другого человека нашли больше дублей, чем должно быть при честных костях. В выборке Тёрнера дубли составили 16,651%, и тест хи-квадрат признаков перекоса не нашёл[14]. Сам Тёрнер оговорился, что такая проверка ловит не все возможные перекосы[14].

Чего не покажет никакой подсчёт

Такой подсчёт отвечает на один вопрос: не перекошены ли кости в целом. Таблица останется той же, если те же броски переставить местами или раздать игрокам по-другому. Поэтому по ней нельзя понять, не подменили ли какой-то один бросок и не подобрали ли его под момент, и нельзя сказать, часто ли дубль шёл за дублем: порядка бросков в ней нет[11]. Да и проверили мы по ней лишь несколько закономерностей: долю дублей, разброс 36 исходов и разброс шести граней. И считали её мы сами.

Вот зачем каждый бросок онлайн-партии в Boardgammon фиксируется ещё до того, как выпадет, а потом его может пересчитать по записи любой желающий.

Как бросок фиксируют заранее

Вот что происходит с каждым броском онлайн-партии в реальном времени, когда кости бросаете вы сами.

  1. Перед броском сервер берёт новый секрет, 32 случайных байта, только для этого броска. Сам секрет он не показывает, а сообщает его отпечаток — строку, которая получается из секрета по алгоритму SHA-256. С этого момента сервер связан своим секретом: подменить его незаметно он уже не может, хотя сам бросок ещё не сделан. Секрет у каждого броска свой и берётся прямо перед ним, так что кости всей партии заранее не определены[5].
  2. SHA-256 входит в американский стандарт безопасного хеширования: по отпечатку практически невозможно найти исходные данные или подобрать другие данные с тем же отпечатком[15]. Проще говоря, узнать секрет по отпечатку нельзя, а другой секрет с тем же отпечатком не подобрать.
  3. Когда вы бросаете кости, приложение на вашем устройстве выбирает своё случайное число, 16 случайных байтов, и отправляет его серверу вместе с просьбой раскрыть бросок. Это второе число броска, и без него сервер бросок не раскроет. Секрета вы в этот момент не знаете, поэтому подогнать своё число под нужный бросок не можете[5].
  4. Кости вычисляются по HMAC-SHA256. HMAC — опубликованный способ получать отпечаток с секретным ключом[16]. Ключом здесь служит секрет сервера, а на вход идут ID партии, ID броска, счётчик и второе число. Счётчик растёт с каждым начатым броском и может перескочить через значение, так что это не номер броска в партии. Больше в расчёт не входит ничего: ни позиция, ни счёт, ни то, кто ведёт и платит ли игрок. Подыграть отстающему или наказать того, кто не платит, этому расчёту просто нечем[5].
  5. Из результата получаются две кости по правилу, при котором у каждой грани ровно один шанс из шести. Правило расписано на странице аудита[5].
  6. Секрет сервер раскрывает вместе с броском. Для бросков, которые делаете вы, и только для них приложение проверяет, что раскрытый секрет даёт тот самый отпечаток, который пришёл до броска, и повторяет расчёт по числам из ответа сервера. Делает оно это в фоне и результата не показывает. Броски соперника на устройстве не проверяются[5].
  7. Пока раскрытый бросок не сыгран, сервер не начнёт новый, так что неудачный бросок не перебросишь[5]. Да и считает кости сервер, а приложение только добавляет своё число и проверяет результат. Каждый ход сервер сверяет с правилами по броску, который хранит у себя, поэтому изменённое приложение не может ни выдумать бросок, ни сыграть ход не по правилам[5].

Когда бросок делает сам сервер и ничьё устройство в этом не участвует, второе число он выбирает тоже сам. Так бывает, например, в партии по переписке, где каждый ходит, когда ему удобно: бросок за того, чья очередь, там делает сервер[5].

Что запись доказывает, а что нет

Когда второе число присылает ваше устройство, сервер фиксирует секрет раньше, чем это число появляется, и в момент фиксации знать бросок не может. Но это рассказ о том, в каком порядке идут шаги в нашем коде; сама запись этого не доказывает[5].

Проверка в приложении показывает две вещи: секрет был зафиксирован до броска, и кости следуют из чисел, которые стоят в записи. Для этой проверки приложение берёт у себя только ID партии и отпечаток, полученный при фиксации, а ID броска, счётчик и второе число — из ответа сервера. Своё число с тем, что пришло в ответе, оно не сверяет, а счётчик вместе с отпечатком не приходит вовсе. Значит, проверка не показывает, что в записи стоит именно число вашего устройства, и не исключает, что сервер выбирал среди счётчиков, уже увидев ваше число[5].

Когда оба числа выбирает сервер, они у него на руках ещё до броска. Запись и тогда показывает, что бросок не меняли после того, как его записали. А вот доказать, что сервер не знал бросок заранее или не выбрал его сам, она не может. Для таких бросков у нас есть только подсчёт, со всеми его пределами[5].

Как проверить свой бросок

  1. После онлайн-партии в реальном времени на экране результата есть ссылка «Честные кости · Проверить». Она открывает список бросков этой партии, а над списком стоит ID партии, который начинается с mat_. У каждого броска показан вердикт самого сервера. В партии по переписке такой ссылки нет: когда она заканчивается, вы остаётесь на экране самой партии[5].
  2. Кнопки, которая скопировала бы ID, в приложении нет, как нет и ссылки из этого списка на публичную страницу аудита. Поэтому ID придётся перепечатать в поле на нашей странице про доказуемо честные кости: оно откроет страницу аудита этой партии по адресу api.boardgammon.com/audit/ плюс ID[17].
  3. Страница аудита только на английском, на каком бы языке ни были приложение и сайт[5]. Названия там технические: отпечаток называется commitment, секрет — server seed, второе число — client entropy, счётчик — nonce[5]. Для каждого броска обеих сторон на ней указаны отпечаток, раскрытый секрет, второе число, счётчик и кости, и при каждом открытии страница проверяет их заново[5].
  4. Внизу страницы есть короткая программа на Python, которой ничего, кроме самого Python, не нужно. В неё уже подставлены числа первого броска партии. Программа вычисляет отпечаток раскрытого секрета и сравнивает его с тем, что на странице, потом повторяет расчёт костей и сравнивает кости, а при любом расхождении останавливается с ошибкой. Скопируйте её в файл, скажем check.py, и запустите в Python 3: в терминале это команда python3 check.py. Если всё сошлось, программа напечатает verified: и кости броска. Тот же рецепт годится для любой строки таблицы[5].

Если проверка прошла, значит, кости получены именно из чисел этой записи. Кости, которые из своих чисел не следуют, проверку не проходят[5].

Одно исключение. Если вы сами выбрали в приложении партию против компьютера, она идёт на вашем устройстве, и кости обеим сторонам выдаёт один генератор случайных чисел прямо в приложении; компьютер получает свой бросок уже готовым и только потом выбирает ход. Сервер эти броски не делает, поэтому у них нет ни отпечатка, ни записи для проверки, и в подсчёт они не вошли. Это описание кода, а не доказательство[5].

Сколько в партии решила удача

Если кажется, что партию у вас отняли кости, есть способ проще отпечатков. На экране результата онлайн-партии в реальном времени, которую вы сыграли, есть кнопка «Смотреть анализ матча». Когда анализ будет готов, на кнопке появится ещё и число грубых ошибок, если они были, — ошибок обоих игроков вместе. Кнопка открывает анализ партии. Пока сервер разбирает партию, там видно только, что анализ идёт. Когда он закончит, появятся сразу и удача (одно число для белых, одно для чёрных), и PR. По двум числам удачи видно, кому в партии больше везло с костями[18]. PR здесь — одно число на всю партию, и складывается оно из ходов обоих игроков. Оценивает PR ходы, а не результат, поэтому от удачи не зависит[18]. Решения по кубу удвоения в него не входят: анализ показывает их отдельно. Что такое PR в нардах и какие его значения считаются хорошими, мы рассказываем отдельно.

Проверить всё это на себе проще всего за доской: сыграйте в короткие нарды в браузере, а после онлайн-партии в реальном времени откройте «Честные кости · Проверить».

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

Источники

  1. Мини-игры Mail.ru (2016, 16 ноября). «Кто кидает кости в нардах?» Заметка в новостях сообщества Мини-игр Mail.ru.
  2. Hurley, J. (1991, September 24). “Computer cheats, was - Information on gammontool.” Post to the newsgroup rec.games.backgammon, kept in the Backgammon Galore forum archive as “Does Gammontool cheat?”
  3. Tesauro, G. (1997, February 13). “Re: TD-GAMMON with OS/2 WARP 4.” Post to the newsgroup rec.games.backgammon, kept in the Backgammon Galore forum archive as “Does TD-Gammon cheat?”
  4. GNU Backgammon Manual V0.16, section 12.4.7, “I think the bot is cheating. It always gets good dice.”
  5. Boardgammon. The code that makes and checks the dice on our server and in our app, and the audit page it produces for each online game, read on October 11, 2026. The code is not public; every audit page prints the full recipe.
  6. Bar-Hillel, M., & Wagenaar, W. A. (1991). The perception of randomness. Advances in Applied Mathematics, 12(4), 428–454.
  7. Gilovich, T., Vallone, R., & Tversky, A. (1985). The hot hand in basketball: On the misperception of random sequences. Cognitive Psychology, 17(3), 295–314.
  8. Miller, J. B., & Sanjurjo, A. (2018). Surprised by the hot hand fallacy? A truth in the law of small numbers. Econometrica, 86(6), 2019–2047.
  9. Kahneman, D., & Tversky, A. (1972). Subjective probability: A judgment of representativeness. Cognitive Psychology, 3(3), 430–454.
  10. Baumeister, R. F., Bratslavsky, E., Finkenauer, C., & Vohs, K. D. (2001). Bad is stronger than good. Review of General Psychology, 5(4), 323–370.
  11. Boardgammon. Our own exact calculations for two fair dice, made for this article on October 11, 2026: 36 equally likely outcomes, and the chance of each count and each run of doubles for a player who rolls 25 times.
  12. Boardgammon. “Backgammon rules,” section 9, “Doubles.”
  13. Boardgammon. Our count of every dice roll on record from every online backgammon game a person played in, from May 18 to October 10, 2026: 438,679 rolls (877,358 dice). Read from the server’s dice record on October 11, 2026. All 36 counts are printed in this article.
  14. Turner, S. (1997, April 5). “Re: Randomness and FIBS dice (with 10 MILLION ROLLS!!).” Post to the newsgroup rec.games.backgammon, kept in the Backgammon Galore forum archive as “FIBS: Analysis of 10 million rolls.”
  15. National Institute of Standards and Technology (2015, August). Secure Hash Standard (SHS). FIPS PUB 180-4.
  16. Krawczyk, H., Bellare, M., & Canetti, R. (1997, February). HMAC: Keyed-hashing for message authentication. RFC 2104.
  17. Boardgammon. “Provably fair dice.” Our page with the box that opens a game’s audit page.
  18. Boardgammon. “Backgammon skill levels and PR.”
  19. Boardgammon. The code of our app’s result screen and match-analysis sheet for an online game, read on October 11, 2026. The code is not public.

Нашли ошибку или неловкую фразу? Напишите нам