Подвійна витрата
Подвійна витрата (англ. Double-spending) — повторний продаж (відчуження) одних і тих самих активів. Зазвичай йдеться про системи електронних платежів, яким органічно властива можливість копіювання поточного стану, що дозволяє зробити кілька платежів з одного й того самого стартового положення.[1][2]
Для більшості дрібних придбань процес купівлі-продажу зводиться до прямого обміну товару на гроші. Відразу після отримання товару покупець стає його новим власником. Але бувають ситуації, коли між укладанням правочину та здійсненням передавання права власності проходить значний проміжок часу. Досить часто це виникає під час операцій з нерухомістю. Такий розрив дозволяє продавцю той самий товар продати кілька разів різним покупцям і одержати з них кілька разів оплату. Саме до такого результату приводила практика багаторазового позичання грошей у різних людей під заставу одного й того ж майна. Зараз таке відбувається іноді через неуважність продавця[3], але найчастіше — є варіантом шахрайства[3]. Наприклад, після сплати грошей за квартиру в новобудові через якийсь час (іноді кілька років) власник може дізнатися, що його нова квартира належить не тільки йому. Бувають аналогічні казуси і при покупці квартир на вторинному ринку[4], коли покупець може переконатися, що майно дійсно раніше належало продавцю, але немає гарантії, що воно не було продано незадовго перед угодою або не буде продано ще раз відразу після неї. Зміни у законодавстві та застосування єдиної реєстрації даних про подібні угоди покликані усунути можливість омани покупця[3].
Принципово інша ситуація при операціях із цифровими товарами, бо завжди є можливість продажу ідентичної копії. При цьому кожен покупець отримує повну копію товару, і це не вважається шахрайством. Така легкість копіювання та ідентичність копій стає тяжкою проблемою для електронних грошей, у випадку намагання стати аналогами готівки. Цифрова «монета» для вільної передачі може мати тільки форму файлу. Але цифрові файли легко копіюються без будь-яких змін. Власник «монети» може передавати її копії великій кількості продавців як сплату за товари. Кожен одержувач легко переконається, що отриманий файл повністю відповідає стандарту, але не буде впевнений, що копією того самого файлу не розрахувались з іншим продавцем[5].
Усі платіжні системи, крім готівки та криптовалют, є централізованими — мають центральну (адміністративну) ланку, яка забезпечує контроль припустимості тієї чи іншої операції[5]. При цьому інформацію про поточні залишки, яка є головним критерієм для прийняття рішень, беруть з баз самого адміністратора, а не від платників. Тому копіювання платником стану платіжної системи дозволяє лише сформувати запит на подвійну витрату (наприклад, за наявності на рахунку 1000 гривень сформувати кілька платіжних доручень в банк-клієнті по 1000 гривень кожне), але дійсне виконання доручень відбуватиметься в порядку надходження розпоряджень до банку, і частина з них виявиться відхиленою через брак коштів.
При оплаті готівкою жодного посередника не потрібно. Покупець передає гроші продавцю і не зможе ці ж гроші передати іншому продавцю. Якби вдалося здійснити аналогічну дію в електронному вигляді, тоді відпала б потреба в адміністраторі платіжної системи. Але пряму аналогію реалізувати не вдавалося.
Однією з форм безготівкового грошового обігу є вексель. Поточного власника векселя та його повноваження можна встановити за ланцюжком передавальних написів на самому векселі (індосаментів). Якщо поточний власник векселя Аліса зробить передавальний напис «платити за наказом Бориса» і поставить свій підпис, то наступним власником векселя стає Борис і він зможе їм розпоряджатись, зокрема зробити новий індосамент.
Схожий до вексельного механізм вдалося реалізувати в електронній формі. «Електронна монета» містить кількісну інформацію («номінал») та вказівку на власника (точніше, його адресу, сформовану з його відкритого ключа). Для передачі «електронної монети» власник підписує своїм закритим ключем хеш попередньої транзакції та публічний ключ (криптовалютну адресу) майбутнього власника[5]. Тепер тільки власник закритого ключа від нової адреси зможе передати «монету» далі — здійснити нову транзакцію з нею. Інші вузли мережі, перш ніж прийняти транзакцію до обробки, перевіряють підпис. Відповідність підпису до адреси платника свідчить, що ініціатор транзакції дійсно є власником закритого ключа, тобто поточним власником. Одержувач «електронної монети» може перевірити весь ланцюжок підписів (до моменту емісії) і переконатись у його коректності та безперервності. Але через можливість копіювання одержувач не зможе визначити, скільки разів колишній власник вже витратив цю «монету»[5]. На кінець 2017 року запропоновано вже кілька алгоритмів, які забезпечують досягнення консенсусу щодо того, яку транзакцію вважати істинною, що дозволяє ігнорувати спроби подвійної витрати однієї й тієї ж «електронної монети».
У децентралізованих платіжних систем (криптовалют) немає контролюючого (адміністративного) органу. Для запобігання подвійній витраті було запропоновано об'єднувати транзакції в блоки, з яких утворюють безперервний ланцюжок — формують блокчейн. Для отримання права додати новий блок треба довести виконання роботи (Proof of work)[6]. Пізніше було запропоновано схеми, де замість доказу виконання роботи застосовується доказ частки володіння. Головна мета механізму надання права побудови чергового блоку — надати критерії досягнення консенсусу про те, яку версію транзакцій вважати вірною. Система перебуває у безпеці, поки під сукупним контролем чесних учасників перебуває найбільша частина її ресурсів, які використовуються як критерій консенсусу[7]. Перевірка ланцюжка дозволяє переконатись, що запропонована продавцю «електронна монета» не витрачалась раніше. Фактично, транзакцію засвідчує той вузол, який включає її в блок. Будь-які транзакції з цією «монетою» тепер можливі лише за підписом закритим ключем, що відповідає новій адресі, а інші система ігноруватиме.
Інформація у блокчейні відкрита для всіх. Але контрагенти можуть перевірити лише наявність у відправника активів станом на деякий час у недавньому минулому. Якщо досить швидко зробити кілька платежів, які передають одну «монету» на користь кількох різних адрес, то інформація про жоден з них ще не отримає підтвердження (не потрапить до чергового блоку або не буде іншим чином легітимізована) і кожен з одержувачів зможе пересвідчитись у правомірності транзакцій. Лише після того, як одна з транзакцій (не обов'язково здійснена першою за часом) буде підтверджена, решта транзакцій із цією «монетою» не буде зареєстрована. Але є ймовірність, що через тимчасове розгалуження ланцюжка блоків у паралельних гілках можуть бути транзакції, в яких одну й ту саму «монету» отримають різні адреси. Кожна з гілок рівноправна, не є хибною. У процесі формування нових блоків (майнінгу або форжингу) якась із гілок рано чи пізно стане довшою за іншу. Вона отримає перевагу, а коротша гілка «помре» і всі транзакції, що знаходяться в її блоках, якщо вони раніше не опинились у паралельній гілці, потрібно буде розміщувати в нових блоках[8]. Так як одна з версій спірної транзакції залишиться в раніше сформованому блоці, то версія транзакції з гілки, що «померла» при спробі додати її в новий блок буде відкинута. Імовірність існування паралельних ланцюжків вкрай мала і експоненційно зменшується зі зростанням довжини ланцюжка[8]. Чим більше підтверджень має транзакція (чим далі від краю відійшов її блок в загальному ланцюжку), тим менш ймовірне скасування транзакції через відмирання гілки, що її містить. Тому угоди з нульовим підтвердженням потенційно ризиковані, що змушує багатьох продавців встановлювати вимогу на мінімальну кількість підтверджень. Зазвичай, шість підтверджень є гарним балансом між часом очікування (для біткойну це близько однієї години) і впевненістю в тому, що транзакція не буде фальсифікована[9].
Як при майнінгу, так і при форжингу за наявності у зловмисника контролю над досить великою часткою емісії (сумарної потужності майнінгу або сумарної кількості ресурсів при форжингу) є істотна (не мізерно мала, як у звичайному випадку) ймовірність свідомої побудови зловмисником довгої паралельної гілки блоків. При цьому у «загальній» гілці шахрай передає «монету» продавцеві, а в «таємній» гілці отримувачем «монети» прописує себе самого, або іншу підставну адресу. Після публікації в мережі «таємної» гілки, головним буде визнано більш довгий ланцюжок. Таке скасування довгої гілки блоків може призводити до визнання недійсними транзакцій, навіть підтверджених значною кількістю блоків[10].
При концентрації в одних руках понад 50 % емісії можливе вибудовування паралельної гілки довільної довжини, що дозволяє гарантовано змінити одержувача. Така гіпотетична ситуація отримала назви «атака Double Spending» або «атака 51 %»[11]. Якщо при майнінгу підконтрольна потужність менше 50 % загальної потужності мережі, то ймовірність успіху експонентно знижується з кожним новим блоком. Для форжингу концентрація більше 50 % ресурсів не гарантує успішної побудови довгої паралельної гілки, хоча й суттєво підвищує ймовірність цього.
Навіть якщо атака буде успішною, це не призведе до:
- зміни сумарного розміру винагороди за генерацію блоків;
- зміни сумарної кількості криптовалюти;
- порушенню функціонування мережі;
- витрат «монет», які раніше не належали зловмиснику.
На початок 2013 потужність мережі «біткойн» становила менше 25 THash/s, але за наступні 3 місяці зросла до 55 за рахунок масового поширення спеціалізованих процесорів (ASIC), розроблених спеціально для майнінгу біткойнів[12]. У червні 2013 року потужність мережі перевищила 120 THash/s. До вересня потужність перевищила 1000 THash/s, у жовтні потужність подвоїлася, а на 1 грудня 2013 перевищила 6000 THash/s[13]. При цьому користувач з найбільшою продуктивністю має менше ніж 100 THash/s[14]. Сконцентрувати необхідну сумарну потужність в одних руках стає все складніше та витратніше. Але майнінг вже давно сконцентровано в пулах, найбільші з яких вже кілька разів наближались до позначки 50 % сумарної потужності.
Подвійна витрата біткойнів на практиці ніколи не була зафіксована. На травень 2015 року паралельні гілки ніколи не перевищували 5 блоків[15].
Створення 1 серпня 2017 року Bitcoin Cash фактично роздвоїло спершу єдиний блокчейн біткойну. Це дало змогу легальної подвійної витрати одних і тих самих «монет» на різних платформах.
У 2016 році відразу дві криптовалюти на базі Ethereum піддалися атаці, в результаті якої зловмисникам вдалося здійснити подвійне списання коштів і вкрасти 22000 монет через сервіс обміну криптовалют.
В січні 2019 року розробники Ethereum Classic визнали атаку 51 % на мережу[16].
1 серпня 2020 року на Ethereum Classic була проведена атака 51 %. Невідомі отримали криптовалюти вартісю 5.7 млн дол[16]. 6 серпня новою атакою вкрали 1,68 млн дол..[17] В середині серпня з'явились припущення, що зловмисники із Росії[18].
Нерідко характер угоди передбачає передачу товару відразу після платежу (наприклад, купівля в кафе), тобто з нульовим підтвердженням. У такому випадку можлива атака, яка є варіантом подвійної витрати — спершу формується передача «монети» собі або дружній особі, а потім цю ж «монету» використовують для оплати в кафе. Коли перша транзакція потрапить до блокчейну, друга буде вважатись помилковою і продавець стане жертвою шахрайства. Продавці можуть вжити запобіжних заходів, щоб зменшити ризик такої атаки, хоча і не зможуть усунути загрозу повністю.
Проект Blockcypher спрямований на допомогу у таких ситуаціях. Для будь-якої транзакції з нульовим підтвердженням за спеціальним алгоритмом додається атрибут довіри[19]. Якщо цей показник становить 99,9 %, то ймовірність спроби подвійної витрати становить лише 0,01 %.[20] Розрахунок ґрунтується на аналізі двох аспектів транзакції: «формат» та «поведінка». «Формат» аналізує структуру транзакції: які є вхідні та вихідні дані, їх історія, тип підпису. «Поведінка» розглядає те, як транзакція поширюється по мережі, відстежує зміну її параметрів з часом.
У криптовалюті Dash використовується спеціальний сервіс InstantSend, призначений для дуже швидких транзакцій (підтвердження видається через 1-3 секунди). При оплаті за цим протоколом транзакція відправляється 7-10 випадковим майстернодам, які блокують входи транзакції приблизно на годину, щоб унеможливити повторне використання вже задіяних монет навіть без включення транзакції в блок[21].
Система Ripple вирішує проблему подвійної витрати консенсусом. На першому етапі всі сервери приймають усі дійсні транзакції, у тому числі нові. Далі кожен сервер «голосує» за правдивість ухвалених транзакцій. Транзакції, які отримують більше голосів, переходять на новий етап, де так само відбувається голосування, інші транзакції, які набрали недостатню кількість голосів, відкидаються. Транзакція перестає брати участь у голосуванні, коли консенсус щодо неї сягає 80 %[22].
Вважають, що неможливо вирішити «Задачу візантійських генералів» у разі, якщо більш ніж 33 % системи робить шахрайські дії[23]. У протоколі Ripple коректність консенсусу виконується, поки система не схильна до шахрайства хоча б на рівні 20 %[24].
Можлива ситуація, коли шахрайська транзакція підтверджується консенсусом, проте така транзакція не становить загрози[24]. Припустимо, користувач намагається провести подвійну витрату, але навіть якщо обидві його транзакції підтверджуються консенсусним процесом, після реєстрації однієї з транзакцій друга вже буде недійсною. Вся справа в тому, що основною вимогою для консенсусу є залежність від детермінованого (відтворюваного) алгоритму для обробки подій, що означає, що виключаються всі ситуації, які суперечать одна одній[25].
Порівняння Bitcoin і Ripple в контексті проблеми подвійної витрати зводиться до порівняння «доказу виконання роботи» та вищеописаного алгоритму консенсусу. Система біткойн стає вразливою, якщо в одних руках сконцентровано понад 51 % сумарної потужності. Однак така проблема не стоїть для Ripple через консенсусний підхід[26]. Володіння надмірною потужністю не дає зловмиснику жодної переваги. Аналогічна атака для Ripple полягала б у тому, щоб дати зловмиснику контролювати більшість серверів-валідаторів, які відповідають за перевірку транзакцій. Але учасники Ripple можуть легко уникнути цієї проблеми, оскільки самі обирають своїх власних валідаторів. Виявлена атака легко співвідноситься з шахрайським валідатором, а надалі такий валідатор виключається зі списку і не бере участь у перевірках. Через мінімальний виграш для шахрая та складність проведення атаки, дуже малоймовірно їх реальне проведення[27].
Сервери-валідатори Ripple управляються окремими особами, організаціями та відомими компаніями. Рівень захисту зростає пропорційно до зростання мережі.
- ↑ The Double Spending Problem and Cryptocurrencies. Banking & Insurance Journal. Social Science Research Network (SSRN). Accessed 24 December 2017.
- ↑ Mark Ryan. Digital Cash. School of Computer Science, University of Birmingham. Процитовано 27 травня 2017.
- ↑ а б в Опасайтесь «двойной продажи»! - Федеральное агентство недвижимости, г. Кемерово (рос.). kem.federalnoe.com. Архів оригіналу за 7 грудня 2017. Процитовано 8 грудня 2017.
- ↑ Сергей Сизинцев. Продать квартиру дважды? // Петропавловск kz — ИА REX-Казахстан. — 2013. — Число 18. — 08. Архівовано з джерела 25 вересня 2020.
- ↑ а б в г Bitcoin: A Peer-to-Peer Electronic Cash System, 2008, раздел № 2 «Transactions».
- ↑ Ghassan O. Karame, Elli Androulaki, Srdjan Capkun. Two Bitcoins at the Price of One? Double-Spending Attacks on Fast Payments in Bitcoin. Архівовано з джерела 9 грудня 2017.
- ↑ Bitcoin: A Peer-to-Peer Electronic Cash System, 2008.
- ↑ а б Bitcoin: A Peer-to-Peer Electronic Cash System, 2008, раздел № 4 «Proof-of-Work».
- ↑ 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.
- ↑ Bitcoin: A Peer-to-Peer Electronic Cash System, 2008, раздел № 11 «Calculations».
- ↑ Статья о вероятности Double Spending атаки. Архів оригіналу за 9 травня 2013. Процитовано 3 травня 2015.)
- ↑ ASIC Mining Profits Will Be Gone By Summer (англ.). Ƀitcoin Insight. 24 березня 2013. Архів оригіналу за 31 жовтня 2014. Процитовано 30 листопада 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
- ↑ Hash Rate (англ.). blockchain.info. Архів оригіналу за 6 січня 2018. Процитовано 6 січня 2018.
- ↑ アーカイブされたコピー. Архів оригіналу за 13 травня 2015. Процитовано 3 травня 2015. Fastest Users (Last Hour) 269032 99,730.90 GH/s
- ↑ Number Of Orphaned Blocks. Blockchain.info. Архів оригіналу за 7 березня 2016. Процитовано 6 січня 2018.
- ↑ а б Сеть Ethereum Classic подверглась второй атаке за неделю [Архівовано 4 жовтня 2020 у Wayback Machine.], ForkLog, 6 серпня 2020
- ↑ Ущерб от второй за неделю атаки на Ethereum Classic оценили в $1,68 млн [Архівовано 8 серпня 2020 у Wayback Machine.], ForkLog, 7 серпня 2020
- ↑ Следы атаки 51 % на Ethereum Classic могут вести в Россию [Архівовано 27 вересня 2020 у Wayback Machine.], BLOOMCHAIN, 17 серпня 2020
- ↑ Renming QiChen Feng, Zheng LiuNezih Mrad. Blockchain-Powered Internet of Things, E-Governance and E-Democracy. — Bharat Dahiya, Chulalongkorn University, Bangkok, Thailand, 2017. — С. 517.
- ↑ BlockCypher: Zero Confirmation Bitcoin Transactions Still Viable. CCN (англ.). 18 липня 2015. Архів оригіналу за 22 грудня 2017. Процитовано 19 грудня 2017.
- ↑ Криптофан (29 листопада 2017). Криптовалюта Dash. CryptoState.ru. Архів оригіналу за 6 березня 2018. Процитовано 5 березня 2018.
- ↑ David Schwartz, Noah Youngs, Arthur Britto. The Ripple Protocol Consensus Algorithm // Ripple Labs Inc, 2014. Архівовано з джерела 29 вересня 2017.
- ↑ LESLIE LAMPORT, ROBERT SHOSTAK, and MARSHALL PEASE. The Byzantine Generals Problem // SRI International. Архівовано з джерела 6 вересня 2017.
- ↑ а б David Schwartz, Noah Youngs, Arthur Britto. The Ripple Protocol Consensus Algorithm. Архівовано з джерела 29 серпня 2017.
- ↑ Documentation: EOS.IO Documents. — 2017. — 13 грудня. Архівовано з джерела 1 квітня 2018.
- ↑ Introduction to Ripple for Bitcoiners - Ripple Wiki (англ.). wiki.ripple.com. Архів оригіналу за 13 листопада 2017. Процитовано 13 грудня 2017.
- ↑ 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.
- Satoshi Nakamoto. Bitcoin: A Peer-to-Peer Electronic Cash System. — 2008. — 9 с.