Безопасная система пруфов при открытии лут-боксов?

Ссылка скопирована
1 ответ

Всем привет! Есть сайт с лут-боксами, которые юзеры открывают и рандомно получают призы. Сейчас в MVP версии рандом реализован через random.org, соответственно пользователи никак не могут проверить честно ли был получен приз или нет. Хотелось бы иметь примерно подобную механику:
1. Пользователь получает лут-бокс с каким-то хешем
2. По этому хешу пользователь не может узнать, что находится внутри
3. После открытия лут-бокса пользователю становится доступным соль/ключ, с помощью которого он может убедиться, что для этого хеша с этим ключом/солью призом является именно то, что он получил

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

Возможнен ли такой механизм? Если да, то направьте в нужную сторону пж

upd: возможен сценарий с "торговой площадкой", где юзеры видят лут-боксы и их хеши и могут сами выбрать лут-бокс с нужным хешем

Дополнительно:

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

  • Vindicar, а если дать юзерам возможность выбирать лут-боксы с хешем? То есть какой у них окажется хеш уже зависит от них
  • Narts,

    Возможнен ли такой механизм?

    - да, через односторонние алгоритмы хэширования например md5, тут чутка подумать надо ( твоему кодеру ), я хоть и знаю как это реализовать, но вот лень всё расписывать

  • Ответы:

    Чтобы вызывать доверие, "какой-то хэш" должен получаться из проверяемых исходных данных - таймстамп, id пользователя и т. д. Эти данные должны обрабатываться понятным пользователю образом, то есть хорошо, если вы раскроете принцип вычисления результата - тогда любой сможет, подставив данные в формулу, проверить свой результат.

    Условно, берём остаток по какому-нибудь модулю от sha256(timestamp + user_id) и используем его в качестве броска n-гранного куба.

    Существует два механизма подписывания информации.
    - электронные подписи на базе RSA, ECDA
    - HMAC

    Все остальное таковым не является.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Юрий Linux Ответ

    Для создания безопасной системы пруфов при открытии лут-боксов в игровом проекте, необходимо учитывать несколько ключевых моментов:

    1. **Алгоритм случайного выбора предметов**: Используйте криптографически стойкие алгоритмы генерации случайных чисел для определения содержимого лут-боксов. Это поможет избежать предсказуемости результатов и исключить возможность манипуляции с шансами выпадения определенных предметов.

    2. **Прозрачность и честность**: Обеспечьте прозрачность процесса открытия лут-боксов для игроков. Предоставьте подробные данные о вероятностях выпадения различных предметов, чтобы игроки могли быть уверены в честности системы.

    3. **Защита от мошенничества**: Разработайте механизмы защиты от возможных попыток взлома или обмана системы. Это может включать в себя мониторинг подозрительной активности, использование шифрования данных и другие технические меры безопасности.

    Пример реализации безопасной системы пруфов при открытии лут-боксов на PHP:

    function openLootBox() {
        $items = array(
            "item1" => 0.2,
            "item2" => 0.3,
            "item3" => 0.5
        );
     
        $totalWeight = array_sum($items);
     
        $randomNumber = mt_rand(1, $totalWeight);
     
        $cumulativeWeight = 0;
     
        foreach ($items as $item => $weight) {
            $cumulativeWeight += $weight;
     
            if ($randomNumber <= $cumulativeWeight) {
                return $item;
            }
        }
    }

    function openLootBox() { $items = array( "item1" => 0.2, "item2" => 0.3, "item3" => 0.5 ); $totalWeight = array_sum($items); $randomNumber = mt_rand(1, $totalWeight); $cumulativeWeight = 0; foreach ($items as $item => $weight) { $cumulativeWeight += $weight; if ($randomNumber <= $cumulativeWeight) { return $item; } } }

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

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно