BitcoinБлокиДецентрализацияОбразование

Джеймсон Лопп: Кто Контролирует Bitcoin Core?

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

История Bitcoin Core

Кто Контролирует Bitcoin Core? Who controls bitcoin core translated russian bitcoin quest

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

В начале 2009 года, исходный код проекта Bitcoin Core являлся попросту файлом с расширением .rar, хранящимся на SourceForge. Ранние разработчики обменивались патчами для кода с самим Сатоши Накамото, используя… электронную почту.

30 Октября 2009 года, Сириус (Martti Malmi) создал репозиторий системы управления версиями для проекта Биткойн на SourceForge

В 2011, проект Биткойн мигрирует с SourceForge на GH

В 2014, проект Bitcoin был переименован в Bitcoin Core

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

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

Питер Тодд предупреждает, что даже GitHub нельзя доверять.

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

Вместо того, чтобы базировать целостность кода вне рамок аккаунта на GitHub, Bicoin Core имеет систему длительной интеграции, которая производит проверки доверенных 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 на python?

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) является тестом на целостность, который любой разработчик может запустить на своей машине. Во время выполнения, она проверяет целостность подписей в каждом смешении кода с момента 82bcf405… Мы имеем с декабря 2015 года более 3400 смешений кода. Если скрипт выполняется успешно, он сообщает нам о том, что каждая строка кода, которая была изменена с того момента, прошла процесс разработки Bitcoin Core, и была “подписана в печать” кем-то, кто обладает ключом администратора. Это, все же, не пуленепробиваемая гарантия, что кто-то не умудрился вставить вредоносный код (админ может решить обмануть всех или его ключ похитят), таким образом, уменьшается площадь атаки. Кто такие администраторы и как они получили такую роль? Мы к этому еще вернемся.

Многослойная безопасность

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

Безопасность Запросов на Включение Кода

1. Кто угодно свободно может предлалать изменения в код, создавая запрос на включение (pull request) в главной ветке в bitcoin/bitcoin.

2. Разработчики проверяют запросы чтобы убедиться, что содержащийся там код — не вредоносный для системы. Кто угодно может проверять код, а также предоставлять обратную связь – нет никакого сторожа, или входного экзамена, если дело доходит до внесения кода в Bitcoin Core. Если запрос на включение доходит до стадии, когда объективных причин его задерживать больше нет, администратор проводит ритуал включения предлагаемого кода в Ядро Магнуса. Ой простите, Биткойна.

3. Администраторы Ядра (Core) установили эту ловушку чтобы убедиться, что никто не отправит неподписанные правки в репозиторий.

4. Точки включения по выбору администраторов могут получить надежную временную метку (Через процедуру Open Timestamps).

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

6. Кто угодно желающий может запустить скрипт чтобы проверить PGP подписи на всех удовлетворенных запросах на включение, начиная с декабря 2015. Я запустил его, пока писал статью, и после 25 минут он выдал результат на моем ноутбуке.

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

1. Детерминистические системы построения в Gitian разрабатываются одновременно несколькими независимыми кодерами. Они стараются создавать идентичные бинарники. Если кто-то сможет создать билд, не совпадающий с билдом других разработчиков, это знак что был представлен образец не-детерминистический, и его релиза не произойдет. Если нет детерминизма, то разработчики выясняют, чем это вызвано, исправляют, и выпускают следующего кандидата на релиз (Release Candidate).

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

2. Как только билды Gitian успешно завершили проверку и были подписаны, администратор Bitcoin Core подпишет PGP сообщение с хешами SHA256 каждого билда. Если вы решите запустить созданную бинарку, лучше проверить ее хеш сначала. Инструкция как это сделать – здесь.

3. Все выше описанное является открытым исходным кодом и он может быть проверен полностью любым человеком со знаниями и желанием это совершить.

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

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

Покрытие Кода

Есть много кода, который можно тестировать в BC. Есть интеграционный модуль, работающий с PR, а также расширенный модуль, работающий по ночам в режиме Мастера.

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

1. Клонируя репозиторий Bitcoin Core на GitHub

2. Установив необходимые зависимости для построения из “исходников”

3. Запускаем эти команды

4. Смотрим отчет в директории ./total_coverage/index.html

А еще, вы можете посмотреть отчет о покрытии, который Марко Фалке хранит тут:

Кто Контролирует Bitcoin Core? Who controls bitcoin core translated russian bitcoin quest

Если вы имеете столь большой уровень проверки, вы получаете более высокий уровень уверенности в том, что код функционирует, как надо.

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

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

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

