Обмен электронных валют по самому выгодному курсу!
 


Kurbetsoft
Доступно в Google PlayКто контролирует Bitcoin Core

Вопрос о том, кто контролирует возможность добавления кода в GitHub-репозиторий Bitcoin Core поднимается снова и снова, с завидной периодичностью. На протяжении многих лет возможность добавления кода упоминалась различными сторонами как «центральная точка контроля» протокола Биткойн, но я убежден, что такая постановка вопроса представляет собой ложный след, который может дать развитие авторитарной перспективе — а эта модель не применима к Биткойну. Для непрофессионала, конечно, не очевидно, почему это так, поэтому цель этой статьи — объяснить, как работает Bitcoin Core и, на более высоком уровне, как развивается протокол Биткойн как таковой.

История Bitcoin Core

Bitcoin Core — это, скорее, точка фокуса разработки протокола Биткойн, чем точка управления и контроля. Если она по какой-либо причине прекратит свое существование, возникнет новая точка фокуса; техническая коммуникационная платформа, на которой она поставлена (в настоящее время — репозиторий GitHub), всего лишь вопрос удобства, а не целостности проекта или его определения. Фактически, мы уже видели в прошлом, как точка фокуса разработки Биткойна меняла платформы и даже имена!

Не доверяй никому

Хотя на организационном уровне существуют несколько аккаунтов GitHub «майнтайнеров», наделённых полномочиями добавлять код в основную ветвь, это скорее вспомогательная функция, чем должность, наделяющая властью. Если бы кто угодно мог внедрять код в «мастер»-ветвь, то это очень быстро превратилось бы в сценарий «слишком много хозяек на кухне». Bitcoin Core следует принципам наименьших привилегий, так чтобы любые полномочия, выданные отдельным лицам, было бы легко отобрать, если ими начнут злоупотреблять.

С точки зрения безопасности, GitHub — система с отсутствием доверия. Любое количество сотрудников проекта в GitHub может использовать свои административные привилегии для добавления кода в репозиторий без согласия мэйнтэйнеров. Но также, маловероятно, что злоумышленник на GitHub сможет скомпрометировать PGP-ключ мэйнтэйнера Bitcoin Core.

Вместо того, чтобы полагаться на целостность кода в зависимости от политики аккаунтов на GitHub, Bitcoin Core использует систему непрерывной интеграции, проверяющую доверенные ключи PGP, которые должны подписывать каждое добавление кода (коммит). Хотя эти ключи связаны с известными лицами, все-таки небезопасно предполагать, что так будет всегда — ключ может быть скомпрометирован, и мы об этом не узнаем, если подлинный владелец ключа не уведомит других мэйнтэйнеров. Таким образом, ключи для добавления кода также не гарантируют идеальную защиту; они просто затрудняют атакующему ввод произвольного кода.

Ключи от царства

На момент написания статьи, доверенными отпечатками PGP являются:

71A3B16735405025D447E8F274810B012346C9A6
133EAC179436F14A5CF1B794860FEB804E669320
32EE5C4C3FA15CCADB46ABE529D4BCB6416F53EC
B8B3F1C0E58C15DB6A81D30C3648A882F4316B9B
CA03882CB1FC067B5D3ACFE4D300116E1C875A3D

Эти ключи зарегистрированы на:

Wladimir J. van der Laan <laanwj@protonmail.com>
Pieter Wuille <
pieter.wuille@gmail.com>
Jonas Schnelli <
dev@jonasschnelli.ch>
Marco Falke <
marco.falke@tum.de>
Samuel Dobson <
dobsonsa68@gmail.com>

Значит ли это, что мы доверяем этим пяти людям? Не совсем. Ключи не являются доказательством личности — эти ключи потенциально могут попасть в руки других людей. Какие гарантии вам действительно даёт запуск скрипта verify-commits на Питоне?

python3 contrib/verify-commits/verify-commits.py
Using verify-commits data from bitcoin/contrib/verify-commits
All Tree-SHA512s matched up to 309bf16257b2395ce502017be627186b749ee749
There is a valid path from “HEAD” to 82bcf405f6db1d55b684a1f63a4aabad376cdad7 where all commits are signed!

Скрипт verify-commits  выполняет проверку целостности. Любой разработчик может запустить его на своём компьютере. При выполнении, скрипт проверяет подпись PGP для каждого коммита добавления кода с момента коммита 82bcf405… в декабре 2015 года — более 3400 добавлений на момент написания. Если скрипт завершается успешно, он говорит, что каждая строка кода, которая была изменена с того момента, прошла через процесс разработки Bitcoin Core и была «подписана» кем-то с ключом мэйнтэйнера. Хотя это не является железной гарантией того, что никто не ввел вредоносный код (мэйнтэйнер может стать злонамеренным или у него могут быть украдены ключи), это значительно снижает вероятность атаки. Что такое мэйнтэйнеры и как они получили эту роль? Мы углубимся в это чуть позже.

