07/02 事件:对 Alkanes 的攻击能对 frBTC 做什么,又不能做什么
以一种较为非正式的方式,记述这次试图通过 SUBFROST 读取其 unwrap 信号所依赖的元协议层来抽干 frBTC 储备的行为——以及为什么对 Alkanes 的攻击并不等同于对 SUBFROST 所托管的 BTC 的攻击。
我想以一种较为非正式的方式记录一下 07/02 那天发生的事情,因为这次试图抽干 frBTC 储备的行为——它以攻击 SUBFROST 接收其 unwrap 信号所依赖的元协议层的形式展开——浮现出了一系列真正值得公开回答的问题。围绕此次事件的讨论触及了几个需要澄清的要点,而其中一些本来也是我一直想写的东西。
第一个是中心化问题,具体来说,是这个词如何适用、又如何不适用于 07/02 那天出现在场景中的两个系统:Alkanes 元协议,以及 SUBFROST 联邦托管方。它们不是同一类对象,也不共享同一套信任模型。将二者混为一谈的简单方式,就是假设:因为其中一个为另一个提供输入,所以对其中一个的攻击就是对另一个的攻击。而整件事的崩塌之处,正在于这个假设。
在理想状态下,元协议的规约是固定的。它们是无可辩驳的真相来源,而正是从这一真相来源出发,一套 FROST 多重签名托管系统才可以选择兑现向外转出的 BTC 转账。当我在这里说“元协议”时,我指的是严格意义上的它:在 alkanes.wasm 中表达的操作,也就是我们在主要的 Bitcoin Core 共识之上补充的那套共识程序。在稳态下,这是一个固定的对象。规则不会改变。
SUBFROST——代码项目名为 subzero-rs——则完全是另一种生物。它是一个真正的 p2p 系统,最接近的熟悉类比是权益证明网络,但它是一个从任意端点接收信号的实时系统,而且最重要的是,它的共识程序是可变的。唯一重要的是,需要相连签名者中的绝对多数扩散一个 wasip2 可执行文件来更新其逻辑。这种可变性不是需要致歉的缺陷;它是 L0 的定义性特征,而 L0 正是 SUBFROST 存在并运作的那一层——真正托管支撑 frBTC 的 BTC 的那一层。
在一个封闭系统上,那个 wasip2 程序可以是响应式的。举例来说,它可以从一个 AI 代理接收信息,使签名者能够实时地主动维持共识。当 SUBFROST 计算一个待广播的签名队列时,它将兑现的行为与规则集合并不严格是一个面向公众的对象,甚至也不要求在任何时刻都保持完美一致。这是有意为之的设计,也正是要点所在。
值得注意的是,这套东西的应用范围远比 SUBFROST 今天为 BRC20 或 Alkanes 提供的要广得多。举例来说,它是一个对预测市场而言真正有趣的框架,因为它给了你一个真正去中心化的结算机制。任何预言机框架一旦纳入这些原语,都可以变得去中心化——而这已经很接近 SUBFROST 在其被复制的各处所做的事情了。
但 07/02 那天发生的事情并不完全是这样,我想在这里说得精确一些。在各个副本的签名逻辑内部,并没有发生任何变异来使得对 Alkanes 的攻击不足以抽干 BTC。在需要任何响应之前,规则集合本身就已经以若干方式保护了 BTC 的托管。
这个框架的设计使得它所治理的底层 BTC 可以被时间锁定,或以其他方式部署在相对于 Bitcoin 而言市场中性的系统里。这为我们买来的,是一种能够确定——我喜欢用“钉住”(pin)这个词——那些出于某种原因不能诚实地排入待支付队列的资本的能力。你可以仅凭启发式方法就得出这一点。在本例中,关于 frBTC 及其当前分布,有某些我们知道应当成立的真相,而这些真相实际上给了我们一个可以预期的钉住量级:一个应当被彻底保护、或被当作“冷”对待的数额。这更接近签名者已经在兑现的安全协议,也是为什么对 Alkanes 的攻击并不必然等同于对 frBTC 的攻击的一大原因。
具体来说:绝大多数 frBTC 代表了 DIESEL/BTC LP 上的时间锁定头寸。这些资金受 SUBFROST 内部一个不断演进的共识程序保护,正是我上面所描述的那种意义。
现在,说到那个确实为真、我也不想含糊带过的部分。这里确实有一个值得正面回答的中心化问题。作为元协议的 Alkanes 是可以被更新的,而这些改动由一小群贡献者撰写。这是一个真实存在的中心化向量。它在某种程度上是真的,但也有一些重要的附加说明,并且它值得对照 Bitcoin Core 本身的性质,以及它是如何被维护和演进的。
就复杂度而言,Alkanes 是一个相当沉浸式的框架,而如今积极从事索引器逻辑工作的群体规模不大。但贡献者基础小并不意味着工作在暗处进行:Alkanes 是一个开源项目,对共识逻辑所做的每一次更新都有审计日志。它运行其上的框架 METASHREW 也是开源的——正是这个通用型索引器栈,才首先使得 Alkanes 能够是确定性的。这个系统所托管的资金并不属于我们,而我们无论作为个人还是作为团体都是面向公众的。我们为回应此次攻击而发布的更新,解决了框架中存在的一个非预期向量。从落到链上的东西的形态来看,要针对该协议达成哪怕一个可用的概念验证,都很可能需要一场重大而持续的开发投入——这种事今天只有借助最好的智能体工具才可能触及,即便如此也不会很快。这个过程中浮现出来的另一件事,是一个可以被编排的单一 DoS 向量。我们已经接受过独立分析师的大量安全审查,而这次事件代表了为发现并解决这一个缺陷所付出的极其漫长的算力与努力。
想想这实际上交到我们手里的是什么。我们得到了一个链上的载荷(payload),它表达了通往一个存亡性问题的路径。我们可以把这个载荷逆向走回去,用它来在代码库中共享相同模式的那些例程之间,对更大范围的概念一致性进行分诊。结果是,我们几乎免费地得到了大概是钱能买到的最重要的安全改进。
这正是我们作为维护者能够现实地对 Alkanes 做出的那类修改,也是鉴于把这项技术带到世界上本身就伴随着受托责任、我们应当做的那类修改。我在意的区别在于意图。如果 Alkanes 被专门为了个人牟利而修改、损害今天使用它的集体的利益,那必然会导致索引的一次分叉,并且会危及多年来集体为构建它所付出的努力——在我看来,它是当今在工作量证明之上可获得的链上数据最伟大的表达。理性的人都不会做这样的交易。相反,我们所做的是我们作为维护者需要做出的共识改动:我们让 Alkanes 对齐到 SUBFROST 所期望的样子,而不是反过来。
我在开头描述的那个稳态——规约固定且无可辩驳的那个——是一个我们不再需要更新 Alkanes 的世界。我们还没到那一步。在到达之前,我们会持续发布安全改进,也会持续邀请世界加入我们,一起为 Alkanes 做贡献,让它变得更好。