上周,比特币现金核心开发组Bitcoin ABC发推感谢了一名发现了BCH漏洞的技术人员,并表示这名技术人员在自己的披露文章中表述属实。
Bitcoin ABC推特中提及的人是一个身份有些尴尬的人,这个人叫Cory Fields,是麻省理工学院媒体实验室数字货币计划中的一员,同时他也是一名比特币的核心开发人员(自称)。
如果比特币的开发人员发现了BCH的技术漏洞会怎么样?会铺天盖地的宣传,借机打压BCH?还是愿意默默的向开发组提交漏洞?我以为会是前者,没想到主人公选择了后者。
在Cory Fields的文章中,我们能了解到,他发现BCH漏洞的时间是2018年4月25日,它将自己发现的漏洞称为SIGHASH_BUG,简而言之就是,一部分交易签名验证代码被重写,但新代码省略了对签名类型中特别定位的严格检查。这一漏洞允许特定的交易将BCH区块链分成两个不兼容的链。
发现BUG的过程
Cory Fields有着隔段时间查看项目变更的习惯,因为比特币现金代码与比特币有相同之处,所以他也会经常查看Bitcoin ABC的变更日志。漏洞被发现的那天,在查看Bitcoin ABC的变更日志中,他注意到最重要的交易验证之一已被重构,但是整体的变化却不多,他对背后的进程推理感到好奇,另外该更新只有两个审核人,时间也只有一周。他觉得大型重构是常见的,但是修改加密货币的验证码非常危险,因为很容易就会引进一个链式分裂错误的威胁。所以他就去看了一下代码变更情况,然后花了不到10分钟找到了SIGHASH_BUG。
匿名提交BUG的原因
Cory Fields在文章中解释了自己为什么会选择匿名向开发组提交BUG的原因,主要有两方面,第一个是考虑到自己的人身安全,因为如果实名公开的话,会给BCH造成巨大损失,而BCH一旦被盗,自己的嫌疑是最大的;向开发组提交代码则是出于技术人员之间的惺惺相惜,他认为无论是比特币还是比特币现金都是世界最有价值的加密货币,其代码的更新维护工作是重要的,也是辛苦的,自己所维护的比特币如果BUG被别人发现,自己最期待的事情是什么,也是希望发现漏洞的人能主动提交BUG。
提交过程不顺畅
Cory Fields发现漏洞后及时的进行了提交,但是提交的过程却不顺畅。代码出现BUG在技术员眼中是一件很常见的事,所以每个项目都会有负责任披露政策,提交也是按照该项目的规则,可遗憾的是,Bitcoin ABC网站和代码库中没有这一块的内容。之后,他选择向具体的开发人员通过加密方式传递信息,不过他再一次碰壁,因为他在公共PGP密钥服务器上没有找到开发组任何成员的密钥。最后是在Bitcoin ABC的BUG追踪器上面提交了两次,等了6个小时后,终于等来了开发组的回复。
暴露出的一些问题
Bitcoin ABC版本并非完美无暇,也存在一些缺陷和不足
BCH开发组Bitcoin ABC缺少一套行之有效的BUG反馈机制
Bitcoin ABC缺乏代码审核人员和可用资金
后续
虽然提交的过程不顺畅,但BUG解决的速度还是很快的。在Cory Fields提交后,开发组成员及时的进行了处理,而且在2018年5月7日进行了公开披露(https://www.bitcoinabc.org/2018-05-07-incident-report/)。在公开信中,他们对当时还是匿名的Cory Fields表示了感谢,并表示将采取若干行动以防止此类事件的再次发生,在未来出现紧急问题时减少总体响应时间。此外,开发组也会与行业参与者共同讨论建立正式的BUG赏金系统。