Многоуровневая безопасность

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

Безопасность пул реквестов

  1. Совершенно любой человек может свободно предлагать изменения кода для улучшения программного обеспечения, открывая запрос в пул реквест в основную ветку на bitcoin/bitcoin.
  2. Разработчики проверяют пул реквесты, чтобы убедиться, что они не являются вредоносными. Любой желающий может свободно просматривать пул реквесты и предоставлять обратную связь — нет никаких привратников или вступительных экзаменов для участия в Bitcoin Core. Если пул реквест доходит до того, что не имеется разумных возражений против его добавления, мэйнтэйнер выполняет коммит (слияние).
  3. Основные майнтайнеры установили это скрипт для гарантии, что не смогут разместить неподписанные коммиты в репозиторий.
  4. Коммитам добавления кода опционально проставляются метки времени через OpenTimestamps.
  5. “Система непрерывной интеграции Travis” (Travis Continuous Integration system) регулярно запускает этот скрипт для проверки целостности дерева git (истории) и для проверки того, что все коммиты в основной ветви были подписаны одним из доверенных ключей PGP.
  6. Любой желающий может запустить этот скрипт для проверки подписей PGP во всех коммитах, начиная с декабря 2015 года. Я запустил его во время написания этой статьи, и для его выполнения на моем ноутбуке потребовалось 25 минут.

Безопасность релизов

  1. Детерминистические системы сборки Gitian запускаются независимо несколькими разработчиками с целью создания идентичных бинарников. Если кому-то удаётся создать сборку, которая не соответствует сборкам других разработчиков, это признак того, что сборка недетерминированная, поэтому окончательный релиз не случится. Если обнаруживается не-детерминизм, разработчики отслеживают, что пошло не так, исправляют это, затем собирают другой релиз-кандидат. Как только детерминированная сборка прошла успешно, разработчики подписывают получившиеся бинарники, гарантируя, что бинарники и тулчейн не были подделаны, и что использовался один и тот же источник. Этот метод снимает с процесса сборки и распространения возможность стать единой точкой отказа. Любой пользователь, владеющий необходимыми техническими навыками, может запустить свою собственную систему сборки; инструкции здесь.
  2. Как только сборки Gitian завершены успешно и бинарники подписаны сборщиками, один из мэйнтэйнеров Bitcoin Core подписывает сообщение PGP с хэшами SHA256 каждой сборки. Если вы решите запустить предварительно собранный бинарник, можете проверить его хэш после загрузки, а затем проверить подлинность подписанного сообщения о релизе с помощью хешей. Инструкции для этого можно найти здесь.
  3. Всё вышеперечисленное — открытый исходный код и может быть проверено любым, кто обладает навыками и желанием проделать это.
  4. Наконец, даже после прохождения всех вышеперечисленных проверок качества и целостности, код, который вносится в Bitcoin Core и в конечном итоге превращается в релиз, не запускается в сети узлов какой-либо централизованной организацией. Скорее, каждый оператор узла должен принять осознанное решение обновить код, который он запускает. Bitcoin Core намеренно не включает в себя функцию автообновления, так как автообновление потенциально может заставить пользователей запустить код, который они не выбирали самостоятельно.

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

Охват кода

В Bitcoin Core много кода для тестирования. Существует набор интеграционных тестов, который работает с каждым PR (pull request), и расширенный набор тестов, который каждую ночь запускается на мастере.

Вы можете самостоятельно проверить покрытие кода тестами:

  1. Склонируйте репозиторий Bitcoin Core на GitHub;
  2. Установите необходимые зависимости для сборки из исходного кода;
  3. Запустите эти команды;
  4. Просмотрите отчет на ./total_coverage/index.html .

Также, вы можете увидеть отчет о покрытии кода, предоставленный здесь Марко Фальке.

Отчёт о покрытии кода тестами
Такой высокий уровень покрытия тестами означает высокую уверенность в том, что код функционирует как задумано.

Тестирование имеет большое значение, когда речь идет о программном обеспечении с критически важным консенсусом. Для особо сложных изменений разработчики иногда проводят кропотливое мутационное тестирование: то есть они проверяют сами тесты, намеренно взламывая код и проверяя, что тесты провалились, как и ожидалось. Грег Максвелл (Greg Maxwell) дал некоторое представление об этом процессе при обсуждении релиза 0.15:

