Как выполнить атаку двойной траты на веб-сайтах, которые принимают транзакции с 0 подтверждениями?

Для проведения атаки Финни или атаки 51% мне нужно иметь много вычислительной мощности, но в этом случае (веб-сайт, который принимает транзакции с 0 подтверждениями) мне кажется, что мне нужно всего лишь выполнить две транзакции почти одновременно. В зависимости от того, что майнер решит включить в следующий блок, мне может повезти.

Это так просто или я что-то забыл?

Ответы (2)

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

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

Эффективной контрмерой было бы введение продавцом небольшой задержки между моментом, когда он обнаруживает вашу транзакцию с нулевым подтверждением, и моментом, когда он предоставляет вам доступ к приобретенному товару или услуге. Скажем, вы выполняете идеально рассчитанную двойную трату. Продавец видит их транзакцию и ждет 60 секунд. 60 секунд — это долгое время, в течение которого транзакции не распространяются по сети. Если в какой-то момент в течение этих 60 секунд продавец увидит «другую» транзакцию, вы потерпите неудачу. В отличие от других форм мошенничества, вы потеряете средства, поскольку ваши двойные траты необратимы. Это будет просто удача, на которой торговец получит деньги.

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

Риск двойной скорости с нулевым подтверждением невелик, но безопасность можно повысить, разработав сверхбыстрые «суперузлы» с малой задержкой. Поставщик услуг может настроить сеть биткойн-узлов по всему миру с низкой задержкой связи между ними. На каждом из этих узлов будет работать модифицированная версия bitcoind, чтобы максимизировать количество соединений, устанавливая тысячи или даже десятки тысяч соединений с пирами. Независимо от того, где происходят две половины двойного расхода, до суперузла будет всего несколько переходов.

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

На самом деле это не займет много работы, просто спросите. Составьте карту существующей сети Биткойн и найдите расположение серверов в различных частях сети (скажем, серверы в Гонконге, Великобритании, Восточном побережье США, Западном побережье США, Германии, Бразилии). Настройте эти узлы для создания огромного количества подключений к одноранговым узлам в сети, а затем быстро передайте эти транзакции друг другу. Сегодня нет достаточного спроса, чтобы оправдать затраты, но когда-нибудь эти узлы могут стать эквивалентом интернет-магистрали для сети Bitcon.
Что ж, я думаю, в принципе можно было бы настроить все на Amazon EC2 с минимальными усилиями. Дорого, но быстро настраивается.

Что вы забываете, так это то, что продавцы, которые принимают транзакции с нулевым подтверждением, уже защищались от этой атаки, используя известные методы. Основной защитой является мониторинг сети Биткойн в нескольких точках, как можно ближе к крупнейшим пулам майнинга. Продавец считает транзакцию действительной только в том случае, если он видит ее в подавляющем большинстве своих контрольных точек. И, конечно же, если они видят конфликтующую транзакцию в какой -либо точке проверки, они отклоняют транзакцию (до тех пор, пока она не получит подтверждения).

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

Как добраться до числа $250? Я собирался опубликовать вопрос о том, как это рассчитать, и нашел ваш ответ.
Сейчас может быть выше. Число основано на риске, который берет на себя злоумышленник — риск потери добытого блока. Только имейте в виду, что основной защиты недостаточно, вам нужны и другие. Например, комиссия за транзакцию должна быть адекватной.
Потерпите меня. Как атакующий с двойной тратой, а не атакующий с 51%, рискует потерять блок? Он не обязательно шахтер. Я могу отправить одни и те же монеты на 10 адресов, 9 из них принадлежат мне, только 1 — продавец, которого я пытаюсь обмануть. Разве нет 90% шанса, что я все еще буду владеть монетами? Если продавец продает необратимый товар с 0 подтверждениями, у него проблемы. Или он? Просветите меня :)
@AntonAnsgar Это не сработает, потому что, как только продавец увидит конфликтующую транзакцию, он не выдаст товар. Вы не можете заставить 90% майнеров видеть транзакцию и при этом скрывать ее от продавца. Таким образом, злоумышленнику придется майнить собственный блок с конфликтующей транзакцией, удерживать его до тех пор, пока мерчант не выпустит товар, а затем освобождать блок с конфликтующей транзакцией. (Мы предполагаем, что продавец использует все разумные средства защиты от двойных расходов , за исключением ожидания подтверждения.)
Все разумные средства защиты включают в себя подключение к достаточному количеству узлов и наличие достаточной задержки перед принятием платежа, чтобы вероятность не увидеть конфликтующие переводы стала незначительной. Как было предложено в первом ответе. Мне нужно узнать больше о том, как удерживать добытый блок, чтобы понять часть вашего ответа, связанную с добычей блоков, но я думаю, что получаю часть с двойным подтверждением 0. Большое спасибо.
@AntonAnsgar Введите « Атака Финни » в свою любимую поисковую систему.