Русская Википедия:Двойное расходование

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Двойное расходование (Шаблон:Lang-en) — повторная продажа (отчуждение) одних и тех же активов. Обычно речь идёт о системах электронных платежей, которым органично присуща возможность копирования состояния, что позволяет сделать несколько платежей из одного и того же стартового состояния.

Описание

Для большинства мелких покупок процесс купли-продажи сводится к прямому обмену товара на деньги. Сразу после передачи товара покупатель становится новым собственником. Но бывают ситуации, когда между заключением сделки и оформлением передачи права собственности проходит значительный промежуток времени. Достаточно часто такие ситуации возникают при операциях с недвижимостью. Это позволяет продавцу один и тот же товар продать несколько раз разным покупателям и получить с них несколько раз оплату. К такому итогу приводила практика многократного одалживания денег у разных людей под залог одного и того же имущества[1][2]. Сейчас иногда такое происходит по невнимательности продавца[3], но чаще всего является вариантом мошенничества[3]. Например, после уплаты денег за квартиру в новостройке, через время (иногда несколько лет) собственник может узнать, что его новая квартира принадлежит не только ему. Бывают аналогичные казусы и при покупке квартир на вторичном рынке[4], когда покупатель может убедиться, что имущество действительно ранее принадлежало продавцу, но нет гарантии, что оно не было продано незадолго перед сделкой или не будет продано ещё раз вскоре после неё. Изменения в законодательстве и применение единой регистрации данных о подобных сделках призваны устранить возможность обмана покупателя[3].

Принципиально иная ситуация при операциях с цифровыми товарами — всегда есть возможность продажи идентичной копии. При этом каждый покупатель получает полную копию товара, и это не считается мошенничеством. Но легкость копирования и идентичность копий становится серьёзной проблемой для схем цифровых денег, аналогичных наличным. Цифровая «монета» для свободной передачи должна иметь форму файла. Но цифровой файл легко копируется. Обладатель «монеты» может передавать её копии большому количеству продавцов в уплату за товары. Каждый получатель легко убедится, что полученный файл полностью соответствует стандарту, но не будет уверен, что такой же копией не расплатились с другим продавцомШаблон:Sfn.

Предотвращение

Все платёжные системы, кроме криптовалют, являются централизованными — имеют центральное (административное) звено, где обеспечивается контроль допустимости той или иной операцииШаблон:Sfn. При этом основой для принятия решений служит информация самого администратора, а не информация, предоставляемая плательщиком. Поэтому копирование плательщиком состояния платёжной системы позволяет лишь сформировать двойные траты (например, при наличии на счету 1000 рублей сформировать два платёжных поручения в банк-клиенте по 1000 рублей каждое), но действительное исполнение будет происходить в порядке поступления распоряжений в банк, и часть из них окажется отклонённой из-за недостатка средств.

Файл:Транзакции.png
Упрощённая структура последовательных транзакций с одним входом и одним выходом

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

Одной из форм безналичного денежного обращения является вексель[5]. Кто текущий владелец векселя и его полномочия, можно установить по цепочке передаточных надписей (индоссаментов). Если текущий владелец векселя Алиса сделает передаточную надпись «платить по приказу Боба» и поставит свою подпись, то следующим владельцем векселя становится Боб и только он сможет им распоряжаться, в том числе сделать новый индоссамент. Именно подобный механизм получилось реализовать в электронной форме. «Электронная монета» содержит количественную информацию («номинал») и указание на владельца (точнее, его адрес, сформированный из его открытого ключа). Для передачи «электронной монеты» владелец подписывает своим закрытым ключом хеш предыдущей транзакции и публичный ключ (криптовалютный адрес) будущего владельцаШаблон:Sfn. Теперь только владелец закрытого ключа от нового адреса сможет осуществить новую транзакцию с этой «электронной монетой». Остальные узлы сети, прежде чем принять транзакцию к обработке, проверяют подпись. Правильность подписи свидетельствует, что инициатор транзакции является владельцем секретного ключа, соответствующего адресу текущего владельца. Получатель «электронной монеты» может проверить всю цепочку подписей (вплоть до момента эмиссии) и убедиться в её корректности. Но из-за возможности копирования получатель не сможет определить, сколько раз бывший владелец уже потратил эту «монету»Шаблон:Sfn. На конец 2017 года предложено уже несколько алгоритмов, обеспечивающих достижение консенсуса относительно того, какую транзакцию считать истинной, что позволяет игнорировать попытки двойного расходования одной и той же «электронной монеты».

На основе блокчейна

