Двойное расходование

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Double-spending»)
Перейти к навигации Перейти к поиску

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

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

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

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

[править | править код]

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

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

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

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

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

[править | править код]

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

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

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

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

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

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

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

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

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

[править | править код]

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

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

Мастерноды

[править | править код]

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

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

[править | править код]

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

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

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

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

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

Примечания

[править | править код]
  1. Н.Ю. Круглова. Хозяйственное право. — М.: Юрайт, 2011. — 885 с.

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

  2. под редакцией Фрэнка Фабоцци. Финансовые инструменты. — М.: Эксмо, 2011. — 864 с. Архивировано 13 декабря 2017 года.

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

  3. 1 2 3 Опасайтесь «двойной продажи»! - Федеральное агентство недвижимости, г. Кемерово. kem.federalnoe.com. Дата обращения: 8 декабря 2017. Архивировано из оригинала 7 декабря 2017 года.
  4. Сергей Сизинцев. Продать квартиру дважды? // Петропавловск kz — ИА REX-Казахстан. — 2013. — 18 августа. Архивировано 25 сентября 2020 года.
  5. 1 2 3 4 Bitcoin: A Peer-to-Peer Electronic Cash System, 2008, раздел № 2 «Transactions».
  6. М.А. Боровская. Банковские услуги предприятиям. — Учебное пособие.. — Таганрог: ТРТУ, 1999. — 169 с. Архивировано 19 декабря 2017 года.
  7. Ghassan O. Karame, Elli Androulaki, Srdjan Capkun. Two Bitcoins at the Price of One? Double-Spending Attacks on Fast Payments in Bitcoin (англ.). Архивировано 9 декабря 2017 года.
  8. Bitcoin: A Peer-to-Peer Electronic Cash System, 2008.
  9. 1 2 Bitcoin: A Peer-to-Peer Electronic Cash System, 2008, раздел № 4 «Proof-of-Work».
  10. Arthur Gervais, Hubert Ritzdorf, Ghassan O. Karame, Srdjan Capkun. [https://eprint.iacr.org/2015/578.pdf Tampering with the Delivery of Blocks and Transactions in Bitcoin] (англ.). Архивировано 28 сентября 2017 года.
  11. Bitcoin: A Peer-to-Peer Electronic Cash System, 2008, раздел № 11 «Calculations».
  12. Статья о вероятности Double Spending атаки. Дата обращения: 3 мая 2015. Архивировано из оригинала 9 мая 2013 года.)
  13. ASIC Mining Profits Will Be Gone By Summer (англ.). Ƀitcoin Insight (24 марта 2013). — «January of this year the total hashrate of the Bitcoin network was less than 25 THash/s. In less than 3 months that figure has ballooned to more than 55 THash/s. The sharp increase is the result of newly available ASIC Bitcoin mining hardware». Дата обращения: 30 ноября 2013. Архивировано из оригинала 31 октября 2014 года.
  14. Hash Rate (англ.). blockchain.info. Дата обращения: 6 января 2018. Архивировано 6 января 2018 года.
  15. アーカイブされたコピー. Дата обращения: 3 мая 2015. Архивировано 13 мая 2015 года. Fastest Users (Last Hour) 269032 99,730.90 GH/s
  16. Number Of Orphaned Blocks. Blockchain.info. Дата обращения: 6 января 2018. Архивировано из оригинала 7 марта 2016 года.
  17. Renming QiChen Feng, Zheng LiuNezih Mrad. Blockchain-Powered Internet of Things, E-Governance and E-Democracy. — Bharat Dahiya, Chulalongkorn University, Bangkok, Thailand, 2017. — С. 517. — 565 с.
  18. "BlockCypher: Zero Confirmation Bitcoin Transactions Still Viable". CCN (англ.). 2015-07-18. Архивировано 22 декабря 2017. Дата обращения: 19 декабря 2017.
  19. Криптофан. Криптовалюта Dash. CryptoState.ru (29 ноября 2017). Дата обращения: 5 марта 2018. Архивировано 6 марта 2018 года.
  20. David Schwartz, Noah Youngs, Arthur Britto. The Ripple Protocol Consensus Algorithm (англ.) // Ripple Labs Inc, 2014. Архивировано 29 сентября 2017 года.
  21. LESLIE LAMPORT, ROBERT SHOSTAK, and MARSHALL PEASE. The Byzantine Generals Problem (англ.) // SRI International. Архивировано 6 сентября 2017 года.
  22. 1 2 David Schwartz, Noah Youngs, Arthur Britto. The Ripple Protocol Consensus Algorithm (англ.). Архивировано 29 августа 2017 года.
  23. Documentation: EOS.IO Documents. — 2017-12-13. Архивировано 1 апреля 2018 года.
  24. Introduction to Ripple for Bitcoiners - Ripple Wiki (англ.). wiki.ripple.com. Дата обращения: 13 декабря 2017. Архивировано из оригинала 13 ноября 2017 года.
  25. Trust and trustworthy computing : 8th International Conference, TRUST 2015, Heraklion, Greece, August 24-26, 2015, Proceedings. — Cham. — 1 online resource (xi, 328 pages) с. — ISBN 9783319228464.

Литература

[править | править код]