Криптовалюта Bitcoin Gold (BTG) появилась в результате хардфорка биткоина в октябре 2017 года и с капитализацией около $110 млн входит в Топ-40 крупнейших цифровых активов. За свою сравнительно короткую историю BTG успела, однако, пережить немало драматичных моментов, включая несколько атак 51%.
Такие атаки, результатом которых как правило становится двойное расходование монет, периодически осуществляются и на другие криптовалюты на базе алгоритма Proof-of-Work (PoW), ставя под угрозу не только само существование сетей, но и средства пользователей. Однако, как обнаружили недавно исследователи Digital Currency Lab при Массачусетском технологическом институте (MIT), таким атакам можно не только успешно противостоять, но и проводить контратаки.
Именно это, как предполагают Джеймс Лавджой, Дэн Мороз и Неха Нарула, произошло в феврале в сети Bitcoin Gold. Адаптированный перевод их статьи с описанием тех событий и выводами из случившегося представлен ниже.
Экономическая безопасность биткоина и других криптовалют на алгоритме Proof-of-Work зависит от того, насколько дорого будет переписать записи в блокчейне. Если атака 51% экономически обоснована, злоумышленник может отправить жертве транзакцию, начать атаку и затем осуществить двойную трату тех же самых монет в свою пользу. Сатоши Накамото предполагал, что такое не произойдет, так как большинству майнеров будет более выгодно честно следовать правилам протокола, нежели атаковать сеть, служащую источником их доходов.
Опубликованная недавно работа показала, что стоимость атаки на монету может широко варьироваться. Она зависит от таких факторов, как ликвидность хешрейта, влияние на цену монеты и глубина требуемой реорганизации. При определенных условиях атака может быть проведена даже бесплатно.
По состоянию на март 2020 года майнеры биткоина (BTC) инвестируют большие средства в оборудование и не проявляют желания сдавать в аренду существенные мощности, что делает стоимость атаки довольно высокой. Однако для некоторых монет существующего предложения сдаваемого в аренду хешрейта оказывается достаточно для проведения эффективной атаки. Покупатели и продавцы могут находить друг друга через маркетплейсы хешрейта вроде NiceHash.
Существует широко распространенное мнение, что монеты с низким хешрейтом, для которых есть ликвидный рынок аренды мощностей, не могут считаться безопасными из-за того, что могут подвергнуться дешевой атаке 51%.
В завершенном недавно труде под названием «Контратаки при двойном расходовании» мы обсуждаем стратегию, позволяющую предотвратить атаку 51% на уязвимые монеты на алгоритме PoW: жертва может осуществить контратаку. Способность жертвы арендовать хешрейт и захватывать цепь атакующего во время атаки может полностью ее исключить.
Для этого мы предполагаем следующее: (1) жертва несет умеренные репутационные потери, которыми не обременен атакующий (например, репутационные потери могут понести биржи, однако таких потерь нет у анонимных злоумышленников), и (2) чистая стоимость атаки со временем растет (например, монета падает в цене или стоимость аренды хешрейта возрастает).
На момент написания упомянутого выше труда у нас не было свидетельств контратак при двойных тратах в реальном мире, однако мы полагаем, что недавно могли наблюдать их в сети Bitcoin Gold.
В июне 2019 года мы запустили трекер реорганизаций, который отслеживает 23 наиболее популярных PoW-блокчейна. К сегодняшнему дню мы наблюдали 40 случаев реорганизации глубиной как минимум в шесть блоков в сетях Expanse, Vertcoin, Litecoin Cash, Bitcoin Gold, Verge и Hanacoin.
Реорганизации и контратаки в сети Bitcoin Gold
Bitcoin Gold использует отличный от биткоина механизм консенсуса: вместо SHA256 задействован устойчивый к майнингу на ASIC-устройствах алгоритм ZHash. Еще одно отличие от биткоина состоит в том, что перерасчет сложности происходит после каждого блока.
Сеть Bitcoin Gold подвергалась многочисленным атакам двойной траты. Самую крупную из них провели в мае 2018 года, и в ее результате было похищено 388 000 BTG (на то время около $18 млн). В январе и феврале 2020 года были предприняты новые атаки. Наш трекер обнаружил восемь реорганизаций сети в период с 23 января по 5 февраля, и в четырех случаях состоялось двойное расходование на общую сумму 12 858 BTG (около $150 000 на момент написания). Сводные данные по этим реорганизациям можно увидеть здесь, данные трекера, включая реорганизации и контратаки, доступны здесь.
В феврале мы наблюдали вероятный ответный удар. Все началось как типичная атака, при которой проводится двойная трата транзакции, однако эта двойная трата затем сама оказалась отменена, а действительной снова стала оригинальная транзакция. 8 февраля атакующий и контратакующий обменялись такими ударами четыре раза в течение 2,5 часов. Оригинальная цепь в итоге была восстановлена, и двойная трата оказалась неуспешной. 9 и 11 февраля мы наблюдали одиночные контратаки: атакующий провел реорганизацию, защищающийся контратаковал один раз, восстановив оригинальную цепь.
При обмене ударами 8 февраля борьба шла за транзакции 757 и d5f, которые атакующий заменил транзакциями 50d и f38. В общей сложности 4390 BTG (около $44 000) были похищены у AbC и AYP и отправлены GVe и GYz. Последняя реорганизация была на 23 блока, что эквивалентно 290 BTG ($300) в виде награды майнеру или 7% от заработанного на атаке двойного расходования.
Детали обеих атак с временными метками доступны здесь и здесь.
Откуда взялся хешрейт?
У нас нет достоверных свидетельств того, что в каком-либо из приведенных выше случаев реорганизации хешрейт был получен на Nicehash. Подобная неуверенность связана с большими скачками цены и доступного хешрейта в сети BTG, которые можно наблюдать даже в отсутствие атак. Это отличает их от наших наблюдений за рынком Nicehash для Lyra2REv3 во время недавней атаки двойного расходования в сети Vertcoin (VTC) — тогда мы четко видели скачок цен на мощности во время атаки и их возвращение к базовым значениям после ее завершения.
В случае с BTG частоту скачков доступного хешрейта и его цен трудно связать со скачками, которые мы наблюдали во время атак. Тем не менее на рынке было достаточно мощностей ZHash для осуществления атаки во время тех событий, как были и скачки хешрейта, совпавшие с зафиксированными случаями реорганизации.
Теория атаки
То, что мы видели, согласуется со случаями, когда атакующий делает недействительным блок в текущей цепи с наибольшим хешрейтом, заставляя ноду вести работу в цепи с меньшим хешрейтом. Это можно сделать через вызов простой команды в ноде Bitcoin Core, и это означает, что писать новый код для осуществления атак может быть необязательно.
Например, атакующий мог сделать следующее:
- Использовать ноду Bitcoin Core для отправки платежа и дождаться его включения в блок.
- Вызвать команду invalidateblock в оригинальной цепи, где находится транзакция (на высоте #619935).
- Отключить ноду от сети и очистить мемпул для удаления существующей транзакции.
- Запустить ресканирование кошелька, чтобы снова получить возможность траты с выходов, использованных в оригинальной транзакции, и создать новую транзакцию с расходованием тех же выходов в новом направлении.
- Продолжать майнить как обычно до тех пор, пока хешрейт его цепи не окажется выше мощности оригинальной цепи, и заново подключиться к сети, чтобы уведомить другие ноды об альтернативной цепи.
Защищаемуся нужно лишь вызвать команду invalidateblock на блоке атакующего с транзакцией двойной траты, что заставит ноду атакующего продолжать майнить в оригинальной цепи, отвергая реорганизацию в цепь атакующего.
Есть вероятность того, что в приведенных выше случаях злоумышленник остановил атаку, как только увидел контратаку. Возможно, атакующий понял, что игра не стоит свеч, если у противной стороны есть возможность защищаться. Почти во всех блоках в роли защищающегося выступал GSsjeTZ, чей адрес не использовался до 1 февраля и после контратак.
Нельзя исключать, что это не был преднамеренный ответный удар. Среди других возможных объяснений случившегося можно назвать:
Тестирование. Контратака могла быть симулирована во время тестирования программного обеспечения. Это могла быть биржа, мерчант или разработчик, создавший инфраструктуру для осуществления автоматической контратаки в случае попытки реорганизации. Этим можно объяснить несостоявшуюся двойную трату во время атак 6 февраля.
Битва майнеров. Это могли быть взаимные атаки майнеров в попытке похитить и затем восстановить награду за найденный блок. Несостоявшаяся двойная трата во время атак 6 февраля эту теорию также поддерживает.
Разделение сети. Нельзя исключать и возможность временного повторяющегося разделения в сети, в результате чего два майнера одновременно работали в двух отдельных цепях.
Баг ПО. Также возможно, что участвовавшие в этих событиях майнеры использовали ПО, некий баг в котором привел к тому, что какое-то время они работали в более короткой цепи, или же они случайно вызвали команду invalidateblock.
Случайность. Еще одна возможность — два крупных майнера находили блоки в одно и то же время, столкнувшись с вероятностным разделением. Это, однако, кажется маловероятным, так как временные метки это не отображают, а самая глубокая реорганизация была на 23 блока.
Заключение
Растущая глубина рынков по аренде хешрейта может ставить под угрозу безопасность криптовалют на основе алгоритма Proof-of-Work. В то же время возможность контратак может остановить атакующих от каких-либо действий. Если этого баланса сил достаточно, чтобы защитить цепь, это ведет к вопросу о том, какое именно количество мощностей необходимо для предотвращения атак.
Здесь мы говорим только о рациональном атакующем — атакующий, действующий в целях саботажа с намерением причинить вред цепи, может и пренебречь потерей денег, что дает ему преимущество. В этих случаях остановить такого злоумышленника может, скорее всего, только крайне высокая стоимость атаки.
Источник: forklog.com