Если углубиться в историю создания криптовалют, то можно обнаружить, что еще до появления Bitcoin многие энтузиасты предпринимали попытки создать децентрализованное платежное средство, но все они упирались в невозможность предотвратить двойные траты внутри системы. Решение этой проблемы было найдено только спустя годы. Читайте гайд от ProstoCoin, чтобы разобраться в рисках двойных трат и найти решение.
Содержание
Что такое двойная трата и как она происходит
Главной проблемой при создании устойчивой системы децентрализованных платежей выступала возможность копировать платежные операции, что вызывает риск повторного расходования средств. Централизованные платежные системы предотвращают повторную пересылку средств наличием контролирующего сервера, который проверяет все транзакции по определенному механизму.
Double spending или двойная трата — повторное расходование средств. Зачастую двойное израсходование в децентрализованных системах происходит в тот момент, когда один отправитель отправляет идентичное количество средств нескольким получателям – во временном промежутке до включения первой транзакции в блок.
Допустим, в реальной жизни человек решил купить чашку кофе за $1 в одном из кафе. При оплате деньги передаются в кассу заведения и потратить их повторно невозможно. Цифровые валюты же отличаются тем, что физически они не передается, поэтому до того, как транзакция будет проверена и осуществлена, средства остаются на кошельке, а значит в промежутке между отправкой транзакции и фактом ее свершения после проверки возможна повторная оплата.
В реальной жизни также может присутствовать двойная трата. Например, недобросовестные риелторы могут многократно продавать один объект недвижимости и такая возможность создается из-за того, что переоформление на нового владельца может занять достаточно много времени, а пока право собственности не оформлено на покупателя, недвижимость остается во владении предыдущего хозяина.
Чем опасна двойная трата
Двойная трата средств наносит материальный ущерб продавцу, отправившему товар и не получившему средства. Она дискредитирует криптовалюты как платежное средство и препятствует повсеместному распространению. Также проблема двойной траты приводит к снижению стоимости цифрового актива, поскольку инвесторы теряют доверие к защищенности системы.
Типы атак
Race
Если продавец сотрудничает по платежам, имеющими ноль подтверждений, то может стать жертвой Race атаки, когда создаются две транзакции на одну и ту же сумму и направляются в разные магазины. Таким образом, только один из получателей фактически получит средства. Монеты будут переведены по первой транзакции, которая будет добавлена в блокчейн.
Атака Финни
В зоне риска для Finney атаки также находятся сервисы, принимающие платежи с нулевыми подтверждениями, только при такой атаке потребуется еще и соучастие майнера для отправки скопированной транзакции в блок.
Атака Финни — это ложная двойная трата, суть которой состоит в том, что майнер отправляет повторную транзакцию после того, как его первый платеж поступает на проверку в сеть, и в таком случае создается развилка, при которой коллективным решением майнеров будет принята только одна транзакция. При этом продавец, дождавшись появления первой транзакции, уже продал товар.
Vector76 attack
Это комбинированная атака, состоящая из двух описанных выше атак. Vector76 основана на преднамеренном разветвлении блоков транзакций и позволяет дважды тратить средства с одним подтверждением. Здесь используется тот факт, что при поэтапном включении разных транзакций в блоки часть сети будет видеть транзакции действительными, а другая часть — недействительными. Атака длится всего 10 минут и за это время атакующий может успеть получить услуги или обналичить средства по двум транзакциям.
Brute force attack
Brute force attack возможна и в том случае, если продавец отправляет товар только после получения нескольких подтверждений, но для ее осуществления нужна высокая мощность оборудования атакующего. Ее суть состоит в том, что атакующий отправляет транзакцию на оплату товаров, продолжая проверять блоки, в которые будет включена и его транзакция.
После того, как магазин получит необходимое количество подтверждений, он отгружает товар, а атакующий к этому моменту разветвляет цепь, если найдет больше подтверждений и получает средства обратно. Если набрать большее количество подтверждений для другой транзакции не удалось, то атака не состоится и средства будут перечислены на счет получателя.
Успешность данной атаки напрямую зависит от мощности оборудования мошенника и количества запрашиваемых подтверждений. Например, если мощность злоумышленника составляет 10% от всей мощности сети, а получатель ждет 6 подтверждений, то успешность атаки составляет 0,01%.
Атака 51%
Если атакующий удерживает большую часть мощности сети, то двойное израсходование монет возможно по схеме описанной выше, только со стопроцентной гарантией на успех. Злоумышленник получает возможность генерировать блоки быстрее, чем вся остальная сеть, и создавать свои цепочки блоков для нечестных транзакций длиннее, чем правильные.
Как совершить двойную трату
Информация в реестре блокчейна открыта для всех. Каждый может скопировать цифровые монеты и попробовать заплатить ими дважды. Майнеры могут проверить только наличие средств на счету отправителя в конкретный временной промежуток, поэтому, если воспользоваться моментом, то одни и те же монеты могут быть отправлены дважды, пока средства не будут списаны по предыдущей транзакции.
В незащищенных системах двойная трата сводится к отправке повторной транзакций в интервал времени, пока предыдущая транзакция еще не подтверждена. В данном случае монеты получит получатель, чья транзакция была первой включена в блок.
Для более защищенных систем злоумышленнику потребуется также иметь достаточно крупные мощности, чтобы найти больше подтверждений для неверной транзакции и вернуть свои средства обратно после того, как первая транзакция будет отклонена.
Как предотвратить двойное расходование
В настоящее время платежные системы, работающие на блокчейне, имеют два способа предотвращения двойной траты средств:
- открытый реестр транзакций;
- особый механизм проверки.
Blockchain ведет хронологическую регистрацию всех платежных регистраций и каждый новый блок содержит информацию о всех предыдущих транзакциях, начиная с момента основания. Всем транзакциям присваивается время совершения операции и это помогает выяснить, какая из транзакций является основной, а какая скопированной.
Например, отправитель желает совершить двойную трату средств, имея на счету 1 ВТС. Он отправляет эту монету первому продавцу и, пользуясь тем, что средства еще не списались, желает обмануть второго продавца и отправляет ему эту же монету повторно.
Обе транзакции транслируются в пул неподтвержденных транзакций и поступают на проверку, при этом исполнена будет только первая транзакция, а вторая транзакция будет признана ложной, поскольку не наберет необходимого количества подтверждений.
Следовательно, продавцу, чтобы не стать обманутым, нужно отправлять товары только после получения подтверждения от сети, а не после факта отправки платежа от покупателя. Транзакции с шестью подтверждениями считаются безопасными перед двойной тратой.
Выводы
Двойная трата цифровых монет возможна из-за того, что до момента подтверждения транзакции средства остаются на счету отправителя. При этом создание децентрализованных платежных систем стало возможным благодаря тому, что в блоки записываются только транзакции, набравшие больше подтверждений, а вторая ветка с повторной тратой признается неверной и отклоняется.
Тем не менее, в блокчейне остается возможность совершить двойную трату, но на это нужны достаточно высокие мощности. Без них обмануть продавца можно, только если он отправляет товар по платежам имеющим ноль подтверждений.