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

Рейтинг самых надежных брокеров бинарных опционов за 2020 год:

Чем опасна и как происходит двойная трата (double spending) в блокчейне Bitcoin?

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

Читайте в статье

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

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

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

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

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

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

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

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

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

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

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

Честные русские брокеры:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Это влияет на ваш заработок:  Лучшие индикаторы для бинарных опционов - независимый обзор

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

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

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

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

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

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

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

Как работают подтверждения?

Когда пользователь хочет отправить BTC другому пользователю, он предоставляет адрес (открытый ключ), из которого идут биткоины, подписывает его приватным ключом, формируя так называемую асимметричную пару ключей.

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

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

Шесть подтверждений считаются безопасными, чтобы доказать, что сделка будет действительной и неизменной.

Первый блок с транзакцией представляет собой первое подтверждение. Рекомендуется подождать до тех пор, пока не будут добавлены пять следующих блоков. На данный момент вероятность недействительности такой транзакции составляет менее 0,1%.

Также количество необходимых подтверждений зависит от суммы перевода. Например, некоторые предлагают 60 подтверждений транзакции, эквивалентной более чем 1 000 000 долларов, в то время как три подтверждения могут считаться достаточными для транзакции ниже 1000 долларов (на том основании, что это просто не стоит времени хакера для такой небольшой суммы).

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

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

Атака double-spending в системе Биткоина

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

Атака «double-spending» (двойное расходование) заключается в том, что сначала продавец убеждается в проведении транзакции на оплату, после чего он передает свой товар, а после получения товара покупателем создается новая транзакция, которая и принимается сетью Биткоина вместо первой. У продавца не останется ни товара, ни денег — и то и другое будет у злоумышленника.

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

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

Цепочку блоков можно представить в виде дерева, начинающегося с начального блока и идущую последовательно. Ветви этого дерева представляют собой истории биткоин транзакций. Ветвь не может содержать двух конфликтных транзакций, однако может быть другая ветка, которая содержит противоречащую транзакцию. Это соответствует ситуации, когда в один момент сгенерировалось 2 разных блока и часть узлов стало майнить от одного блока, а другая часть – от второго. Обычно, такое разногласие разрешается, как только находится следующий блок. Верной веткой считается та, которая включает в себя более длинную цепь последующих блоков.

Рис.1. Дерево начинается снизу, стрелки показывают с какого блока на какой идет ссылка в заголовке блока. (a) Возможный вариант построения дерева. (b) Помеченная ветка недействительна, потому что ее длинна составляет только 3 блока, в то время как существует более длинная ветка. (c) Темная ветка, как и прямая, имеет наибольшую длину, поэтому некоторыми узлами считается действительной. (d) Когда находится новый блок, который ссылается только на один из предыдущих блоков, то какая-то ветка становится длиннее и принимается всеми узлами, как действительная.

Это влияет на ваш заработок:  Скачать лучший индикатор для бинарных опционов без перерисовки

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

Для проведения успешной атаки double-spending требуются следующие шаги:

  1. Выполнить транзакцию, которая атакует прежде осуществлённую оплату.
  2. Тайно майнить, используя тот блок, который включает в себя эту последнюю транзакцию.
  3. Подождать, пока транзакция, отправляющая деньги продавцу получит достаточно подтверждающих блоков, и продавец передаст свой товар, уверенный, что деньги окончательно присвоены ему.
  4. Продолжать майнить тайную альтернативную ветку, пока она не станет больше, чем публичная, после чего ее транслируются в сеть. Поскольку новая ветвь длиннее всех других известных, то она будет считаться действительной, и перевод btc продавцу будет заменен отправкой монет злоумышленнику.

Рис. 2. Осуществление атаки double-spending.

(a) Состояние сети до действий злоумышленника. (b) Ветка слева включает в себя транзакцию отправки btc продавцу. Имеет 2 подтверждения. В результате чего продавец передал свой продукт. В это время у злоумышленника сгенерирован блок, включающий атакующую транзакцию. (c) Если атакующему удается создать цепочку длиннее, то он публикует ее в сеть, и биткоины возвращаются ему.

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

Для моделирования ситуации сделаем несколько упрощающий допущений, которые будем использовать в последующем анализе:

  1. Общая скорость майнинга в общей сети и у атакующего остается постоянной. Суммарная скорость майнинга будет H, из которой часть pH относится к честным майнерам, а qH – к злоумышленнику. При этом: p + q = 1 . То есть вероятность, что блок найдет честная сеть равна p, а что злоумышленник – q.
  2. Сложность майнинга остается постоянной.

