Под моей первой статьёй о блокчейне как append-only базе данных самые интересные вопросы были не про базу. Всплывали другие вопросы, примерно следующего содержания. А что будет, если валидаторы сговорятся? Кто мешает большинству переписать историю? Почему я вообще должен верить блокчейну?

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

О чём вообще договариваются валидаторы?

Одним из самых распространённых заблуждений, является то, что консенсус в блокчейне - это договорённость об «истине» в каком-то философском смысле. На самом деле всё намного прозаичнее. Тысячи узлов договариваются между собой об одной и той же конкретной вещи. Какой блок следующий?

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

Тогда зачем вообще нужно, что-то там согласовывать, да еще и так дорого и сложно? Всему виной одна атака, вокруг которой построена вся индустрия - двойная трата. У тебя есть 10 монет, ты хочешь отправить их одновременно продавцу квартиры и на биржу. В централизованной системе, всю математику и разрешение конфликтов берет на себя сервер банка. Он посчитает твой баланс, твои желания и намерения и разрулит все по красоте. В системе без сервера, а это как раз блокчейн, конфликт решить некому, нету ответственного доверенного центра и узлам нужно как-то договориваться, какая из двух транзакций должна быть первой, а какая второй. Консенсус - это распределённый судья, работающий среди участников, каждый из которых может врать.

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

PoW: атака 51% - не теория, а прайс

В proof-of-work право записать блок покупается перебором хешей. Если собрать больше половины вычислительной мощности сети, то можно втихую строить собственную, более длинную цепь, а потом опубликовать её, и сеть, по протоколу, примет ее как родную. Твои старые транзакции, такие как депозит на биржу, который ты уже обменял и вывел, просто исчезнут из истории. Это и есть двойная трата через 51%.

Звучит как страшилка, которой место только в книжках по теории? У этой страшилки есть реальные истории:

  • Ethereum Classic, январь 2019: серия глубоких реоргов, Coinbase насчитала около $1,1 млн двойных трат. Биржи тогда резко подняли число подтверждений для ETC.

  • Ethereum Classic, август 2020: три атаки за месяц, одна с реорганизацией порядка 3 000 блоков — переписали больше суток истории.

  • Bitcoin Gold, 2018: двойные траты примерно на $18 млн.

Заметь, что ломали не Bitcoin и не Ethereum, а их младших братьев. Причина банальная и простая, как мир. Безопасность PoW-сети равна стоимости её суммарного хешрейта, и для маленькой сети со «взрослым» алгоритмом хеширования нужный объём мощности можно просто арендовать на несколько часов, сделать свое грязное дело, и раствориться в воздухе, как дым. Атака на Bitcoin теоретически устроена точно так же - только цена входа, которую придется заплатить, в такой огромной сети, с таким огромным хэшрейтом, делает её бессмысленной, намного дешевле и проще просто майнить честно.

Запомни эту логику, она главная в статье: атака не невозможна - она невыгодна. Дорого - не значит нельзя, дорого - значит «нельзя окупить».

PoS: тот же ценник, но со слэшингом

Ethereum с 2022 года считает не хешрейт, а залог. Валидатор блокирует депозит, который исторически составлял 32 ETH, а после раскатки Pectra его максимум был поднят до 2048 на одного валидатора, при минимальной цене входа, все те же 32 ETH и подписывает блоки. Для финализации блока нужны подписи двух третей всего застейканного капитала и только такой блок, протокол считает необратимым. На сегодняшний день необратимыми блоки становятся каждые две эпохи, около 13 минут.

«Необратимым» довольно сильное слово, и вот на чём оно держится. Чтобы откатить финализированный блок,нужно, чтобы при голововании конфликт случился минимум у третьей части стейка всей сети. А в PoS противоречивые подписи являются прямым криптографическим доказательством нарушения, которое любой может отнести в протокол и для таких нарушителей срабатывает слэшинг - депозиты нарушителей сжигаются автоматически, это часть, заложенная в код сети и изменить ее невозможно.

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

Long-range: атака на новичков

Отдельный вопрос из комментариев первой статьи, про long-range attack, и он честно вскрывает слабое место PoS.

Слэшинг наказывает живые нарушения, здесь и сейчас, не завтра и не вчера. Теперь представь сценарий: Я скупаю старые ключи валидаторов - всех тех, кто давно вышел из стейкинга и вывел депозиты, ключи им больше не нужны и они продадут их за дешево. С этими ключами я могу переписать историю с той давней точки, где эти валидаторы ещё имели вес, и построить длинную правдоподобную альтернативную цепь. Наказывать здесь просто нечем, депозиты уже давно выведены из сети и слэшингу просто нечего жечь.

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

Защита от такой атаки называется weak subjectivity, и она концептуально скромная: новая нода должна стартовать не с генезиса, а с относительно свежего чекпоинта, полученного из доверенного источника, например, с сайта клиента, от другой ноды, от знакомого, ну а дальше уже чистая криптография, но первая точка опоры социальная. Я считаю важным говорить об этом прямо. В основании trustless-системы лежит маленький, честно задокументированный кусочек доверия, меньше, чем доверие банку, но все же не ноль.

Последний рубеж: право уйти

Допустим, худшее случилось - картель собрал большинство и готов платить любую цену лишь бы убить систему. Протокол проиграл, что же ему остаётся делать? Остаётся то, что не записано в протоколе. В 2016 году был взломан The DAO - контракт, державший огромную долю тогдашнего эфира. Формально атакующий не нарушил ни одного правила, код выполнился ровно так, как был написан и сообщество раскололось, большинство откатило взлом хард-форком, а меньшинство отказалось трогать историю из принципа, криптопанк и все дела. Так появились Ethereum и Ethereum Classic и обе цепи живы и по сей день.

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

Что унести с собой

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

Безопасность здесь - не свойство криптографии, это свойство экономики, у которой криптография на подхвате.


Я веду серию «Web3 для JS-разработчиков» в Telegram - t.me/blockwright_dev: два разбора в неделю, словарь терминов по будням, и учебный dApp Копилка, который мы строим в открытую - github.com/blockwright/kopilka. Сейчас идёт блок про фулстак: Hardhat, тесты, React.

Комментарии (0)