Атаки на механизм консенсуса. Часть вторая

Рассмотрим практический пример атаки типа «51%». Мы изучали транзакцию между Алисой и Бобом с оплатой чашки кофе. Владелец кафе Боб хочет принимать платежи за порции кофе без ожидания их подтверждения (майнинга в блоке), поскольку риск двойного расходования стоимости чашки кофе весьма невелик, по сравнению с обеспечением удобства быстрого обслуживания клиентов. Это похоже на работу магазинов по продаже кофе, принимающих оплату кредитными картами без подписи для сумм, не превышающих 25 долларов, так как риск возврата денег на кредитную карту невелик, в то время как цена задержки транзакции при получении подписи более существенна. Но продажа товара с более высокой стоимостью за биткойны увеличивает риск атаки с двойным расходованием, когда покупатель распространяет еще и конкурирующую транзакцию, расходующую те же самые входные данные UTXO, и отменяет платеж продавцу. Атака с двойным расходованием может осуществляться двумя способами: или перед подтверждаемой транзакцией, или если атакующий имеет преимущественную возможность разветвления цепочки блокчейна посредством отмены нескольких блоков. Атака типа «51%» позволяет злоумышленникам дважды расходовать данные собственных транзакций в новой цепочке, соответственно отменяя транзакцию с теми же данными UTXO в старой цепочке.

В рассматриваемом примере атакующий злоумышленник Мэлори (Mallory) приходит в галерею Кэрол и покупает великолепную картину-триптих, изображающую Сатоши Накамото в образе Прометея. Кэрол продает Мэлори триптих «Пламенная страсть» (The Great Fire) за 250 000 долларов в биткойнах. Вместо того чтобы терпеливо дождаться шести и более подтверждений этой транзакции, Кэрол упаковывает и передает полотна Мэлори после одного подтврежде- ния. Мэлори работает вместе с сообщником Полом (Paul), который управляет крупным пулом майнинга. Сообщник Пол начинает атаку типа «51%» сразу же после включения траназкции Мэлори в блок. Пол направляет работу пула на повторный майнинг блока с той же высотой, что и блок, содержащий транзакцию Мэлори, заменяя платеж Мэлори владелице галереи Кэрол на транзакцию, выполняющую двойное расходование тех же самых входных данных, которые участвовали в первом платеже Мэлори. Транзакция с двойным расходованием потребляет эти же данные UTXO и возвращает их в кошелек Мэлори вместо отправки платежа Кэрол, то есть, по существу, позволяет Мэлори сохранить эти биткойны неизрасходованными. Затем Пол направляет работу пула на майнинг дополнительного блока, чтобы сделать цепочку, содержащую транзакцию с двойным расходованием, длиннее, чем исходная (корректная) цепочка (создавая цепочку ниже блока, содержащего транзакцию Мэлори). Когда разветвление цепочки блокчейна разрешается в пользу новой (более длинной) цепочки, транзакция с двойным расходованием заменяет первоначальный платеж, предназначенный для Кэрол. В результате Кэрол лишилась трех картин, не получив за них никакой оплаты в биткойнах. На протяжении всей этой операции участники пула майнинга Пола вполне могли оставаться в абсолютном неведении относительно попытки двойного расходования, поскольку процедура майнинга выполнялась автоматическими аппаратными средствами, из-за чего невозможно было проследить корректность каждой транзакции или блока.