Обозначим буквой z = n – m число блоков, в которых честная сеть имеет преимущество перед атакующим. После каждого обнаружения нового блока z меняется, увеличиваясь на 1, если его нашла честная сеть, и, уменьшаясь на 1 — если злоумышленник. Математически это представляет собой цепь Маркова.

Если z достигает значение -1, то атака удается. Если этого никогда не происходит, то атака провалена. Поскольку нас интересует, станет ли когда-нибудь z=-1, и когда это случится, то можно использовать для решения задачи теорию цепей Маркова, где каждый шаг представляет собой факт нахождения блока кем-либо. z i+1 может быть равным либо (z i + 1) с вероятностью p, либо (z i — 1) с вероятностью q.

Рис. 3. Вероятность обгона. (a) успешная попытка double-spending после 15 обнаруженных блоков. (b) Проваленная попытка атаки: после 20 обнаруженных блоков сеть получила настолько значительное преимущество, что шансы атакующего догнать незначительны.

a z — вероятность, что злоумышленник обгонит сеть, при отставании в z блоков. Очевидно, что если z z = 1, то есть атака удалась.
a z+1 – вероятность обогнать сеть на следующем шаге, когда новый блок был найден честной сетью, что возможно с вероятностью p.
a z-1 – вероятность обогнать сеть на следующем шаге, когда новый блок был найден злоумышленником, что возможно с вероятностью q.

a z = p a z+1 + q a z-1

Учитывая p + q = 1 и ограничивающие условия, найдем a z :

Сразу понятно, что если атакующий владеет более чем половиной мощностей сети bitcoin, то его атака удастся.

Шансы на успех зависят от значения z в момент времени, когда товар передан, а значит уже есть цепочка из n подтверждающих блоков. В своей статье Сатоши рассчитывает среднее число блоков злоумышленника с помощью распределения Пуассона, как nq/p . Мы не будем использовать данное решение, а используем более точную модель m, как отрицательную биномиальную переменную. Функция вероятности от числа успехов отыскания блоков злоумышленником перед тем, как будет найдено n блоков в честной сети:

Гонка начинается с z=n-m-1 (при условии, что один блок был предварительно получен злоумышленником, прежде чем он начал атаку) Отсюда следует, что вероятность осуществления атаки double-spending, когда продающий подождал n подтверждений, равна:

Построим график полученного решения.

Рис.4. Вероятность r успешности атаки, как функция зависимости от соотношения уровня мощностей майнинга у атакующего ко всей суммарной мощности. Разными цветами нарисованы графики для различного числа подтверждающих блоков n. Больше подтверждений уменьшает вероятность успеха атаки. При приближении соотношения мощностей к 50%, вероятность успеха приближается к 100%

Также составим график еще один график:

Рис 5. Зависимость числа подтверждающих блоков от уровня соотношения мощности майнинга атакующего q. Цветами выделены следующие вероятности успешности атаки: 10% — желтый, 1% — фиолетовый и 0,1% — синий.

Например, если мощность сети злоумышленника составляет 10% от общей мощности, то требуется 2 подтверждения, чтобы сделать вероятность атаки меньше 10%, 4 подтверждения, чтобы меньше 1% и 6, чтобы меньше 0,1%.

В таблице ниже представлены значения вероятности успеха атаки в зависимости от q — соотношения мощностей майнеров, принадлежащих злоумышленнику, ко всей мощности сети bitcoin и числа подтверждений n.

Из этой таблицы можно сделать следующие выводы:

  • Есть вероятность успеха атаки при любых уровнях мощности атакующего.
  • Ожидание как можно большего числа подтверждающих блоков увеличивает вероятность провала атаки.
  • Вероятность провала атаки зависит от количества подтверждающих блоков, а не от времени ожидания после осуществления транзакции. Альтернативные биткоину сети, таким образом, могут дать более высокий уровень безопасности сделки, при одинаковом времени ожидания до выдачи товара.
  • Никакое количество подтверждений не снизит вероятность успеха до полного 0.
Это влияет на ваш заработок:  Пин Бар (Pin Bar) –правильный и ложный. Классический индикатор Пин Бар скачать бесплатно

Посчитаем экономический уровень прибыли для атакующего при атаке double-spending:

  1. Атака может быть осуществлена против более чем одного продавца. Альтернативные платежи могут быть направлены одновременно против k различных продавцов.
  2. От каждого торговца будут приобретаться продукты со средней стоимостью v, которую мы будем считать итоговой стоимостью.
  3. Независимо от того, удастся атака или нет, злоумышленник получит товар на сумму kv.
  4. Если атака не удастся, и злоумышленник успеет найти j блоков за время попытки, каждый по цене B, все они будут отклонены и злоумышленник потеряет сумму равную jB.