В децентрализованных платёжных системах (криптовалютах) нет контролирующего органа. Для предотвращения двойного расходования было предложено объединять транзакции в блоки, которые выстраивают в непрерывные цепочки — формируют блокчейн. Для получения права на добавление блока надо доказать выполнение работы («Proof of work»)[6]. Проверка цепочки позволяет убедиться, что та же «электронная монета» не тратилась ранее. Фактически, транзакцию удостоверяет тот узел, который включает её в блок. Любые другие транзакции с этой же «электронной монетой» и этим же владельцем теперь система будет игнорировать. Позднее были предложены схемы, где вместо доказательства работы применяется доказательство доли владения. Главная цель построения блокчейна — предоставить критерий для достижения консенсуса о том, какую версию транзакций считать верной. Система находится в безопасности, пока самая крупная часть ее вычислительных ресурсов находится под совокупным контролем честных участниковШаблон:Sfn.

Информация в блокчейне открыта для всех. Но контрагенты могут проверить лишь наличие у отправителя активов на некоторый момент времени в прошлом. Если несколько платежей, передающих один и тот же актив, сделать достаточно быстро, то информация о них ещё не получит подтверждения (не попадёт в очередной блок или не будет иным образом легитимизирована) и каждый из получателей будет уверен в правомерности транзакций. Лишь после того, как одна из транзакций (не обязательно выполненная первой по времени) будет подтверждена, остальные транзакции с этим же активом уже не будут действительными. Но есть вероятность, что из-за временного разветвления цепочки блоков в параллельных ветках могут находиться транзакции, которые по-разному распоряжаются одним и тем же активом. Каждая из веток равноправна, не является ошибочной. В процессе формирования новых блоков (майнинга или форжинга) какая-то из веток станет длиннее. Она получит преимущество, а короткая ветка отомрёт и все транзакции, находящиеся в её блоках, нужно будет вновь размещать в блокахШаблон:Sfn. Так как одна из версий спорной транзакции останется в ранее сформированном блоке, то версия транзакции из «умершей» ветки при попытке добавить её в новый блок будет отвергнута. Вероятность существования параллельных цепочек крайне мала и экспоненциально уменьшается с ростом длины цепочкиШаблон:Sfn. Таким образом, чем больше подтверждений имеет транзакция, тем менее вероятна отмена транзакции из-за отмирания содержащей её цепочки. Поэтому сделки с нулевым подтверждением потенциально рискованные и многие продавцы устанавливают требование на минимальное количество подтверждений. Как правило, шесть подтверждений представляют собой хороший баланс между временем ожидания всех подтверждений и уверенностью в том, что транзакция не будет фальсифицирована.[7]

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

При концентрации в одних руках свыше 50 % суммарной мощности майнинга возможно выстраивание параллельной цепочки произвольной длины, что позволяет гарантированно изменить получателя в транзакциях владельца сконцентрированной мощности (атака «Double Spending» или «атака 51 %»)[8]. Если подконтрольная мощность меньше 50 %, то вероятность успеха экспоненциально снижается с каждым подтверждением. Для форжинга концентрация более 50 % ресурсов не гарантирует успешного построения длинной параллельной цепочки, хотя и существенно повышает вероятность этого.

Даже если атака двойного расходования будет успешной, это не приведёт к:

  • изменению размера вознаграждения за генерацию блока;
  • изменению суммарного количества криптовалюты;
  • нарушению функционирования сети;
  • тратам активов, которые ранее не принадлежали злоумышленнику.

На начало 2013 года мощность сети «Биткойн» составляла менее 25 THash/s, но за последующие 3 месяца выросла до 55 за счёт массового распространения специализированных процессоров (ASIC), разработанных специально для майнинга в сети «Биткойн»[9]. В июне 2013 года мощность сети превысила 120 THash/s. К сентябрю мощность превысила 1000 THash/s, в октябре мощность удвоилась, а на 1 декабря 2013 года превысила 6000 THash/s[10]. При этом пользователь с наибольшей производительностью имеет менее 100 THash/s[11]. Сконцентрировать необходимую суммарную мощность в одних руках становится всё сложнее и затратнее. Но майнинг уже давно сконцентрирован в пулах, крупнейшие из которых уже несколько раз приближались к отметке в 50 % суммарной мощности.

Двойное расходование биткойнов на практике не было зафиксировано. На май 2015 года параллельные цепочки никогда не превышали 5 блоков[12].

Фактор доверия Blockcypher

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

