Уничтожаем криптомифы. Можно ли защитить монету от атаки 51 процента?

Масла в огонь накануне подлил создатель криптовалюты Litecoin Чарли Ли, который сделал провокационное заявление. По его словам, криптовалюты подвержены атакам 51 процента по определению. А если совершить её невозможно, тогда криптовалюта регулируемая или централизованная.This is a thought-provoking observation. 🤔By definition, a decentralized cryptocurrency must be susceptible to 51% attacks whether by hashrate, stake, and/or other permissionlessly-acquirable resources.

If a crypto can't be 51% attacked, it is permissioned and centralized. https://t.co/LRCVj5F0O1

— Charlie Lee [LTC⚡] (@SatoshiLite) January 8, 2019

Прав ли Чарли? Действительно ли криптовалюты заранее обречена на провал и созданы, чтобы быть уничтоженными? Или способы защиты всё же есть? Разбираемся.

Доминантная монета алгоритма

Доминантная монета — монета с самым большим хешрейтом в рамках данного алгоритма майнинга.

Вернёмся к старине Чарли. Прав он или нет — каждый решит сам, а вот в его хитрости сомнений нет. Приведём два хороших примера из его жизни:

  • при создании Litecoin Чарли Ли специально не использовал алгоритм Биткоина SHA-256, а создал собственный — Scrypt;
  • основатель проекта продал всю свою криптовалюту на пике цены в декабре 2017. Ну и чутьё!

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

Допустим, у нас есть монета Xcoin с хешрейтом сети 100 TH/s и монета Ycoin на том же алгоритме с хешрейтом 1 TH/s. Предположим, что десятая часть майнеров этого алгоритма копает через Nicehash, поэтому для покупки доступно около 10 TH/s мощности. Если мы возьмём в аренду все 10 TH/s и попробуем манипулировать Xcoin — у нас ничего не получится. А вот Ycoin сможем здорово насолить, ведь в этом случае хешрейт будет в 10 раз превышать весь хешрейт сети.

Не важно, собственные у нас мощности или арендованные — очень сложно найти железо для захвата 51 процента хешрейта доминантной монеты алгоритма. Посмотрим на короля криптовалют Bitcoin. Текущий хешрейт сети составляет 41 572 PH/s. Представим, что единственный существующий майнер Bitcoin в сети это Antminer S9 с производительностью 14 TH/s. Тогда нам нужно найти примерно 3 миллиона таких устройств мощностью по 1,4 КВт каждое. Для запуска этого богатства нужна отдельная электростанция большого мегаполиса. А его размещение — ещё один большой вопрос.

Кстати, в мае 2018 года Чарли Ли прокомментировал атаку на Bitcoin Gold.

Bitcoin Gold подвергся атаке 51 процентов. У майнеров не будет проблем, если BTG умрёт, потому что они легко переключатся на другую PoW-монету. С Bitcoin/Litecoin такое не произойдёт, ведь они являются доминантными монетами на своих алгоритмах.

Bitcoin Gold got 51% attacked. Miners have no issue with attacking BTG because if it dies, they could easily switch to mine another coin that also uses Equihash POW. This is not the case for Bitcoin/Litecoin where they are the dominant coin for their respective mining algorithms. https://t.co/ThOzSFz5tQ

— Charlie Lee [LTC⚡] (@SatoshiLite) May 24, 2018

Какие криптовалюты можно атаковать?

Стоимость атаки разных монет описана здесь, а для ответа в цифрах заглядывайте в сервис Crypto51. Очевидно, что атаковать Bitcoin, Litecoin или Ethereum дорого и опасно. Час атаки таких криптовалют стоит 275, 33 и 73 тысячи долларов соответственно.

Чаще всего атакам подвергаются недоминантные монеты на алгоритме Ethash (Dagger Hashimoto). Объяснение простое:

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

Допустим, наша криптовалюта работает на алгоритме Ethash или Equihash, ведь придумать свой собственный алгоритм майнинга — как это сделал Zcoin — не получается. Что же теперь делать? Закрываться? Никаких крайностей, ведь существуют готовые решения от разработчиков нескольких криптовалют. Прежде всего это система защиты Horizen, Komodo dPoW, PirlGuard. Знакомимся с каждой из них.

Защита Horizen

В 2018 году разработчики Horizen (ранее Zencash) предложили свой вариант защиты от атаки 51 процента. Zencash (ZEN) работает на алгоритме майнинга Equihash, как и его старший брат Zcash (ZEC). ZEC всегда был доминантной монетой алгоритма, а все шишки, то есть атаки, доставались ZEN и ZCL (Zclassic).

