Двойное расходование. Руководство для начинающих

Поделиться
Copied to clipboard!
Двойное расходование. Руководство для начинающих
Прослушать статью
00:00 / 00:00

Содержание


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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

  • Атака 51%: когда одному объекту или организации удается взять под контроль более 50% всего хешрейта сети, что позволяет исключать транзакции или изменять их порядок. Такая атака крайне маловероятна в случае с биткоином, но это может произойти в отношении других блокчейн-сетей.

  • Атака типа «гонки»: две конфликтующие транзакции транслируются в одно и тоже время с использованием одних и тех же средств, но подтверждается только одна из них. Цель злоумышленника состоит в том, чтобы аннулировать валидацию, подтверждая только ту транзакцию, которая принесет ему пользу (например, отправляя те же средства на свой адрес). Основным фактором для подобной атаки является разрешение оплачивать товар в виде неподтвержденных транзакций.

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

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


Заключение

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

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

Loading