对于任何软件公司来说,安全是一个根本性的困难和不对称的问题。而对于安全问题来说,是没有什么灵丹妙药的——仅在上个月,就有几家技术公司出现了明显的漏洞(如 Okta、HubSpot)。然而,加密货币的自我托管和不可逆的性质意味着安全漏洞可能会导致数十亿美元的永久性损失。这种持续的风险对于具有长期雄心的 NFT 项目来说是一个巨大的挑战。
数亿美元的用户资金损失严重损害了 NFT 领域的声誉,并严重损害了相关的公司和项目。这种风险对许多正在进入该领域的企业来说是不可接受的,特别是那些有现有客户基础、声誉和法律义务的企业。因此,安全作为 NFT 项目选择平台的一个标准将变得越来越重要。
每个平台都有强烈的动机将自己定位为足够安全。可事实是,所有的解决方案都是有交换条件的,重要的是项目需要对他们和他们平台的具体交换条件有一个非常清楚的了解。
我是 Alex Connolly,Immutable 的首席技术官和联合创始人——我们为大规模、高质量的 NFT 项目(尤其是游戏)建立了领先的平台之一。我想通过写这篇文章,对一些最受欢迎的 NFT 平台所做的选择进行详细且基本公正的评估,这些平台包括 Ronin、Polygon、Immutable、Solana 和 Optimism。
我将特别专注于每个平台的底层安全的两个核心要素:
1、共识安全:通过攻击平台的节点/验证者(例如通过 51% 的攻击)窃取资产的难度
2、桥的安全:将资产从以太坊转移的机制的安全性。这通常是更大的担忧,因为妥协通常会使用户资金直接面临风险
这篇文章将是对 NFT 平台安全的一次深入探讨,从而为相关项目负责人做出明智选择提供必要的技术细节。如果你只是想简单了解一些重点内容,可以看看下面这个表格。
接下来,就让我们深入探讨一些 NFT 平台的安全性吧。
Ronin 是由 Sky Mavis Labs 创建的区块链,目前专门为 Axie Infinity 及其生态系统提供动力。
共识安全
Ronin 是一个「侧链」——一个拥有自己节点和共识机制的区块链,但它与以太坊保持着官方「桥」的连接。Ronin 是一个权力证明(POA)区块链,它一有 10 个节点,这些节点把自己的声誉押在不会滥用权力的事实上。这与以太坊的测试网如 Goerli(20 个节点的 POA)相同。如果这些节点中的任何 5 个(50% 以上)成为恶意的或妥协的节点,那么它们将能够对网络进行 51% 的攻击,并通过双花或其他攻击窃取用户的资金。一般来说,这被认为是一个极低的节点数量(比特币有 15000 个,以太坊有接近 6000 个),并产生一个更中心化的网络,从而换取更快更便宜的交易。此外,用户不能运行自己的节点,Ronin 节点的源代码是不公开的,因此 Ronin 用户无法对其进行审计。
桥安全
Ronin 的官方以太坊桥由 5-9 的「多签(multisig)」控制。多签要求总共 n 个密钥持有者中的 m 个签名者批准每笔交易。在 Ronin 中,每一个桥动作都需要得到这个多签的批准。然而,没有任何机制来检查充值或提现是否真的有效——任何能够接触到 9 把私钥中的 5 把的人都可以将 Ronin 桥中持有的任何代币的任何数额提取到任何以太坊地址上。这意味着该桥的任何用户都是直接信任这个多签的所有资金。
2022 年 3 月,在一名黑客获得了 Axie 团队持有的 4 把私钥和 Axie DAO 验证器(节点)借给 Axie 团队的 1 把私钥(给他们 5/9)后,这种信任被黑客窃取了 6.25 亿美元。我们目前所知的情况表明,这是一个典型的网络安全漏洞,由于这些验证器私钥的中心化造成了严重的后果。Sky Mavis 已经承诺偿还那些损失的资金,并在未来三个月内达到 21 个独立验证者,以确保 Ronin 对未来的攻击有更大的弹性,尽管在更强大的共识/桥机制和网络的可扩展性之间可能会有权衡。
Polygon 目前提供权益证明以太坊侧链(Polygon PoS),以及专门的 NFT 服务业务 Polygon Studios,支持 Skyweaver 和 ZED RUN 等主要项目。Polygon 正朝着提供一系列不同的扩展解决方案的方向发展,其中大部分是基于 zk-rollup 技术(稍后讨论),但目前只有 Polygon PoS 是作为 NFT 平台上线。
共识安全
Polygon PoS 是一条侧链,其基本模式与 Ronin 相似,只是 Polygon 是一个「提交(commit)侧链」,它定期将链上状态的检查点提交给以太坊。Polygon PoS 共识有两个主要组成部分。首先是 Bor 链,这是 Polygon 交易实际发生的地方:一个轮流的区块生产者子集从更大的验证者池中选择,运行一个修改过的权威证明网络,决定交易的包含和排序。然而,这个子集中只有一个区块生产者(见 PolygonScan 区块验证者)被选中,以提出 64 个连续的区块。
接下来是 Heimdall 检查点系统,更多的验证者(目前上限为 100 人)就 Bor 区块最后约 30 分钟的总结快照达成三分之二「权益证明」共识,并将该快照作为检查点发布在以太坊上。然而,虽然有 100 个验证者,但 4 个验证者控制了 53% 的权益,7 个验证者控制了 67% 的权益(见这里,点击「显示全部」并按权益排序),而所需的三分之二多数指的是权益,而不是验证者的数量。这意味着,只有 7 把私钥被破坏,链上的所有资金,而不仅仅是桥上的资金,才能通过恶意检查站被盗;而且质押者必须随时保持他们的私钥热度。此外,由于法定人数需要三分之二的质押,而 43% 的权益由 3 个验证人控制,因此只需破坏 3 个热钱包,就足以完全冻结提现和检查点。
在 2,307,879,127 美元的质押中,前 7 名验证者的质押是 1,540,761,159 美元(~67%)
合约升级可以用来防御恶意检查点(假设它被足够快地检测到),但这有其自身的安全风险,我们接下来将会讨论。
桥安全
Polygon 的桥与 Ronin 的不同之处在于,检查点系统消除了对独立验证器组签署每笔充值和提款的需要。然而,这意味着桥的安全性完全依赖于 Heimdall 和 Bor 的共识,这很容易受到上述的攻击。
此外,Polygon 使用 5- 8 多签来管理他们的桥梁智能合约,合约更新可以立即进行,没有时间锁定。这可以抵御智能合约的错误或上文讨论的质押权重(stakeweight)验证器的妥协。其中 4 把私钥由 Polygon 创始人持有,这种结构受到了社区内安全研究人员的强烈批评,因为只要有另外一把私钥,就有可能通过恶意升级将 Polygon 合约的所有资金(50 亿美元以上)完全耗尽。然而,由于 Polygon 的签名者并不签署每一笔充值和提线交易,这些管理密钥能够被保持在离线状态,使得它们不太可能被破坏。
Immutable 是一个用于构建高质量、高规模的 NFT 项目的平台,如游戏。基于 Immutable 的知名项目包括 Illuvium、Gods Unchained、Ember Sword 和 Guild of Guardians。
共识安全
Immutable 是一个 zk-rollup,它使用 StarkWare 的 StarkEx 校验器(prover)/验证器系统构建。这意味着 Immutable 预定一批第二层网络(L2)交易,生成一个 STARK 证明,证明这些交易是有效的,并将该证明提交给主网(L1)智能合约「验证器」,该验证器更新一些主网状态(在我们的案例中,是包含数百万用户 NFTs 余额的 merkle 树的根)。重要的是,这比天真的批交易要好得多,因为 STARK 证明的验证成本与交易的数量呈亚线性扩展。
由于所有的状态转换都必须经过主网智能合约的验证,即使 Immutable 的系统被完全破坏,Immutable 也不可能将无效的交易嵌入到 rollup 中,或者窃取资产。这是一个非常强大的安全属性,也是 Vitalik 将 rollup 描述为「在可预见的未来,以太坊的关键可扩展性解决方案」的部分原因。
然而,Immutable 作为一个「单一操作者」的 rollup 运作(只有 Immutable 可以订购或证明交易)。这意味着 Immutable 可以通过对交易进行前置处理或重新排序来提取矿工可提取价值(MEV)。目前,几乎所有的 rollup 都是「单一运营商」,尽管大多数都有计划随着时间的推移进行去中心化。
桥安全
rollup 使用了与侧链根本不同的桥结构,因为他们在主网上保持了一个经过验证的「状态」,只有通过有效的证明才能更新。桥资金要求这个验证状态已经包括你的充值/提线,没有多签的攻击(例如 Ronin),也没有办法通过破坏验证器来增加「假的」状态转换(例如 Polygon),每笔交易都被验证,就像它发生在主网上一样。这种去信任的桥是为什么 rollup 被称为「第二层网络」的原因——它们的安全直接依赖于以太坊的共识,而不是一个单独的具有信任桥接的共识机制。
在任何时候,用户都可以提交一个「提现」交易,将他们的资金从第二层网络过桥到主网。如果 Immutable 将此交易纳入已证明的状态变化集,用户就能以去信任的方式将他们的资金直接提现到以太坊。如果 Immutable 不处理这个提现(不可用或故意审查),用户总是能够通过直接与主网桥合约进行交互来使用「全额提现」流。
如果这个新的「全额提现」请求没有得到服务,交易所状态将被冻结,所有用户将能够通过提供他们在状态 merkle 树中的资产路径来提现。确保用户能够访问这些数据,即使 Immutable 是恶意的或离线的,这就是「rollup 数据的可用性问题」。在标准的 zk-rollup 结构中,这有一个简单的解决方案:要求在允许状态更新之前将必要的数据发布到以太坊主网上。然而,这引入了一个小的线性 gas 成本,许多应用程序不愿意支付。这种成本在合并后不会改变,但会通过 EIP-4488、原数据库和(最终)分片等提议大幅减少,因为以太坊接受了它作为 rollup 的基础验证和数据可用性层的角色。
然而,由于这些解决方案都没有上线,而且在链上发布 calldata 的成本对于像大规模 NFT 铸币这样的用例来说仍然令人望而却步,Immutable 目前作为一个 Validium rollup 运行。Validium rollups 是 zk-rollup,它不发布重建状态所需的所有数据来换取更便宜的交易。为了确保这些数据即使在 Immutable 离线或恶意的情况下仍然可用,Immutable 依靠一个「数据可用性委员会(DAC)」。
这个委员会的大多数成员(由著名的生态系统公司组成)和几个「强制性」成员必须签署每个批次,以证明他们有必要的数据。这与验证人的多签不同:只要任何一个 DAC 是诚实的,用户就能成功退出。即使发生数据扣留攻击,整个 DAC 和序列器被破坏,Immutable 仍然可以使用合约升级来防止赎金攻击。
Immutable 的 rollup 验证器合约可以升级,但有 14 天的时间限制,这将使用户有机会在对新合约不满意的情况下退出系统(即使 Immutable 恶意审查交易)。
Immutable 正在向 Volition 模式转变,其中个别「金库(vault)」(用户、代币、数量图元)可以被标记为需要链上数据。由于存储在 rollup 中的大部分价值存在于大型代币/ETH 余额或高价值的 NFT,该价值可以存储在相对较少的链上数据库中。这种结构可能会让 rollup 金库中的大部分价值得到链上数据的支持,减少数据可用性风险,同时保留做廉价、大规模 NFT 铸币的能力,这对游戏等项目来说至关重要。
Solana 作为一个完全独立的主网区块链运行,它特别关注通过定制的共识机制实现低成本、高规模的交易。
共识安全
Solana 目前有超过 1500 个活跃节点,尽管它确实对这些节点提出了大量的硬件要求,以实现其较高的 TPS(减少个人验证交易的能力,这是区块链去中心化的一个重要原则)。重要的是,由 20 个节点组成的超级少数节点目前控制着超过 33% 的 SOL 质押。如果这些节点串通一气,或被破坏,他们将能够停止网络或任意审查交易。
桥安全
作为一个完全独立的主网,Solana 没有与以太坊的官方桥。然而,对 Solana 用户来说,最流行的(和半官方的)桥是 Wormhole,它允许资产在一些链上移动。Wormhole 依赖于一组被称为监护人(guardian)的验证者,他们对所有桥行动达成三分之二加一的权威证明共识。目前有 19 个活跃的监护人。由于 Solana 和以太坊无法验证对方的交易,桥合约在资产过桥时完全依赖于监护人的共识。这意味着,如果这些监护人中的三分之二被破坏,Wormhole 内的所有用户资金都可能被盗。这种机制实际上与 Ronin 使用的机制非常相似,不幸的是,监护人的私钥也必须保持热度以签署新的交易。
在 2022 年初,Wormhole 桥的一个错误使得 3.25 亿美元的用户资金被盗。这实际上不是验证器系统的妥协,而是发现了一个智能合约的错误,允许攻击者欺骗桥在 Solana 上发行没有存入以太坊的 ETH。Jump Crypto 介入,使用户得到补偿,这令人惊讶地表明了加密货币中的资本的力量,但随着领域的发展,这是一个完全不可持续的模式。这并不是对 Solana 或 Wormhole 的控诉,因为所有链上系统都容易受到智能合约漏洞的影响。虽然永远不可能有保证,但最好是使用经过审计/正式验证的合约,这些合约经得起时间和公众审查的考验,例如,Wormhole 在错误发生后受到了严格的审查,没有发现进一步的错误。
Optimism 是由 Optimism PBC 开发的以太坊 Optimistic rollup。它在 2021 年 8 月登陆主网,用于白名单项目,到目前为止,它上面 NFT 项目的采用有限,尽管在 Quixotic 等市场上有一个早期社区。
共识安全
Optimism rollup 工作类似于 zk-rollups:收集交易并上传所有这些状态转换的最终状态的压缩版本。然而,在 zk-rollups 为每个状态转换提供「有效性证明」的情况下,Optimism 的 rollup 转换被认为是有效的,除非有人能产生一个「故障证明」,表明有无效的交易发生。如果有人能产生这样的证明,他们会得到奖励,而证明的发布者会受到惩罚。为了允许这种挑战的发生,Optimism rollup 需要在交易完全结束前有一周的争议时间延迟。这种非同步性引入了一类有趣的潜在经济攻击,而缓解这些攻击是一个积极的研究课题。
然而,Optimism 的故障证明目前是禁用的——这意味着 Optimism(或任何破坏 Optimism 多签的人)可以通过提交无效的状态转换来窃取所有的用户资金。这是一个临时状态,一旦新的故障证明系统准备好了,就会升级,但在目前的状态下对用户资金构成了严重的危险。由于 Optimism 是一个单一的序列器 rollup,它也对潜在的 MEV 提取开放。
桥安全
Optimism rollup 也提供了一个通往以太坊的去信任桥。然而,由于任何用户都可以在 1 周争议期的任何时候挑战该批次的有效性,被撤回到主网的资产至少会在这段时间内被锁定。对于可替换的资产,可以使用「快速提线」来规避这种锁定(在假设状态转换不包含欺诈性交易的情况下,有效地借给用户)。然而,由于 NFT 是唯一的,不能被替代,用户必须等待整个争议期(长达一周),然后才能将他们的资产转移回以太坊主网。
Optimism(像所有 Optimism rollup)要求将中间交易数据发布在链上,以便能够有效地挑战——这产生了更高的费用,但规避了任何复杂的数据可用性结构,正如在分析 Immutable 时讨论的那样。
如果你的项目安全通过其他机制受到损害,那么拥有世界上最好的核心平台安全是不重要的。为了真正做出明智的决定,NFT 项目需要考虑共识和桥安全之外的各种因素,包括:
钱包安全:用户密钥是如何存储的?如果这个存储系统被破坏,会有什么影响(例如,托管钱包供应商,本地钱包应用程序的一个作恶版本,浏览器扩展中的一个不良依赖)?
元数据安全:资产元数据(包括图像)是如何存储的?如果这些元数据由于妥协而被改变或替换,会有什么市场影响?
项目安全:任何平台上的项目通常都为其项目保留一些管理私钥。如果这些私钥被泄露,会发生什么?你的项目是否有主动监测漏洞的功能?你的平台是否支持密钥管理的最佳实践?
资金安全:大多数平台都会有大量的代币储备(例如,用于奖励或补助)。这些资金是如何持有的?如何授权和执行从金库的转移?妥协会有什么影响?
市场安全:支持该协议的市场如何保护用户免受恶意交易,如山寨项目?
在这些层次中的任何一个出现纰漏,都可能使即使是最安全的底层平台的用户受到伤害——任何人描述一个无懈可击的项目显然是错误的。不幸的是,当处理一个新的资产类别时,特别是一个增长如此迅速的资产类别,会有人不断地寻找新的漏洞和利用点。在这样的环境中,对这些权衡的有力理解对于为你的项目选择正确的平台至关重要。
在 Immutable,我们正在解决那些想要建立高质量、高规模、长期的 NFT 项目(如游戏)的核心挑战,包括上述的安全挑战。如果你是一个建设者,我们很想和你展开对话。如果你想直接帮助我们解决这些问题,我们正在招聘几乎所有的角色!
我还要感谢那些对这篇文章的不同部分提供反馈的人。Kelvin Fichter(Optimism),Avihu Levy(StarkWare),Bartek Kiepuszewski(MakerDAO, L2 Beat),Philippe Castonguay(Horizon/Skyweaver)和 Wormhole 团队——文章出现的任何剩余错误都是我造成的。