НардыPearl

Броски, которые можно проверить

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

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

Окно бросков в приложении показывает его, когда партия окончена, а в матче, когда окончен весь матч. Нажмите на него там, чтобы скопировать. До этого оно закрыто, и так задумано.
Если оставить поле пустым, страница покажет печать зерна, указанного выше.
В том порядке, в каком они указаны в окне бросков. В игре с компьютером без интернета зерно только одно, ваше.
Броски нумеруются с 1 на весь матч. Жребий тоже считается, а в матче нумерация продолжается от партии к партии.
Броски в том виде, как они указаны в окне бросков, с номерами или без. Вставьте их, и каждый бросок будет сверен, а не просто показан.

Как вычисляется бросок

Один и тот же код работает в приложении и на сервере, а на этой странице работает его копия. Каждый бросок матча получается из одного HMAC:

mac    = HMAC-SHA256(ключ = байты зерна сервера,
                     сообщение = зерноТелефона1 ":" зерноТелефона2 ":" номерБроска)
байт   = первый байт mac, который меньше 252
v      = байт mod 36
кубики = (floor(v / 6) + 1,  v mod 6 + 1)

252 = 7 × 36, поэтому каждый из 36 упорядоченных бросков равновероятен. Байты от 252 до 255 пропускаются: если бы их оставили, первые четыре комбинации выпадали бы чуть чаще. Если ни один из 32 байтов не меньше 252 (вероятность около 2-192, слишком малая, чтобы этого ждать), к части с зёрнами телефонов добавляется + и MAC вычисляется снова: зерноТелефона1:зерноТелефона2+:номерБроска, затем ++ и так далее.

Печать, которую вы видите до первого броска, равна SHA-256(байты зерна сервера) в шестнадцатеричной записи. Зерно сервера занимает от 16 до 64 байтов; игра использует 32. Зерно телефона содержит от 1 до 128 символов: латинские буквы, цифры, _ и -; приложение создаёт 32 шестнадцатеричных символа.

Почему это работает

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

Если страница показывает бросок, который отличается от того, что вы видели на доске, или печать не совпадает, сохраните ссылку и напишите на [email protected]. Мы хотим об этом знать.

Ссылки на эту страницу

Кнопка «Проверить броски» в приложении открывает эту страницу со всем, что стоит в ссылке после знака #. Эту часть ссылки браузер никогда не отправляет на сервер: /ru/check/#v=1&s=…&c=…&p=a,b&r=6344…&g=52,48. Здесь s означает зерно сервера, c печать, p зёрна телефонов в порядке мест за столом, r все броски по две цифры в порядке бросков, а g для матча из нескольких партий показывает, сколько бросков ушло на каждую партию.