差点无法维持2100万总量:谁该为比特币漏洞负责
【摘要】随着社区成员将这个藏匿两年之久,甚至可能导致比特币“超发2100万”的bug修复后,开发者开始思考:有办法防止这样一个严重的bug再次发生吗?
震惊,是自从上周发现并修复比特币最严重的漏洞以来,比特币社区的普遍情绪。
有报道称,这个漏洞可以被用来关闭一部分比特币网络。还有消息称,这一漏洞属于拒绝服务式漏洞,如果被人利用,攻击者可用于攻击节点,在最坏的情况下,它可暂时造成比特币网络崩溃。有运行挖矿硬件并处理比特币网络交易的矿工,甚至可能通过双花交易的方式来利用这一漏洞。
更夸张的是,随着事件发展,该漏洞甚至能被利用来创建更高的区块,意味着比特币将超过2100万枚。一旦实现,将导致比特币供应膨胀并贬值。
目前,由于漏洞影响广泛,开发人员决定,将漏洞修复细节全盘保密。
然而,随着社区成员将这个藏匿两年之久,甚至可能导致比特币“超发2100万”的bug修复后,开发者开始思考:有办法防止这样一个严重的bug再次发生吗?
这个问题在发现bug之后的几天里,都没有任何正式的提议。但这并不是说这件事没有引发人们的讨论,即:比特币是如何工作的,以及比特币核心(bitcoin Core)类似的漏洞如何在未来被识别和解决。
这是一个至关重要的问题——如果一个恶意的参与者首先发现了这个漏洞会怎样?如果现在代码中还有其他隐藏的bug怎么办?还会发生什么灾难性的后果?
在这一点上,subreddit(reddit子版块)仲裁人“Theymos”敦促社区不要忘记这个问题。
他在一篇广为流传的帖子中,称这个bug为“无可否认的重大失败”,并补充道:
“如果比特币核心所有规则和做法都保持不变,那么类似的失败最终将不可避免地再次发生,而我们可能不那么幸运,会再次看到今天的结果。”
目前有一种观点认为,在全球参与者的开放网络的推动下,比特币核心现在拥有了史上最强大的代码审查流程。
现在,这个实现的开发者比以往任何时候都要多,其中测试者占了很多;据估计,测试约占代码库的20%。
社区的失职
尽管如此,开发者仍然认为,要确保数字货币顺利运行,还需要做更多的工作。
Theymos认为,一种方法是建立“更复杂”的测试,专门定位严重但很难找到bug的地方,比如上周测试的位置。“或许社区应该寄希望于派更多技术测试专家前往比特币核心,”他接着说,并补充道:
“目前很多社区对核心开发没有任何贡献。”
比特币的核心贡献者James Hilliard也强调了这一点,他认为开发者可以提高测试的“数量”和“质量”。不过,说起来容易做起来难。比特币的核心贡献者Greg Maxwell在他们的帖子中也认同测试是重要的,但是测试的质量和细节更加重要。
“将更多的精力投入到测试中对我们来说是一个长期的挑战,部分原因是测试并不比系统工程要容易。测试涉及的技能和能力并非每个人都具备。”
这种专业人才很难找。
Hilliard表示:“比特币的发展在很大程度上受到了代码审查的限制,没有多少人能够做到。”
然而,许多人认为责任不应该只落在开发者身上。一个共同的观点是,作为一个没有领导者的去中心项目,让比特币不出错是一个共同的责任。
“我的主要问题是,很多人指责特定的开发者。整个项目是开放的,没有‘仅限会员’,用户有责任审核代码,就像开发者积极贡献代码一样。” 比特币狂热爱好者Shinobimonkey表示。
比特币的核心维护者Wladimir van der Laan也表达了同样的观点,他在推特上写道:“错误的代码被合并了。是的,我们搞砸了,但是搞砸了的“我们”范围很宽。整个社区因为没有彻底审查一致意见的变化而导致了漏洞。
工程师约翰·纽伯里表示同意。尽管他没有编写此次代码漏洞,但他辩称,作为比特币世界的一名开发者,他也是导致这个漏洞的一员,因为他没有仔细检查代码。
他甚至说,他认为有些代码看起来很可笑。然而,他觉得其他人已经检查过了。
“我没有亲自去验证,而是相信那些比我更聪明、更聪明的人都有自己的答案。我想当然地认为是别人做了检查。”
责任分散效应
所谓“责任分散效应”是指,如果某个个体被要求单独完成任务,责任感就会很强,会作出积极反应;但如果要求一个群体共同完成任务,群体中的每个个体的责任感就会很弱。
会出现以上情况的原因为,前者需要独立承担责任,后者则期望别人多承担点责任。用简单的话来说就是:人多不负责,责任不落实。
比特币代码由全球开发者共同维护,尽管集结了无数比特币爱好者的结晶,但这种去中心化管理容易出现另一个局面:大家都会认为“一段看起来有问题的代码也许被很多比我更厉害的人检查过了,我为什么要再自讨没趣呢?”继而造成一种"集体冷漠"的现象。
在著名的“安全、效率、去中心化”铁三角中,比特币社区该何去何从呢?
多个比特币核心
如何避免此类漏洞再度发生,在社区中引发热烈探讨。
“比特币以前也有漏洞,以后还会有漏洞。这就是个软件,这根本没什么大惊小怪的。”Blockstream公司的COO Samson Mow在推特上说。
继承了上述观点,还有另一个主流看法。
今天的比特币的主要软件,比特币核心,由95%的比特币节点运行。(这是根据一项统计数据得出的——有趣的是,没有办法看到每个比特币节点,因为有些节点为了隐私,不会向网络的其他节点宣布它们的存在)
因此,这个想法是创造更多“核心”来实现比特币软件运行。这样的话,如果一个实现有毁灭性的bug导致网络崩溃,那么其他实现仍然可以运行,从而保持比特币作为一个整体运行。
在某种程度上,这种做法已经存在。目前比特币有一些不太有名的实现,如Bitcoin Knots和Btcd。在其它加密货币中,这种做法也这正在成为常态。例如,以太坊有两个主要的实现,geth和parity,每一个都可以供任何运行该软件的人使用。
尽管如此,许多比特币开发者担心,添加多个实现可能会带来比上周的漏洞更严重的问题。
“许多人没有意识到的是,让人们运行不同的实现,使得攻击者更容易划分网络,”比特币的核心贡献者Andrew Chow在一场概述利弊的对话中表示。
当然,开发者并未就此问题达成一致。
当他说:
“我不知道怎样才能防止这种情况再次发生,但我觉得如果社区仅因为此次漏洞没有造成危机而不会理会,绝对是一种错误。”