- Double-spending
- Содержание
- Типы атак [ править ]
- Race attack [ править ]
- Finney attack [ править ]
- Vector76 attack [ править ]
- Brute force attack [ править ]
- >50% attack” [ 50% attack”»»>править ]
- What is Double Spending?
- What is Double Spending Summary
- 1. Double Spending Explained
- 2. How to Prevent Double Spending?
- The Centralized Solution
- The Decentralized Solution
- Preventing Fraudulent Transactions
- Preventing Simultaneous Transactions
- Preventing transaction reversal
- 3. RBF – “Legit” Double Spending
- 4. Conclusion
- Free Bitcoin Crash Course
- Чем опасна и как происходит двойная трата (double spending) в блокчейне Bitcoin?
- Читайте в статье
- Что такое двойное расходование
- Как осуществить двойную трату
- Как предотвращается
- При каких условиях двойная трата все равно возможна?
- Альтернативы
- Способ защитить себя — ждать подтверждений
- Как работают подтверждения?
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%. В силу того, что злоумышленник может генерировать блоки чаще, чем оставшаяся часть сети – он может создавать свою собственную цепь блоков, пока она не станет длиннее, чем «честная» часть сети.
Источник
What is Double Spending?
By: Ofir Beigel | Last updated: 1/11/21
One of the main issues any digital currency faces is double spending. This post explains exactly what the double spend problem is, and how to prevent it.
What is Double Spending Summary
Double spending is the act of trying to spend the same digital currency twice by creating duplicate transactions. This issue is one of the main obstacles a digital currency needs to solve in order to make sure it is not being abused, and that it maintains its value and trust.
Bitcoin solves the double spend problem through the use of a public ledger that is constantly monitored by network participants, and through the Proof of Work consensus mechanism.
That’s double spending in a nutshell. For a more detailed explanation keep on reading, here’s what I’ll cover:
1. Double Spending Explained
Since Bitcoin transactions are a digital file, it’s actually possible to duplicate transactions and spend the same Bitcoin twice. This issue of “copying and pasting” is a weakness any digital currency faces (even fiat currencies in their digital form).
Here are some examples of how you can double spend a digital currency:
- You can “copy” a coin and send it to someone while still retaining the original.
- You can simultaneously send the same coin to two different people.
- You can reverse a transaction that’s already been made after receiving the goods paid by it, hence keeping the goods and the money.
The double spend problem is a serious issue for any digital currency since it can create an inflated money supply which quickly erodes the value of the currency and the trust in it.
2. How to Prevent Double Spending?
There are two ways to stop double spending – a centralized way and a decentralized way.
The Centralized Solution
The centralized solution to prevent double spending is pretty simple. It usually involves a trusted authority that holds a record of everyone’s balance in the system.
For example, when Alice sends money to Bob, the transaction goes through the central authority (e.g. bank) that checks its ledger to make sure Alice has the money she wants to spend. If everything is in order, the central authority authorizes the transaction and the money is transferred.
The Decentralized Solution
When you’re dealing with a decentralized currency like Bitcoin, you don’t have a central authority to validate transactions. Therefore, Bitcoin uses a mix of elements to solve the double spend problem.
Preventing Fraudulent Transactions
First of all, the Bitcoin ledger of transactions, known as the Blockchain, is public and visible to all. Every Bitcoin transaction ever made and every balance of every address can be inspected by anyone.
This means that if Alice sends one Bitcoin to Bob, every computer that holds a copy of the blockchain (also known as a full node) will verify the history of Alice’s transactions to make sure she indeed has that one Bitcoin to spend.
If Alice tries to cheat and creates a Bitcoin from thin air, she will quickly be exposed by one of the many nodes validating transactions.
Preventing Simultaneous Transactions
But what if Alice sends the same coin simultaneously to two people?
Assuming 50% of the nodes received transaction A first, and the other 50% received transaction B first. How do we know which transaction is valid, and which to discard? The answer is simple: The transaction that enters the ledger first will be the valid one.
That’s why it’s always recommended to wait for at least 1 confirmation before considering a Bitcoin transaction as complete.
In order to decide the order of transactions, Bitcoin uses a consensus mechanism called Proof of Work (POW). This mechanism describes the rules of who gets to update the ledger of Bitcoin transactions.
This is important since when there’s no central authority, you need to have a consensus about who gets to make changes in the transaction ledger. The whole process of updating the ledger of transactions is known as Bitcoin mining.
However, what happens if the mining process somehow happened simultaneously for both transaction A and transaction B?
Let’s assume that two unrelated miners managed to update the ledger at exactly the same time, each one with a different transaction that uses the same source of funds.
In this case, we will have 2 branches of the blockchain (also known as a fork) and the next block of transactions to be mined will determine which previous block was valid.
If the next block, in some magical way, is also mined simultaneously, we will have to wait until the next block, and so on.
If you want to be completely sure your Bitcoin transaction won’t be reversed in such a rare case of coincidences, you should wait until 6 confirmation arrives for your transaction.
It’s highly unlikely (like super highly unlikely) that this fork will happen more than 6 times. So, in the end, we will have a clear winner and only one transaction will be confirmed.
Preventing transaction reversal
There’s a special kind of double spend attack that is called a 51% attack. This happens when a single entity gains over 50% of the network’s mining power and can effectively control which version of the ledger is the legitimate one.
In this case, the attacker can spend coins on one version, obtaining goods or services for this payment. Later on, the attacker creates a different version of the ledger where the original transaction doesn’t exist and retrieves the payment to his possession.
The only way to prevent a 51% attack is to make sure the network is decentralized enough and has enough computational power to make it basically impossible to amass more than 50% of its hashrate.
In Bitcoin’s case, a 51% is highly unlikely, but with smaller coins, this type of attack has happened.
3. RBF – “Legit” Double Spending
One form of “legit” double spending is Replace By Fee or RBF for short.
RBF is a function embedded in certain Bitcoin wallets (e.g. Electrum) that allows you to rebroadcast a transaction that is still unconfirmed, in order to get it confirmed faster.
In some cases, Bitcoin transactions are sent with a network fee that is too small to incentivize miners to pick them up. This can get your transaction stuck inside the mempool, waiting to be confirmed for a very long time.
RBF allows you to rebroadcast the transaction with a higher fee, effectively trying to double spend your money, so the miners will pick up the new transaction and the old one will get canceled.
4. Conclusion
Double spending is a major issue that needs to be addressed when dealing with digital currencies. Fortunately, it seems that Satoshi Nakamoto, the inventor of Bitcoin, managed to build a mechanism to prevent it from happening even in a decentralized network.
You may still have some comments or questions. If so, make sure to leave them in the comment section below.
Free Bitcoin Crash Course
Learn everything you need to know about Bitcoin in just 7 days. Daily videos sent straight to your inbox.
Источник
Чем опасна и как происходит двойная трата (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 долларов (на том основании, что это просто не стоит времени хакера для такой небольшой суммы).
Для каждого подтверждения требуется в среднем десять минут. Таким образом, шесть подтверждений потребуют примерно часа. Если сеть занята, скажем, в период высокой волатильности цен, это может занять гораздо больше времени.
После успешной транзакции вы должны увидеть данные транзакции в своем кошельке с ее идентификатором. Найдите идентификатор, используя блокчейн-эксплорер, чтобы проверить количество подтверждений, которые были сделаны для этой конкретной транзакции.
Источник