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

