Provably fair: доказуемая честность простыми словами
Как dond.win доказывает, что ни один раунд Deal or No Deal не подстроен: SHA-256-коммитмент публикуется до вашего выбора, ваш клиентский сид участвует в перемешивании, в конце раскрываются оба сида, а страница проверки пересчитывает все 25 кейсов.
Какую проблему решает provably fair
В обычной онлайн-игре приходится верить, что оператор перемешал честно и не переложил крупный приз после вашего выбора. Provably fair, или доказуемая честность, заменяет это доверие арифметикой. Оператор фиксирует перемешивание до ваших действий, даёт вам повлиять на него собственным вводом, а после раскрывает всё, чтобы вы могли проверить.
Что происходит в раунде
- Коммитмент. До того как вы выберете кейс, сервер генерирует секретный серверный сид и публикует его SHA-256-хеш. Хеш показан в игре как коммитмент. Позже сервер не может изменить сид так, чтобы хеш остался прежним.
- Ваш ввод. У вас есть клиентский сид. По умолчанию он случайный; свой можно ввести в панели ставки до начала раунда. Сервер не может его предсказать.
- Перемешивание. Лестница из 25 призов перемешивается алгоритмом Fisher-Yates на случайных байтах, которые выдаёт HMAC-SHA256: серверный сид служит ключом, ваш клиентский сид — сообщением. Ни одна из сторон не может выбрать раскладку в одиночку.
- Раскрытие. Когда раунд заканчивается, серверный сид показывается рядом с коммитментом и вашим клиентским сидом.
- Проверка. Вычислите хеш серверного сида и сравните его с коммитментом. Повторите перемешивание с обоими сидами и сравните каждый кейс с тем, что вы видели. Страница проверки делает и то и другое прямо в браузере; никуда ничего не отправляется.
Точный алгоритм
- commitment = SHA-256(utf8(serverSeed)) в шестнадцатеричном виде.
- block[i] = HMAC-SHA256(key = serverSeed, msg = clientSeed + “:” + i), для i = 0, 1, 2 …
- Каждый блок даёт восемь 32-битных целых чисел в порядке big-endian; r = значение / 2^32. Когда блок израсходован, берётся следующий.
- Fisher-Yates по фиксированной лестнице: для i от 24 вниз до 1, j = floor(r × (i + 1)), ladder[i] и ladder[j] меняются местами. Кейс k получает ladder[k].
Это можно реализовать в несколько строк на любом языке и получить ту же раскладку.
Что это доказывает, а что нет
Это доказывает, что раскладка была зафиксирована до вашего выбора и что сервер не выбирал её в одиночку. Это доказывает, что каждое предложение, которое вы видели, рассчитано по настоящему табло. Шансы от этого не меняются: лестница призов и комиссии такие, какие есть, и они тоже открыты. Честность здесь означает одно: игра, которую вам показывают, — это та самая игра, которая идёт на самом деле.
Проверка старого раунда
Сиды и коммитмент показаны на экране окончания раунда и в вашей истории. Вставить их на страницу проверки можно в любой момент.
Частые вопросы
Подстроена ли игра Deal or No Deal на dond.win?
Раскладка каждого раунда фиксируется SHA-256-хешем до того, как вы выберете кейс, смешивается с вашим клиентским сидом и раскрывается в конце раунда. Все 25 кейсов можно пересчитать самостоятельно на странице проверки. Подстроенная раскладка эту проверку не прошла бы.
Что такое клиентский сид и нужно ли его менять?
Это ваш вклад в перемешивание. По умолчанию он случайный и уже не даёт серверу выбрать раскладку. Если задать свой, раунд можно воспроизвести со значением, которое выбрали только вы.
Может ли сервер подобрать сид, выгодный казино?
В момент коммитмента он не может знать итоговую раскладку, потому что ваш клиентский сид подмешивается позже. Подменить сид потом тоже нельзя: хеш перестанет совпадать.
Нужна ли какая-то программа, чтобы проверить раунд?
Нет. Страница проверки считает SHA-256 и HMAC-SHA256 в вашем браузере. Подойдёт и любой язык программирования, в котором есть эти две функции.