Публичные блокчейны с точки зрения «безопасников» — на каких именно моментах они основывают свою критику? Обзор от компании Trail of Bits, специализирующейся в области безопасности ПО и сетевых решений.
Перевод и публикация отчета не означает согласия редакции с мнением авторов и приводится в качестве предметной аргументированной критики, которую имеет смысл принимать во внимание и делать свои выводы на основании разных источников и точек зрения.
Высказываемая авторами критика технических аспектов блокчейнов отчасти выглядит резонно, отчасти на нее есть что возразить — смягчить либо полностью опровергнуть. Но в любом случае аргументированная и предметная критика помогает взглянуть на используемые технологии под другим углом и подчас прекрасно развивает кругозор. Enjoy.
Навигация:
- Введение
- и централизации →
- Ключевые выводы и результаты →
- Неизменность блокчейнов →
- Коэффициент Накамото →
- Централизация консенсуса: уязвимости майнинговых пулов →
- Атаки Сивиллы и информационного затмения: «другие атаки 51%» →
- Распределенная организация и степенной закон →
- Централизация сети →
- Централизация программного обеспечения →
- Заключение →
Введение
В прошлом году Управление перспективных исследовательских проектов Минобороны США (DARPA) привлекло компанию Trail of Bits для изучения подлинного уровня децентрализации блокчейнов. Мы сосредоточились в основном на двух самых популярных блокчейнах: Bitcoin и Ethereum. Кроме того, мы исследовали протоколы proof-of-stake (PoS) блокчейны и Byzantine fault tolerant consensus (BFT) в целом. В этом отчете мы приводим краткое изложение результатов, полученных из научной литературы, а также из нашего нового исследования централизованности программного обеспечения и топологии сети консенсуса Биткойна. В качестве отличного академического обзора с более глубоким погружением в технические аспекты мы рекомендуем эту работу наших коллег из Лимерикского университета.
Блокчейны ведь децентрализованы, верно?
Технология распределенного реестра (ТРР) — и, в частности, блокчейны — используется в разных контекстах: цифровые валюты, децентрализованные финансы и даже электронное голосование. Хотя существует множество различных типов ТРР, каждый из которых построен с использованием принципиально различных проектных решений, общее ценностное предложение ТРР и блокчейнов заключается в том, что они могут безопасно работать без какого-либо централизованного контроля. Криптографические примитивы, обеспечивающие работу блокчейнов, к этому моменту уже являются достаточно надежными, и часто считается само собой разумеющимся, что эти примитивы обеспечивают блокчейнам неизменность (не подверженность изменениям записанных в блокчейн данных). В своем отчете мы приводим примеры того, как эта неизменность может быть нарушена не через использование криптографических уязвимостей, но путем подрыва свойств реализации блокчейна, сети и протокола консенсуса. Мы показываем, как подгруппа участников может получить чрезмерный, централизованный контроль над всей системой.
и централизации
В этом отчете мы рассматриваем несколько способов централизации управления ТРР:
- Полномочная централизация: какое минимальное количество субъектов необходимо, чтобы нарушить работу системы? Это значение называется коэффициентом Накамото, и чем ближе оно к единице, тем более централизованной является система. Это также часто называют «централизацией управления».
- Централизация консенсуса: аналогично полномочной централизации, в какой степени централизован источник консенсуса (например, proof-of-work)? Контролирует ли один субъект (такой как майнинговый пул) несоразмерно большую долю хеширующих мощностей сети?
- Мотивационная централизация: каким образом участники сети лишаются стимула действовать злонамеренно (например, размещать недостоверные или некорректные данные)? В какой степени централизован контроль этих стимулов? Как, если это вообще возможно, можно отозвать права у злонамеренного участника?
- Топологическая централизация: насколько устойчива к нарушениям консенсусная сеть? Существует ли подмножество узлов, которые образуют жизненно важный мост внутри сети, без которого она станет раздвоенной?
- Централизация сети: разнесены ли узлы географически настолько, чтобы быть равномерно распределенными по всему интернету? Что произойдет, если злонамеренный интернет-провайдер или государство решит заблокировать или фильтровать весь трафик ТРР?
- Централизация программного обеспечения: в какой мере безопасность ТРР зависит от безопасности программного обеспечения, на котором она работает? Любая ошибка в программном обеспечении (случайная или преднамеренная) может нарушить инварианты ТРР: например, нарушить неизменность данных. Если в спецификации ТРР допущена двусмысленность, то два независимо разрабатываемых программных клиента могут реализовать в этом аспекте разную логику, что может привести к форку блокчейна. Уязвимость выше по потоку — в зависимости, используемой обоими клиентами, — может аналогичным образом нарушить их работу.
Ключевые выводы и результаты
Здесь основные выводы нашего исследования приведены тезисно. Более подробно они описываются далее в отчете.
- Сложность с использованием блокчейна заключается в том, что необходимо либо (а) принять его неизменность и надеяться, что программисты не оставили багов в кодовой базе, либо (б) разрешить обновляемые контракты или офчейн-код, которые, по сути, подвержены той же проблеме доверия, что и централизованный подход.
- В каждом широко используемом блокчейне есть привилегированный состав субъектов, способных изменить семантику блокчейна таким образом, чтобы потенциально изменить и прошлые транзакции.
- Число субъектов, способных нарушить работу блокчейна, относительно невелико: четыре для Bitcoin, два для Ethereum и менее десяти для большинства PoS-сетей.
- Подавляющее большинство узлов Биткойна не участвуют в майнинге, а операторы узлов не несут явного наказания за недобросовестное поведение.
- Стандартный протокол для координации внутри майнинговых пулов, Stratum, не зашифрован и, в сущности, не аутентифицирован.
- Когда узлы имеют устаревшее или неверное представление о состоянии сети, это снижает процент хешрейта, необходимый для выполнения стандартной атаки 51%. Более того, для проведения такой атаки необходимо деградировать только узлы, управляемые майнинговыми пулами. Например, в первой половине 2021 года фактическая затратность атаки 51% на Биткойн была ближе к 49% хешрейта.
- Чтобы блокчейн был оптимально распределенным, должна существовать так называемая затратность Сивиллы. В настоящее время неизвестно, как реализовать затратность Сивиллы в блокчейнах без уровней доступа — таких как Bitcoin или Ethereum — без использования централизованной доверенной третьей стороны. До тех пор, пока не будет найден механизм для обеспечения затратности Сивиллы без участия доверенной третьей стороны, в блокчейнах без ограничений доступа будет практически невозможно достичь удовлетворительной децентрализации.
- За достижение консенсуса и коммуникацию с майнерами, похоже, в основном отвечает плотная и, возможно, не безмасштабная подсеть узлов Биткойна. Подавляющее же большинство узлов не вносят значимого вклада в здоровье сети.
- Трафик Биткойна не зашифрован. Любая третья сторона на сетевом маршруте между узлами — интернет-провайдеры, операторы точек доступа Wi-Fi или правительства — может наблюдать и по своему усмотрению отбрасывать любые сообщения.
- Из всего трафика Биткойна, 60% проходит через трех провайдеров доступа к сети.
- Tor является крупнейшим провайдером доступа к сети в Биткойне, маршрутизируя трафик примерно для половины его узлов. Половина этих узлов направляется через сеть Tor, другая половина доступна по .onion-адресам. Следующей крупнейшей автономной системой — или провайдером доступа к сети — является AS24940 из Германии, составляющая всего 10% узлов. Вредоносный выходной узел Tor может изменять или отфильтровывать трафик подобно интернет-провайдеру.
- По состоянию на июнь 2021 года 21% узлов Биткойна работали под управлением старой версии клиента Bitcoin Core, содержащей известную уязвимость.
- В экосистеме Ethereum существует значительное количество переиспользования кода: 90% развернутых недавно смарт-контрактов имеют уровень сходства по меньшей мере 56%.
Неизменность блокчейнов
В каждом блокчейне есть привилегированный состав субъектов, которые могут менять семантику блокчейна, чтобы потенциально изменить прошлые транзакции: а именно, авторы и сопровождающие разработку программного обеспечения. Многие имеют виртуальную машину (ВМ), построенную поверх протокола консенсуса или даже интегрированную в него. Биткойн и его производные имеют ВМ для интерпретации скриптов выходов транзакций. Ethereum использует ВМ для выполнения своих смарт-контрактов. Семантика ВМ в блокчейнах часто развивается в ответ на спрос на новые функции и необходимость в смягчении мер безопасности. Часто добавляются новые опкоды ВМ, а стоимость выполнения определенных операций регулярно корректируется для предотвращения атак типа «отказ в обслуживании» (источник, PDF).
В некоторых случаях разработчики или сопровождающие блокчейна намеренно изменяют его программное обеспечение таким образом, чтобы изменить состояние блокчейна — для отмены или смягчения последствий атаки. Таким был ответ Ethereum на «взлом» DAO в 2016 году. Но в большинстве других случаев изменения в блокчейне являются непреднамеренными или неожиданными последствиями других изменений. Например, хардфорк Constantinople в Ethereum должен был понизить стоимость газа для определенных операций. Однако некоторые неизменяемые контракты, развернутые до хардфорка, полагались на старый размер затрат в предотвращении определенного класса атак: атак «повторного входа». То есть семантические изменения в Constantinople делали уязвимыми прежде безопасные контракты. По счастливой случайности эта проблема была обнаружена вручную, когда до форка оставалось еще достаточно времени, чтобы это изменение отложить и впоследствии отказаться от него. В 2021 году блокчейн-платформа Polkadot оказалась временно выведена из строя из-за сбоев в работе узлов, вызванных обновлением компилятора языка программирования Rust (на нем было написано ПО узлов). В конце августа 2021 проблема консенсуса, связанная с изменениями в самом популярном клиенте Ethereum, была использована, чтобы спровоцировать хардфорк криптовалюты.
Данные — и, что еще важнее, код, — записанные в блокчейн, не обязательно являются семантически неизменными. Состояние блокчейна не только может быть изменено задним числом вследствие внесения изменений в ПО блокчейна, но и семантика отдельных транзакций может измениться в период между моментом их инициации и моментом окончательного занесения в блокчейн — из-за изменений в программном обеспечении, активированных в этот период. Некоторые блокчейн-платформы, такие как Polkadot и Substrate, также позволяют обновлять определенные параметры и код через процесс ончейн-управления.
Чтобы изменить свойства безопасности распределенного реестра, не обязательно менять само программное обеспечение. Например, хотя Биткойну менее 15 лет, многие из основополагающих предположений, сделанных при разработке его протокола, уже устарели. В первоначальной задумке Накамото предполагал, что каждый узел консенсусной сети будет участвовать в майнинге. Однако с увеличением сложности майнинга — и, следовательно, снижением вероятности получить вознаграждение — всё более популярным способом получения регулярного дохода от майнинга становятся «майнинговые пулы» (коллективы, объединяющие майнинговые мощности и разделяющие вознаграждение пропорционально участию). Сегодня на долю четырех самых популярных майнинговых пулов приходится более 51% хешрейта Биткойна. Каждый майнинг-пул работает по собственному проприетарному централизованному протоколу и взаимодействует с публичной сетью Биткойна только через шлюзовой узел. Другими словами, есть считанное количество узлов, которые участвуют в консенсусе сети от имени большей части ее хешрейта. Контроль над этими узлами дает возможность как минимум отказывать в обслуживании стоящему за ними хешрейту. Это нарушает исходное предположение о том, что все узлы Биткойна будут иметь финансовый стимул (через майнинг) оставаться честными. Если же корыстный интерес оператора узла предполагает нечестное поведение, то явного наказания за это не предусмотрено. Более того, количество субъектов, необходимых для осуществления атаки 51% на Биткойн, таким образом сокращается с 51% всей сети (по нашим оценкам, составляющей около 59 000 узлов) до всего лишь четырех узлов самых популярных майнинг-пулов (менее 0,004% сети).
Наконец, ни один блокчейн, поддерживающий тьюринг-полное выполнение ончейн (как Ethereum, Hyperledger или Tezos), не может обеспечить семантическую неизменность. Это связано с тем, что такие блокчейны не могут предотвратить возможность обновления кода контрактов (машина Тьюринга способна имитировать любую другую машину Тьюринга, что позволяет обновлять контракты через интерпретируемые входные данные, даже если код ончейн остается неизменным). Например, Алиса может отправить транзакцию в контракт, и до того, как ее транзакция будет обработана майнерами, контракт может быть обновлен и иметь уже совершенно иную семантику. То есть транзакция Алисы поступит уже в новый контракт. Обновляемые контракты стали невероятно популярными в Ethereum, позволяя разработчикам обходить неизменность для исправления ошибок после развертывания. Но это же дает разработчикам возможность оставлять бэкдоры, которые позже позволят им скрыться с активами из контракта. Сложность с использованием блокчейна заключается в том, что необходимо либо (а) принять его неизменность и надеяться, что программисты не оставили багов в кодовой базе, либо (б) разрешить обновляемые контракты или офчейн-код, которые, по сути, подвержены той же проблеме доверия, что и централизованный подход.
Коэффициент Накамото
Для измерения централизации или справедливости распределенных реестров предлагались различные метрики, включая коэффициент Джини и кривую Лоренца, обе заимствованные из экономической теории. Однако минимальный коэффициент Накамото является, пожалуй, самым интуитивно понятным из них. Коэффициент Накамото — это количество субъектов, достаточное для атаки на систему. У полностью централизованной системы коэффициент Накамото будет равен единице. Чем ниже коэффициент Накамото, тем более централизованной является система.
Известно, что Биткойн экономически централизован: в 2020 году 4,5% держателей BTC контролировали 85% оборотного предложения валюты (источник, PDF). Но как насчет системной или полномочной централизации? Как уже говорилось в предыдущем разделе, коэффициент Накамото для Биткойна равен четырем, поскольку захват контроля над четырьмя крупнейшими майнинговыми пулами номинально обеспечивает хешрейт, достаточный для проведения атаки 51%. В январе 2021 года коэффициент Накамото для Ethereum был равен всего двум (источник, PDF), по состоянию на апрель 2022 — трем (источник).
Даже притом что эти коэффициенты Накамото относительно низкие, кто-то скажет, что их использование для атаки на блокчейн будет непомерно дорогим. Однако, хоть это может быть справедливо для частных лиц, субъекты, мотивированные на совершение таких атак, включают также операторов конкурирующих валют и национальные государства, обладающие необходимыми ресурсами. Как относительная стоимость фиатных валют подвержена манипуляциям, так в блокчейнах могут существовать искаженные и ложные стимулы.
PoS-протоколы становятся все более популярными механизмами консенсуса, призванными устранить некоторые недостатки (например, дороговизну вычислений) PoW-блокчейнов, таких как Bitcoin, Ethereum (пока) и производные от них. Вместо решения вычислительно сложных задач, как это делают PoW-майнеры, большинство PoS-сетей требуют от валидаторов внесения в залог определенного количества криптовалюты на случай, если те решат действовать нечестно, и их «майнинговая мощность» при этом соразмерна внесенному залогу. Некоторые PoS-блокчейны, такие как Algorand, распределяют криптовалюту в виде вознаграждения за хорошее участие в управлении. Чтобы обеспечить подтверждение транзакций и контроль за валидаторами, PoS-блокчейны используют сложные протоколы. Большинство протоколов консенсуса в PoS-блокчейнах (Snowflake [PDF] в Avalanche, Tower BFT [PDF] в Solana и т.д.) ломаются при вредоносном поведении валидаторов, контролирующих хотя бы треть от общей суммы залога, что приводит к остановке сети. Поэтому коэффициент Накамото для большинства PoS-блокчейнов равен наименьшему числу валидаторов, чей залог в сумме может составить не менее 33,33% от общей стоимости внесенных для стейкинга средств.
Ниже приведены коэффициенты Накамото для популярных PoS-блокчейнов по состоянию на 25 августа 2021 года:
Блокчейн | Коэффициент Накамото | Общее число валидаторов | Общая стоимость залога ($) | |
Avalanche | 25 | 1041 | $11 млрд | https://explorer.avax.network/validators |
Solana | 19 | 876 | $37 млрд | https://solana.com/validators |
Eth2 * | 12 | 219 182 | $22 млрд | https://www.nansen.ai/ |
THORChain | 11 | 38 | $0,5 млрд | https://thorchain.net/#/nodes |
Terra (RIP) | 8 | 130 | $12 млрд | https://stake.id/#/ |
Cosmos | 6 | 125 | $4 млрд | https://www.mintscan.io/cosmos/validators |
BSC ** | 5 | 21 | $7 млрд | https://bscscan.com/validatorset |
Fantom | 3 | 46 | $1 млрд | https://ftmscan.com/validators |
Polygon | 2 | 100 | $3 млрд | https://wallet.matic.network/staking/ |
* Общее количество валидаторов — это верхняя граница. По данным Nansen, четыре крупнейших вкладчиков имеют более трети доли, и эти вкладчики имеют 12 узлов.
** Количество валидаторов, необходимое для достижения одной трети общей суммы залога валидаторов, составляет семь, но три из них контролируются одной организацией: Binance.
Централизация консенсуса: уязвимости майнинговых пулов
Всё большее количество операций протокола консенсуса делегируется небольшому числу субъектов, которые обычно используют собственное централизованное ПО и протоколы, лишь минимально соприкасаясь с ончейн-управлением. В случае PoW-блокчейнов такими субъектами являются майнинговые пулы, в случае PoS-блокчейнов — валидаторы. В предыдущем разделе мы уже говорили о том, что такие субъекты по определению представляют собой значимую цель для нарушения стабильности блокчейна. В этой части обзора мы обсудим, как такие структуры офчейн-управления еще больше увеличивают поверхность атаки блокчейнов.
Хотя есть свидетельства тому, что организации, разделяющие риски — такие как пулы майнеров или валидаторов, — снижают экономическую централизацию блокчейна, технологически они представляют собой единые точки отказа, и потому являются перспективными мишенями для атак типа «отказ в обслуживании» (источник). Безопасность блокчейна зависит от безопасности ПО и протоколов, используемых в офчейн-управлении, а также протокола консенсуса.
Сегодня коммуникация между операторами и участниками майнинговых пулов осуществляется посредством Stratum, специального протокола удаленного вызова процедур (RPC) на основе JSON, развивавшегося последние десять лет без какой-либо официальной стандартизации. Протокол позволяет оператору майнингового пула создавать для каждого участника майнинга «задания» (jobs), каждое из которых требует от него перебора уникального подмножества в пространстве поиска возможных валидных блоков.
Протокол Stratum не использует шифрование. Все назначенные майнерам задания, все результаты их работы и даже начальная аутентификация передаются в открытом виде. Вероятно, разработчики Stratum приняли такое решение, потому что протокол предназначен для использования в ПО большинства аппаратных майнеров, которые могут не иметь ресурсов для реализации SSL или TLS. Более того, разработчики Stratum могли и не предполагать, что злоумышленники смогут использовать этот дизайн для аутентификации под видом другого пользователя. Позже было обнаружено, что перехватчик — например, государство, интернет-провайдер или участник локальной сети — может использовать эту передаваемую информацию для оценки хешрейта и выплат тому или иному майнеру в пуле. «Человек в середине» может фактически манипулировать сообщениями Stratum для кражи тактов процессора и выплат участникам майнингового пула (источник). Об этих уязвимостях известно уже много лет, и первоначально они были устранены путем добавления в протокол Stratum форм аутентификации. Однако ни одно из предложений по переходу на более безопасный протокол не получило широкого распространения.
До 2018 года аутентификация в протоколе Stratum не требовала даже пароля. Злоумышленники поняли, что они могут инициировать отказ в обслуживании участникам майнинга, авторизуясь по их именам пользователей (которые можно было получить с сайта майнингового пула) и отправляя недействительные результаты (источник). Получив определенное количество невалидных блоков, майнинговые пулы блокировали аккаунт участника, игнорируя его дальнейшую работу и не распределяя ему выплаты. Это было исправлено введением пароля при аутентификации и через использование черных списков на основе IP-адресов, а не учетных записей.
Мы обнаружили, что на сегодняшний день все протестированные нами майнинговые пулы либо прописывают один пароль для всех учетных записей, либо просто не производят проверку пароля, предоставляемого при аутентификации. Например, всем аккаунтам ViaBTC присвоен пароль «123». Poolin, похоже, вообще не проверяет учетные данные для аутентификации. Slushpool инструктирует своих пользователей игнорировать поле Password, поскольку «это устаревший параметр протокола Stratum, в настоящее время не используемый». Мы обнаружили это, зарегистрировав несколько аккаунтов в майнинговых пулах и изучив код их серверов, насколько это было доступно. Только на эти три майнинговых пула приходится около 25% хешрейта Биткойна.
Задача каждого майнера состоит в том, чтобы найти такое значение nonce, которое, будучи добавленным к заголовку блока, выбранному майнинговым пулом, хешируется до значения ниже определенного порога. Этот порог и определяется текущим уровнем сложности блокчейна. Определенная часть заголовка специфична для задачи/майнера, чтобы предотвратить дублирование между заданиями. Стратегия, по которой майнинговые пулы выбирают как базовый заголовок для каждого задания, так и распределение пространства поиска между заданиями (и, следовательно, между отдельными майнерами), не является частью протокола Stratum — она определяется майнинговым пулом.
ViaBTC имеет открытый исходный код, поэтому у нас есть возможность изучить механизм его работы. ViaBTC создает для каждого майнера индивидуальный coinbase: адрес, на который перечисляются вознаграждения в случае успеха. Это не дает майнеру скрыться с успешно добытым блоком: контролируемый ViaBTC адрес для получения награды уже записан в заголовке. В ViaBTC также предусмотрен глобальный 32-битный счетчик заданий, который добавляется в заголовок, минимизируя пересечение пространства поиска между заданиями. Размер пространства поиска для каждого задания составляет 296 из 2256 бит, и маловероятно, чтобы злоумышленник смог перегрузить счетчик заданий путем повторных запросов в Stratum, поэтому едва ли задания могут сильно пересекаться. Однако сервер майнинг-пула будет продолжать принимать и выполнять вычисления для подтверждения фиктивной работы, представленной ненадлежащим образом аутентифицированными майнерами, что потенциально может приводить к отказу в обслуживании.
Атаки Сивиллы и информационного затмения: «другие атаки 51%»
Дискурс в отношении атак на PoW-блокчейны обычно бывает сосредоточен вокруг атаки 51% — вполне реальной угрозы того, что, если один субъект контролирует 51% или более от общего хешрейта сети, то он может изменять блокчейн в своих интересах.
Но существуют и другие формы атаки 51%, которым подвержены все типы блокчейнов и распределенных систем в целом. Что, если наводнить сеть консенсуса блокчейна новыми вредоносными узлами, контролируемыми одной стороной? В конце концов, для развертывания нового узла нужен всего один недорогой инстанс облачного сервера — специализированное оборудование для майнинга здесь не требуется. Это называется атакой Сивиллы. Такие атаки можно использовать для изменения топологии сети с целью захвата влияния.
Атаки Сивиллы можно использовать также для реализации eclipse-атаки (атаки информационного затмения) — отказа в обслуживании определенных узлов с целью захвата влияния. Если для узлов можно создать устаревшее или неверное представление о сети, это увеличивает вероятность форка блокчейна — когда два майнера производят и транслируют валидные, но различные блоки на основе одного и того же родительского блока. Чем длиннее становятся ветви форка, тем меньше процент хешрейта, необходимый злоумышленнику для выполнения стандартной атаки 51% (источник). Это происходит потому, что в конечном счете одна из двух ветвей станет канонической для блокчейна, а другая — так называемым оммером. Любые транзакции в оммерных блоках, будут признаны недействительными, как если бы они никогда не получали подтверждения майнеров. Причина, по которой форки снижают стоимость стандартной атаки 51%, заключается в том, что любой хешрейт, затраченный на продолжение ветви форка, которая в конечном счете станет оммером, по сути, расходуется впустую, снижая общую вычислительную эффективность блокчейна. Более того, для проведения такой атаки необходимо деградировать только узлы, напрямую подключенные к майнерам (источник, PDF).
Влияние сетевой задержки на Биткойн при среднем интервале между блоками 628,79 секунд
Вероятность форка рассчитывается по уравнению (3) из (Декер и Ваттенхофер, 2013):
𝑃𝑟 [𝐹 ≥ 1] = 1 − (1 − λ)∆
где λ — это общая скорость майнинга (обратная среднему интервалу между блоками), а ∆ — средняя сетевая задержка. Процент хешрейта, необходимый для выполнения стандартной атаки 51% (называемый также «порогом атаки»), является следствием уравнения (2) из (Amir Dembo с соавт., 2020):
По нашим расчетам на основе данных, собранных в период с января по июнь 2021 года, эффективная вычислительная мощность сети Биткойна составила только 98,68% от ее теоретической максимальной мощности из-за естественной задержки сети. Иными словами, 1,32% времени майнеры работали с устаревшей информацией, впустую тратя свое время. Это означает, что фактическая стоимость атаки 51% на Биткойн была ближе к 49% хешрейта. Поэтому, вопреки устоявшемуся мнению, для успешной атаки 51% не требуется 51% хеширующей мощности сети, даже если исходить из того, что все участники честны. При случайном или намеренном введении дополнительной задержки, необходимый для атаки хешрейт может резко снизиться. При задержке всего в несколько минут порог атаки снижается до 40%, а при задержке менее часа он может упасть до 20%. Все это следует рассматривать в контексте того, что всего четыре майнинговых пула уже контролируют более 51% хеширующих мощностей сети.
В июле 2021 года Грундману и Баумштарку удалось наблюдать атаку Сивиллы на узлы Биткойна. Авторы не сделали ни выводов, ни предположений о цели атаки, однако она привела к значительному снижению связности публичной сети Биткойна. Наш анализ показывает, что эта атака Сивиллы могла позволить осуществить атаку затмения.
Yujin Kwon с соавт. недавно пришли к выводу о невозможности децентрализации блокчейнов без уровня доступа, таких как Bitcoin и Ethereum. Авторы исследования показывают, что для оптимального уровня распределенности блокчейна должна существовать так называемая затратность Сивиллы (Sybil cost). То есть, затраты одного участника на управление несколькими узлами должны быть выше, чем затраты на управление одним узлом. К сожалению, Квон и соавт. приходят к выводу, что в настоящее время неизвестно, как реализовать затратность Сивиллы в блокчейнах без уровней доступа (как Bitcoin или Ethereum) без использования централизованной доверенной третьей стороны. До тех пор, пока не будет найден механизм для обеспечения затратности Сивиллы без участия доверенной третьей стороны, в блокчейнах без ограничений доступа будет практически невозможно достичь удовлетворительной децентрализации.
Распределенная организация и степенной закон
Случайные наблюдатели часто полагают, что p2p-сети технологии распределенного реестра (ТРР) являются безмасштабными. Грубо говоря, сеть является безмасштабной, если доля узлов со степенью 𝑘 является 𝑘-𝑐 для некоторой константы 𝑐. Это обоснованное предположение, поскольку многие другие естественные явления, такие как социальные сети, самоорганизуются подобным образом. Свойства безмасштабности в p2p-сетях желательны, поскольку они обеспечивают хороший баланс между минимизацией задержек распространения и сетевых соединений, позволяя сети быстрее достигать консенсуса при меньшем количестве взаимосвязей (источник). В конце концов, цель сети состоит в достижении консенсуса по текущему состоянию блокчейна и распространении новых, еще не записанных в блокчейн транзакций среди остальных узлов. Чем быстрее эта информация распространяется по сети, тем сложнее использовать задержку распространения, выполнив атаку затмения, как описано в последнем разделе.
Являются ли популярные блокчейн-сети безмасштабными на самом деле? Оказывается, эмпирических подтверждений этого очень мало. Если некоторые блокчейны, такие как Ethereum, используют протоколы обнаружения пиров (других участников одноранговой сети), имеющие теоретические гарантии согласованности (источник, PDF), то Биткойн и производные от него используют собственный протокол, о котором написано относительно мало. Протокол Биткойна не предоставляет средств для прямого наблюдения за пирами узла, хотя при определенных редких условиях их можно оценить по косвенным признакам (источник).
Топология сети Биткойна диктуется алгоритмом обнаружения пиров и установления соединения с ними, являющейся частью реализации программы-клиента, а не самого протокола. Bitcoin Core — самая популярная на сегодняшний день реализация Bitcoin-клиента — имеет жестко закодированные константы для различных параметров, которые влияют на пиринг и, следовательно, на топологию сети. Эти константы нигде больше не задокументированы, однако существенно влияют на топологию сети консенсуса. Единственный способ изучить эти константы (и даже просто узнать об их существовании, если на то пошло) — это изучить исходный код программы-клиента. Так что по факту единственным исчерпывающим справочником по поведению узлов сети Биткойна является непосредственно исходный код его самого популярного клиента.
Ограничение на количество известных адресов пиров, которые используются совместно с другими одноранговыми узлами, жестко задано 23% или 1000 — в зависимости от того, что меньше. Функции network address translation (NAT) или Universal Plug and Play (UPnP) в Bitcoin Core по умолчанию отключены, поэтому, если биткойн-узел работает без публичного IP-адреса (например, в домашней сети или за брандмауэром), то он не сможет принимать входящие соединения от других узлов сети. Эти «непубличные» биткойн-узлы могут осуществлять только исходящие соединения, число которых ограничено восемью. «Публичные» биткойн-узлы, которые принимают входящие соединения, ограничивают количество пиров 125. Реализация биткойн-клиента пытается также максимизировать разнообразие пиров, ограничивая сходство их IP-адресов (Bitcoin Core инициирует не более одного пирингового соединения с IP-адресом в каждом 16-битном CIDR-блоке). Поэтому, хотя публичные узлы соединяются друг с другом, используя модифицированную форму предпочтительного подключения (источник) — и, следовательно, должны обладать свойствами безмасштабности, — непубличные узлы действуют подобно спицам с приблизительно регулярными степенями вокруг хаба публичных узлов.
Мы знаем, что диаметр почти каждого случайного безмасштабного графа очень мал (источник, PDF): log n ÷ log log n, для Биткойна это дает диаметр, равный 5. Клиент Bitcoin Core имеет жестко прописанную в коде задержку в две минуты перед передачей новых проверенных блоков своему пиру. Поэтому, если бы Биткойн был безмасштабным, мы бы ожидали, что средняя задержка распространения блока составит 10 минут. Однако мы регулярно наблюдаем задержки распространения блоков менее 10 минут, что говорит о том, что на самом деле граф безмасштабным не является. Наши исследования показывают, что Биткойна этот диаметр ближе к четырем. Эти данные подтверждают наше предположение о том, что за достижение консенсуса и коммуникацию с майнерами в значительной степени отвечает плотная (возможно, не безмасштабная) подсеть публичных узлов. Эта гипотеза подтверждается эмпирическими оценками распределения узлов по числу связей.
Расчетное распределение степеней (распределения узлов по числу связей) в сети консенсуса Биткойна
Пик в распределении степеней приходится на 125 пиров, так как это соответствует ограничению по умолчанию для клиента Bitcoin Core. Узлы с бóльшим числом пиров работают с другим либо с модифицированным клиентом Bitcoin.
Обходя сеть Биткойна и запрашивая пиров у известных одноранговых узлов, можно оценить количество публичных биткойн-узлов (т.е. активно принимающих входящие соединения). По результатам сканирования сети Биткойна в течение 2021 года мы оценили долю публичных узлов Биткойна всего в 6-11% от общего числа узлов. Таким образом, подавляющее большинство узлов Биткойна не вносят значимого вклада в здоровье сети. Мы расширили модель случайного графа Барабаши – Альберта, чтобы отразить поведение пиринга в сети Биткойна. Эта модель предполагает, что при текущем размере сети Биткойна по крайней мере 10% узлов должны быть публичными, чтобы новые узлы могли максимизировать количество своих пиров (и, следовательно, здоровье и связность сети). С увеличением общего числа узлов эта граница приближается к 40%.
Централизация сети
В предыдущем разделе мы исследовали, как сеть узлов с технологией распределенного реестра (ТРР) может подвергаться централизации. Но как насчет фактической базовой сетевой инфраструктуры? По крайней мере в последние пять лет 60% всего трафика Биткойна проходило всего через трех интернет-провайдеров (источник). По состоянию на июль 2021 около половины всех публичных узлов Биткойна работали с IP-адресов в немецких, французских и американских автономных системах, четыре крупнейших из которых являются хостинг-провайдерами (Hetzner, OVH, Digital Ocean и Amazon AWS). Больше всего узлов (примерно одна треть) расположено в США, за ними следуют Германия (четвертая часть), Франция (10%), Нидерланды (5%) и Китай (3%).
Одновременно с тем, примерно половина всего трафика Биткойна проходила через Tor. Это еще одна потенциальная поверхность для осуществления атаки затмения, поскольку интернет- и хостинг-провайдеры имеют возможность произвольно ограничивать обслуживание или отказывать в нем любому узлу. Традиционные атаки маршрутизации по BGP-протоколу также были определены как угрозы (источник).
Базовая сетевая инфраструктура особенно важна для Биткойна и производных от него, поскольку весь трафик протокола Биткойна передается в незашифрованном виде. Незашифрованный трафик подходит для данных транзакций и блоков, поскольку они криптографически подписаны и, следовательно, защищены от подделки. Однако любая третья сторона на сетевом маршруте между узлами — интернет-провайдеры, операторы точек доступа Wi-Fi или правительства — может наблюдать и по своему усмотрению отбрасывать любые сообщения. Допустим, Алиса хочет передать ₿1 Бобу. Она создает транзакцию, снабжает ее цифровой подписью и отправляет узлу для распространения по сети. Транзакция еще не завершена; она находится в так называемом пуле памяти, мемпуле. Узел Алисы будет передавать информацию о транзакции своим пирам, пока сообщение достигнет узла, связанного с майнером (или, что более вероятно, майнинговым пулом). Майнер затем может принять решение о включении транзакции в блок. После нахождения валидного хеша и включения блока с транзакцией Алисы в блокчейн, он передается обратно узлу, чтобы тот распространил его по остальной сети. В любой момент этого процесса злонамеренный узел, майнер или посредник в сети может решить не передавать дальше информацию о новой транзакции. Если узлы майнингового пула не имеют достаточной связности с плотной подсетью публичных узлов, описанной в предыдущем разделе, то подобная атака становится проще.
Протокол Биткойна также позволяет запускать узлы как скрытые службы Tor. На самом деле в отношении популярности в сети Биткойна Tor сейчас превосходит любые другие автономные системы или провайдеров доступа к интернету, маршрутизируя трафик примерно 20% биткойн-узлов. Следующей крупнейшей автономной системой является AS24940 из Германии, на которую приходится только 10% узлов. Это вызывает беспокойство (PDF), потому что вредоносный выходной узел Tor может изменять или фильтровать трафик подобно интернет-провайдеру, как описано выше. В прошлом году злоумышленник (по общему мнению, из России) использовал атаку Сивиллы, чтобы получить контроль над 40% выходных узлов Tor. Он использовал эти узлы для переписывания трафика Биткойна.
Мы предлагаем новую метрику, которая отражает степень влияния узла на консенсус всей сети на основе его топологического положения: влияние на консенсус, равное центральности узла (источник, PDF). Влияние узла на консенсус зависит от влияния на консенсус его пиров: узлы с более влиятельными пирами сами являются более влиятельными. Чем выше это значение, тем большее влияние на консенсус имеет узел. Еще одно свойство этого определения состоит в том, что чем выше влияние узла на консенсус, тем больше сообщений gossip-протокола будет через него проходить. Эту метрику можно рассчитать, используя основной собственный вектор смежности сети. Как и ожидалось, две страны с наибольшим числом не-Tor узлов, США и Германия, имеют наибольшее совокупное влияние на консенсус в Биткойне.
Расчетное влияние на консенсус Биткойна по странам
В случае Биткойна влияние на консенсус надо оценивать исходя из комбинации данных обхода и вероятностной модели топологии, поскольку биткойн-клиенты не раскрывают явным образом своих пиров.
Мы бы хотели определить, в какой мере сможет повлиять на систему страна, которая в одностороннем порядке заблокирует весь интернет-трафик Биткойна. Мы можем рассчитать это влияние на консенсус узлов по сравнению с влиянием на «доступность хешрейта», которую мы определяем как расчетную сетевую задержку между узлом в сети консенсуса и всеми майнерами в сети, нормализованную по их хешрейту. Чем ниже доступность хешрейта узла, тем быстрее его сообщения будут передаваться майнерам и обратно. Сначала мы оцениваем влияние глобального распределения на общий консенсус, как показано на предыдущей диаграмме. Далее для каждой страны мы удаляем эту страну и рассчитываем новое распределение влияния на консенсус среди оставшихся стран. Оцениваем изменение через сравнение относительной энтропии распределений (дивергенция Кульбака – Лейблера). Это показано синей частью столбцов на диаграмме ниже. Повторяем процесс, рассчитывая вместо этого изменение доступности хешрейта, показанное красной частью столбцов. Самые крупные синие столбцы обозначают страны, удаление которых окажет самое значительное влияние на топологию консенсусной сети. Более крупные красные области обозначают страны, удаление которых окажет наибольшее влияние на доступ других стран к хешрейту.
Изменения во влиянии на консенсус Биткойна и расстояние до хешрейта Централизация программного обеспечения
Как уже говорилось ранее, крайне важно, чтобы все узлы распределенного реестра работали на одной и той же последней версии ПО, иначе могут возникнуть ошибки консенсуса, которые приведут к форку блокчейна. Различия в ПО и уязвимости регулярно приводят к ошибкам консенсуса. Например, 24 августа 2021 года был поспешно исправлен баг в старой версии популярного Ethereum-клиента Geth. Однако участники майнинговых пулов Flexpool, BTC.com и Binance продолжали использовать старые, не пропатченные версии. 27 августа это вызвало ошибку консенсуса, которая привела к форку блокчейна Ethereum. Двадцать пятого октября 2021 года была обнаружена уязвимость во всех предыдущих версиях Geth, которая позволяла с помощью тщательно подготовленного peer-to-peer сообщения вызывать атаку типа «отказ в обслуживании» на принимающий узел. Результаты нашего обхода сети Биткойна показали, что 21% ее узлов работают на старой версии клиента Bitcoin Core, обладающей известной уязвимостью.
Ошибки в ПО могут приводить к ошибкам консенсуса, но мы показали, что и явные изменения в программном обеспечении также могут изменять состояние блокчейна. Поэтому ключевые разработчики и сопровождающие ПО блокчейна представляют собой централизованную точку доверия в системе, подверженной целенаправленным атакам. В настоящее время есть четыре активных контрибьютора, имеющих доступ к изменению кодовой базы Bitcoin Core. Компрометация любого из них позволит произвольно изменять кодовую базу. Недавно ведущий разработчик сети Polygon с капитализацией $7,5 млрд, Жорди Байлина, стал жертвой атаки вредоносной программы Pegasus, которая могла быть использована для кражи его кошелька или учетных данных для развертывания.
Но важна не только реализация блокчейн-клиента — вся экосистема программного обеспечения блокчейна создает риски ошибок консенсуса и различий. Например, криптовалютным трейдерам надо решить, использовать ли «некастодиальный» кошелек (т.е. самостоятельно хранить свои учетные данные в локальном цифровом кошельке) или передать их централизованной «кастодиальной» бирже. Большинство пользователей, по-видимому, выбирают второе. Но дело здесь не просто в удобстве делегирования управления третьей стороне; выбор состоит в том, доверяет ли человек в большей мере централизованной третьей стороне или собственным практикам безопасности и разработчикам своего некастодиального кошелька.
Мы составили спецификации программного обеспечения и графы зависимостей для крупных программных клиентов для Bitcoin, Bitcoin Cash, Bitcoin Gold, Ethereum, Zcash, Iota, Dash, Dogecoin, Monero и Litecoin. Затем сравнили два графа зависимостей исходя из нормализованного расстояния редактирования (расстояния Левенштейна).
Наша метрика расстояния редактирования рассчитывается путем сравнения относительных глубин всех общих зависимостей в их графах зависимостей. Если глубина общей зависимости для двух деревьев зависимостей различна, то мы говорим, что расстояние редактирования между ними равно обратной величине минимальной глубины минус обратная величина максимальной глубины. Для всех узлов, которые находятся в одном графе зависимостей, но не в другом, расстояние редактирования равно обратной величине глубины узла. Затем мы нормализуем общее расстояние редактирования на сумму обратных глубин всех зависимостей в каждом графе. Значение 0,0 означает, что графы полностью различны, а 1,0 — что они идентичны.
Как и ожидалось, форки Биткойна и производные от него остаются практически идентичными Биткойну (см. также «Атака клонов: исследование форков Биткойна»). Удивительно, но Monero, Zcash и Geth — все представляющие собой независимые разработки — также очень похожи на Биткойн.
Поскольку майнинговые пулы становятся всё более необходимыми для прибыльного PoW-майнинга, всё большее значение обретают централизация и безопасность связанной с ними инфраструктуры. Самый популярный пул для майнинга BTC, AntPool, распространяет клиентское ПО для своих майнеров как «черный ящик» — в виде бинарных файлов для Windows с закрытым исходным кодом. Насколько нам известно, оценка безопасности этих инструментов третьей стороной никогда не проводилась. ViaBTC, один из четырех крупнейших майнинговых пулов Биткойна, выложил код своего клиента в открытый доступ. Система сложна, написана на языке C и включает в себя множество компонентов, исторически сложных для реализации на этом языке. Например, она включает в себя рукописные парсеры, обрабатывающие внешние веб-запросы. Любая уязвимость удаленного выполнения кода в программе-клиенте майнингового пула позволит злоумышленнику либо реализовать отказ в обслуживании майнинг-пула (тем самым снизив общий хешрейт сети), либо перенаправить хешрейт на атаку 51%.
Ончейн-ПО также подвержено повторному использованию кода и уязвимостям. Например, экосистема смарт-контрактов на Ethereum использует повторное и совместное использование кода для реализации общих функций, недоступных в рамках языка нативным образом. Большинство контрактов используют библиотеку OpenZeppelin для таких вещей, как математические операции с обнаружением выхода за верхнюю или нижнюю границы (overflow/underflow) и стандартные реализации API токенов.
Мы отобрали 1586 смарт-контрактов, развернутых на блокчейне Ethereum в октябре 2021 года, и сравнили сходство их байткода, используя в качестве метрики расстояние Левенштейна. Можно ожидать, что такая метрика будет недооценивать сходство между контрактами, сравнивая низкоуровневый байткод, который уже был преобразован, организован и оптимизирован компилятором, а не высокоуровневый исходный код. Мы выбрали эту метрику как для получения нижней границы сходства, так и для сравнения контрактов, исходного кода которых у нас нет. Мы обнаружили, что 90% смарт-контрактов Ethereum были похожи друг на друга как минимум на 56%. Около 7% были полностью идентичны.
Байткод контрактов Ethereum содержит встроенные метаданные, такие как хеши исходного кода, а также сведения о конфигурации компиляции. Например, этот хеш будет отличаться, если один и тот же файл исходного кода скомпилирован дважды с разными отступами. Эти хеши не удалялись из двоичных файлов перед выполнением вышеуказанного сравнения, как и любые константные операнды (например, жестко закодированные адреса контрактов). Это означает, что истинное семантическое сходство между контрактами может быть гораздо выше, чем показано в нашем сравнении, потому что две кодовые базы, которые содержат похожий код библиотеки (напр., очень популярные Open Zeppelin или SafeMath), будут иметь большее сходство, если хеши игнорируются.
Заключение
В этом отчете мы определили несколько сценариев, в которых неизменность блокчейна ставится под сомнение не через использование криптографических уязвимостей, а путем нарушения свойств реализации блокчейна, сети или протокола консенсуса. Подмножество участников блокчейна может получить чрезмерный, централизованный контроль над всей системой. Большинство узлов Биткойна имеют значительные стимулы для нечестного поведения, и на самом деле не существует известного способа создать блокчейн без уровней доступа, неуязвимый для злонамеренных узлов без наличия доверенной третьей стороны. Мы предложили обновленные данные о коэффициенте Накамото для множества блокчейнов и предложили новую метрику централизации блокчейнов на основе топологического влияния узлов на консенсус. Небольшое число поставщиков сетевых услуг, включая Tor, отвечают за маршрутизацию большей части интернет-трафика блокчейнов. Особенно это актуально для Биткойна, поскольку весь трафик протокола передается в незашифрованном виде и, следовательно, подвержен атакам «человек в середине». Наконец, разнообразие ПО для блокчейнов представляет собой сложную проблему с точки зрения как зависимостей выше по потоку, так и исправления уязвимостей.
БитНовости отказываются от ответственности за любые инвестиционные рекомендации, которые могут содержаться в данной статье. Все высказанные суждения выражают исключительно личное мнения автора и респондентов. Любые действия, связанные с инвестициями и торговлей на крипторынках, сопряжены с риском потери инвестируемых средств. На основании предоставленных данных, вы принимаете инвестиционные решения взвешенно, ответственно и на свой страх и риск.
Источник: bitnovosti.com