Как работает двойная трата?
article-3653

Как работает двойная трата?

Alice Cooper · 2 сентября 2025 г. · ·

Основы

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

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

Решения проблемы двойной траты

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

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

eCash Дэвида Чаума — пример централизованного решения проблемы двойной траты. Его значительно легче реализовать, чем децентрализованные альтернативы, поскольку в системе есть один надзиратель, управляющий выпуском и распределением единиц. Для выдачи пользователям цифровых активов банк может использовать слепые подписи, как описано в статье Дэвида Чаума 1982 года «Blind Signatures for Untraceable Payments».

Предположим, пользователь по имени Фрэнк хочет получить $100 в цифровой наличности. Фрэнк должен уведомить банк и сгенерировать случайные числа, добавив к каждому из них фактор «заслепления», чтобы помешать банку отслеживать конкретные единицы. Затем Фрэнк отправляет эти данные в банк, который списывает с его счёта сумму и подписывает сообщения, подтверждающие, что каждая из пяти частей информации может быть обменена на $20. Теперь Фрэнк может тратить выпущенные банком средства.

Для иллюстрации: ресторан Эмили принимает цифровую наличность, и Фрэнк решает поесть там. Чтобы оплатить свой обед на $40, он раскрывает два случайных числа, которые служат уникальными идентификаторами для каждой единицы. Эмили должна немедленно обналичить их в банке, чтобы предотвратить повторную трату Фрэнком у другого продавца. Банк проверяет действительность подписей, зачисляет на счёт Эмили $40 и уничтожает использованные купюры. Если Эмили захочет расплатиться дальше таким же образом, потребуется выпуск новых купюр.

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

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

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

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

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

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

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

Решение проблемы двойной траты в Bitcoin

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

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

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

Существует три распространённых метода проведения двойной траты.

  • Первый — атака 51%, когда субъект или организация контролирует более 50% хешрейта, что позволяет исключать или изменять порядок транзакций.
  • Второй метод — «гонка» (race attack), когда последовательно транслируются две конфликтующие транзакции, но подтверждается только одна; цель атакующего — аннулировать платёж, подтвердив только выгодную для себя транзакцию.
  • Наконец, атаки Финни предполагают, что атакующий заранее добывает одну транзакцию в блок, не распространяя её немедленно, затем тратит те же монеты в другой транзакции и только потом транслирует заранее добытый блок, что может аннулировать платёж.

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

Заключение

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

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

Double Spending
Blockchain