新闻加密货币封闭源代码时代即将终结:模糊从来不是安全

封闭源代码时代即将终结:模糊从来不是安全

作者: Bitcoin Magazine·

要点速览

  • Coldcard 硬件钱包中的一个预处理器错误将助记词熵降至约 40 位,使攻击者能够用消费级硬件枚举可能的种子,并在约 4,585 个地址上窃取近 9,000 万美元。
  • 该漏洞于 2021 年 3 月引入,并在公开可读的固件中存在了五年多,未被人工审查发现。
  • 研究人员已证明,多个前沿 AI 模型只需一个提示词即可在几分钟内识别出同样的熵缺陷,凸显 AI 在代码漏洞分析方面日益增强的能力。
  • 作者认为,随着 AI 驱动的逆向工程变得更快且更易获得,闭源软件和分发产品中的商业秘密所提供的保护正在减弱。
  • 防御者拥有比攻击者更多的时间优势,应在发布前用前沿 AI 模型审查自己的代码,实施可复现构建,并在独立实现之间分散密钥。
封闭源代码时代即将终结:模糊从来不是安全

Bitcoin Magazine 封闭源代码时代即将终结:模糊从来不是安全

在过去几天里,那些严格遵循所有推荐安全措施的比特币持有者仍然失去了他们的资金。他们购买了受尊敬的硬件签名器,在该设备上离线生成助记词——这是创建比特币密钥的标准 BIP39 方法,旨在编码 128 到 256 位随机性——并依赖它完成签名器唯一最关键的职责:产生一个没有人能够猜到的数字。

Coldcard 硬件签名器未能做到这一点。一个检查错误条件的预处理器守卫,悄无声息地把种子生成导向了一个弱软件伪随机数生成器——MicroPython 的 Yasmarang——而不是设备的硬件熵源。在某些 Coldcard 型号上,有效熵下降到大约 40 位——约一万亿个可能种子,这一搜索空间用消费级硬件就足以枚举,相比原本的安全级别减少了 200 多位。该漏洞于 2021 年 3 月引入,并在公开可读的固件中持续存在了五年多。

在根因被理解之前,攻击者已经扫空了 500 个地址。几天之内,Galaxy Research 的统计已达到 4,585 个地址和近 9,000 万美元损失。截至本文日期,攻击仍在持续。

Coldcard 的制造商 Coinkite 目前的判断——在 X 上也被广泛认同——是攻击者使用 AI 搜索公开可获取的固件,从而发现了这个漏洞。无论此次是否确实使用了 AI,下一位攻击者几乎肯定会使用它。值得注意的是,在盗窃发生前数周进行的一次 AI 辅助审计没有发现任何问题,这可能是模型能力的限制,也可能是搜索方式的特殊构造所致。自攻击开始以来,研究人员已经证明,若只给出一个提示,多个前沿 AI 模型就能在几分钟内定位到同样的缺陷。

这段代码曾在五年里对人类审阅者完全开放,而没有任何人发现它。

改变了什么都没有的许可变更

在 Foundation Devices 将该代码用于竞争产品之后,Coinkite 曾将其固件从自由软件许可证转为源代码可用条款——具体为 MIT 加 Commons Clause。按新条款,用户可以阅读源代码,但不能据此建立商业业务。

这一变化对安全没有任何影响。漏洞存在于机器无论许可如何都能读取的代码中。事实上,它进入代码库,正是在那次重写之中,而那次重写移除了最后残余的 GPL 许可代码。许可修改并没有增强保护;它只是改变了发现漏洞的经济成本。

封闭源代码的幻象

在 AI 能力不断增强的时代,所有被分发的内容都可被读取——或者很快就会。去除二进制的符号表并将其送入反编译器,会生成任何打开过 Ghidra 的人都熟悉的伪 C 输出:没有名字的变量、被压平的控制流、标记为 FUN_00401a20 的函数。对大多数人来说,这些输出是不可读的。对人类理解而言的高门槛,曾是“闭源”的全部安全溢价。

然而,编译后的程序别无选择,只能说出真相。若代码保持加密,它就无法运行。在执行时,处理器必须接收真实指令,因此程序无论做什么,都必须向机器提供一份完整且精确的实现说明。所有信息都存在于机器码中。混淆不会,也不可能,把它移除。

如果读取二进制看起来过于困难,机器短期内难以掌握,那就把它与机器已经在处理的更难问题相比。读取二进制是一种分析:所有需要的事实都摆在面前,工作只是提取。数学创造则是另一种难度层级,因为它要求创造出一个前所未见的对象。

在 7 月 20 日 UTC 02:19,数学家 Levent Alpöge 与 Anthropic 的 Claude Fable 5 合作,发布了 Keller 雅可比猜想的一个反例;该问题自 1939 年以来一直未解,并且难度高到足以进入 Stephen Smale 面向二十一世纪的挑战清单。几代人都曾尝试过。这个否证只由三个三变量多项式构成。Lean 在数小时内完成验证,而且任何人都可以在大约一分钟内通过计算代数系统加以确认。