Вероятность провала атаки равна 1 – r (функцию от n и q, найденную ранее). Тогда выгода будет рассчитываться следующим образом:

Для того, чтобы атака была прибыльной, требуется выполнение условия:

Продавец в безопасности до тех пор, пока стоимость товара достаточно невысока, чтобы было экономически невыгодно осуществлять такую атаку. Посчитаем на примере. Пусть j = 20, то есть злоумышленник сгенерировал 20 блоков, прежде чем прекратил попытки генерации. B = 25BTC – награда за один блок. А k = 5. Тогда продавец защищен от атаки ввиду ее нецелосообразности до тех пор, пока выполняется следующее:

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

Полученные результаты опровергают те мифы, которые существовали ранее, связанные с атакой double-spending, а именно:

  1. Данная атака требует более половины всех мощностей сети bitcoin.
  2. Ожидание подтверждающих блоков значительно защищает от атаки с большими мощностями майнинга.
  3. 6 подтверждающих блоков дают полную защиту от атаки.
  4. Важно подождать как можно больше времени после транзакции, не обращая внимания на то, сколько было в это время сгенерировано блоков.

Double-spending

Понравилась статья? Поделись:

Двойная трата или Double-spending называется удачное использование одних и тех же средств дважды. Bitcoin защищен от double-spending атаки тем, что верифицирует каждую транзакцию, которая добавляется в цепочку блоков, на предмет того, что средства, содержащиеся в транзакции, не были потрачены ранее.

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

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

Содержание

Типы атак [ править ]

Race attack [ править ]

Магазины и сервисы, которые принимают платеж, если у транзакции 0 подтверждений, могут быть подвержены так называемой «Race attack». Например, создаются 2 транзакции на одни и те же средства, затем они направляются в различные магазины/сервисы – в данном случае лишь один из магазинов получит средства – тот, чья транзакция первой окажется в block chain.

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

Finney attack [ править ]

Еще один тип атаки, которому подвержены магазины или сервисы, которые принимают транзакции с 0 подтверждений. «Finney attack» — это атака, которая требует участие майнера, для включения повторных транзакций в блок. Риск этой атаки не может быть исключен, какие бы средства защиты ни использовал магазин или сервис, но она требует участия майнера и удачного стечения обстоятельств. Она стоит больших средств и не является тривиальной задачей. Так же как и с предыдущим способом атаки, магазин или сервис должны в серьез рассмотреть свою политику на предмет транзакций с 0 подтверждений.

Vector76 attack [ править ]

Так же носит название «атака с одним подтверждением» — это комбинация 2х предыдущих атак, что дает злоумышленнику возможность дважды потратить средства из транзакции, у которой есть одно подтверждение.

Brute force attack [ править ]

Эта атака возможна даже в том случае, если магазин или сервис ждут несколько подтверждений транзакции, но требует достаточно высокую производительность оборудования (hashrate) атакующего.

Злоумышленник отправляет магазину транзакцию, которой оплачивает товар/услугу, продолжая в этот момент майнить ответвление цепи блоков (block chain fork), в которую включена эта транзакция. После N подтверждений магазин высылает товар. Если злоумышленник нашел больше, чем N блоков к этому моменту, он ломает свою ветвь цепи блоков и получает назад свои средства, если же злоумышленнику это не удалось — атака считается неудачной, и средства отправляются в магазин, как и положено.

Успех этой атаки напрямую зависит от скорости (hashrate) атакующего и количества подтверждений, которых ждет магазин/сервис. Например, если у атакующего находится 10% вычислительной мощности (hashrate) сети Bitcoin, а магазин, для успешного проведения транзакции, ждет 6 подтверждений — вероятность успеха такой атаки составит 0.1%.

>50% attack” [ 50% attack”»»>править ]

Если злоумышленник контролирует более 50% мощности сети Bitcoin, вероятность успеха предыдущей атаки становится 100%. В силу того, что злоумышленник может генерировать блоки чаще, чем оставшаяся часть сети – он может создавать свою собственную цепь блоков, пока она не станет длиннее, чем «честная» часть сети.

Брокеры с самыми большими бонусами за регистрацию:
Понравилась статья? Поделиться с друзьями:
Обучение заработку на бинарных опционах
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: