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

Одна из основных причин, по которой небезопасно принимать биткойны с 0 подтверждениями, связана с возможностью двойного расходования (когда г-н Мошенник сначала отправляет 1 BTC Алисе, а затем создает идентичную транзакцию, в которой он отправляет тот же 1 BTC Бобу). или на другой адрес, контролируемый им самим.Если сеть в конечном итоге включит вторую транзакцию в блокчейн, только Боб (или сам мистер Мошенник) будет рассматриваться как законный владелец монет, а Алиса останется ни с чем).

Однако, поскольку невозможно скрыть двойную трату навсегда, и каждый в сети в конечном итоге обнаружит, что г-н Мошенник дважды потратил свои монеты, почему невозможно наказать двойную трату, чтобы уменьшить экономические стимулы для совершения транзакций? так во первых? Например, мы могли бы создать специальный тип транзакции, в которой г-н Мошенник должен заблокировать эквивалентную сумму BTC в течение определенного периода времени. Если сеть действительно приходит к выводу, что произошла двойная трата, мы «сжигаем» (или уничтожаем) заблокированные BTC.

Разве это не значительно снизит вероятность двойных расходов?

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

Ответы (2)

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

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

Например, мы могли бы создать специальный тип транзакции, в которой г-н Мошенник должен заблокировать эквивалентную сумму BTC в течение определенного периода времени. Если сеть действительно приходит к выводу, что произошла двойная трата, мы «сжигаем» (или уничтожаем) заблокированные BTC.

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

Имейте в виду: если вы требуете, чтобы пользователь заблокировал некоторые монеты в цепочке в качестве залога... для создания этого «заблокированного UTXO» потребуется транзакция биткойнов. Чтобы создать этот UTXO, вам придется дождаться подтверждения транзакции в сети... и в этот момент вы можете просто дождаться подтверждения платежа в первую очередь! Если вы не дождетесь подтверждения, то вы просто вернетесь к исходной точке в отношении риска двойной траты.

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

Я думаю, что заблокированные средства будут отправлены на адрес специального типа, специально предназначенный для хранения средств в качестве залога (его может создать любой человек, как и обычный адрес BTC). Дело в том, что ни один узел/майнер не примет транзакцию с этого адреса, если адрес не поддерживает по крайней мере эквивалентную сумму залога по сравнению с потраченной суммой.
Это правда, что для первоначальной блокировки UTXO (средств) потребуется биткойн-транзакция, но я думаю, что если пользователь знает, что ему потребуется выполнить транзакцию с быстрым временем подтверждения в будущей транзакции, он может заблокировать часть своих средств. заранее по такому адресу. Когда в этом больше нет необходимости, они могут перевести средства на обычный адрес. Это не похоже на централизованную систему условного депонирования, поскольку каждый в сети может легко узнать, когда пользователь пытается удвоить расходы.
Возможно, единственный недостаток, который я вижу в этой системе, заключается в том, что г-н Мошенник пытается отправить один и тот же биткойн не одному, а нескольким лицам, и каждый из этих людей считает, что его транзакция — единственная существующая. В этом случае единственный способ смягчить «тройные» или «четверные» траты — это заблокировать 300–400 % отправляемой суммы, но, поскольку злоумышленник может предположительно обмануть неограниченное количество людей, нам нужно будет заблокировать бесконечное количество средств для полной защиты от двойного (мульти)расхода..
Чтобы было ясно, я не говорю, что эта стратегия должна заменить PoW. Я говорю, что он может работать в гармонии с PoW с дополнительным преимуществом возможности принимать транзакцию с нулевым подтверждением.
Вам нужно будет более четко представлять конкретный технический механизм, который решает сжечь средства, если будет обнаружено, что существует попытка двойного расходования. Я не думаю, что можно создать такую ​​вещь с помощью биткойн-скрипта, не используя какой-то доверенный оракул.

Это было бы неэффективно.

Скажем, я хочу перевести стоимость в размере 100 долларов США. Насколько разумно просить меня запереться и на какой срок? Может быть, мы могли бы вытерпеть, заставив меня запереть 200 долларов на час.

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

@_David Schwartz Я упомянул проблему пятикратной траты в комментарии к ответу @chytrik. Я не вижу способа обойти это, потому что даже если бы мы заблокировали 500% первоначальной транзакции, он мог бы совершить шестикратную трату (хотя мне было бы интересно узнать, значительно ли менее вероятно совершить шестикратную трату по сравнению с 100%-ной транзакцией). двойная трата) (продолжение)
Тем не менее, я не согласен с тем, что это делает «платежи болезненными для всех, поскольку они должны иметь в три раза больше суммы…», поскольку идея состоит в том, что этот тип транзакции будет привязан к определенному типу адреса (скажем, адрес, начинающийся с буквы e). Если человек заранее знает, что ему потребуется мгновенное подтверждение (скажем, покупка чего-либо в продуктовом магазине или оплата бензина в своей машине), он может перевести необходимые средства заранее. Сеть будет применять эти правила только к этому типу адресов. Когда быстрое подтверждение больше не требуется, он может перевести средства обратно на обычный адрес.
@SOS Тогда я не понимаю. Разрешить особый тип очень дорогих транзакций только для того, чтобы обеспечить быстрое подтверждение платежей на небольшую сумму, которые составляют ничтожную долю баланса человека? Если это так, я бы сказал, что это просто ужасное совпадение с тем, как работает биткойн-блокчейн, потому что у него нет балансов. Если вы предлагаете совершенно новую и радикально отличающуюся систему, зачем делать ее медленной для любых платежей?