Що таке подвійні витрати
Зміст
Що таке подвійні витрати?
Як можна запобігти подвійним витратам?
Подвійні витрати у Bitcoin
Заключні думки
Що таке подвійні витрати
Головна сторінкаСтатті
Що таке подвійні витрати

Що таке подвійні витрати

Середній рівень
Опубліковано Feb 17, 2020Оновлено Aug 21, 2022
7m

Що таке подвійні витрати?

Подвійні витрати – це потенційна проблема у системі цифрових грошей, коли одні й ті самі кошти витрачаються двома одержувачами одночасно. Без адекватних контрзаходів, протокол, який не зможе вирішити цю проблему, буде вразливий до подібного роду дій, у той час як користувачі не зможуть перевірити факт стороннього витрачання їхніх коштів.

Коли мова йде про цифрові гроші, першорядне значення має недопущення дублювання певних одиниць. Вся система зруйнувалася б, якби Аліса могла отримати 10 одиниць, а потім скопіювати і вставити їх 10 разів, щоб отримати 100 одиниць. Така сама схема не може працювати, якщо вона зможе відправити ті самі 10 одиниць Бобу і Керол одночасно. Отже, щоб цифрові гроші функціонували, мають існувати механізми, які запобігають такій поведінці.


Як можна запобігти подвійним витратам?

Централізований підхід

Централізований підхід реалізувати значно простіше, ніж децентралізовані альтернативи. Зазвичай це включає в себе одного наглядача, який управляє системою і контролює випуск та розповсюдження одиниць. Хорошим прикладом централізованого вирішення проблеми подвійних витрат є система eCash від David Chaum. 

Щоб надати користувачам цифровий актив, що імітує готівку (здатний до анонімного та Р2Р обміну), банк може використовувати сліпі підписи, які докладно описав криптограф David Chaum у статті 1982 року Сліпі підписи для невідстежуваних платежів.

В такому випадку, якщо користувач (назвемо його Ден) бажає отримати 100$ у цифровій формі, він повинен спочатку повідомити про це банк. Якщо в нього є достатній балансу на рахунку він згенерує одне випадкове число або декілька чисел для менших номіналів. Припустимо, він створює п'ять чисел, кожному з яких буде присвоєно значення 20$. Щоб запобігти відстеження банком грошових одиниць, Ден приховує випадкові числа, додаючи  фактор "сліпоти" до кожного з них.

Потім він передає дані в банк, який вносить дебет на його рахунок у розмірі 100$, після чого підписує повідомлення, що підтверджують, що кожна з п'яти частин інформації підлягає обміну на 20$. Тепер Ден може витрачати гроші, випущені банком. Він іде до ресторану Еріна та купує їжу, яка коштує йому 40$. 

Ден може видалити фактор маскування, щоб виявити випадкове число, пов'язане з кожною "банкнотою" цифрових грошей, яке є унікальним ідентифікатором для кожної одиниці (подібно до серійного номера). Він показує два чеки Еріну, який тепер повинен негайно активувати їх у банку, щоб Ден не зміг витрати одні і ті ж гроші в іншого продавця. Банк перевірить, чи підписи дійсні, і якщо вся інформація правильна, він зарахує на рахунок Еріну 40$.

Після активації використані чеки спалюються, і якщо Ерін захоче витратити свій новий баланс ще раз, йому буде необхідно отримати нові чеки аналогічним чином.

"eCash" може бути корисним інструментом для приватних переказів. Але йому не вистачає стійкості, бо банк – це центральна точка відмови. Виданий чек сам по собі нічого не вартий, оскільки його вартість визначається виключно готовністю банку обміняти чек на долари. Клієнти перебувають під владою банку та мають покладатися на його репутацію, щоб гроші функціонували. Це якраз та проблема, яку криптовалюта прагне виправити.


Децентралізований підхід

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

Найбільшим нововведенням, представленим у whitepaper Bitcoin, було вирішення проблеми подвійних витрат. Сатоші запропонував структуру даних, яка тепер широко відома як блокчейн.
Блокчейн – це база даних з деякими унікальними властивостями. Учасники мережі (які називаються нодами) використовують спеціалізоване програмне забезпечення, яке дозволяє синхронізувати свою копію бази даних зі своїми колегами. В результаті вся мережа може перевіряти історію транзакцій, що відноситься до генезисного блоку. Маючи публічний доступ до блокчейну, легко виявляти та запобігати шахрайським діям, таким як транзакції подвійних витрат.
Коли користувач транслює транзакцію, вона не відразу додається до блокчейну – її спочатку потрібно включити в блок через майнінг. Таким чином, одержувач повинен вважати транзакцію дійсною тільки після того, як блок доданий у ланцюг. Інакше вони ризикують втратити кошти, оскільки відправник може витратити ті самі монети в іншому місці. 
Після підтвердження транзакції монети не можуть бути витрачені двічі, оскільки право власності переходить до нового користувача – і вся мережа може це перевірити. Саме з цієї причини багато хто рекомендує дочекатися декількох підтверджень, перш ніж приймати платіж як дійсний. Кожен наступний блок збільшує кількість зусиль, необхідних для зміни або перезапису ланцюга (як при атаці 51%).