BitMex выдали ядовую статейку насчет экосисьтемы разных реализаций Биткойна. Уществует более дюжины разных совместимых версий кошелька, и даже больше таких реализаций, которые стремятся к поддержке “сетей конкурентов”. В этом состоит свобода открытого ПО – любой, кому не по вкусу деятельность Bitcoin Core, может создать свой собственный проект. Он может сделать это с нуля, или попросту форкнуться.

Competing with Bitcoin Core

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

Кто Контролирует Bitcoin Core? Who controls bitcoin core translated russian bitcoin quest
Распределение полных клиентов в сети Биткойн: Core как видим, доминирует.

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

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

Люди, не знакомые с процессом разработки Bitcoin Core, могут смотреть на проект снаружи и предполагать, что это монолитная группа. На самом деле это не так! Существуют постоянные несогласия между участниками Core, и даже самые плодотворные программисты написали огромное количество кода, никогда не попавшего в проект. Если вы почитаете инструкции по добавлению кода, то можете заметить, что они весьма малы – процесс может быть лучше всего описан как “жесткий консенсус”.

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

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

Играя роль в качестве администратора Bitcoin Core, человек обычно занимается работой мусорщика. Дело в том, что у администратора нет реальной власти принимать решения, которые совсем не понравились бы участникам, пользователям, майнерам, и прочим ролям. Так или иначе, роль может даже взимать с ее носителя «налоги» в виде постоянного внимания со стороны прессы и экосистемы в целом. Например, Грег Максвелл отказался от своей роли одного из высших администраторов “по личным причинам”, скорее всего – после сильного давления, испытанного им во время дебатов о размере блока. Владимир написал вдумчивый пост насчет стресса, который он испытывает будучи администратором Core, и почему было вполне целесообразно удалить Гэвина Андресена из числа администраторов, что огорчило множество людей. По правде сказать, его слова о том, что “Биткойну есть чему поучиться у банков”, говорят сами за себя – человека явно купили на определенном моменте развития Биткойна, но просчитались, так как все построено на сложных взаимоотношениях сразу нескольких человек.

И точно так, когда Джефф Гарзик был удален из организации GitHub, он и другие сильно расстраивались, однако он не делал никаких изменений кода Биткойна в течении двух лет. Оставляя его аккаунт с доступом высокого уровня, администраторы не прибавили бы проекту ценности – это лишь создавало бы риски безопасности, а также нарушало бы принцип последней привилегии, на который Владимир ссылался в своем последнем посте.

Другие могут видеть это так, что Core является кучкой технократов, живущих в башне из слоновой кости, мешающих новичкам присоединяться. Но если вы поговорите напрямую с участниками, то поймете, что о таком и речи не идет. В то время, когда всего дюжина людей имела высший админ-доступ на изменение, сотни разработчиков делали вклады. Я даже сам внес несколько мелких правок в код. Я себя не считаю при этом “разработчиком Bitcoin Core”, я ж технически уже таков.

Никто не сможет остановить вас, если захотите внести собственные предложения.

Твит Метт Коралло:

Твит Джон Ньюбери:

Твит Джефф Рейд:

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

Одной из самых сложных для понимания вещей для людей, для их мозгов, является тот факт что центр сообщения биткойна попросту не является структурой, определяемой аккаунтом Bitcoin Core на GitHub. Да, внутри Bitcoin Core имеется некоторая структура (она использует централизованные каналы связи для координации действий), проект сам по себе не является подконтрольным кому-то из участников – даже тем, у кого имеются повышенные полномочия в репозиториях на GitHub. Все таки, технически возможно – органиовать переворот и захватить репозиторий на Git, удалить текущих разработчиков, и даже наверное, продолжать продвигать брендовое имя “Bitcoin Core”, но в результате Bitcoin Core перестала бы быть центром сообщения для разработчиков. Разработчики, которые не согласились бы с действиями администраторов, попросту форкнули бы код и переместили свою работу в другой репозиторий, над которым незваные администраторы Bitcoin Core не имеют контроля.

Даже если представить “переворот” по существу, если противоречивое изменение каким-то образом все-таки добралось до Core, некоторые разработчики форкнут софт, удалят противоречивые изменения, и сделают его снова доступным для пользователей. Вы можете предполагать, что именно это и случилось когда Амаури Сечет (Amaury Sechet) форкнул Биткоин Core и удалил оттуда функционал Segregated Witness, чтобы затем создать Bitcoin ABC. Еще вариант, если Core отклоняет предлагаемое изменение, разработчик может форкнуться, добавив в свой собственный форк нужное ему изменение. Заодно и проверит, насколько его поддерживает сообщество? Такое случалось уже много раз, например когда:

