Блог Playgridia

Честные ли кубики в онлайн-нардах? Проверь доказательства

Честные ли кубики в онлайн-нардах — вот честный ответ: обычно ты не можешь этого знать, потому что тот, кто бросает кубик, же генерирует результат и просто говорит: «верь мне». На этой доске всё иначе — кубики генерируются методом фиксация–раскрытие (commit–reveal), и каждый бросок ты сможешь пересчитать и проверить самостоятельно, даже после окончания партии.

«Это выглядело как хитрость» — не доказательство

Выпал двойной шестерок подряд или в критический момент не пришло нужное число — действительно, раздражает. Но память наша плохая свидетельница в делах о кубиках. Из 36 возможных исходов один случается в среднем один раз из 36 бросков; три подряда одного же числа — тоже закон природы. Мозг запоминает плохие броски, забывает пятьдесят пошедших нормально. Сомнение твое понятно, но между «мне показалось» и «я проверил» — разница, и ниже методика даёт тебе второе.

Метод: фиксация–раскрытие (Commit–Reveal)

За мгновение до первого броска сервер генерирует 32-байтовое секретное число (serverSeed) и публикует только его SHA-256 отпечаток — сам секрет скрыт. Порядок здесь критичен: обязательство выходит публично до первого броска, когда никто не знает зерно и никакие кубики ещё не летели, — значит, сервер потом не может вернуться и выдумать другое число, потому что отпечаток уже не совпадет.

Потом каждый игрок добавляет своё зерно (client seed) — любой текст, до 40 символов; если ты ничего не вводишь, случайное 8-байтовое зерно генерируется автоматически. Твоё зерно входит в расчет каждого кубика, значит, сервер не может угадать, какое зерно ты потом добавишь, и выбрать секрет, который подойдет.

Каждый бросок считается по формуле HMAC-SHA256(serverSeed, "зерноБелых:зерноЧёрных:nonce"); nonce — это порядковый номер броска в партии. Два кубика получаются из первых двух байтов этого вывода — но не каждого байта, а только тех, что меньше 252. Вот почему: если взять значение байта и разделить его на 6 (byte % 6), низкие значения будут встречаться примерно на 1,6 % чаще, потому что 256 не делится на 6 нацело. А 252 = 6×42 ровно, поэтому каждый байт ниже этого предела представляет все шесть значений с идеально равной вероятностью. Это деталь, которая показывает: кто-то это дело серьезно взял.

Когда партия кончится, секретное число (serverSeed) раскрывается. Теперь не только два игрока, но кто угодно может пересчитать все броски партии и сравнить с опубликованным отпечатком.

ЭтапЧто происходитКто может проверить
1. ОбязательствоСервер генерирует 32-байтовое секретное число, публикует только SHA-256 отпечатокВсе — отпечаток выходит до первого броска
2. ЗерноКаждый игрок добавляет своё зерно — до 40 символов свободного текстаИгроки — знают своё зерно
3. БросокКаждый кубик из HMAC-SHA256(секретное число, зёрна:nonce), используются байты ниже 252Никто до раскрытия — только после
4. РаскрытиеПосле партии опубликовано само секретное числоВсе — теперь есть формула
5. ПроверкаКаждый бросок пересчитан и сравнен с отпечаткомВсе — в браузере, без веры на слово серверу

Как проверить самому

На доске есть панель честности: показывает обязательство (отпечаток), помечает его как «запечатан», пока секретное число не раскрыто. После партии открывается страница разбора, которая переделает всю проверку для тебя. Один нюанс здесь важен: проверяющий код в браузере не импортирует код сервера — написан заново независимо, с помощью встроенного Web Crypto браузера. То есть доказательство не зависит от того, веришь ли ты имплементации сервера; твой собственный браузер делает свой расчет. Кроме того, есть и серверный эндпоинт, который возвращает результат с названием алгоритма — это не само доказательство, а удобство к коду. Завершённые партии с раскрытыми зарядами кубиков хранятся 400 дней, значит, даже подозрение о матче с прошлого сезона ты можешь проверить до сих пор.

На доске нарды два кубика показали 4 и 1, счёт пипсов для GrandDuke210 равен 153, для бота AnchorAda — 136; шашки разбросаны в контакте.
Бросок видно прямо на доске — счёт пипсов показывается рядом с именем каждого игрока в реальном времени.

Тема доски кубик не поменяет

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

Даже порядок начинающего определяет тот же метод

Начальный бросок, который определяет, кто ходит первым, — тоже часть того же проверяемого цепочки. Два игрока как бы держат по одному кубику одного общего броска — один белый кубик, один чёрный; чей выше, тот начинает и играет оба кубика этого броска своим ходом. Если кубики упали одинаково, это пересчитывается — но пересчет тоже в цепочке, потому что порядковый номер (nonce) увеличивается и записывается. Сколько раз выпал ничья до настоящего начала, это отправляется клиенту отдельно, значит, даже этот счет не скрыт от тебя.

На доске нарды кубики показали 1 и 3; белые шашки собраны большой стопкой в 12 пунктов (12 по счету), чёрный соперник начал собирать свои шашки в правом углу. Счёт пипсов 52 к 7, куб удвоения показывает 2, матч-скор 0–0/5.
Уже на стадии выброса: разница в пипсах (52 к 7) говорит, матч давно решен. Проверяемость кубиков не отменяет проигрыш — только убирает причину для спора о них.

Что этот метод не доказывает

Честно скажу: фиксация–раскрытие доказывает, что кубики не менялись после обязательства и что все могут их пересчитать. Ты не можешь угадать, какое секретное число сервер выбрал до объявления обязательства — но это не имеет значения, потому что твоё зерно тоже в расчете, и сервер не может выбрать результат без твоего вклада. Вот на что претендует метод — не больше, не меньше; никакого пустого обещания «всё доказано». Мы честны в границах утверждения.

Свою удачу можешь и измерить

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

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

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

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

На этой доске кубики генерируются методом фиксация–раскрытие: сервер публикует SHA-256 отпечаток секретного числа до первого броска, раскрывает само число после партии, и каждый может пересчитать все броски и сравнить с отпечатком. Сервер не может изменить результат после публикации обязательства, потому что отпечаток не совпадет.

Как узнать, что кубики генерируются методом фиксация–раскрытие?

На доске видна панель честности — показывает отпечаток (обязательство) и помечает его как «запечатан», пока число не раскрыто. После партии страница разбора пересчитает все броски и проверит; проверка работает в браузере независимым кодом, отдельно от сервера.

Могу я выбрать своё зерно кубика?

Да, между партиями ты можешь установить своё зерно (client seed) — любой текст до 40 символов. Если ничего не вводишь, случайное 8-байтовое зерно создаётся автоматически; в обоих случаях твоё зерно входит в расчет каждого кубика.

Тема доски или цвет влияют на кубики?

Нет. Код расчета кубика не принимает никакие параметры доски или темы, значит, какую доску ты выбрал, будущие кубики не изменятся.

Я могу проверить кубики старой партии потом?

Да, завершённые партии с раскрытыми зарядами сохраняются 400 дней. За это время ты можешь открыть страницу разбора и пересчитать каждый бросок старой партии.

Как узнать, была ли моя удача действительно плохой?

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

Нарды

Похожие статьи