Повернемося до сценарію з рестораном. Ден повертається до ресторану і цього разу помічає наклейку "тут приймається Bitcoin". Йому сподобалася їжа, яку він їв минулого разу, тому замовляє її знову. Це коштує йому 0,005 BTC. 

Ерін надає йому публічну адресу, на яку він повинен відправити кошти. Ден транслює транзакцію, яка, по суті, є підписаним повідомленням, в якому йдеться про те, що 0,005 BTC, які були у Дена, тепер знаходяться у Еріна. Не вдаючись у подробиці, будь-хто, кому надано підписану транзакцію Дена, може підтвердити, що він справді володів монетами і, отже, має право відправляти їх.

Однак, як уже згадувалося, транзакція дійсна лише в тому випадку, якщо вона включена до блоку, який було підтверджено. Прийняття непідтверджених транзакцій багато в чому схоже на прийняття 40$ в eCash з попереднього прикладу, без негайного переведення чека у готівку у банку, що дозволяє відправнику витратити їх в іншому місці. Тому рекомендується, щоб Ерін почекав не менше 6 підтверджень блоку (приблизно одну годину), перш ніж прийняти платіж Дена.


Подвійні витрати у Bitcoin

Bitcoin ретельно розроблений для запобігання атакам з подвійною витратою, принаймні, коли протокол використовується належним чином. Тобто, якщо хтось чекає на підтвердження транзакцій у блоці, відправнику буде непросто скасувати їх. Для цього їм потрібно "перевернути" роботу блокчейну, що потребує нереалістичної потужності хешу.

Однак існує декілька атак з подвійною витратою, націлених на сторони, що приймають непідтверджені транзакції. Наприклад, для покупок на невелику суму продавець може не захотіти чекати, доки транзакції будуть включені до блоку. Популярний ресторан швидкого харчування, ймовірно, не може дозволити собі чекати, поки мережа обробляє кожну покупку. Таким чином, якщо бізнес допускає миттєві платежі, вони відкриваються для подвійних витрат. Хтось може замовити бургер, заплатити за нього, а потім одразу ж відправити ті самі гроші на свою адресу. За більш високої комісії ця нова транзакція, швидше за все, буде підтверджена першою і, отже, анулює попередню.

Є три популярні методи для реалізації подвійних витрат:

  • Атаки 51%: коли окремому об'єкту чи організації вдається контролювати понад 50% хешрейту, що дозволяє виключати або змінювати порядок транзакцій. Така атака на Bitcoin є малоймовірною, але відбувалася в інших мережах.
  • Атаки типу "гонки": коли дві конфліктуючі транзакції транслюються одночасно з використанням тих самих коштів, але підтверджується лише одна з них. Мета зловмисника полягає в тому, щоб анулювати валідацію, підтверджуючи лише потрібну йому транзакцію (наприклад, надсилаючи ті самі кошти на свою адресу). Умовою для такої атаки є дозвіл продавця оплачувати товар непідтвердженими транзакціями.
  • Атаки Finney – коли зловмисник попередньо починає майнінг блоку зі своєю транзакцією, не транслюючи його відразу в мережу. Натомість він повторно витрачає монети, але вже в рамках іншої транзакції, і лише потім транслює попередній блок, скасовуючи переказ продавцю. Атаки Finney вимагають певної послідовності подій, а також залежать від готовності одержувача приймати непідтверджені транзакції.

Як бачимо, продавець, який очікує підтвердження блоку, значно знижує ризики стати жертвою подвійних витрат.


Заключні думки

Подвійні витрати дозволяють користувачеві використовувати систему електронних грошей для отримання фінансової вигоди, використовуючи одні й ті самі кошти більше одного разу. Традиційно, відсутність адекватних рішень проблеми перешкоджала прогресу у цій галузі.

На щастя, поява сліпих підписів вирішила багато проблем централізованих фінансових систем. А створення механізмів Proof of Work і технології блокчейну породило Bitcoin – потужну форму децентралізованих грошей, що надихнула багатьох користувачів на створення тисячі інших криптовалютних проєктів.