Проект Blockcypher направлен на помощь в таких ситуациях. Для любой транзакции с нулевым подтверждением по специальному алгоритму добавляется атрибут доверия[13] . Если этот показатель составляет 99,9 %, то вероятность попытки двойного расходования равна только 0,01 %.[14] Расчёт основан на анализе двух аспектов транзакции: «формат» и «поведение». «Формат» анализирует структуру транзакции: каковы входные и выходные данные, их история, тип подписи. «Поведение» рассматривает то, как транзакция распространяется по сети, отслеживает изменение её параметров со временем.

Мастерноды

В криптовалюте Dash применяется специальный сервис InstantSend, предназначенный для очень быстрых транзакций (подтверждение выдаётся через 1-3 секунды). При оплате по данному протоколу транзакция отправляется 7-10 случайным мастернодам, которые блокируют входы транзакции примерно на час, чтобы исключить повторное использование задействованных единиц[15].

Консенсусный подход в Ripple

Система Ripple решает проблему двойного расходования консенсусом. На первом этапе все серверы принимают все действительные транзакции, в том числе и новые. Дальше каждый сервер голосует за правдивость принятых транзакций. Транзакции, которые получают большее количество голосов, переходят на новый этап, где так же происходит голосование, остальные транзакции, которые набрали недостаточное количество голосов, отбрасываются. Транзакция перестаёт участвовать в голосовании, когда консенсус относительно неё достигает 80 %[16].

Принято считать, что невозможно решить «Задачу о византийских генералах» в случае, если больше чем 33 % системы подвержены мошенничеству.[17] В протоколе Ripple корректность консенсуса выполняется, пока система не подвержена мошенничеству больше, чем на 20 %.[18]

Возможна ситуация, когда мошенническая транзакция подтверждается консенсусом, однако такая транзакция не представляет угрозы.[18] Допустим, пользователь пытается провести двойную трату, но даже если обе его транзакции подтверждаются консенсусным процессом, после применения одной из транзакций вторая уже является недействительной. Все дело в том, что основным требованием для консенсуса является зависимость от детерминированного (воспроизводимого) алгоритма для обработки произошедших событий, что означает, что все противоречащие друг другу ситуации исключаются.[19]

Сравнение Bitcoin и Ripple в области двойного расходования упирается в сравнение «доказательства работы» и вышеописанного алгоритма консенсуса. Система Биткойн становится уязвимой, если в одних руках сконцентрировано свыше 51 % суммарной мощности. Однако такая проблема не стоит для Ripple из-за использования консенсусного подхода.[20] Обладание избыточной мощностью не дает злоумышленнику никакого преимущества. Аналогичная атака для Ripple заключалась бы в том, чтобы дать злоумышленнику контролировать большинство серверов (валидаторов), которые отвечают за проверку собранных транзакций. Но участники Ripple могут легко избежать этой проблемы, так как они сами выбирают свои собственные валидаторы. Обнаруженная атака легко соотносится с «мошенническим» валидатором, а в дальнейшем такой валидатор исключается из списка проверки. Из-за минимального выигрыша для атакующего и сложности проведения атаки маловероятно, что такие атаки будут инициированы.[21]

Серверы Ripple управляются отдельными лицами, организациями и известными компаниями. Уровень защиты растёт пропорционально росту сети Ripple.

Примечания

Шаблон:Примечания

Литература

Шаблон:Криптовалюты

  1. Шаблон:КнигаШаблон:Начало цитатыЕсли одно и то же имущество передается в залог неоднократно и каждый последующий кредитор-залогодержатель не знает о том, что его обязательство обеспечивается залогом ранее уже заложенного имущества, то это отрицательно сказывается на погашении долга последующим залогодержателям.Шаблон:Конец цитаты
  2. Шаблон:КнигаШаблон:Начало цитатыОдно время имущество можно было закладывать дважды, то есть заем выдавался под залог уже заложенного имущества. В отдельных случаях допускался и третий заем.Шаблон:Конец цитаты
  3. 3,0 3,1 3,2 Шаблон:Cite web
  4. Шаблон:Статья
  5. Шаблон:Книга
  6. Шаблон:Статья
  7. Шаблон:Статья
  8. Шаблон:Cite web)
  9. Шаблон:Cite web
  10. Шаблон:Cite web
  11. Шаблон:Cite web Fastest Users (Last Hour) 269032 99,730.90 GH/s
  12. Шаблон:Cite web
  13. Шаблон:Книга
  14. Шаблон:Cite news
  15. Шаблон:Cite web
  16. Шаблон:Статья
  17. Шаблон:Статья
  18. 18,0 18,1 Шаблон:Статья
  19. Шаблон:Статья
  20. Шаблон:Cite web
  21. Шаблон:Книга