Форкать код – легко. Перемещение центра коммуникации Биткойна – тяжело. Вам нужно убедить участников, что их время расходовалось бы разумнее, если бы они вкладывались в другой проект.

Твит Джеймсон Лопп:

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

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

Анонимный разработчик биткойна shaolinfry предложил BIP148, который был слишком противоречивым, чтобы его включили в Bitcoin Core, тк что Shaolin форкнул Core чтобы добавить туда свой код UASF. Такая реализация софта получила сильные толчки в развитии, и создала достаточное давление чтобы убедить майнеров принять BIP91 и активировать форк перед окончанием срока активации BIP148.

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

Джон Ньюбери:

 

Вкладывая в Bitcoin Core

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

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

View story at Medium.com

Алекс Б, написал шикарную статью про философию, стояющую за разработкой Биткойна – любой кто хочет, может стать серьезным разработчиком, и спасти заодно тонну времени – просто прочитав ее:

View story at Medium.com

Специальный пример может быть полезным здесь – пока я писал эту статью, то столкнулся с рядом проблем, пока пытался запускать скрипт verify-commits.py на своей машине для того, чтобы проверить целостность истории внесения правок в код на GitHub. Для того, чтобы спасти разработчиков будущего от необходимости сталкиваться со всеми этими проблемами, я открыл запрос на включение, чтобы улучшить документацию. Как вы видите из истории изменений PR, 4 разных разработчика пришли с предложениями насчет того, как я бы мог улучшить мой запрос. Тут имелось ввиду как использование другой Wiki разметки, так и упрощенных bash команд в новом параметре, который мог бы быть использован в скрипте verify-commits.py. Я согласился, что все предложения имели смысл, так что я объединил их в мой код и выкатил обновленную версию для своего запроса. В тот миг, прям как в персидских сказках, разработчики, которые участвовали в проверке, сказали что все выглядит вполне прилично, и администратор Марко Фалк поставил мой запрос на добавление в релиз 0.18. По прошествии нескольких дней я так и не получил возражений от других разработчиков, и код был включен в Core администратором Сэмюэлем (Л джексо…) Добсоном.

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

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

Языки не управляются демократией, и Биткойн тоже. Вы может слышали, как люди разговаривают о майнерах, узлах, разработчиках, или пользователях “голосующих” за то или иное. Такого механизма, который смог бы заставить большинство голосов подмять под себя меньшинство голосовавших, чтобы заставить всех принять те или иные изменения, в Биткойне нет. Биткойн это анархия – без правителей, но не без правил. Правила определяются и используются каждым отдельным участником сети.

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

Как это сложно объяснять, так и понимать, но важен также факт ударостойкости Биткойна – если бы существовал единый центр контроля, также он стал бы единой точкой уязвимости, которая бы использовалась сильными организациями, которые испуганы успехом Биткойна. Да еще и, каждый оператор узла управляет собой так, что всегда проверяет наличие мошенников в сети. Такая модель безопасности является основанием для управления Биткойном снизу-вверх.

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

Никто не контролирует центр сообщения разработки кода.

Автор: Джеймсон Лопп


От переводчика: Никто не контролирует вашу судьбу, жизнь и решения. Зевс сговорился с Теслой против Человека. Анархия!

4 thoughts on “Джеймсон Лопп: Кто Контролирует Bitcoin Core?

  1. Стоит учитывать, что код без людей – просто код. Можно подумать, что действительно талантливые разработчики будут работать бесплатно, но, на практике, выходит иначе. Есть основные девелоперы, команда Core, и в основном код пилят они. И спонсируют их отнюдь не рядовые юзеры, а банкиры и крупные майнеры.

    «Питер Тодд предупреждает, что даже GitHub нельзя доверять». А Питеру Тодду можно доверять?

    «Анонимный разработчик биткойна shaolinfry предложил BIP148, который был слишком противоречивым, чтобы его включили в Bitcoin Core, тк что Shaolin форкнул Core чтобы добавить туда свой код UASF». Что связывает Питера Тодда и анонима Shaolinfry, он же BTCDrak, он же J.Dillon?

    Цитата от J.Dillon:
    «Старая ворона настоятельно советует вам подумать о рисках для себя и своей семьи и прекратить то, что вы делаете. Будьте осторожны».

    1. Я не понял ни чуя) Можно подробнее о цитате Джея Диллона? И чем плох Питер Тодд как декламатор?

      1. Это цитата из личной переписки между Диллоном и Тоддом. Вопрос: кто вы, если вы держите под контролем основных разработчиков Core, основных майнеров и основные крипто-биржи?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *