比特币最严重的漏洞是如何发现的?

区块链

574人已加入

描述

Bitcoin Unlimited是比特现金的主要客户之一,该公司的一名匿名开发者透露,他是如何在过去八年中发现比特币最严重的漏洞的。

作为证据,他发现了这个漏洞,Awemany时间戳了哈希(如图),并进一步与PGP密钥签署了协议,用于对比特币核心和其他项目进行负责的披露。我们会在下文详细引述有关部分:“我当时正在努力在Bitcoin Unlimited客户机上实现新的CHECKDATASIG/-VERIFY操作码,该操作码将在11月启动比特币(Cash)。我一直在研究这些工具的潜在的巧妙的用例,并且有动机去完成这项工作。

大约中午时分(9月17日,星期一),我注意到在ABC的签名运算和比特币无限的(BU)的数字运算方式上存在着很大的分歧。早些时候,我和BU团队达成了一致,我将把大部分CDS/-V文件从ABC移植过来,但我感到不堪重负。我的想法是:好吧,这是可行的,但这需要更多的分析,也需要更多的访客来评论。而且需要更长时间。叹气。同时,我在ABC代码库中偶然发现了这个注释:

//检查重复的输入 —注意这个检查很慢,所以我们在检查快中跳过它。

我的第一反应有点儿,呃,怎么回事?还在说那个评论吗?然后,我查找了ABC中CheckRegularTransaction的用法,它是在Core(核心)中重命名的CheckTransaction的变体(但是我当时不知道。我翻遍了代码,试图理解其中的逻辑。

我注意到,块验证跳过了这个测试,因为它被假定已经在内存池入口发生。我的下一个想法是有点下沉的感觉和一个‘啊哦,我真的希望ABC的人们已经考虑了记忆池和块传输之间的区别,并且这些是进入系统的独特方式。这里可能有问题!”然后我想出了一个测试这个的方法。我修补了一个ABC节点,使其在-regtest模式下即使被请求并连接了一个未匹配的和一个补丁的节点,也不中继交易,并创建一个带有重复输入的交易(上面的测试跳过了这个交易)。

哇!断言(),中止…

我打开了致deadalnix(BitcoinABC维护者)的电子邮件,开始想到:‘好吧,实际上,这些东西是从哪里来的,什么时候从哪里来的,他们把它引入到代码中,我们可能很幸运,但这还没有发布吗?’

然后我注意到这些东西是来自核心的。我已经写了一份披露报告,重新检查了核心是否也很脆弱。

再一次,哇!断言(),中止…

作为一个负责任的公民,我随后给Wladimir(比特币核心维护者)、sickpig(Bitcoin Unlimited开发者)和其他一些人写了一封加密的公开邮件,附上了ABC和核心补丁的一个变体来利用这个问题来揭露我的信息。”

根据以上,只要看一眼代码就能发现这个错误,BU开发者似乎从看12PM到在2018年9月17日下午14:47PM发邮件给其他开发者。

因此,一系列事件似乎表明,取消双重支出检查是一件相当大的事情,而且几乎是立竿见影。

即使是一个非程序员,你可能也会想到一些东西,这就提出了一个问题:当5个比特币核心的开发者批准这个错误时,他们到底在想什么?

这是因为这个错误并不微妙或复杂,但它是如此的简单,只要看一眼就可以看出,根据上面的描述,取消双倍支出检查是一个相当大的问题。

这就提出了一个问题,即这个错误是如何精确地把比特币打印出来的,而比特币本来可以被矿工用稀薄的空气进行打印的,但它最终却被写入了代码。

据我们所知,这也对Blockstream可能存在的利益冲突提出了问题,即地雷问题。提出这个明显错误的开发人员当时正在为Blockstream工作,而批准它的两个开发人员也是如此。

对于比特币核心的代码是否正在接受充分的审查,还需要提出进一步的问题。这是因为,如果非比特币Core的开发者对漏洞一目了然,但仍然能够进入,那么很明显,评审过程已经失败了,而且非常糟糕。

值得庆幸的是,现在存在一些竞争,比特币核心的科里·菲尔兹(Cory Fields)之前在ABC上发现了一个漏洞,这是个严重的问题,但比这严重得多,因为它没有考虑到“有效”的双倍支出。

在辩论最激烈的时期,一些比特币公司的态度不那么友善,做出了非常不负责任的行为,这导致了比特币无限使用的漏洞。

Awemany并没有回报他的支持,而是进行了非常负责任的披露,这导致比特币生态系统的大部分快速升级。

到目前为止,矿商和企业可能已经升级,但在编写本文时,仍有数千个节点仍然容易受到通胀风险的影响。

在这种情况下,会向节点发送警报,要求它们快速升级。这样的警报系统被删除了,即使它只是在节点屏幕的角落说一些类似于你应该升级的东西,就像你已经发现了一个错误一样,可以在一些链接中读到更多的内容。

警报本身不会以任何方式干扰代码节点的运行,如果发出了错误的警报,其他开发人员可能会将其覆盖。所有的警报都是通知节点操作员,然后节点操作员就可以自己作出决定。

现在,节点操作员必须检查加密媒体或crypto twitter,如果他们在新闻发布期休假,那么他们可能会认为它们的bugy节点没有什么问题。

由于Awemany的披露,对于那些已经升级的人来说,这是一个更安全的节点。为此,在撰写本文时,他获得了价值200美元的0.03BTC捐款。比特币现金支付者已经慷慨了很多,给他寄去了将近36BCH的捐款,价值17000美元。

然而,这些开发者不应该依赖他人的善意,因为考虑到风险有多大,应该会有漏洞奖金。然而,比特币核心和比特币现金的客户似乎都没有这样的漏洞奖励,这可能意味着开发者并没有太多动力来揭露这些漏洞,因此这也许是为什么比特币在直播代码中保留了两年的原因。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分