Что такое двойное расходование
Главная
Статьи
Что такое двойное расходование

Что такое двойное расходование

Продвинутый
Опубликовано Feb 17, 2020Обновлено Jan 31, 2023
7m

Что такое двойное расходование?

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

В криптопространстве ограничение дублирования определенных единиц имеет первостепенное значение. Если бы Алиса могла получить 10 единиц, а затем скопировать и вставить их 10 раз, чтобы получить 100 единиц, произошел бы крах всей системы.Система также не будет работать, если те же 10 единиц будут отправлены одновременно Борису и Кате. Таким образом, для функционирования цифровых денег должны быть созданы механизмы, ограничивающие подобные возможности.


Как можно предотвратить двойное расходование?

Централизованный подход

Централизованный тип системы значительно проще в реализации, в отличие от децентрализованных альтернатив. В основном он предполагает наличие одного субъекта или организации, которая управляет системой и держит под контролем эмиссию и распределение новых единиц. Хороший пример централизованного решения проблемы с двойным расходованием – eCash Дэвида Чаума. 

Чтобы выдать пользователям цифровой актив, имитирующий наличные деньги (способные к анонимному и одноранговому обмену), банк может использовать слепые подписи – как описано криптографом Дэвидом Чаумом в его статье 1982 года «Слепые подписи для неотслеживаемых платежей».

Например, если пользователь (назовем его Денис) хочет получить $100 в цифровой валюте, он должен сначала сообщить об этом банку. При наличии баланса на счету он генерирует одно случайное число либо несколько чисел для меньших номиналов. Предположим, он производит пять чисел, каждому из которых присваивается значение $20. Чтобы предотвратить отслеживание банком денежных единиц, Денис скрывает случайные числа, добавляя ослепляющий фактор к каждому из них.

Затем он передает данные в банк, который вносит дебет на его счет в размере $100, после чего подписывает сообщения, подтверждающие, что каждая из пяти частей информации подлежит обмену на $20. Теперь Денис может потратить средства, выданные банком. Он идет в ресторан к Ирине и покупает еду, которая стоит $40. 

Денис может убрать ослепляющий фактор, чтобы использовать случайное число, связанное с цифровой валютой в чеке, которая будет служить уникальным идентификатором для каждой единицы (подобно серийному номеру). Он раскрывает два из них Ирине, которая теперь должна немедленно активировать их в банке, чтобы Денис не смог потратить одни и те же деньги в другом месте. Банк проверит подписи и, если все будет хорошо, зачислит на счет Ирины $40.

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

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


Децентрализованный подход

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

Самым большим нововведением, представленным в whitepaper Биткоина, было решение проблемы двойного расходования. И хотя оно не упоминается как таковое, предложенная Сатоши структура данных теперь широко известна как блокчейн.
Блокчейн – это база данных с набором уникальных свойств. Участники сети (называемые нодами) используют специализированное программное обеспечение для синхронизации копии базы данных с остальными участниками. В результате все участники сети могут проверить историю каждой транзакции, начиная с генезис-блока. Благодаря публичности блокчейна можно легко обнаружить и предотвратить мошеннические действия, такие как двойное расходование транзакций.
Когда пользователь транслирует транзакцию, она не сразу добавляется в блокчейн: для начала нужно включить ее в блок с помощью майнинга. Получатель будет считать перевод действительным только после добавления блока с транзакцией в цепь. В противном случае получатель рискует не получить обещанные средства, поскольку отправитель может потратить эти же монеты в другом месте. 
После подтверждения транзакции монеты нельзя будет потратить дважды, так как право собственности передается новому пользователю и вся сеть может это верифицировать. Именно по этой причине многие рекомендуют дождаться получения нескольких подтверждений, прежде чем принимать платеж. Каждый последующий блок увеличивает количество усилий, необходимых для изменения или перезаписи цепи (как при атаке 51%).

Давайте вновь обратимся к примеру с рестораном. Денис возвращается в ресторан и замечает объявление о том, что в данном заведении принимают оплату услуг в биткоине. Ему понравились блюда, которые он ел в прошлый раз, поэтому он заказывает их снова. Это будет стоить 0,005 BTC. 

Ирина предоставляет свой публичный адрес, на который он должен отправить средства. Денис транслирует транзакцию, которая, по сути, является подписанным сообщением о том, что 0,005 BTC Дениса теперь передаются Ирине. Любой, кому предъявлена подписанная транзакция Дениса, может убедиться в том, что он действительно был владельцем монет и, следовательно, имел право на их отправку.

Как мы уже говорили, транзакция действительна только в том случае, если она включена в подтвержденный блок. Принятие неподтвержденных транзакций во многом похоже на получение $40 в виде eCash из предыдущего примера без своевременного обналичивания чека в банке, что позволяет отправителю потратить одну и ту же сумму в другом месте. Поэтому Ирине стоит дождаться как минимум шести подтверждений блока (примерно один час), прежде чем принять платеж Дениса.


Двойное расходование в сети Биткоина

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

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

Существует три популярных метода для реализации двойного расходования:

  • Атака 51% происходит, когда объекту или организации удается взять под контроль более 50% всего хешрейта сети, что позволяет исключать транзакции или изменять их порядок. Такая атака маловероятна в случае с Биткоином, но может произойти в отношении других блокчейн-сетей.
  • Атака типа «гонки» случается, когда две конфликтующие транзакции транслируются в одно и то же время с использованием одних и тех же средств, но подтверждается только одна из них. Цель злоумышленника состоит в том, чтобы аннулировать валидацию, подтверждая только нужную ему транзакцию (например, отправляя те же средства на свой адрес). Условием для подобной атаки является разрешение продавца оплачивать товар неподтвержденными транзакциями.
  • Атаки Финни происходят, когда злоумышленник предварительно начинает майнинг блока со своей транзакцией, не транслируя его сразу в сеть. Вместо этого он повторно расходует монеты, но уже в рамках другой транзакции, и только затем транслирует предыдущий блок, отменяя перевод продавцу. Атаки Финни требуют определенной последовательности событий, а также зависят от готовности получателя принимать неподтвержденные транзакции.

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


Резюме

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

К счастью, появление слепых подписей решило многие проблемы централизованных финансовых систем. А создание механизмов Proof of Work и технологии блокчейна породило Биткоин – мощную форму децентрализованных денег, вдохновившую многих пользователей на создание тысяч других криптовалютных проектов.