“Тест — это тест программного обеспечения, но что тестирует этот тест? Программное обеспечение. Чтобы проверить тест, вы должны взломать программное обеспечение” — Грег Максвелл

Конкуренция свободного рынка

BitMEX написали отличную статью об экосистеме имплементаций Биткойна. Существует более десятка различных имплементаций, совместимых с сетью Биткойн, и еще больше имплементаций «конкурирующих» сетей. Это свобода открытого исходного кода — любой, кто недоволен усилиями проекта Bitcoin Core, может начать свой собственный проект. Они могут сделать это с нуля, или же «форкнуть» программное обеспечение Core.

На момент написания статьи 96% доступных узлов Биткойна были запущены на какой-либо версии Bitcoin Core. Почему это так? Как может Bitcoin Core иметь почти монопольный статус в сети узлов, если можно с минимальными усилиями перейти на программную имплементацию кого-то другого? В конце концов, многие другие имплементации предоставляют RPC API-интерфейсы, которые совместимы или, по крайней мере, очень похожи на Bitcoin Core.

Я считаю это результатом того, что Bitcoin Core — точка фокуса разработки. В этот проект вложены на порядки больше времени и поддерживающего его таланта, что означает, что код, созданный проектом Bitcoin Core, имеет тенденцию быть наиболее эффективным, надежным и безопасным. Когда речь идёт об управлении деньгами, операторы узлов не хотят запускать программное обеспечение второго сорта.

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

Кто такие разработчики Core?

Те, кто не знаком с процессом разработки Bitcoin Core, при взгляде на проект со стороны могут принять Core за монолитную организацию. Но такое мнение далеко от реальности! Между основными участниками часто возникают разногласия, и даже самые усердные участники написали много кода, который никогда не был добавлен в проект. Если вы прочитаете правила участия в проекте, то можете заметить, что они довольно расплывчаты — процесс лучше всего охарактеризовать как «грубый консенсус».

Мэйнтэйнеры примут во внимание, соответствует ли патч общим принципам проекта; соответствует ли минимальным стандартам для включения; и вынесут оценку консенсусу в целом участников проекта.

Кто же такие мэйнтэйнеры Bitcoin Core? Они участники, накопившие в рамках проекта достаточный социальный капитал, внося качественный вклад (то есть, закомитив полезный код) в течение определенного периода времени. Когда существующая группа мэйнтэйнеров считает, что будет разумно наделить этой ролью участника, проявившего компетентность, надежность и мотивацию в определенной области, они могут предоставить коммит-доступ аккаунту этого человека на GitHub. Роль ведущего мэйнтэйнера предназначена для тех, кто рассматривает все аспекты проекта и отвечает за координацию релизов. За прошедшие годы роль добровольно передавалась следующим образом:

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

Например, Грегори Максвелл оставил свою должность мэйнтэйнера в 2017 году по личным причинам; вероятно, из-за общественного давления, которое он испытал во время дебатов о масштабировании. Владимир написал вдумчивый пост о стрессе, связанном с поддержкой Core, и о том, почему в свое время было целесообразным лишить Гавина доступа к коммитам, что огорчило многих людей:

Точно так же, когда Джефф Гарзик (Jeff Garzik) был исключен из организации на GitHub, он и другие были расстроены этим; но он не участвовал в Core в течение двух лет. Оставление его аккаунту на GitHub прав на коммиты в репозиторий не принесло бы пользы проекту — оно только создавало угрозу безопасности и нарушало принцип наименьших привилегий, на который ссылался Владимир в своем посте.

Другие могут взглянуть на Core и подумать, что это царство технократии, где присоединение новых участников затруднено. Но если поговорить с участниками, то вы обнаружите, что это не так. Хотя, за все эти годы лишь у тринадцати человек был коммит-доступ, сотни разработчиков внесли свой вклад. Я сам сделал несколько небольших коммитов; хотя я и не считаю себя «Core разработчиком» — технически я им являюсь. Никто не может помешать вам внести свой вклад!

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

Даже без «переворота» как такового, если спорные изменения каким-то образом попали бы в Core, нашлись бы разработчики, которые форкнули бы софт, удалили спорные изменения и выложили новую версию в доступ для пользователей. В качестве примера, именно это и произошло, когда Амори Сэшэ (Amaury Sechet) для создания Bitcoin ABC форкнул Bitcoin Core и удалил функциональность Segregated Witness. В качестве альтернативы, если Core отклоняет предложенные изменения, которые требуются некоторым людям, разработчики могут форкнуть репозиторий и добавить эти изменения. Это случалось много раз, например, когда:

  • Mike Hearn форкнул Core чтобы создать Bitcoin XT;
  • Andrew Stone форкнул Core чтобы создать Bitcoin Unlimited;
  • Jeff Garzik форкнул Core чтобы создать BTC1.

