Logo
Поделиться этой статьей

Модель безопасности Bitcoin: глубокое погружение

CoinDesk заглянет под капот, чтобы понять, какие функции безопасности предлагает Bitcoin , а какие T .

Когда обсуждение механизмов консенсуса для различных криптовалют ONE проблема, которая часто вызывает споры, — это отсутствие понимания (и определения) модели безопасности, которую они предоставляют для исторических данных в реестре. Хотя каждая модель консенсуса направлена ​​на предотвращение различных теоретических атак, важно понимать цели модели.

Каждая модель безопасности состоит из двух основных частей: предположений и гарантий. Если предположения, используемые в качестве входных данных, верны, то и гарантии, которые выводятся моделью, должны быть верны.

Продолжение Читайте Ниже
Не пропустите другую историю.Подпишитесь на рассылку Crypto for Advisors сегодня. Просмотреть все рассылки

Давайте подробнее рассмотрим модель безопасности, которая, судя по всему, предлагается пользователям Bitcoin , использующим полный узел.

В поисках истины

«ONE из сильных сторон биткоина — и, по моему Мнение, даже самой важной — является низкая степень доверия, которая вам нужна к другим».Питер Вуйле

Цель распределенных реестров — предоставить упорядоченную историю Мероприятия, поскольку в распределенных системах T просто доверять временной метке.

Когда к сети на основе блокчейна присоединяется новый участник, он загружает все доступные блоки и рассматривает каждую допустимую серию блоков, которую видит, начиная с жестко запрограммированного генезисного блока.

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

Учитывая это предположение, операторы полных узлов могут быть полностью уверены в нескольких фактах:

  • Никто не раздувал денежную массу, кроме майнеров, и то по четко определенному графику.
  • Никто никогда не тратил деньги, не имея соответствующего закрытого ключа(ей).
  • Никто никогда не тратил одни и те же деньги дважды.

Операторы полных узлов могут быть достаточно уверены в нескольких других вещах. Существует сильная гарантия того, что:

  • Любой блок в цепочке был создан в течение примерно двух часов с момента временной метки блока.
  • Они синхронизируют «истинную» историю блокчейна.

На более техническом уровне это требует множества проверок:

Термодинамическая безопасность

После подтверждения транзакции в блоке ее T отменить, не затратив минимальное количество энергии на переписывание цепочки.

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

Источник: «Пересмотр модели безопасности биткойна» Йонатана Сомполинского1 и Авива Зохара
Источник: «Пересмотр модели безопасности биткойна» Йонатана Сомполинского1 и Авива Зохара

Если учесть текущую совокупную работу, проделанную майнерами Bitcoin , то для создания альтернативного блокчейна на основе Genesis с большим совокупным доказательством работы, который полные узлы посчитают «истинной» цепочкой, потребуется около 1026 хешей.

работа-когда-либо

Приведем некоторые цифры затрат, связанных с такой атакой:

Antminer S9 работает со скоростью 0,1 джоуля на GH (109 хэшей)

1026 хешей * 0,1 Дж / 109 хешей = 1015 джоулей

1015 джоулей = 2 777 777 778 кВт-часов * 0,10 долл. США за кВт/час = 277 777 778 долл. США за электроэнергию, необходимую для переписывания всего блокчейна

В то время как на момент написания статьи один блок должен был достичь целевого показателя сложности 253 618 246 641, что потребовало бы приблизительно:

253,618,246,641 * 248 / 65535 = 1.09 * 1021 хэшей

1,09 * 1021 хэшей * 0,1 Дж / 109 хэшей = 1,09 * 1011 джоулей

1,09 * 1011 джоулей = 30 278 кВт·ч * 0,10 долл. США за кВт·ч = 3 028 долл. США за электроэнергию на блок

Вот почему мы можем утверждать, что Bitcoin доказуемо термодинамически безопасен.

Есть несколько переменных, которые вы можете подправить в приведенном выше расчете, чтобы уменьшить стоимость, но мы можем быть уверены, что для переписывания всего блокчейна потребуются многие миллионы долларов только электроэнергии. Однако злоумышленник с такой большой хэш-мощностью в худшем случае сможет отменить транзакции до 2014 года — мы вскоре разберемся, почему это так.

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