雅可比猜想在一个下午就被推翻,而提出问题的人当时据说正在观看 FIFA World Cup 决赛。5 月,OpenAI 的一个模型推翻了 Erdős 单位距离猜想,这一问题自 1946 年以来一直未解;7 月下旬,一个有 30 年历史的图论猜想被四个提示击倒;其间还出现了雅可比猜想的否证以及一系列已屹立数十年的其他结果。

把这样的进展速度与读取已经发布在互联网上的机器代码这一相对朴素的任务放在一起看。如今的模型处理源代码和反编译输出,比处理原始字节更有效,因此完全闭源的二进制只剩下一点点防护余量。这个余量只是一个成本上的减速带,而且它正在以你在其他所有领域都能看到的速度被侵蚀。把安全押注在它还能维持多久上,无异于与一只只会加速的时钟对赌。

更安静的受害者:商业秘密

同样能发现熵漏洞的 AI,也能读取专有方法。这是更安静的受害者,并且影响的是那些从未认为自己会暴露在开源动态之下的公司。已交付软件中的商业秘密,过去本质上只是穿着西装的模糊性。

法律对此的态度由来已久:对你合法持有的产品进行逆向工程是允许的,因此一个秘密只能在逆向工程仍然昂贵的情况下存活。当提取成本下降到只需一个订阅和一个提示词,分发给客户的代码所承载的秘密就不再是秘密。你的专有算法、未文档化格式、嵌入二进制中的竞争优势——只要有人愿意看,都将变得可读,而且这一时间尺度越来越以分钟计算。

开源并不等于保证安全

这并不意味着开源就安全。Heartbleed 曾在地球上部署最广泛的 TLS 库中隐藏了两年,因为没有资金支持的关注,能看到也等于什么都看不见。xz 后门则表明,开放贡献模式本身就是一个攻击面,一个耐心的对手可以以友好面孔和两年看似正常的提交从中穿行。

开放曾经是一面盾牌,如今不再是。它真正带来的,是被允许审查代码的审阅者、可以独立复现并验证的构建、当供应商消失或转向时的退出路径,以及承认这一切无论你喜欢与否都将发生。

防御者的优势

我们现在必须假定,所有交付的代码行都会被怀有恶意的人阅读,因为这将会发生。防御者拥有攻击者永远不会拥有的一项结构性优势:时间。开发者可以在发布前,在提交与交付之间的空档,把同样的前沿模型用于自己的代码,而攻击者只能等待一个尚不存在的二进制文件。

构建应当可复现——这意味着任何人都可以编译同一份源代码,并逐字节验证得到的二进制与已发布版本一致——这样每个二进制都能追溯到可独立检查的源代码。系统应设计为失败即关闭,并且可信核心应保持足够小,以至于单个漏洞不至于让一切失守。

对于专门持有比特币的人来说,Coldcard 眼下正在传授的教训很明确:掌握你无法承受被猜中的熵,把安全元件保持最小化并置于公开接口之后,在独立实现之间分散密钥,这样任何单一设备、以及任何单一供应商的失误,都不会构成你全部的风险敞口。

永久性的后果

对比特币而言,风险在其他领域并不存在这种严苛程度,因为仅凭知晓私钥就等同于拥有资金。这个熵漏洞已经留下永久伤痕。修补生成器无法改变它已经生成过的种子;弱密钥空间将永远可以被扫走,而披露则把配方交给了攻击者。

这种模式以前已经出现过。libbitcoin explorer 工具 bx 中的 Milk Sad 漏洞,使用 32 位数值为私钥提供种子,而在该缺陷公开之前,攻击者就已经在清空它生成的钱包。攻击者按自己的时间表行事,不论是否受邀。对于一旦花出就无法追回的资金来说,“最终可被找到”就是“最终会失去”的同义词。

比特币早已设立的标准

比特币从未依赖模糊性。其协议是开放的,规则可由任何人验证,而它的安全并不依赖秘密,而是依赖在完全公开视野中成立的数学与激励。围绕它构建的硬件和软件也应当符合相同标准,因为另一条路已不再可行。

选择从来不是开放或封闭,而是有纪律或暴露。

Coldcard 事件给出的更广泛教训是:闭源软件就像由一台损坏的 Coldcard 生成的种子;它看起来不错,但根基其实是沙土。任何人都能读代码——剩下的问题只是你是否承认这个事实,或者你和你的用户是否要像 Coldcard 用户那样,一次一个被清空的地址,才学会它。

*本文为 Fedi 内容制作人 Colin Crossman 的客座文章。文中观点仅代表作者本人,不一定反映 BTC Inc 或 Bitcoin Magazine 的立场。本文最初发表于 Bitcoin Magazine