Форкнуть код — очень просто. Сместить центр фокуса разработки Биткойн сложно —необходимо убедить участников, что им будет лучше потратить время на другой проект.

Также сложно убедить многих, что пользователи не принимают слепо изменения в Bitcoin Core — это может быть самодоказывающимся убеждением, потому что если пользователи не участвуют в процессе консенсуса, осознавая доступные варианты, тогда они отдают часть своих полномочий разработчикам. Однако, власть пользователей была использована во время движения UASF (User Activated Soft Fork) 2017 года. Анонимный разработчик, использующий псевдоним shaolinfry, предложил BIP 148, который заставил бы майнеров активировать функцию Segregated Witness на высоте блока примерно в районе 1 августа 2017. Однако, BIP 148 оказался слишком спорным, чтобы быть принятым в Bitcoin Core, поэтому shaolinfry форкнул Core и опубликовал программное обеспечение «Bitcoin UASF». Эта имплементация привлекла нетривиальное количество пользователей и, похоже, создала достаточное давление, чтобы убедить майнеров принять BIP 91 для активации форка до истечения срока BIP148.

На мой взгляд, лучшие участники Bitcoin Core — это те, кто практикует “экстремальное владение” (extreme ownership). Показательный пример — хотя John Newbery и не был автором кода, который содержал этот конкретный баг консенсуса, он чувствует ответственность за то, что не предотвратил добавление этого кода посредством тщательного анализа и что не обнаружил ошибку позже, при написании тестов:

Мы все — Сатоши.

Участие в Bitcoin Core

Начать участвовать в Core может показаться пугающим, хотя есть много ресурсов, которые будут в помощь целеустремлённым разработчикам. Инструкции для участия можно найти здесь, хотя, возможно, вам захочется начать с упрощённого введения Jimmy Song:

Разработчик Core Eric Lombrozo также написал статью о том, как происходят изменения в репозитории Core:

Alex B. написал отличную статью о философии развития Биткойна — статья ниже может сэкономить массу времени любому, кто всерьёз хочет стать участником процесса разработки:

Здесь может оказаться полезным конкретный пример — при написании этой статьи я столкнулся с трудностями при попытке запустить на моем компьютере скрипт verify-commits.py для проверки целостности истории коммитов на GitHub. Чтобы избавить будущих разработчиков от решения этих проблем, я открыл пул реквест для улучшения документации. Как вы можете видеть из истории PR, четыре разных разработчика внесли свои предложения о том, как улучшить мой запрос. Они варьировались от использования разного вики-маркапа до упрощенной команды bash и до нового параметра, который можно использовать в скрипте verify-commits.py.

Я согласился с тем, что все предложения имеют смысл, поэтому я включил их в свой код и обновил пул реквест. В этот момент разработчики, которые участвовали в просмотре кода, признали, что считают пул реквест приемлемым, и майнтаинер Марко Фальке пометил его для включения в релиз 0.18. После того, как прошло ещё несколько дней без каких-либо возражений со стороны разработчиков, код был добавлен в Core мэйнтэйнером Сэмюэлем Добсоном (Samuel Dobson).

Кто контролирует Биткойн?

Как я часто говорил на протяжении многих лет, практически невозможно полностью понять Биткойн как систему. Определение (контроль) Биткойн-протокола подобно определению языка. Языки появляются спонтанно; согласие о значении слов приходит органически, а не продиктовано словарями. Как словари описывают явление языка, а не определяют его, так и имплементация Биткойна описывает язык Биткойна с помощью кода. Никто не обязан соглашаться с определением данного слова в словаре, равно как и не вынужден соглашаться с кодом в данной конкретной имплементации Биткойна, запуская его.

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

Биткойн — это анархия: без правителей, но не без правил. Правила определяются и применяются индивидуальными участниками сети.

Хотя изменения в самом Биткойн-протоколе обычно вносятся через формальный процесс Bitcoin Improvement Proposal, даже это всего лишь рекомендуемая практика, и никого нельзя принудить следовать ей. Это просто более формализованный способ попытаться проводить изменения через процесс экспертной оценки и достижения консенсуса.

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

Никто не контролирует Биткойн.

Никто не контролирует точку фокуса разработки Биткойна.

Источник




[vkontakte] [facebook] [twitter] [odnoklassniki] [mail.ru] [livejournal]

Каталог сайтов