Что не так с использованием hmac_sha512 (block_hash, trans_id) в качестве получаемого хэша для доказуемо честной игры?

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

  

Счастливый номер, используемый для определения победителя игр, прост. Это   это просто первые байты hmac_sha512 (secret, txid: out_idx). Тот   будет секретной строкой в ​​качестве ключа и идентификатором транзакции вашего   как транзакции в качестве данных.

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

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

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

В чем заключается эксплойт, который запрещает сайтам использовать такое простое средство вычисления условий выигрыша /потери?

3 голоса | спросил RLH 23 +04002013-10-23T06:31:11+04:00312013bEurope/MoscowWed, 23 Oct 2013 06:31:11 +0400 2013, 06:31:11

1 ответ


0

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

Проблема с этим методом связана с потерянными блоками и последующими транзакциями, которые добавляются обратно в хранилище для переработки.

В качестве примера, если игрок X отправляет несколько моментов игровому движку, и он отвечает в следующем блоке с помощью микроплаты, оплаты условий потери, оплаты и оплаты игроков, может содержаться в дочерних блоках небольшой сиротская цепь. Если блок, содержащий транзакцию для игрового раунда, становится сиротой, все транзакции в сироте И его дочерние блоки отправляются обратно в память, подлежащую повторной обработке.

Если блок транзакции исходных игроков перефразируется, условия выигрыша /проигрыша могут отличаться. Это было бы большой проблемой, если бы игрок проиграл, но в рамках нового хэша блока они выиграли.

Теоретически, можно переписать свой движок так, чтобы он дважды проверял, был ли предыдущий блок сиротой. Для каждой транзакции в сиротском блоке перепроверьте состояние выигрыша /потери. Если и только если игрок ранее проиграл, но теперь имеет один новый хеш, второй выигрышный платеж может быть отправлен в основную цепочку блоков.

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

Кроме того, как отметил Райан, это также означает, что вам нужно подождать один блок, прежде чем вы сможете вычислить состояние выигрыша /потери. Это было бы довольно неприятной особенностью для игры, которая должна быть быстрой, например, Dice.

ответил RLH 23 +04002013-10-23T15:35:34+04:00312013bEurope/MoscowWed, 23 Oct 2013 15:35:34 +0400 2013, 15:35:34

Похожие вопросы

0
Вариант класса с полным движением Поддержка метода голосования в режиме OOP PythonEnhancing для VBA codeName /генератор слов с использованием DTMC в RubySimple Postfix Calculator с использованием Java 8Brainfuck с перегрузкой оператора C #Formatted print без необходимости указывать спецификаторы соответствия типов с использованием _GenericKhronos: первичный файл CMakeBattleship strategy evaluation frameworkAlternative to setInterval и setTimeoutParameterized Chutes & Лестничный симулятор с использованием SQL-хранимой процедурыBruteforce MD5 Password crackerExact sort - сортировка с несколькими операциями перемещения. Медиана данного дерева AVL. Создание фракции Queen Ann's Lace fractalGotta поймать их все! O (1) блокировка свободного контейнера. Что лучше для Lazy-Loading Navigation Properties отделяемого Self -Tracking Entities через службу WCF? Emacs Etags Shortcut FunctionsExecute функция n раз, где n известно во время компиляцииFord-Johnson слияния-вставки sortEvent-based Xbox Controller pollingVirtual Texturing - Таблица игнорирования страницы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132