Найти тему
CryptoFox

Как можно тратить одни и те же биткоины дважды и почему это опасно?

Оглавление

Знали ли вы, что до биткоина уже предпринимались попытки создать устойчивую систему цифровых денег? Но все они разбивались о то, что транзакции можно скопировать. Причем байты копировать легче, чем бумагу. Это приводит к так называемой двойной трате.

Двойная трата, двойное расходование или double spending — это повторная (иногда множественная) продажа одних и тех же средств.

Биткоин смог выжить и развиться до сегодняшнего уровня, потому что он снизил вероятность проблемы «двойных расходов». Тем не менее, она гипотетически может быть. И не раз случалась с его форками и другими криптовалютами.

Что такое двойное расходование

Схематично двойную трату можно обозначить таким образом:

-2

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

Рассмотрим пример:

Вы заходите в кафе на вынос и заказываете бургер стоимостью 500 рублей. Вы платите за покупку наличными. Теперь эти наличные находятся в кассе заведения. Вы сможете потратить еще 500 рублей, но не те же самые 500 рублей, что ушли из ваших рук. Ну, если только не украдете их из кассы.

Таким образом: вы оплатили счет, поставщик услуг мгновенно подтвердил факт оплаты, вы получили бургер в замен 500 рублей.

Но криптовалюты — это цифровые деньги, а не физические. Следовательно, транзакции можно копировать или перенаправлять. Это открывает возможность тратить дважды одни и те же BTC.

Как осуществить двойную трату

В нашем примере в кафе вы платили наличными, поэтому платеж был подтвержден мгновенно кассиром заведения, вам даже дали чек. Но с цифровой валютой, такой как BTC, если механизм проверки отсутствует, это может привести к двойным расходам.

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

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

И вот здесь уникальное изобретение биткоина.

Как предотвращается

Блокчейн биткоина и других криптовалют решают проблему двойных трат через:

  • механизмы подтверждения транзакций,
  • открытый леджер (блокчейн).

Блокчейн ведет хронологически упорядоченную регистрацию транзакций с отметками времени с самого начала запуска (с 2009 года в случае BTC).

Каждые 10 минут блок, в котором содержится группа транзакций, добавляется в леджер. И все узлы в сети Bitcoin сохраняют копию блокчейна.

Как сеть Bitcoin предотвращает двойное расходование на примере:

Предположим, у вас есть 1 BTC, который вы пытаетесь потратить дважды.

Вы совершили 1 транзакцию BTC торговцу №1. Теперь вы снова подписываете и отправляете тот же 1 BTC на другой биткоин-адрес, чтобы попытаться обмануть торговца №2. Обе транзакции идут в неподтвержденный пул транзакций. Но только первая транзакция получила подтверждение и была проверена майнерами, заключена в блок. Вторая транзакция не может получить достаточного количества подтверждений, потому что майнеры считают ее недействительной. Если обе транзакции будут одновременно приняты майнерами? Когда они забирают транзакции из мемпула одновременно, то та из транзакций, которая получает максимальное количество подтверждений от сети, будет включена в блокчейн, а другая не состоится.
Вы совершили 1 транзакцию BTC торговцу №1. Теперь вы снова подписываете и отправляете тот же 1 BTC на другой биткоин-адрес, чтобы попытаться обмануть торговца №2. Обе транзакции идут в неподтвержденный пул транзакций. Но только первая транзакция получила подтверждение и была проверена майнерами, заключена в блок. Вторая транзакция не может получить достаточного количества подтверждений, потому что майнеры считают ее недействительной. Если обе транзакции будут одновременно приняты майнерами? Когда они забирают транзакции из мемпула одновременно, то та из транзакций, которая получает максимальное количество подтверждений от сети, будет включена в блокчейн, а другая не состоится.

Чтобы продавцу удостовериться в проведенной транзакции, нужно для своей безопасности ждать несколько подтверждений транзакции. Нельзя просто довольствоваться ссылкой на перевод. Пока деньги не поступили в кошелек — трудно поверить в честность отправителя.

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

Транзакция не обязательно должна подтвердиться первой по времени, она должна быть в самой длинной цепи.

При каких условиях двойная трата все равно возможна?

Двойное расходование возможно при атаках:

Атака 51% — когда злоумышленник захватывает 51% хэш-мощности сети. Когда такой контроль есть, можно отменить любую транзакцию и делать главной выгодную цепочку. В BTC это очень дорого, но другие монеты (последний случай с Verge и BTG) подвержены ей. Это зависит от текущей сложности майнинга, цены на оборудование и стоимости электроэнергии.

Race attack (атака-гонка) — когда злоумышленник посылает одну и ту же монету очень быстро на два разных адреса. А продавец принимает факт оплаты без подтверждений от сети.

Brute force attack — когда транзакция майнится злоумышленником на форке сети.

Finney attack ( по имени комментатора на Bitcointalk) — при удачном стечении обстоятельств возможна. Предположим, что злоумышленник иногда генерирует блоки. В них он включает транзакции с адреса А на адрес Б, оба из которых контролирует. Если генерит блок, не передает его в сеть, а пытается обмануть продавца. Он делает платеж по адресу C (магазину) с адреса A и включает его в свой блок. Но это задача из разряда гипотетических.

Альтернативы

Предотвращением двойных расходов занимаются, в принципе, все сети. У биткоина и подобных ему монет это происходит посредством PoW. Также популярны:

  • и отдельно упоминают протокол консенсуса Ripple. В RCP ноды выбираются сетью. Одним доверяют, другие игнорируются. Хотя у этого способа предотвращения двойных трат есть свои недостатки, о которых мы расскажем в будущих статьях.

Способ защитить себя — ждать подтверждений

Вам не нужно знать точные технические условия подтверждений транзакции. Тем не менее, нужно знать, сколько подтверждений требуется для проверки транзакции. Это обезопасит от мошенничества.

Подтверждения — это количество блоков, добавленных в блокчейн, которые сеть приняла после выполнения конкретной транзакции.

Справедливо сказать: чем больше блоков добавлено, тем больше подтверждений есть, тем более безопасна транзакция.

Как работают подтверждения - в продолжении статьи.