Читаем Введение в технологию Блокчейн полностью

Увидев эту транзакцию, включенную в цепочку блоков, Боб приходит к выводу, что Алиса заплатила ему и позволяет Алисе загрузить программное обеспечение.

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

Теперь, когда Алиса предложит следующий блок, она может предложить блок, который игнорирует блок, содержащий платеж Бобу, и вместо этого содержит указатель на предыдущий ему блок.

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

Это классический шаблон двойной траты.

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

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

И как мы узнаем, удастся ли эта попытка двойной траты или нет?

Это зависит от того, какой блок в конечном итоге будет в конце консенсусной цепочкой – тот, который связан с транзакцией Алиса -> Боб или с транзакцией Алиса -> Алиса.

Что определяет, какой блок будет включен?

Честные узлы следуют политике расширения самой длинной действующей ветви, поэтому какая ветвь будет расширяться?

Правильного ответа нет!

На этом этапе две ветви имеют одинаковую длину – они отличаются только в последнем блоке, и оба этих блока действительны.

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

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

Но это различие основано только на наших знаниях о том, что Алиса впервые заплатила Бобу, а затем попыталась выполнить двойную трату.

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

Узлы, которые смотрят на это, действительно не могут сказать, что является морально верной транзакцией. Для них они обе валидны.

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

Но это не строгое правило.

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

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

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

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

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

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

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

Давайте теперь пересмотрим всю эту ситуацию с точки зрения Боба-торговца.

Понимание того, как Боб может защитить себя от этой атаки двойной траты, является ключевой частью понимания безопасности биткойнов.

Когда Алиса транслирует транзакцию, которая представляет ее платеж Бобу, Боб слушает в сети и слышит об этой транзакции еще до создания следующего блока.

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

Это называется транзакцией с нулевым подтверждением.

Это приводит к появлению еще большей вероятности атаки двойной траты, чем было описано до этого.

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

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



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

Если Боб увидит, что Алиса успешно запускает атаку двойной траты, он поймет, что блок, содержащий оплату Алисы для него, остался сиротой.

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

Перейти на страницу:

Похожие книги

Компьютерные террористы
Компьютерные террористы

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

Татьяна Ивановна Ревяко

Энциклопедии / Прочая компьютерная литература / Книги по IT / Словари и Энциклопедии