В чем заключается проблема двойных расходов?

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

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


Как предотвратить проблему двойных расходов?

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

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

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

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

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

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

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

Механизм Chaumian eCash чрезвычайно ценен для частных переводов. Однако сам механизм eCash не имеет сопротивления. Поскольку банки являются централизованными узлами, если система выйдет из строя, пострадают все. Банкноты, выпущенные банком, сами по себе не имеют ценности; их ценность полностью зависит от готовности банка обменять банкноты на доллары США. Клиенты подчиняются банку и должны полагаться на репутацию банка при управлении средствами. Это именно та проблема, которую призваны решить криптовалюты.


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

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

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

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

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

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

Вернемся к ситуации с рестораном. Дэн вернулся в ресторан и на этот раз заметил на витрине наклейку с надписью «Этот магазин поддерживает оплату биткойнами». Он не смог забыть свой последний прием пищи и снова заказал ту же еду за 0,005 биткойнов.​

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

Однако, как упоминалось ранее, транзакция действительна только после загрузки в блок и подтверждения. Получение неподтвержденной транзакции аналогично получению 40 долларов США в eCash ранее. Если они не будут немедленно обналичены через банк, отправитель может потратить средства в другом месте. Таким образом, Эрин должна подождать не менее 6 подтверждений блока (приблизительно один час), прежде чем принимать платеж от Дэна.


Проблема двойных расходов Биткойна

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

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

В настоящее время существует три распространенные атаки двойного расходования:

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

  • Гоночная атака: две конфликтующие транзакции публикуются подряд с использованием одних и тех же средств, но подтверждается только одна транзакция. Цель злоумышленника — аннулировать другой платеж, подтвердив транзакцию в его пользу. Например, отправив средства на адрес, который он контролирует. Гоночная атака обычно предполагает, что получатель принимает в качестве оплаты неподтвержденную транзакцию.

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

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


Подведем итог

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

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