Что такое двойное расходование?
Двойное расходование – это потенциальная проблема цифровой денежной системы, когда одни и те же средства могут расходоваться дважды за один временной интервал. Без адекватных контрмер протокол, который не решает эту проблему, уязвим к подобного рода действиям – пользователи не могут просто не могут быть уверены, что их средства не расходовались где-то еще.
В криптопространстве ограничение дублирования определенных единиц имеет первостепенное значение. Если бы Алиса могла получить 10 единиц, а затем скопировать и вставить их 10 раз, чтобы получить 100 единиц, произошел бы крах всей системы.Система также не будет работать, если те же 10 единиц будут отправлены одновременно Борису и Кате. Таким образом, для функционирования цифровых денег должны быть созданы механизмы, ограничивающие подобные возможности.
Как можно предотвратить двойное расходование?
Централизованный подход
Централизованный тип системы значительно проще в реализации, в отличие от децентрализованных альтернатив. В основном он предполагает наличие одного субъекта или организации, которая управляет системой и держит под контролем эмиссию и распределение новых единиц. Хороший пример централизованного решения проблемы с двойным расходованием – eCash Дэвида Чаума.
Например, если пользователь (назовем его Денис) хочет получить $100 в цифровой валюте, он должен сначала сообщить об этом банку. При наличии баланса на счету он генерирует одно случайное число либо несколько чисел для меньших номиналов. Предположим, он производит пять чисел, каждому из которых присваивается значение $20. Чтобы предотвратить отслеживание банком денежных единиц, Денис скрывает случайные числа, добавляя ослепляющий фактор к каждому из них.
Затем он передает данные в банк, который вносит дебет на его счет в размере $100, после чего подписывает сообщения, подтверждающие, что каждая из пяти частей информации подлежит обмену на $20. Теперь Денис может потратить средства, выданные банком. Он идет в ресторан к Ирине и покупает еду, которая стоит $40.
Денис может убрать ослепляющий фактор, чтобы использовать случайное число, связанное с цифровой валютой в чеке, которая будет служить уникальным идентификатором для каждой единицы (подобно серийному номеру). Он раскрывает два из них Ирине, которая теперь должна немедленно активировать их в банке, чтобы Денис не смог потратить одни и те же деньги в другом месте. Банк проверит подписи и, если все будет хорошо, зачислит на счет Ирины $40.
После активации используемые чеки сжигаются, и, если Эрин захочет потратить свой новый баланс еще раз, ей будет необходимо получить новые чеки аналогичным образом.
eCash Чаума может быть удобен для частных финансовых операций, но данный подход не слишком надежен, поскольку банк является центральной точкой отказа. Выданный чек сам по себе ничего не стоит, поскольку его стоимость определяется исключительно готовностью банка обменять чек на доллары. В то же время клиенты находятся во власти банка и должны полагаться на него, чтобы иметь возможность потратить деньги, а это именно та проблема, которую криптовалюта стремится исправить.
Децентрализованный подход
Обеспечение невозможности двойного расходования средств в экосистеме без стороннего контролирующего органа является более сложной задачей. В этом случае не менее влиятельные участники должны будут согласовывать определенные правила, чтобы предотвращать мошенничество и стимулировать всех пользователей действовать честно.
Давайте вновь обратимся к примеру с рестораном. Денис возвращается в ресторан и замечает объявление о том, что в данном заведении принимают оплату услуг в биткоине. Ему понравились блюда, которые он ел в прошлый раз, поэтому он заказывает их снова. Это будет стоить 0,005 BTC.
Как мы уже говорили, транзакция действительна только в том случае, если она включена в подтвержденный блок. Принятие неподтвержденных транзакций во многом похоже на получение $40 в виде eCash из предыдущего примера без своевременного обналичивания чека в банке, что позволяет отправителю потратить одну и ту же сумму в другом месте. Поэтому Ирине стоит дождаться как минимум шести подтверждений блока (примерно один час), прежде чем принять платеж Дениса.
Двойное расходование в сети Биткоина
Механизм Биткоина позволяет предотвратить атаки с двойным расходованием, по крайней мере до тех пор, пока протокол работает должным образом. То есть, если кто-то ждет подтверждения транзакций в блоке, отправителю будет непросто отменить их. Чтобы это осуществить, необходимо реверсировать блокчейн, но для этого потребуется огромный объем мощности хеширования.
Тем не менее существует несколько атак с двойным расходованием, направленных на неподтвержденные транзакции. Например, при совершении покупок по низкой цене продавец может не захотеть ждать, пока транзакции будут включены в блок. Загруженный заказами ресторан быстрого питания также не сможет нормально функционировать при столь длительном времени обработки каждой покупки. Таким образом, если бизнес предполагает мгновенные платежи, он становится уязвимым для двойного расходования. Кто-то может заказать гамбургер, заплатить за него, а затем немедленно отправить те же средства на свой адрес. Новая транзакция с более высокой комиссией скорее всего будет подтверждена первой и впоследствии прервет валидацию предыдущей.
Существует три популярных метода для реализации двойного расходования:
- Атака 51% происходит, когда объекту или организации удается взять под контроль более 50% всего хешрейта сети, что позволяет исключать транзакции или изменять их порядок. Такая атака маловероятна в случае с Биткоином, но может произойти в отношении других блокчейн-сетей.
- Атака типа «гонки» случается, когда две конфликтующие транзакции транслируются в одно и то же время с использованием одних и тех же средств, но подтверждается только одна из них. Цель злоумышленника состоит в том, чтобы аннулировать валидацию, подтверждая только нужную ему транзакцию (например, отправляя те же средства на свой адрес). Условием для подобной атаки является разрешение продавца оплачивать товар неподтвержденными транзакциями.
- Атаки Финни происходят, когда злоумышленник предварительно начинает майнинг блока со своей транзакцией, не транслируя его сразу в сеть. Вместо этого он повторно расходует монеты, но уже в рамках другой транзакции, и только затем транслирует предыдущий блок, отменяя перевод продавцу. Атаки Финни требуют определенной последовательности событий, а также зависят от готовности получателя принимать неподтвержденные транзакции.
Как мы видим, продавец, который дожидается подтверждения блока, значительно меньше рискует стать жертвой двойного расходования.
Резюме
Двойное расходование позволяет использовать цифровую денежную систему в целях получения финансовой выгоды путем расходования одной и той же суммы более одного раза. Отсутствие адекватных решений данной проблемы препятствует дальнейшему прогрессу в этой области.