ZCL на тот момент не располагал активной поддержкой разработчиков. Страдающие в первую очередь от атак 51 процента биржи — поскольку средства выводятся за их счёт — придумали один выход. Речь идёт об увеличении количества подтверждений для всех депозитов до 200 или даже 500. Зачисление ZCL до сих пор приходится ждать долго — вплоть до нескольких дней.

Разработчики ZEN пошли другим путём и придумали новый PoW-подход с задержкой отправки блоков в криптовалютную сеть под названием «The delayed block submission penalty approach».

Вспомните, как устроена атака 51 процента. Посмотрим на иллюстрацию ниже, где NB — нормальные блоки в сети криптовалюты, а MB — блоки злоумышленника.

Вот цепочка блоков. Начиная с NB100, злоумышленник отключил свою ноду от остальной криптовалютной сети N и начал майнить собственную ветку M в одиночку. Когда весь мир дошёл до NB116, у злоумышленника был уже блок MB119, то есть он намайнил на 3 блока больше, чем остальные. Если бы не существовало никакой защиты, после подключения к остальным нодам злоумышленник сделал бы работу остального мира недействительной и отменил блоки NB100-NB116. Место последних заняли бы MB100-MB119.

Команда Horizen предложила механизм защиты, который “штрафует” ветку злоумышленника со скрытым от остальной сети блокчейном. Штраф заключается в том, что атакующий должен будет продолжать майнить свою ветку N блоков. В зависимости от настроек алгоритма, параметр N может быть разным.

В примере выше после блока MB122 злоумышленнику придётся майнить в своей ветке еще 133 блока. Функция работает предельно просто. Текущий блок в сети — NB116, первый блок злоумышленника MB100.116-100=16 штрафных баллов. Второй блок злоумышленника MB101.116-101=15 штрафных баллов и так далее. За каждый блок после 116 злоумышленник получает минус балл. В итоге имеем 16+15+14+13+…+1+0-1-1-1=133 блока.

Сложно? Попробуем еще проще:

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

Ты классный парень, но иди смайни ещё 231 новый блок в свой ветке, а потом уже поговорим.

В сети ZEN время блока составляет 2,5 минуты, поэтому атака должна продлиться не менее 10 часов. Рентабельность процесса явно не высока. Самое главное, биржи могут мониторить такие атаки и блокировать неугодные депозиты.

Komodo Delayed Proof of Work (dPoW)

Разработчики криптовалюты Komodo (KMD) предложили универсальное решение. Оно подходит для всех криптовалют с маленьким хешрейтом, причём на PoW и на PoS-алгоритмах. Основная идея заключается в постоянной записи состояния блокчейна монеты в блокчейн Биткоина. Совершить атаку на блокчейн BTC крайне сложно, и именно этим предлагают воспользоваться разработчики KMD.

Для работы системы Komodo dPoW необходимо следующее:

  1. сеть из 64 нотариальных (родительских) нод;
  2. отдельная Биткоин-нода для каждой из родительских нод;
  3. запас BTC для проведения транзакций в блокчейне Bitcoin.

Принцип работы нотариальных нод Komodo схож с принципом работы мастернод. Отличие заключается в том, что для запуска мастерноды нужно замораживать некоторую сумму, определённую разработчиками данной криптовалюты — 1000 DASH, 1000 Zcoin или 500 000 $PAC. В то же время в нотариальных нодах Komodo никакие средства не блокируются. Мастерноду может запустить любой человек, а владельцы нотариальных нод Komodo избираются сообществом KMD. Нотариальные ноды Komodo получают примерно 75 процентов всего вознаграждения за новые блоки и транзакции в сети KMD. Среднее время блока в сети Komodo — 1 минута. Среднее время блока в сети Bitcoin — 10 минут. 1 раз в 10 минут нотариальные ноды заверяют (визируют/записывают) информацию о состоянии блокчейна Komodo в блокчейн Bitcoin. В идеальном случае нужно отправлять нотариальную транзакцию в сеть Bitcoin за несколько секунд до майнинга нового блока. Предугадать точное время его нахождения невозможно. Соответственно, если в сети Биткоин нет блоков по 20-30 минут, то и завизировать текущее состояние Komodo не получится.

Как система Komodo dPoW противостоит атаке 51 процента?

Для примера возьмём идеальный мир, в котором каждые 10 минут мы записываем состояние блокчейна Komodo в блокчейн Bitcoin. За это время в сети Komodo успевает смайниться 10 новых блоков.

После записи состояния в блокчейн Bitcoin изменить цепочку уже невозможно.

