Честная игра

Принцип работы и проверка системы честной игры на Play2x


Как работает честная игра на Play2x

Генератор случайных чисел создает доказуемые и абсолютно честные случайные числа, которые используются для определения результата каждой игры, сыгранной на сайте.

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

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

Каждая игра использует этот список случайных чисел, чтобы определить его результат, преобразовав их в необходимый результат:
- в карты или камни (hilo, stairs, triple)
- Перемешивание списка возможных результатов (keno, mines, tower )
- в номера (crash, dice)
- в путь (plinko)

Входные данные:

У каждого пользователя есть один активный клиентский сид, серверный сид и одноразовый номер (nonce), увеличивающийся каждый раз после игры.

Клиентский сид:

Случайная строка, которая генерируется пользователем. По умолчанию случайная строка от сервера.

Серверный сид:

Начальное число сервера генерируется сервером и представляет собой произвольно сгенерированную шестнадцатеричную (0-9, a-f) строку из 64 символов. Play2X хэширует начальное число сервера алгоритмом sha256 (википедия).

Пользователь может сменить свой текущий серверный сид. При смене сида автоматически генерируется новый активный сид и сбрасывается одноразовый номер (nonce) на 0.
Затем предыдущий сид, который теперь неактивный, разворачивается и может быть проверен с помощью sha256.

Одноразовый номер (nonce):

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

Конвертация входных данных в байты:

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

Байты генерируются с использованием функции HMAC_SHA512 (K, m) (википедия). Эта функция создает 64 случайных байта (0-255) из заданного начального серверного сида (K) и сообщения (m).
Сообщение создается с использованием начального числа клиента(клиентского сида), одноразового номера (nonce) и инкрементного числа.

Это число, начинающееся с 0, увеличивается на единицу каждый раз, когда используются 64 байта, возвращаемые функцией HMAC_SHA512 (K, m). Затем сообщение создается путем объединения начального числа клиента, двоеточия, одноразового номера, другого двоеточия и добавочного числа.HMAC_SHA512(server_seed, client_seed:nonce:round):