Контроль честности в игре нарды
При игре в нарды с контролем честности мы осуществляем определенные действия для того, чтобы сделать процесс получения бросков прозрачным для игроков, и добавить возможность игрокам повлиять на выпадающие кубики, не влияя при этом на случайность распределения.
Алгоритм контроля честности в нардах
В первую очередь мы генерируем последовательность из 10000 чисел от 1 до 6, которая в дальнейшем будет использована для бросков в партии. Эту последовательность мы пакуем в архив с надежным паролем (длина пароля - 16 символов), что гарантирует невозможность его вскрытия по крайней мере за сутки. Поскольку текст с ограниченным набором символов (от 1 до 6) делает архив уязвимым для подбора пароля, сгенерированная последовательность перед архивированием преобразуется по следующему правилу: каждой паре бросков соответствует определенный символ из набора "заглавные латинские буквы и цифры". При этом паре 11 соответствует буква A, 12 - B и т.д, комбинации 66 соответствует цифра 9. Такое преобразование одновременно уменьшает размер архива и существенно затрудняет возможный подбор пароля.
Этот архив доступен уже в момент начала партии для скачивания и сохраняется на сервере не менее недели.
Срезка
Перед началом матча каждый игрок выбирает "срезку": например, выбирая число от 1 до 7. На выбор срезки дается небольшой отрезок времени - 5 секунд. Если за это время игрок не выбрал срезку, её значение автоматически устанавливается в 7. До окончания выбора значение, выбранное соперником, не отображается. После сделанного выбора значения срезок доступно всем.
Генерация бросков
Произведение срезок задает стартовую позицию в последовательности. Например, выбрано 4 и 5. Стартовая позиция 4*5 = 20, первые 19 чисел из последовательности отбрасываются.
Далее в процессе игры числа из последовательности используются следующим образом: выбранные срезки переводятся в двоичный код (1=001, 2=010, 3=011, 4=100, 5=101, 6=110, 7=111), полученные трехцифровые строки складываются в одну (сначала строка первого игрока), в итоге при срезке 4 и 5 получается строка вида "100101" (маска). Эта строка применяется к очередным 6 числам из последовательности таким образом, что числа, попадающие на 1 используются, числа попадающие на 0 - отбрасываются.
Например, фрагмент последовательности "... 1 2 3 4 5 6 6 5 4 3 2 1 ..." и маска 100101 дадут в итоге "... 1 4 6 6 3 1 ...", в игре выпадут пары "14", "66", "31". Но если второй игрок выберет срезку 7, то получится маска 100111, соответственно выпадут пары "14", "56", "63".
Если выпавшая комбинация запрещена правилами (например, первым ходом в коротких нардах выпал дубль), выпавшая пара отбрасывается, и берется следующая пара.
В случае нехватки чисел в последовательности (вероятность чего крайне невелика) игра продолжается с обычной генерацией бросков.
По окончании партии игроки получают пароль от архива с последовательностью. Также на сервере становится доступным архив с последовательностью уже без пароля.
Краткий анализ
Предлагаемый алгоритм контроля честности дает участникам гарантию невозможности игровой площадке "подыграть" кому-то из игроков. Это обеспечивается заранее заданной общей последовательностью бросков и срезками. Общая последовательность используется, поскольку раздельные последовательности для игроков подобную гарантию не дают в принципе.
Поскольку мы выкладываем зашифрованные данные о бросках в открытый доступ, их безопасность гарантируется длинным (16 символов) паролем, шансы на подбор которого даже с использованием современных мощностей за время матча ничтожны.
По сравнению с другими предлагаемыми методами контроля честности, наш является наиболее устойчивым и безопасным в рамках тех возможностей, которые вообще может предложить Контроль Честности в нардах.
Уязвимость
Есть лишь одна теоретическая "уязвимость" данного алгоритма: если игрок предполагает, что игровая площадка находится в сговоре с его соперником, то несмотря на то, что "нужные" броски ему выдать не получится, то по крайней мере игровая площадка может сообщить ему заранее броски, которые ему выпадут (в простейшем варианте - сообщит пароль от архива с последовательностью). Шансы на подобный сговор исключительно малы, поскольку это риск для любой площадки полностью утратить репутацию; при этом использование подобных данных сложно, и совершенно не гарантирует нужного результата. Можно усложнить и этот аспект практически до невозможного уровня - модифицируя алгоритм таким образом, что на выдачу кубиков влияет каждый сделанный ход. Однако, это значительно усложнит последующий анализ.
Сервис проверки
Мы предлагаем сервис для проверки работы описанного алгоритма. В нем можно указать взятую из архива сгенерированную последовательность символов (либо сам архив + пароль к нему), а также стартовую позицию в последовательности бросков и значения срезок игроков (эта информация также известна на момент начала каждой партии матча). Результатом работы сервиса является набор значений выпадающих кубиков, позволяющий убедиться в том, что последовательность действительно была использована в реальной партии.Все эти операции вы можете произвести прямо на этой странице. Вставьте распакованный архив в поле "Распакованные данные", укажите срезки, и сверьте полученные итоговые броски с бросками, которые выпадали в вашей партии.