Это основной принцип работы защиты dPoW. После записи майнинг в обязательном порядке начинается с этой точки. Визирование работает так же, как несгораемая сумма в игре “Кто хочет стать миллионером?”.

Допустим, мы хотим атаковать сеть Komodo. На блоке под номером 100 отключаем свою ноду, майним 15 блоков до блока 115, снова подключаем свою ноду, ждём реорганизацию блокчейна и одновременно потираем руки. Но не тут то было: оказывается, на блоке 110 нотариальные ноды Komodo записали состояние блокчейна в блокчейн Bitcoin. Они создали “несгораемую сумму”, так что наши 15 блоков просто никто не примет.

А если у Bitcoin блоки штампуются не раз в 10 минут, а раз в час — из-за задержки? Что же, атака удастся? На этот случай биржа всегда может подстраховаться и настроить необходимое количество подтверждений для входящих депозитов. Скажем, при необходимых 50 блоках (50 минутах) на подтверждение депозитов проводить атаку 51 процента на сеть KMD просто бессмысленно. Не забывайте, что на бирже ещё уходит время на обмен и последующий вывод средств, полученных нелегальным путем.

Komodo предлагает действительно надёжный, но очень сложный способ защиты. Подробное описание работы KMD dPoW есть на github и в блоге Komodo.

Защита PirlGuard

Криптовалюта Pirl много раз подвергалась атаке 51 процента. Было грустно, но в итоге разработчики придумали собственную систему защиты PirlGuard. Скажем наперёд, что она нас разочаровала.

Единственная статья с описанием процесса работы PirlGuard представлена командой Pirl на Medium. Заголовок гласит, что это инновационное решение для борьбы с атакой 51 процента. Статья была скопирована/переписана/перепощена на большом количестве интернет ресурсов, посвящённых криптовалютам. Давайте посмотрим описание механизма работы PirlGuard.

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

К сожалению, в статье нигде нет описания процедуры вычисления параметра X. Мы уточнили этот момент и попросили специалистов майнинг-пула 2Miners помочь — изучить код PirlGuard. Оказалось, что PirlGuard работает совсем не так, как повествуется в официальном описании. if penalty > 0 { context := []interface{}{ "penalty", penalty, } log.Error("Chain is a malicious and we should reject it", context... ) err = ErrDelayTooHigh } Работа PirlGuard сводится к следующему: разработчики криптовалюты задают определённый параметр — количество блоков, например, 20. Если атакующий после повторного подключения своей ноды к общей сети “вываливает” в неё 15 своих блоков (15 меньше, чем заданный параметр 20), сеть их примет и реорганизуется. Если блоков будет 25, такая ветка будет отклонена. Вот и всё. Никакой мудрёной системы штрафов и параметра Х там вовсе нет.

Мы подумали, что наверное что-то не так поняли, поэтому обратились за помощью к создателю Pirl. Два дня общения в Discord не привели ни к какому результату. Он утверждает, что PirlGuard работает по аналогии с защитой ZEN, а мы просто чего-то не понимаем. Даже сложилось впечатление, что разговор шёл на разных языках.

Другой разработчик Pirl прокомментировал несоответствие описания PirlGuard с реальной работой алгоритма так.

Тексты эти не я пишу, я разработчик.

Окей.

Раз уж мы провели спонтанный аудит кода PirlGuard, то решили завершить работу, создав официальный запрос issue в их git-репозиторий. В нём указали на несоответствие описания и кода. Ответ Pir свёлся к следующему: “PirlGuard успешно внедрён в 7 блокчейнов. Многие из них уже пытались атаковать, но безуспешно”.

Кажется, что спорить бессмысленно, но на самом деле это реально. Криптовалюты под защитой PirlGuard вполне себе подвергаются атакам 51 процента, если атакующий выкладывает в сеть небольшое количество блоков — меньше параметра, о котором шла речь выше. Другое дело, что можно всегда подстраховаться количеством подтверждений на бирже. Например, если установить настройку алгоритма защиты на 50 блоков, а количество подтверждений на бирже — более 50, вряд ли такую криптовалюту будут атаковать.

Глобальная проблема безопасности криптовалют

Наше небольшое исследование, к сожалению, в очередной раз заставляет задаваться вопросом: “А читает ли кто-то код?”. Все мы пользуемся криптовалютными продуктами, но не знаем, сколько дыр они содержат. А они наверняка есть. И ведь здесь не существует крипто-полиции: случись что, никто не вернёт ваши сбережения.

Вспомните, как накрылись MultiSig-кошельки Parity с Эфиром на 150 миллионов долларов.

А как разработчики Ethereum отменяют форки за день до релиза, заметив ошибку? Хорошо, что ещё заметили.

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

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