Сопротивление Сивиллы

Поскольку протокол Bitcoin считает истинной цепочку ONE , которая имеет наибольшее совокупное доказательство работы (а не самую длинную цепочку, как часто ошибочно утверждают), в результате новому узлу, присоединяющемуся к сети, достаточно подключиться только к одному честному узлу, чтобы найти истинную цепочку.

Это также известно как «устойчивость Сивиллы», что означает, что кто-то не может начать атаку на узел, создав множество недобросовестных участников, которые передают ему ложную информацию.

Узлы
Узлы

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

Консенсус в реальном времени

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

Авторы «Перспективы и проблемы исследований Bitcoin и криптовалют«обратите внимание на следующие свойства, которые важны для стабильности Криптовалюта:

Окончательный консенсус. В любой момент все соответствующие узлы согласовывают префикс того, что станет в конечном итоге «истинным» блокчейном.

Экспоненциальная сходимость. Вероятность форка глубины n равна O(2−n). Это дает пользователям высокую уверенность в том, что простое правило «k подтверждений» обеспечит постоянное урегулирование их транзакций.

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

Корректность. Все блоки в цепочке с наибольшим совокупным доказательством работы будут включать только действительные транзакции.

Справедливость. Майнер с X% от общей вычислительной мощности сети будет добывать примерно X% блоков.

Авторы статьи отмечают, что Bitcoin , по-видимому, обладает этими свойствами, по крайней мере, если предположить, что большинство майнеров остаются честными, а именно это и пытаются стимулировать вознаграждения за блок и доказательство работы.

Существует множество других алгоритмов, которые можно использовать для поддержания консенсуса в распределенных системах, например:

  • Доказательство доли
  • Доказательство возраста монеты
  • Подтверждение депозита
  • Доказательство сжигания
  • Доказательство активности
  • Доказательство прошедшего времени
  • Федеративный консенсус
  • Практическая византийская отказоустойчивость

Они создают разные модели безопасности — наиболее очевидное отличие от доказательства работы заключается в том, что консенсус каждой из альтернативных систем достигается за счет внутренних ресурсов (монет или репутации), а не внешних ресурсов (электричества). Это создает совершенно другой набор стимулов для валидаторов в сети (и доверия к ним), что кардинально меняет модель безопасности.

Неправильное понимание модели безопасности

Распространенное ошибочное предположение заключается в том, что для Bitcoin существует четко определенная модель безопасности.

В действительности протокол Bitcoin создавался и создается без формально определенной спецификации или модели безопасности. Лучшее, что мы можем сделать, это изучить стимулы и поведение участников в системе, чтобы лучше понять и попытаться описать ее.

Тем не менее, есть несколько свойств протокола Bitcoin , которые часто анализируются неправильно.

Некоторые блокчейны достаточно сильно пострадали от атак, которые разработчики добавляютцентрализованно транслируемые подписанные контрольно-пропускные пунктыв программное обеспечение узла, по сути говоря, что «блок X был проверен разработчиками как находящийся в правильной исторической цепочке». Это точка крайней централизации.

Стоит отметить, что Bitcoin имеет 13 жестко запрограммированных контрольных точек, но они не изменяют модель безопасности так, как это делают транслируемые контрольные точки. Последняя контрольная точка была добавлена вBitcoin CORE 0.9.3и находится в блоке 295000, который был создан 9 апреля 2014 года. Этот блок имел сложность 6 119 726 089, что потребовало бы приблизительно:

6 119 726 089 * 248 / 65 535 = 2,62 * 1019 хешей

2,62 * 1019 хешей * 0,1 Дж / 109 хешей = 2,62 * 109 джоулей

2,62 * 109 джоулей = 728 кВт·ч * 0,10 долл. США за кВт·ч = 73 долл. США за электроэнергию для выработки

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

Если бы он отделил узел от сети, который синхронизировался после блока 295 000, он мог бы начать кормить ложными блоками по цене $73 за блок, по крайней мере, пока не достигнет перенастройки сложности. Однако чем дальше синхронизировался узел-жертва, тем больше будет затрат для злоумышленника на создание цепочки с большей совокупной работой.

