Що таке проблема подвійних витрат?

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

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


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

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

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

Банки можуть використовувати сліпі підписи для видачі користувачам цифрових активів, схожих на готівку (що може уможливити анонімні однорангові транзакції). Це детально описано в статті криптографа Девіда Чаума 1982 року «Методики сліпого підпису для невідстежуваних платежів».

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

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

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

Потім використані «банкноти» знищуються, і якщо Ерін бажає використати баланс свого рахунку таким же чином, потрібно випустити більше банкнот.

Механізм Chaumian eCash надзвичайно цінний для приватних переказів. Однак сам механізм eCash не має опору, оскільки банки є централізованими вузлами, коли система піде не так, постраждають усі. Банкноти, випущені банком, самі по собі не мають жодної вартості; їх вартість пов’язана виключно з бажанням банку обміняти банкноти на долари США. Клієнти підкоряються банку і повинні покладатися на репутацію банку, щоб оперувати коштами. Це саме та проблема, яку криптовалюти прагнуть вирішити.


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

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

Найбільше нововведення, представлене в офіційному документі про біткойн, — це вирішення проблеми подвійних витрат. Сатоші Накамото запропонував безпрецедентну структуру даних, яка тепер відома як блокчейн.

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

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

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

Повернемося до ресторанної ситуації. Ден повернувся в ресторан і цього разу помітив наклейку на вітрині з написом «Цей магазин підтримує оплату біткойнами». Він не зміг забути свій останній прийом їжі і знову замовив ту саму їжу, вартістю 0,005 біткоіна.​

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

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


Проблема подвійних витрат Bitcoin

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

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

Наразі існує три поширені атаки подвійних витрат:

  • Атака 51 %: одній юридичній особі чи організації вдається контролювати понад 50 % швидкості хешування, щоб видалити чи змінити порядок транзакцій. Цей тип атаки вкрай малоймовірний для мережі Bitcoin, але він траплявся в інших мережах.

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

  • Атаки Finney: зловмисник попередньо видобуває транзакцію та поміщає її в блок, але не публікує відразу в мережі. Натомість він заплатив той самий токен в іншу транзакцію перед публікацією раніше видобутого блоку, тим самим зробивши платіж недійсним. Необхідними умовами для атаки Fenney є те, що події відбуваються в певному порядку, і успіх також залежить від того, чи приймає одержувач непідтверджену транзакцію.

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


Підведіть підсумки

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

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