加密货币:Bitcoin Core 32.0 将于10月10日发布,修复两个漏洞
运行比特币的软件周一进入了最后冲刺阶段。Bitcoin Core 32.0 的第一个候选版本于 9 月 14 日发布,如果测试没有带来什么坏消息,最终版本将在 10 月 10 日发布。对世界上绝大多数人来说,这只是几名志愿开发者航海日志里的一行字。对那些在家里运行网络的人来说,这是几个月来最有意思的一次更新:加入网络时等待时间减少到三分之一,补上两个漏洞,还有一次格式变更,会让一些程序员半夜从床上惊醒。
先简单回顾一下背景,因为版本号对谁都说明不了什么。比特币没有中央服务器。交易账本存在于成千上万份副本中,保存在那些在自己的电脑上安装程序、让它一直运行、并且各自核验所有流转内容是否规规矩矩的人那里。这个程序就是 Bitcoin Core,至少对绝大多数人来说是这样。它不是强制性的,没有人逼你安装它,但正是它负责记账,并决定什么是有效交易,什么不是。
这样的软件改变版本,并不是某个应用焕然一新了。这是支撑网络运转的机器里又多了一块零件。这一次是个好消息,验证规则一毫米都没有变。工作是在别的地方完成的:速度、费用,还有两个漏洞。
加入网络时等待时间减少到三分之一
你把软件安装在一台新机器上时,它不会先跟你打招呼。它会先从 2009 年开始,逐个区块地重新读取全部交易历史,之后才能派上任何用场。这就叫同步,而且很慢。在普通硬盘上要花好几天,期间机器喘个不停,而你什么回报都没有。
32 版加速的就是这个过程。到目前为止,程序会逐个获取它需要的信息,每次都得排队。现在它会一次请求好几个。开发者的测试结果显示,同步速度最高可以快到原来的三倍。
三倍,单这么说好像没什么。实际上,这种细节会决定一个人是两天后放弃,还是坚持到底。自己确认比特币确实属于自己,不去信任交易平台,从来都不是件轻松的事。每在这上面节省一小时,就少一个让别人替自己做这件事的理由。
用 AI 模型发现的记忆漏洞
这个版本有趣的地方在于,其中一个漏洞是借助 AI 模型找出来的。项目贡献者 Matthew Zipkin 正在仔细检查软件的新网页服务器,也就是让它能够和外界交流的那部分。他请 Kimi K3 帮了忙,这个模型和我每天使用的那些模型不是一家子,结果这对搭档找到了一个办法,可以让机器的内存不断膨胀,直到把它憋死。
要命的细节是:修复一开始只解决了一半问题,是一名审阅者仔细查看修复内容时发现,没有任何标识符的连接仍然可以让内存继续膨胀。修订之后,十六个匿名连接持续九十秒,会让程序增加三兆字节。之前,同样的十六个连接和同样的九十秒,会让它吞下三点二吉字节。对同样的恶意行为来说,少了一千倍。
一分钟半就能把一台帮得上忙的机器变成一台不再响应的机器,而且不需要创建任何账户
修复内容从 9 月 5 日起就已经合并了。这里有两件事值得记住,第二件比第一件更重要。AI 模型被用来审阅旧代码,并找出人类漏掉的东西,这正在变成一种习惯,而且不是什么坏消息。还有那个只修好一半问题的中间修复,它提醒我们,关上一扇门之后要检查门把手,而不是只顾着把门砰地关上。
一名贡献者,一个模型,还有一个几个月来没人发现的漏洞
另一个漏洞藏在一个配置文件里
第二个更隐蔽,而且从 24.0 版本开始,它一直存在于所有不运行 Windows 的机器上。它涉及一个节点运营者很喜欢的选项,因为这个选项很实用:它允许他们要求机器在有交易触及其钱包时立即执行一条他们自己的命令。及时收到通知后,就可以触发警报、唤醒脚本,想做什么都行。
# dans bitcoin.conf
walletnotify=/usr/local/bin/prevenir.sh %s问题在于,触发命令的钱包名称会被原样复制过去,没有经过清理。于是,一个用精心设计的公式命名的钱包,就可能让托管它的那台机器执行预定脚本以外的其他东西。要做到这一点,攻击者必须已经是该节点认可的用户,这限制了损害范围,但门已经打开,而且在八个主要版本期间一直没有关上。现在它关上了。
一个让整个网络运行的软件一下子堵上两个漏洞,这种事上个月在BNB Chain那边已经发生过,而每次的情况都一样:真正造成高昂代价的从来不是引人注目的漏洞,而是那个没人查看过的细节。
陷阱会在之后出现,而且是给其他软件的
这就是开发者们会咒骂的部分,而我自己觉得它相当健康。这个软件的四条命令会在 10 月 10 日改变默认格式。它们用于在钱包和持有密钥的设备之间交换一笔签了一半的交易,也就是那种双方在手里传来传去的表格,好让签名落在正确的位置。
应用仍然可以要求使用旧格式,所以对于使用最新应用的用户来说,不会一夜之间有什么东西坏掉。但那些直接和 Bitcoin Core 对话的交易平台、托管服务和钱包制造商最好现在就测试候选版本,而不是等到 10 月 11 日早上,面对不满的客户时才发现变化。这个项目也用外交辞令对他们说了同样的话:提前试试。
表格在人手之间传递,只不过如果中途版本发生变化,签名就会落在错误的位置
这正是我们要求一次更新做到的事情。尽早提醒,好让工作在工作日完成,而不是在周日晚上完成。
具体来说,这对你有什么改变?
如果你在交易平台上有比特币,而且从来不安装任何东西,今天什么都没有。绝对什么都没有。你不需要维护一份总账副本,别人的工作只有在他们的软件出问题时才会影响到你,而这正是我们要求他们在 10 月之前测试的原因。
但如果你在自己的机器上运行这个软件,那你就有一个日期。10 月 10 日,或者如果测试出了问题就晚几天,这就是升级到 32.0 的时候。不要提前:候选版本就是用来试的,不是用来保管你的积蓄的。至于那些因为同步要花一辈子而一直犹豫要不要开始的人,这次正好可以在那台躺在壁橱里的旧盒子上重新试试。
最后说句实话:手续费的费率也重新调整过了。现在,程序会通过查看那些正在排队等待处理的交易来估算一笔交易的价格,而不再只是看已经填满的区块。在网络不拥堵的时候,它会给出更便宜的价格,这对于每月发送三笔交易、每张账单都要哭一场的人来说,确实是一次改进。
还有一个没人会在它造成伤害之前提出的问题:那些让网络运行的老软件中,有多少从来没有在“walletnotify”之后收到过一次更新?一台被遗忘在旧硬盘上的节点从来不会抱怨,从来不会重启,还会让门敞开好几年。



加入对话
您必须拥有一个账户才能评论这篇文章。注册免费,耗时不到一分钟。
目前没有评论。