Оба Грег Максвелл и Питер Вуйле заявили, что они надеются когда-нибудь полностью удалить контрольные точки. Главный мейнтейнер Bitcoin CORE Владимир ван дер Лаан отметил, что контрольные точки являются постоянный источник путаницылюдям, которые стремятся понять модель безопасности биткойна.

Можно утверждать, что это означает, что полный узел «доверяет» разработчикам CORE относительно действительности истории блокчейна до 9 апреля 2014 года, но узел все еще проверяет хэши Меркла в заголовке каждого блока, что означает, что надежность истории транзакций все еще защищена доказательством работы. Эти старые контрольные точки позволяют увеличить производительность(пропуская проверку подписи) при первоначальной синхронизации исторического блокчейна, хотя введение libsecp256k1 сделалоразница в производительности менее значительна.

Остаются контрольно-пропускные пункты

на месте для трех целей:

  • Чтобы предотвратить появление узловзаполнив свою памятьс допустимыми, но низкими заголовками блоков proof-of-work
  • Пропуск подписей в более ранних блоках (улучшение производительности)
  • Для оценки хода синхронизации

Пока эта статья писалась, Грег Максвеллпредложили заменить контрольно-пропускные пунктыскумулятивная проверка работыВместо этого. Как только узел имеет цепочку, содержащую более 5,4 * 1024 выполненных хешей, цепочки с меньшей совокупной работой будут отклонены. Это совпадает с объемом работы, выполненной примерно до блока 320 000 в сентябре 2014 года, когда отдельные блоки имели сложность ~27 000 000 000.

сложность-3

Для добычи блоков при сложности 27 000 000 000 потребуется примерно

27 000 000 000 * 248 / 65 535 = 1,16 * 1020 хешей

1,16 * 1020 хешей * 0,1 Дж / 109 хешей = 1,16 * 1010 джоулей

1,16 * 1010 джоулей = 3222 кВт·ч * 0,10 долл. США кВт·ч = 322 долл. США стоимости электроэнергии за блок

Таким образом, с этим предлагаемым изменением, если атакующий Sybil полностью окружил новый узел, который синхронизировался с нуля, он мог бы начать кормить ложные блоки, начиная с любого блока после генезиса, практически без затрат. Если атакующий Sybil полностью окружил узел, который синхронизировался после блока ~320 000, он мог бы начать кормить ложную цепочку с этой точки по цене $322 за блок.

Короче говоря, любая проверка безопасности начальной синхронизации узла относительно недорога для атаки, если субъект может получить полный контроль над интернет-соединением вашего узла; если он не может T, то узел легко отклонит блокировки злоумышленника.

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

В дополнение к контрольным точкам, есть также вопрос о том, как узел загружается сам. Текущий процесс для узлов Bitcoin заключается в проверке наличия локальной базы данных пиров, о которых он ранее узнал. Если нет, то он запросит набор «DNS Seeds», которые жестко закодировано в программном обеспеченииЭти семена содержат список хорошо подключенных узлов Bitcoin , который они возвращают вашему узлу.

Как мы видим из кода, Bitcoin CORE 0.13 в настоящее время использует DNS Seeds, запущенные Питером Вюйле, Мэттом Коралло, Люком Дашжером, Кристианом Декером, Джеффом Гарзиком и Йонасом Шнелли. Любой может запустить DNS Seed, используя Питера Вюйле программное обеспечение для раздачи биткойнов или Программное обеспечение Мэтта Коралло, хотя для того, чтобы его могли использовать новые узлы, вам придется убедить разработчиков ONE из реализаций полного узла добавить ваш хост DNS-источника в свое программное обеспечение.

Это может снова показаться точкой крайней централизации, что процесс загрузки нового узла зависит всего от шести DNS-семян. Вспомните, что модель безопасности биткоина требует, чтобы вы подключались только к одному честному пиру, чтобы иметь возможность противостоять атакам Сивиллы.

