开发者Jameson Lopp:谁在控制着Bitcoin Core

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

区块链在扩容之战期间一直被诟病过于中心化,甚至是垄断独裁,最近开发者JamesonLopp发了一篇文章《谁在控制BitocinCore》想为BitcoinCore正名。文章篇幅很长,先上他的结论:没有人控制着比特币。没人控制着比特币在开发上的聚焦点(focalpoint,博弈论中人们在没有沟通的情况下的选择倾向)。谁在控制着BitcoinCore?区块链仓库的权力控制在谁手中这个问题反复出现。比特币协议聚焦点的控制权多年来一直是掌握在各个不同团体手中,但我认为这个问题本身是在扰乱视听,所以本文试图解释BitcoinCore是如何运作以及比特币协议是如何演化。BitcoinCore的历史BitcoinCore是比特币协议开发的聚焦点,并不是一个指挥和控制点。一个聚焦点消失,又会出现一个新的聚焦点。BitcoinCore所依托的技术交流平台(目前是Github仓库)只是出于便利。实际上,我们见证了比特币开发的聚焦点在平台甚至是名字上发生的转移。2009年初,比特币项目的源代码只是一个托管在SourceForge上的RAR文件。早期的开发者通过邮件与中本聪交换代码补丁。2009年10月30日,早期的比特币开发者Sirius(MarttiMalmi)在SourceForge上为了比特币创建了一个Subversion仓库。2011年,比特币项目从SourceForge迁移到GitHub。2014年,比特币项目改名为BitcoinCore。谁也不信任区块链维护者的账户有权把代码合并到主分支,但是这更像是一个防御功能,而不是权力地位。如果所有人都可以把代码合并入主分支,很快就会变成“人多手杂”的局面。BitcoinCore遵循最小特权原则(principlesofleastprivilege),任何人想要滥用权力,都会被轻易推翻。从对立的角度来看,GitHub是无法信任的。GitHub员工可能会在未经同意的情况下往仓库注入恶意的代码。但是,GitHub的攻击者却不太可能破解BitcoinCore维护者的PGP私钥。所有的合并提交都必须有可信任PGP密钥的签名,BitcoinCore有一个持续集成的系统,检查每个提交的PGP密钥。虽然我们知道这些密钥掌握在谁的手里,但这也不是绝对安全的,因为密钥可能会被偷或破解。因此,提交(commit)需要用密钥进行签名也不是个完美的安全方案,他们只是加大攻击者随意添加代码的难度。比特币王国的钥匙截至撰写本文的时间,这些可信任的PGP公钥有:71A3B16735405025D447E8F274810B012346C9A6133EAC179436F14A5CF1B794860FEB804E66932032EE5C4C3FA15CCADB46ABE529D4BCB6416F53ECB8B3F1C0E58C15区块链这些密钥对应的五个人是:WladimirJ.vanderLaanlaanwj@protonmail.comPieterWuillepieter.wuille@gmail.comJonasSchnellidev@jonasschnelli.chMarcoFalkemarco.falke@tum.deSamuelDobsondobsonsa68@gmail.com这是不是意味着我们可以信任这五个人?并不完全是。密钥不是身份证明,这些密钥可能会落入他人之手。运行verify-commitspython脚本你可以确认的是:python3contrib/verify-commits/verify-commits.pyUsingverify-commitsdatafrombitcoin/contrib/verify-commitsAllTree-SHA512smatchedupto309bf16257b2395ce502017be627186b749ee749Thereisavalidpathfrom“HEAD”to82bcf405f6db1d55b684a1f63a4aabad376cdad7whereallcommitsaresigned!任何开发者都可以用verify-commits脚本进行检验。这个脚本会检验从20015年12月82bcf405提交之后所有提交的PGP签名。这个脚本会告诉你,从那时起到现在每一行改过的代码以及谁签过名。虽然维护者的密钥可能被偷或者做出流氓行为,但是这大大减小了攻击面。那么这些维护者是谁,以及他们是如何成为维护者的呢?区块链代码的完整性并不只是依靠于少数几个加密密钥,还有多层安全防护措施,提供深度的防御:PullRequest的安全性1-任何人都可以通过PullRequest(简称PR,提交合并代码的请求)提出代码更改意见,以完善软件。2-开发者审查所有PR,确保它们是无害的,任何人都可以随意审查PR并提供反馈。为比特币代码做贡献,没有任何门槛或是入门测试。如果一个PR没有人提出合理的反对意见,维护者就会进行合并。区块链,保证没有压入未经签名的提交(commit)到仓库。4-合并提交可选择通过OpenTimestamps加盖时间戳。5-TravisContinuousIntegration系统通常会运行此脚本检查gittree(历史)的完整性并验证主分支里的所有提交都由可信任密钥进行过签名。6-所有人都可以运行这个脚本验证2015年12月之后所有合并提交的PGP签名。我在写下这篇文章的时候在笔记本电脑上运行过一次,共花了25分钟。版本的安全性1-Gitian确定性构建系统由多个开发者独立运行,目标都是创建相同的二进制文件,如果有人编译了一个与其他开发者不匹配的编译版本,说明引入了不确定性,那么就不会直接发布最终版本。开发者会查看出错的地方,进行修复,然后构建一个候选版本。成功编译出确定性的版本后,开发者会对生成的二进制文件进行签名,保证二进制文件和工具链不会被篡改且使用的是相同的源代码。这个方法移除了构建和贡献过程中的单点故障。2-一旦成功完成了Gitian编译版本并且得到构建者的签名,BitcoinCore维护者就用PGP签一个包含各个编译版本SHA256哈希值的信息。如果你决定运行区块链预编的二进制,你可以下载并查看其哈希值,然后用签名版本信息的哈希值验证其真实性。3-以上所有信息都是开源的和可审查的,任何懂技术的人都可以查。4-最后,即使通过了以上所有的质量和完整性检查,提交到BitcoinCore并最终合并到一个版本里的代码也不是由任何中心化的实体部署到网络节点。相反,每个节点的运行者都必须有意识地决定是否更新他们运行的代码。BitcoinCore特意没有添加自动更新的功能,因为这样可能会使用户运行到他们没有明确选择过的代码。尽管BitcoinCore项目有这么多的安全措施,这些也都不是完美的,理论上都有可能会被攻破。BitcoinCore代码完整性的最后一道防线和其他开源项目一样:时刻保持警惕。越多双眼睛盯着BitcoinCore的代码,恶意或有缺陷的代码写入比特币版本软件的可能性越低。代码覆盖率BitcoinCore有大量的测试代码。有一个针对每一个PR运行的集成测试套件和一个每晚都在主分支上运行的扩展测试套件。你可以以下方式自己查验代码的覆盖率:区块链仓库。2-从源代码安装构建所需的依赖项3-运行这些命令4-审查./total_coverage/index.html的报告另外,你还可以查看LCOV生成的代码覆盖率报告。代码覆盖率越高,说明代码按预期运行的确定性越高。测试非常重要,尤其是在进行复杂更改的时候,开发者有时候需要进行变异测试(注:一种在细节方面改进程序源代码的软件测试方法)。GregMaxwell曾在讨论0.15版本的时候对此发表过评论:“测试是测试软件,但是什么是测试的测试?要进行测试的测试,你就必须破坏软件。——GregMaxwell”自由市场竞争BitMEX曾发表过一篇文章《CompetingwithBitcoinCore》概述了比特币实现的生态。目前有十几个比特币实现,甚至还会更多“相互竞争的网络”实现。区块链这就是开源的自由之处,如果你不满意BitcoinCore项目,你可以随意启动自己的项目。你可以从头开始搭建或者fork比特币Core的软件。目前有96%的比特币节点在运行某个版本的Core软件。为什么会出现这样的情况?如果转换到其他软件实现所需的工作量这么小,为什么会出现BitcoinCore几乎垄断的局面?毕竟,其他很多实现都提供了与BitcoinCore可兼容的或者至少是非常相似的RPCAPI。我相信这是BitcoinCore成为开发聚焦点的结果。它背后有开发人才和开发时间作为支撑,也就是说BitcoinCore项目产生代码往往拥有最好的性能、最稳健,以及最安全。涉及到钱的管理,节点运行者不会想要运行排名第二的软件。另外,考虑到这是个共识软件,比特币协议不具有,也可以说无法有,一个正式的规范,因为没有人有权威写出这样的规范,使用聚焦点实现会更安全,因为你与网络其他大部分节点会拥有更好的错误兼容性。谁是Core开发者?不熟悉Core开发程序的人从外部看可能会认为Core是一个单一的实体。实际远非如此。Core贡献者之间经常会产生分歧,即使是最多产的贡献者,也有很多代码没有合并到比特币代码库。如果你读过Core贡献指南,你就知道他们是相当松散的,这个程序最恰当的说法是“大致共识”。区块链维护者会考虑一个补丁是否符合一般原则;是否符合最低的纳入标准;以及会判断贡献者们的普遍共识。谁是比特币Core的维护者?他们是那些在一段时间内做出高质量的贡献,并在项目里积累了足够多社会资本的人。当现有团队的维护者们认为,某个贡献者在一方面能力突出,可靠且具有积极性,可以胜任维护者的工作,他们可以授予该贡献者的Github账户提交(commit)的权限。而首席维护者负责监督项目的方方面面,并负责协调发布新的版本。这么多年来,共有三位首席维护者,他们分别是:中本聪(SatoshiNakamoto):2009/01/03-2011/02/23加文·安德烈森(GavinAndresen):2011/02/23-2014/04/07WladimirvanderLaan:2014/04/07-至今比特币Core维护者常被称为清洁工,因为维护者实际上并没有权利做出与贡献者或用户的共识相违背的决策。但是,这个角色因为生态外界的过度关注相当累人。例如,GregoryMaxwell在2017年出于个人原因放弃了维护者的身份,很有可能就是因为他在扩容期间承受的公众压力。Wladimir写了一篇文章谈到了作为Core维护者的压力以及为什么移除加文的提交权限。同样的,JeffGarzik也被移出开发组,他已有两年没有为Core做贡献。保留他Github账户的权限对项目没有任何好处,只会构成安全风险,并且违背了Wladimir在他的文章中提到的最小特权原则。区块链是个技术官僚组织或是个象牙塔,新人很难加入。但是,如果你与贡献者交谈过就会发现,实际并非如此。虽然,多年来只有十几个人有提交权限,但是,数百位开发者做了贡献。我自己也做了一些小的

1 / 15
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功