Когда BLOCKHASH можно безопасно использовать для случайного числа? Когда это будет небезопасно?

Я видел более сложные способы для контракта генерировать случайное число. Но сама желтая бумага Ethereum предлагает «тривиальное решение» с использованием кода операции BLOCKHASH (см. Ниже, жирным шрифтом является мой).

Если для контракта требуется только несколько случайных чисел (а не сотни), насколько безопасным будет этот метод? Какие примеры использования будет ли этот метод удовлетворительным? Какие варианты использования могут быть атакованы практическим способом, если этот метод был использован?

  

Случайные числа. Предоставление случайных чисел в детерминированной системе, естественно, является невыполнимой задачей. Однако мы можем приблизить   с псевдослучайными числами, используя данные, которые обычно   непознаваемым на момент совершения сделки. Такие данные могут включать   блочный хэш, временная метка блока и бенефициар блока   адрес. Для того, чтобы злоумышленник мог контролировать эти   значения, следует использовать операцию BLOCKHASH для использования хэшей   из предыдущих 256 блоков в виде псевдослучайных чисел. Для серии   такими числами тривиальное решение было бы добавить некоторую постоянную сумму   и хеширование результата.

19 голосов | спросил eth 23 Jam1000000amSat, 23 Jan 2016 00:03:29 +030016 2016, 00:03:29

1 ответ


21

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

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

Чтобы понять, почему это так, мы можем представить противоположную ситуацию, где значение, возможно, миллионов, зависит от случайности , полученной в результате операции BLOCKHASH (например, чтобы выбрать победителя лотереи, который выиграет эту сумму). Из-за большого количества денег, поставленных на карту, у хорошо финансируемого злоумышленника будет финансовый стимул купить билет, а затем создать много разных альтернативных блоков (возможно, используя миллионы AWS экземпляры на короткий период времени, но при существенной стоимости) для высоты блока, с которой рисунок вычисляться. Когда обнаружен блок с хешем, который приведет к выигрышу билета шахтера, шахтер затем немедленно закроет больше блоков поверх этого (чтобы убедиться, что он преуспеет), а затем отправляет его в сеть, , позволяя им гарантировать себя приз . Эта операция может быть очень дорогой, но пока выигрыш достаточно велик, все равно будет выгодной атакой.

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

ответил Jeff Coleman 23 Jam1000000amSat, 23 Jan 2016 02:03:26 +030016 2016, 02:03:26

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

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

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