Таким образом, новый узел должен иметь возможность подключиться только к одному DNS seed, который T скомпрометирован и возвращает IP-адреса честных узлов. Однако есть запасной вариант, если по какой-то причине все DNS seed недоступны – жестко закодированный списокнадежных IP-адресов узлов, которыеобновляетсядля каждого выпуска.

Модель безопасности для этих различных параметров инициализации заключается не в том, что оператор полного узла доверяет X DNS seed или разработчикам Y CORE , которые предоставляют ему честные данные, а в том, что по крайней мере 1 / X DNS seed не скомпрометирован или 1 / Y CORE разработчик честен в отношении проверка действительности жестко запрограммированных изменений одноранговых узлов.

Ничто не является абсолютно безопасным

На еще более глубоком уровне, когда вы запускаете полный узел, вы, вероятно, в определенной степени доверяете используемому вами оборудованию и программному обеспечению.

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

Аппаратное обеспечение ORWL
Аппаратное обеспечение ORWL

Однако, учитывая, что аппаратные архитектуры ЦП, ОЗУ и другого важного оборудования, как правило, являются проприетарными, вы никогда не можете быть на 100% уверены, что они T скомпрометированы.

Баланс сил Биткоина

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

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

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

Крайне упрощенное описание динамики власти в Bitcoin:

[встроить]https://twitter.com/lopp/status/786241843436544002[/встроить]

Важно отметить, что программное обеспечение полного узла не обновляется автоматически, и это сделано намеренно. Автоматические обновления значительно изменят баланс сил в пользу разработчиков, позволяя им навязывать изменения правил узлам и майнерам без их разрешения.

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

У полных узлов есть ONE козырь, чтобы бороться с нежелательными софтфорками, — это хардфорк от майнеров, которые реализовали софтфорк. Это трудно осуществить (по замыслу) и вызывает много вопросов об измерении консенсуса и поиске экономически важных узлов.

Технически это можно сделать, изменив алгоритм майнера с двойного SHA256 на другую хэш-функцию, тем самым сделав все SHA256 ASIC бесполезными для майнинга биткоинов. Именно по этой причине операторы узлов должны оставаться бдительными к изменениям в экосистеме и напоминать майнерам, что их могут заменить, если они превысят свои полномочия.

При обсуждении деятельности майнеров и их угрозы безопасности биткоина задействовано много теории игр, и я размышлял о том, как может измениться экосистема майнинга.в предыдущей статье. Хотя майнинг Bitcoin более централизован, чем хотелось бы большинству из нас, он все равно работает хорошо, поскольку майнеры Bitcoin вложили большой капитал — они T могут рисковать уничтожением своих инвестиций, действуя злонамеренно в системе, где все за ними наблюдают.

безопасность SPV

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

Клиент, использующий упрощенную проверку платежей (SPV), загружает полную копию заголовков для всех блоков во всей цепочке. Это означает, что требования к загрузке и хранению линейно масштабируются с течением времени с момента изобретения Bitcoin . Это описано в разделе 8 технический документ Bitcoin.

снимок экрана-2016-11-11-at-9-12-35-am
снимок экрана-2016-11-11-at-9-12-35-am

Сатоши написал, что клиент SPV «T может проверить транзакцию самостоятельно, но, связав ее с местом в цепочке, он может увидеть, что узел сети ее принял, а блоки, добавленные после нее, еще раз подтверждают, что сеть ее приняла». SPV предполагает, что подделка транзакции глубиной X блоков будет дорогостоящей.

SPV, похоже, предлагает аналогичные гарантии, как и полная безопасность узла, но с дополнительным предположением, что любой блок с действительным заголовком и доказательством работы всегда содержит действительные транзакции. Поскольку клиенты SPV T проверяют все правила консенсуса, указанные в первом разделе этой статьи, они предполагают, что правила консенсуса проверяются узлом(ами), с которого(ых) они Request транзакции.

Дополнительное, незначительное различие в безопасности заключается в том, что пиры скрывают от вас информацию. Когда вы используете полный узел, пиры могут скрывать от вас неподтвержденные транзакции и блоки. Однако, как только вы получаете блок от любого пира, никто не может скрыть от вас транзакции в этом блоке. С другой стороны, пир может передать заголовок блока клиенту SPV, а затем скрыть информацию о транзакциях в этом блоке.

Клиенты SPV могут сделать запрос, чтобы Словарь информацию о транзакциях, влияющих на определенный адрес, и хотя для одноранговых узлов было бы дорого лгать им о существовании поддельных подтвержденных транзакций (потребуется майнинг блока с достаточным PoW), они могли бы лгать путем умолчания, утверждая, что не было результатов для фильтра Блума, который вы использовали для запроса транзакций. Также стоит отметить, что SPV ужасно нарушена с точки зрения Политика конфиденциальностииз-за недостатков фильтров Блума.

BitcoinJ имеетотличная статьямодели безопасности SPV. Относительно неподтвержденных транзакций они отмечают:

«В режиме SPV единственная причина, по которой вы должны верить, что транзакция действительна, — это тот факт, что узлы, к которым вы подключены, ретранслировали транзакцию. Если злоумышленник мог убедиться, что вы подключены к его узлам, это означало бы, что он мог бы скормить вам транзакцию, которая была бы полностью недействительной (тратила несуществующие деньги), и она все равно была бы принята, как если бы она была действительной».

Безопасность SPV, вероятно, «достаточно хороша» для обычного пользователя, хотя ее можно улучшить с помощью SPV Fraud Proofs. Былонекоторое обсуждение из эта концепцияно не реализованопредложениядля встраивания их в протокол.

Нет места, похожего на 127.0.0.1

Если вы T используете полный узел (и фактически не используете его для проверки транзакций), то вы передаете на аутсорсинг по крайней мере некоторый уровень доверия третьим лицам, что приводит к другой модели безопасности для вашего использования Bitcoin. Обратите внимание, что это не обязательно требует, чтобы все пользователи и компании создавали свое программное обеспечение непосредственно поверх API RPC Bitcoin Core.

Некоторые альтернативные конфигурации инфраструктуры могут включать, помимо прочего:

1) Используя мобильный кошелек, напримерBitcoin кошелек для Android,GreenAddress, или Припрятыватьчто позволяет вам настроить кошелек на запросы только к вашему собственному полному узлу.

btc-security-графика
btc-security-графика

2) Создание приложений поверх библиотек узлов SPV, таких как BitcoinJ, и настройка их для подключения только к полным узлам, которыми вы управляете. В BitcoinJ это можно сделать, определив свои собственныеSeedPeersчто вы передаете своемуPeerGroupво время инициализации. С помощью libbitcoin вы можете определить сетевое подключение к определенному узлуиспользуя этот пример.

3) Создание прокси-сервера, совместимого с API JSON-RPC Bitcoin Core, который отправляет некоторые вызовы сторонним службам, но также автоматически проверяет возвращаемые ими данные, выполняя вызовы на локальный полный узел. Для примера см. Программное обеспечение BitGoD от BitGoЭта гибридная модель может дать вам лучшее из обоих миров: вы можете использовать расширенные функции, предлагаемые третьими сторонами, сохраняя при этом свой финансовый суверенитет.

Полные узлы для свободы

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

Благодарим Кристофа ATLAS, Эрика Мартиндейла, Эндрю Миллера и Киару Роблес за рецензирование и предоставление отзывов по этой статье.

Главное изображение через Дэн Нотт для CoinDesk. Другие изображения с подписями.

Jameson Lopp

Джеймсон Лопп — технический директор и соучредитель Casa, сервиса самообслуживания. Шифропанк, чья цель — создание Технологии , расширяющей возможности отдельных лиц, он занимается созданием Bitcoin кошельков с мультиподписью с 2015 года. До основания Casa он был ведущим инженером инфраструктуры в BitGo. Он является основателем группы специальных интересов Bitcoin Mensa, встречи Triangle Blockchain and Business и нескольких проектов Bitcoin с открытым исходным кодом. Все это время он работал над тем, чтобы обучать других тому, чему он научился на собственном горьком опыте, создавая надежное программное обеспечение, способное противостоять как противникам, так и неискушенным конечным пользователям.

Jameson Lopp