nard.gg
Мова: Українська
Створити акаунт

Кубики

Усі п’ять ігор тут тримаються на тих самих двох кубиках. Ця сторінка показує, звідки беруться їхні числа, чому ніхто не може їх вибрати — і насамперед ми — і як ти перевіриш це сам.

Навіщо ця сторінка

31–45 % усіх скарг у відгуках на великі застосунки для нард стосуються кубиків — більше, ніж будь-якої іншої теми.

Ця підозра — не думка меншості. Вона є у відгуках кожною мовою, якою говорить цей сайт: кубики підкручені, суперникові випадає саме те, що йому потрібно, після покупки наступну партію програєш. Кожен, хто грав онлайн, хоч раз так думав — і здебільшого не знаходилося нікого, хто сприйняв би це всерйоз.

Звичайна відповідь — сертифікат: аудитор підтверджує, що генератор випадкових чисел у порядку. Це означає «вір аудиторові» — саме там, де ти нікому вірити не хочеш. Тому тут немає печатки, а є розрахунок, який ти можеш повторити сам, для кожної завершеної партії.

Чому жоден кидок не вибирають заднім числом

Кожна партія фіксує свої кидки до того, як вони випадуть. На початку сервер публікує контрольну суму, а наприкінці — число, з якого обчислено всі кидки; якщо одне не збігається з іншим, це можна довести.

  1. Перед партією: запечатаний конверт

    Сервер бере стартове значення з 32 випадкових байтів і публікує лише його відбиток — контрольну суму, з якої стартове значення не відновити. Від цієї хвилини воно закріплене; підмінити його так, щоб відбиток збігся, ніхто не може.

  2. Обидва гравці додають своє

    Кожен із вас вносить власний ідентифікатор, і він входить у кожен кидок. Саме цей крок пропускають обіцянки «у нас є контрольна сума» — а без нього все інше було б театром: сервер, який вибирає й ваші значення, може перебирати стартові значення, доки кидки йому не сподобаються, і лише тоді опублікувати відбиток.

  3. Якір ззовні

    До цього додається число з drand — публічного джерела випадковості, яке спільно створюють кілька незалежних операторів. Названий раунд — той, якого в момент запечатування ще не існувало. Так закривається остання лазівка: навіть якби сервер і обидва гравці були в змові, вибрати кидки заздалегідь вони не змогли б.

  4. Партія триває

    Кожен кидок обчислюється з цих частин за порядковим номером кидка. Ніщо не вирішується тієї миті, коли ти натискаєш на стаканчик, — усе було визначено до початку партії.

  5. Після партії: конверт розкривають

    Сервер публікує стартове значення. Тепер перевіряється і те, і інше: чи збігається воно з попереднім відбитком і чи виходять із нього саме ті кидки, що випали? Якщо хоч одне не збігається — це вже не підозра, а доказ, і до того ж такий, який кожен може провести, не питаючи нас.

1 Відбиток 2·3 Прив’язано до 5 Початкове значення

Розрахунок, викладений відкрито

Ось він повністю. Другої, таємної частини немає — тут усе, що потрібно кидку.

Кожен кидок — це HMAC-SHA256(початкове значення, прив’язка ‖ номер). Байти від 252 і вище відкидаються, щоб усі шість граней залишалися рівноймовірними; решта — остача від ділення на шість плюс одиниця.

Стартове значення — ключ, прив’язка — повідомлення: номер матчу, номер партії, ідентифікатори обох гравців і якір, причому перед кожною частиною стоїть її довжина. Довжини — не прикраса. Без них ідентифікатори «ab» і «c» дали б те саме повідомлення, що «a» і «bc», і гравець міг би відобразити дві різні пари на ту саму послідовність кидків.

Чому чотири значення з 256 відкидаються

256 не ділиться на шість. Якщо просто взяти остачу, грані від 1 до 4 випадають у 43 випадках із 256, а 5 і 6 — лише в 42; це перекіс близько двох з половиною відсотків, який легко довести на ста тисячах кидків. Саме це й був би той скандал, якому ця сторінка має запобігти. Тому чотири старші значення байта відкидаються й береться новий, і всі шість граней залишаються рівноймовірними.

252

використовуються, порівну на шість граней відкидаються, береться новий байт

Три способи перевірити це самому

Усе, що потрібно для перевірки, відкрите — і жоден із трьох шляхів не йде через нас.

  • Перераховано у твоєму браузері

    Кожна завершена партія має власну сторінку під «Перевірити кубики»: відбиток, прив’язка, стартове значення й усі кидки. Твій пристрій перераховує там усе криптофункцією твого ж браузера — і висновок походить від твоєї машини, а не від нашої.

  • nard.gg — перевірка кубиків

    Цей файл перераховує кубики партії з опублікованих значень. У ньому немає нічого нашого, крім самого розрахунку: він нічого не підвантажує, ні з чим не з’єднується, нікого не рахує.

    Завантажити програму перевірки — один файл, без мережі, без нас. Збережи й перевіряй ним будь-який опублікований запис будь-коли.

  • Вручну або власним інструментом

    Формула вище — це повна специфікація, а HMAC-SHA256 є в будь-якій мові програмування. Хто хоче, напише програму для перевірки на двадцять рядків і не вимагатиме від нас нічого, крім опублікованих чисел. Саме для цього вони там і стоять.

Чого ми не обіцяємо

З моменту запечатування сервер знає кидки поточної партії наперед. Прибрати це можна було б, лише якби обидві сторони фіксували значення перед кожним окремим кидком і розкривали його після, — а це зайвий обмін на кожному ході й запрошення просто відмовитися розкривати. Ми так не робимо. І пишемо про це тут, а не замовчуємо.

Зате справедливо інше: для кожної партії береться власне стартове значення, незалежне від усіх інших, — з одного нічого не випливає про наступне. І доказ лежить відкрито для кожної завершеної партії, не на запит, а сам собою.

Тридцять шість кидків

А чому все одно здається, ніби кубики проти тебе? Бо випадковість у малих кількостях виглядає нерівно. Два кубики падають тридцятьма шістьма способами, і той, кому потрібен певний, часто довго на нього чекає. Обидві таблиці тут це показують: перша — скільки кидків узагалі дістають до цієї відстані, друга — наскільки нерівно виглядає справжня випадковість у малих числах.

Два кубики випадають тридцятьма шістьма рівноймовірними способами. Вибери відстань — і таблиця покаже, які з кидків проводять шашку так далеко вільним шляхом, без перешкод посередині.

Як далеко має пройти шашка?

Прямо — вистачає одного кубика

Непрямо — лише через кілька кубиків

11 12 13 14 15 16 21 22 23 24 25 26 31 32 33 34 35 36 41 42 43 44 45 46 51 52 53 54 55 56 61 62 63 64 65 66

Нічого не вибрано — таблиця показує всі тридцять шість кидків.

21 різних кидків, 6 з них — дублі. А рахують усе одно в тридцять шостих: кожен дубль випадає один раз, будь-який інший кидок — двічі.

Дубль

Якщо на обох кубиках те саме число, воно грається чотири рази, а не два. Дубль випадає в шести кидках із тридцяти шести — тобто в кожному шостому ході.

Тому дубль веде далі за будь-який інший кидок: 6–6 переносить на двадцять чотири пункти.

Перший кидок

На початку кожен кидає один кубик; починає той, у кого більше, і грає саме ці два числа. За рівності кидають знову. Тому перший хід партії ніколи не буває дублем — залишається 30 кидків із тридцяти шести.

Далі до правил