# NFT 平台安全指南

By [EthereumCN](https://paragraph.com/@ethereumcn-2) · 2022-04-22

---

来源 | [Immutable X](https://immutablex.medium.com/a-guide-to-nft-platform-security-30d7129cedd3)

对于任何一家软件公司来说，安全问题从根本上来说都是一个困难和不对称的问题。在这一方面没什么灵丹妙药 —— 仅在上个月，就有几家技术公司出现了明显的漏洞 (e.g. [Okta](https://www.okta.com/au/blog/2022/03/oktas-investigation-of-the-january-2022-compromise/), [HubSpot](https://www.hubspot.com/en-us/march-2022-security-incident))。然而，加密货币本身具有非托管和不可篡改的性质意味着安全漏洞可能会导致数十亿美元永久损失。这种持续存在的风险对于那些野心勃勃的 NFT 项目来说是一项巨大的挑战。

数亿美元的用户资产损失很大程度地破坏了该行业的声誉，并严重损害涉及的公司和项目。这种风险对于正在进入该行业的许多企业来说是不可接受的，尤其是那些已拥有一定的用户基础、声誉和法律责任的企业。因此，安全性作为 NFT 项目选择平台的一个判断准则，变得越来越重要。

每个平台都具有强大的激励来使自己足够安全。但事实是，所有解决方案都会有自己的取舍 —— 重要的是，NFT 项目应该清楚地了解他们以及他们所在的平台做了什么取舍。

我是 [Alex Connolly](https://twitter.com/0xconnolly)，[Immutable](https://immutable.com/) 的 CTO 和联合创始人 —— 我们为高可扩展性、高质量的 NFT 项目 (尤其是游戏类) 构建了一个领先的平台。我希望在这篇文章中能对一些最受欢迎的 NFT 平台所做的选择进行详细和公平的评估，包括 Ronin、Polygon、Immutable、Solana 和 Optimism。尤其是，我将专注于研究影响每个平台的底层安全的两个核心要素。

*   **共识安全**：通过攻击平台的节点/验证者 (如，通过 51% 攻击) 以盗窃资产的难度
    
*   **桥接安全**：将资产转出和转入以太坊的机制的安全性。这通常是更让人担心的一点，因为一旦桥接出现漏洞，通常[使得用户的资产直接面临风险。](https://old.reddit.com/r/ethereum/comments/rwojtk/ama_we_are_the_efs_research_team_pt_7_07_january/hrngyk8/)
    

本文将深入探讨这些安全性问题，提供必要的技术细节，让项目负责人获得全面的信息后做出选择。如果你只是想简要了解他们的异同，可以看这个表格：

![](https://storage.googleapis.com/papyrus_images/235c8c4de0be382bbb23eb72ddc82ce21c98d8b2cb77415e1298a3663863ad6d.png)

至于细节，我们在下文中详细探讨吧。

**Ronin**
=========

Ronin 是一条由 [Sky Mavis Labs](https://skymavis.com/) 创建的区块链，目前专门为 Axie Infinity 以及其生态提供支持。

共识安全
----

Ronin 是一条 “侧链” —— 一条具有自己的节点和共识机制的区块链，但是在其和以太坊之间维护着一条官方 “桥接”。Ronin 采用授权证明 (proof-of-authority, POA) 机制，具有 10 个节点，这些节点质押他们的声誉，以保证他们不会滥用自己的权利。这与以太坊的测试网如 [Goerli (具有 20 个节点的 POA 链)](https://stats.goerli.net/) 相当。如果这些节点中的任意 5 个节点 (50%) 作恶或者被攻击，他们就能够[发起 51% 攻击](https://www.coindesk.com/learn/what-is-a-51-attack)并通过双花或其他攻击手段盗窃用户的资产。一般来说，这种规模可以说是尤其少的节点数量了 ([比特币拥有 15000 个节点](https://bitnodes.io/)，[以太坊拥有将近 6000 个节点](https://ethernodes.org/))。他们构建了一个比较中心化的网络，以换取更快、更便宜的交易。此外，用户不能运行自己的节点，并且 Ronin 节点的源代码未公开，因此用户无法对其进行审计。

桥接安全
----

![](https://storage.googleapis.com/papyrus_images/6a87e684e89e5d506e5ae5569dcdeef4e72e4adaf43a1812280dee6d72a9aaf3.png)

![](https://storage.googleapis.com/papyrus_images/be0262802942d6314dd4109154f9cc525f4f039df4e4917894c935ecf6ef0c4c.png)

Ronin 的官方以太坊桥接由 5/9 的 “多签”(multisig) 控制。“多签” 要求总共 n 个私钥持有者中的 m 个签名者进行签名以授权每一笔交易。在 Ronin 网络中，每一笔桥接交易都需要获得 “多签” 的授权。然而，没有设置任何机制来检查存款或者提款是否真的有效 —— 任何能够访问 5/9 个私钥的人都可以将 Ronin 桥接中任意数量的任意代币提出至任意以太坊地址中。也就是说，该桥接上的任意用户直接将他们的所有资产托付给这个 “多签” 系统。

2022 年 3 月，这种信任设置被黑客利用，[6.25 亿美元被盗](https://www.coindesk.com/tech/2022/03/29/axie-infinitys-ronin-network-suffers-625m-exploit/)。黑客得以访问由 Axie 团队持有的 4 个私钥以及 Axie DAO 验证者租借给 Axie 团队的 1 个私钥 (共 5/9 个私钥)。就我们目前所知的情况，可以表明这是一个[典型的网络安全漏洞](https://twitter.com/Psycheout86/status/1509134629009342467)：由于这些验证者私钥的中心化，造成了严重的后果。Sky Mavis 已经承诺会[对损失资金的用户进行补偿](https://www.coindesk.com/business/2022/04/06/sky-mavis-raises-150m-round-led-by-binance-to-reimburse-ronin-attack-victims/)，并[在未来三个月内增加到 21 个验证者](https://twitter.com/Ronin_Network/status/1511394771075432449)，以确保 Ronin 对未来的攻击具有更强的弹性。尽管他们这样做需要在更具有鲁棒性的共识/桥接机制和可扩展性之间做一定的取舍。

**Polygon**
===========

Polygon 目前提供了一种以太坊的 PoS 侧链 (Polygon PoS)，以及一个专门的 NFT 服务业务 ([Polygon Studios](https://polygonstudios.com/))，为 Skyweaver 和 ZED RUN 等主要项目提供支持。Polygon 正朝着提供不同的扩容解决方案的方向发展，其中大部分基于 [zk-rollup 技术](https://blog.polygon.technology/zk-and-the-future-of-ethereum-scaling/) (稍后讨论)，但目前只有 Polygon PoS 作为 NFT 平台上线主网。

共识安全
----

Polygon PoS 是一条侧链，其基本模式与 Ronin 相似，只不过 Polygon 是一种 “[commit sidechain](https://finematics.com/polygon-commit-chain-explained/)” (提交链)：它定期将链上状态的检查点提交给以太坊。Polygon PoS 共识由两个主要部分组成。第一个是 Bor 链 (Block Producer chain, 区块生产链)，这是 Polygon 交易实际发生的地方：从更大的验证者池中挑选出[生产区块的轮流子集](https://www.notion.so/Bor-Overview-c8bdb110cd4d4090a7e1589ac1006bab)，让这个子集运行一个[调整过的 PoA 网络](https://docs.polygon.technology/docs/contribute/bor/consensus)，这个网络决定交易的打包和排序。然而，这个子集中只有一个区块生产者 (见 [PolygonScan 浏览器的区块验证者](https://polygonscan.com/blocks)) 被选中来提议 64 个连续的区块 (一个 sprint)。

![](https://storage.googleapis.com/papyrus_images/eb0955000f6937cdfeb2e5ed5fe06dee5c8561a864e8b4900c7cb02e4c8b97ea.png)

接下来是 [Heimdall 检查点系统](https://medium.com/the-polygon-blog/heimdall-vaibhav-chellani-the-all-seeing-all-hearing-protector-of-matic-bb1df6515c09)，更多数量的验证者 (目前[上限为 100](https://wallet.polygon.technology/staking/)) 会就 Bor 区块最后 30 分钟的摘要快照达成 ⅔ “PoS” 共识，并将该快照作为检查点发布在以太坊上。然而，尽管这个系统现在有 100 名验证者，但前 4 名验证者的质押占比为 53%，前 7 名验证者的质押占比为 67% ([见此处](https://wallet.polygon.technology/staking/validators/)，点击“显示全部”并按质押权重排序)。并且，⅔ 多数达成共识这一要求指的是质押的权重，而不是验证者的数量。这意味着，只需攻击并控制 7 个私钥，链上的所有资产 (而不仅仅是桥接上的资产) 都能通过恶意检查点被盗走 —— 且质押者必须一直保持他们的私钥为联网的状态。此外，由于 ⅔ 的质押占比为达成共识的要求，而 43% 的质押权重由 3 名验证者控制，只需攻击 3 个热钱包就足以完全冻结提款和检查点。

![](https://storage.googleapis.com/papyrus_images/aa58ec14a5eff78b5431be8e09e40b561a6b74eb2973f34b0b2313a380728b1f.png)

质押总量为 2,307,879,127 MATIC，前七名验证者质押了 1,540,761,159 MATIC (~67%)

合约升级可以用来抵御作恶检查点 (假设能够快速检测到作恶行为的话) —— 但这有其自身的安全风险，我们接下来会讨论这个问题。

桥接安全
----

Polygon 桥接与 Ronin 桥接的不同之处在于，检查点系统免除了独立验证者集对每笔存款和提款签名的需要。然而，这意味着该桥接的安全性完全依赖于 Heimdall 系统和 Bor 共识，这很容易受到上述攻击。

![](https://storage.googleapis.com/papyrus_images/e7b0853e28cb8683f97bc8e539d75508c3623f7d686cdf82121410bf25012654.png)

此外，Polygon 使用一个 [5/8](https://etherscan.io/address/www.notion.so) 的多签系统来治理他们的桥接智能合约，并且合约升级可以在没有时间锁的情况下立即进行。这可以抵御智能合约出现漏洞或者上述讨论的对质押权重高验证者攻击的情况。4 个私钥由 Polygon 创始人持有，这种架构已经被社区的安全研究人员[强烈批评](https://twitter.com/Justin_Bons/status/1492561186310733824)，因为只需再多另一个私钥就有可能通过恶意升级将 Polygon 合约的所有资产 (50 亿美元以上) 盗走。然而，由于 Polygon 的签名者不需要对每一笔存款和提款交易签名，这些管理员私钥可以保持离线，使得他们被攻击的机会更小。

Immutable
=========

[Immutable](https://immutable.com/) 是为高质量、高可扩展性的 NFT 项目 (如游戏) 而搭建的一个平台。Immutable 上一些著名的项目包括 Illuvium、Gods Unchained、Ember Sword 和 Guild of Guardians。

共识安全
----

Immutable 是一个 zk-rollup，使用 [StarkWare](https://starkware.co/) 的 StarkEx 证明/验证系统构建。这意味着 Immutable 对 L2 交易批次排序，并生成一个 STARK 证明以证明这些交易有效，然后提交证明至一个 L1 智能合约的 “验证器” 中，该验证器更新一些 L1 状态 (在我们的情况下，指的是包含数百万用户 NFT/余额的默克尔树的根)。重要的是，这比单纯地将交易打包成批次交易这种方法扩展性要高得多，因为 STARK 证明的验证成本与交易数量呈次线性比增长。

![](https://storage.googleapis.com/papyrus_images/2b31d7a8872eae78115da4040eba2cadb1622703791e2f950c06941db4d42ba3.png)

由于所有状态转换都必须获得 L1 智能合约的验证，所以 Immutable 永远无法将无效的交易放入 rollup 中，抑或是盗窃用户资产，即便在 Immutable 的系统被完全破坏的情况下也无法做到。这是一个极其强大的安全属性，这也是为什么 [Vitalik 称 rollup 为“以太坊在可预见的未来里关键的扩容解决方案”。](https://vitalik.ca/general/2021/01/05/rollup.html)

然而，Immutable 以 “单一运营者” rollup 的形式运行中 (只有 Immutable 能够排序或证明交易)。这意味着 Immutable 能够[通过抢跑或重新排序交易的方式来提取 MEV](https://ethereum.org/en/developers/docs/mev/)。目前，几乎所有 rollup 都是 “单一运营者” 的模式，但大多数都计划逐渐去中心化其 rollup。

桥接安全
----

Rollup 使用了与侧链完全不同的桥接结构，因为它们在 L1 上维持着一个经过验证的 “状态”，而这个 “状态” 只有通过一个有效的证明才能更新至 L1 上。用户想要桥接资产的话，则需要这个已验证的状态已经包含了该用户的存款/提款 —— 没有可以攻击的多签系统 (如 Ronin), 也不可以通过攻击验证者私钥来添加 "无效的" 状态转换 (如 Polygon) —— 每笔交易都被验证过，就像这笔交易发生在 L1 上一样。这种去信任的桥接就是使得 rollup 被称为 “L2” 的原因 —— 它们的安全性直接依赖于以太坊的共识，而不是依赖于一个具有可信桥接的单独共识机制。

![](https://storage.googleapis.com/papyrus_images/5595314924384ed2f06935607b2a851ba255970572bd00493313621e6e2a6625.png)

![](https://storage.googleapis.com/papyrus_images/85fad7a6f83e34e8b5515d9567b7d271a1fe8985ad43f6123929481a414b20f1.png)

在任何时候，用户都可以提交一笔 “提款” 交易，将他们的资产从 L2 桥接至 L1。如果 Immutable 将此交易包含在已证明的状态变化集合中，用户就能去信任地将其资产直接提到以太坊中。如果 Immutable 没有执行这笔提款 (不管是因系统不可用还是故意审查交易)，用户总是能够通过直接与 L1 桥接合约交互来执行 “完全提款” 流程。

如果这个新提交的 “完全提款” 请求没有得到响应，交易状态将会被冻结，然后所有用户都将能够通过提供他们在状态默克尔树中的资产路径来执行提款。即便 Immutable 作恶或是离线，都能确保用户能够访问这些数据，这就是 [“rollup 的数据可用性问题”](https://blog.polygon.technology/the-data-availability-problem-6b74b619ffcc/)。在标准的 zk-rollup 结构中，这有一个简单的解决方案：要求在允许状态更新之前将必要的数据发布到以太坊 L1 上。然而，这引入了一个小型的线性 gas 成本，而许多应用都不愿意支付。这种成本在合并后也不会改变，但会通过 [EIP-4488](https://eips.ethereum.org/EIPS/eip-4488)、[proto-danksharding](https://notes.ethereum.org/@vbuterin/proto_danksharding_faq) 和 (最终的) [sharding](https://ethereum.org/en/upgrades/shard-chains/) 等提案大幅减少，因为以太坊接受了它作为 rollup 的基础验证和数据可用性层的角色。

然而，由于这些解决方案都没有上线，而且在链上发布 calldata 的成本对于像需要高可扩展性的 NFT 铸造这样的用例来说仍然令人望而却步。幸运的是，Immutable 目前作为一个 [validium rollup](https://ethereum.org/en/developers/docs/scaling/validium/) 运行。Validium rollups 这种 zk-rollups 不发布重建状态所需的所有数据，以换取更便宜的交易费。为了确保这些数据即使在 Immutable 离线或作恶的情况下仍然可用，Immutable 依赖于一个 “数据可用性委员会” (Data Availability Committee, DAC)。这个委员会 (由生态系统的著名公司组成) 的绝大多数成员和几个 “强制性” 成员必须对每个交易批次签名，以证明他们拥有必要的数据。这与验证者多签模式不同：只要任意一个 DAC 成员是诚实的，用户就能够成功提款。即便在所有 DAC 和定序者都被破坏的数据扣留攻击中，Immutable 仍然可以利用合约升级来防止勒索攻击。

![](https://storage.googleapis.com/papyrus_images/7e31fc5cd9cb622e11342da968430a25317ffeacb682d477f1d4fa48c7ef050a.png)

Immutable 的 rollup 验证器合约可升级，但会有一个为期 14 天的时间锁，用户要是对新合约不满意的话可以有机会退出系统 (即便在 Immutable 恶意审查交易的情况下)。

Immutable 正向 [Volition 模式](https://medium.com/starkware/volition-and-the-emerging-data-availability-spectrum-87e8bfa09bb)转变，在这个模式中，个别 “金库” (用户、代币、数量元组) 可以被标记为需要链上数据。由于存储在 rollup 中的大部分价值要么是余额有很多代币/ETH 的账户，要么收藏了高价值的 NFT，这些价值可以存储在一个相对较少的链上数据存储库中。这种结构可能会让 rollup 金库中的大部分价值由链上数据提供支持，减少数据可用性风险，同时保留实现便宜、高可扩展性的 NFT 铸造的能力，这对游戏等项目至关重要。

**Solana**
==========

[Solana](https://solana.com/) 作为一个完全独立 L1 区块链运作，通过一个[自定义的共识机制](https://solana.com/solana-whitepaper.pdf)专注于实现低成本、高可扩展性的交易。

共识安全
----

Solana 目前有超过 1500 个活跃节点，但它确实对这些节点施加了[很高的硬件要求](https://vitalik.ca/general/2021/05/23/scaling.html)以实现其更高的 TPS (然而这降低了个人参与验证交易的能力，这对区块链去中心化来说是一个很重要的原则)。重要的是，仅 [20 个节点](https://solanabeach.io/validators)这么少的数量就持有网络质押 SOL 代币的 33% 以上。如果这些节点合谋了，又或者被攻击了，他们就能够使网络停止运作或任意审查交易。

桥接安全
----

作为一个完全独立的 L1，Solana 和以太坊之间没有官方桥接。不过，对 Solana 用户来说最常使用 (半官方) 的桥接就是 [Wormhole](https://wormholenetwork.com/) (虫洞)，它允许在多条链之间转移资产。Wormhole 的安全性[依赖于一组被称为 guardian (守护者) 的验证者](https://medium.com/certus-one/introducing-the-wormhole-bridge-24911b7335f7)，所有桥接交易都需要达成 ⅔+1 的 PoA 共识。[目前有 19 个活跃的守护者。](https://wormholenetwork.com/network/) 由于 Solana 和以太坊无法验证者对方的交易，当用户需要桥接资产时，桥接合约完全依赖于守护者达成的共识。这意味着，如果 ⅔ 的守护者被攻击了，Wormhole 里的所有用户资产都可能被盗走。这种机制实际上与 Ronin 使用的机制非常相似，并且很不幸的是，守护者的私钥也必须保持在线状态来对新交易进行签名。

![](https://storage.googleapis.com/papyrus_images/99496d1aab2c16c43e724282a1890a47da888769f9089850a845bec21ceae87a.png)

在 2022 年初，Wormhole 桥接中的一个 bug 使得 [3.25 亿美元的用户资金被盗](https://www.theverge.com/2022/2/3/22916111/wormhole-hack-github-error-325-million-theft-ethereum-solana)。此次事件实际上不是验证者系统受到了攻击，而是攻击者发现了一个智能合约的漏洞，并通过这个漏洞欺骗桥接在 Solana 上发行没有在以太坊上进行存款的 ETH。Jump Crypto [介入使用户得到补偿](https://decrypt.co/92709/jump-crypto-wormhole-defi) —— 这令人惊讶地表明了加密货币的口袋里到底装了多少资产，但随着该领域的发展，这是一个完全不可持续的模式。这并不是对 Solana 或 Wormhole 的控诉 —— 所有的链上系统都容易出现智能合约漏洞。虽然不可能有绝对的保证，但最好是使用经过审计或正式验证过的合约，这些合约经受住了时间和公众审查的考验 —— 例如，Wormhole 在出现漏洞后受到了严格审查，后来没有发现更多漏洞了。

**Optimism**
============

Optimism 是一个由 Optimism PBC 开发的以太坊 optimistic rollup。它于 2021 年 8 月上线主网 (上线初期采用白名单制)，到目前为止，NFT 项目的应用有限，不过在 [Quixotic](https://quixotic.io/) 等市场上有一个早期社区。

共识安全
----

Optimistic rollup 的运作原理类似于 zk-rollup：收集交易并上传所有这些状态转换的最终状态的压缩版本。然而，当 zk-rollups 为每个状态转换提供一个 “有效性证明” 时，optimistic rollup 的状态转换被假设为有效，除非有人能提出一个 ”欺诈证明“，这表示该交易无效。提出欺诈证明的人会受到奖励，而发布无效交易的人会受到惩罚。为了允许这种挑战的发生，optimistic rollup 需要在交易完全敲定前有一周的争议时间延迟。这种异步性引入了一类有趣的[潜在经济攻击](https://medium.com/starkware/validity-proofs-vs-fraud-proofs-4ef8b4d3d87a)，而缓解这些攻击是一个活跃的研究课题。

![](https://storage.googleapis.com/papyrus_images/4898796366e57c8af26651fda00c9e5e679228e5ea38be12e64d81b99da2ab74.png)

然而，Optimism 的[欺诈证明目前是禁用的](https://l2beat.com/projects/optimism/) —— 意味着 Optimism (或任何破坏Optimism多义词的人) 可以通过提交无效的状态转换来盗取所有的用户资金。当然，这是一个临时情况，一旦新的欺诈证明系统准备好了，就会升级，但在目前的状态下这对用户资金造成了严重的威胁。由于 Optimism 是一个单一定序者的 rollup，它也会面临潜在的 MEV 提取。

桥接安全
----

Optimistic rollup 也提供了一条通往以太坊的去信任桥接。然而，由于任何用户都可以在一周争议期内的任何时候挑战该批次交易的有效性，被提款到 L1 的资产至少在这段时间内被锁定。对于同质化代币资产，可以使用 “[快速提款](https://medium.com/onther-tech/fast-withdrawals-in-optimistic-rollups-part-1-6fbb93abf1c3)” 来规避这种资产锁定 (在假设状态转换不包含欺诈交易的情况下，有效地借给用户)。然而，由于 NFT 是唯一的且不能被替代的，用户必须等待整个争议期 (长达一周)，然后才能将他们的资产转移回以太坊 L1 上。

Optimism (像所有 optimisitic rollup 一样) [需要在链上发布中间交易数据](https://research.paradigm.xyz/optimism#data-availability-batches)，所以它可以被有效地挑战 —— 这产生了更高的费用，但规避了任何复杂的数据可用性架构，正如在分析 Immutable 时讨论的那样。

核心平台之外需要考虑的安全
=============

如果你的项目的安全性由于其他机制受到了攻击，那么即便这个项目在拥有最好的安全性的核心平台上也没用了。为了真正地做出明智的决定，NFT 项目还需要考虑共识/桥接安全性之外的各种因素，包括：

*   **钱包安全**：用户的私钥是如何存储的？如果这个存储系统被攻击，会有什么影响 (例如，某个托管钱包的供应商，某个不好的本地钱包应用程序，某个质量很差的浏览器扩展程序依赖)？
    
*   **元数据安全**：资产的元数据 (包括图像) 是如何存储的？如果这些元数据由于受到攻击而被更改或替换，会对市场有什么影响？
    
*   **项目安全**：任何平台上的项目通常都为其项目保留一些管理员私钥。如果这些私钥被攻击，会发生什么？你的项目是否有主动监测漏洞的功能？你所在的平台是否支持私钥管理的最佳实践？
    
*   **财库安全**：大多数平台都会有大量的代币储备 (例如，用于奖励或资助)。这些资金是如何保存的？对于财库内的资产转移是如何授权和执行的？如果受到了攻击会有什么影响？
    
*   **市场安全**：支持该协议的市场如何保护用户，让其避免像山寨项目这样的恶意交易行为？
    

上述提到的任何一个环节受到攻击，都可能使拥有最安全的底层平台的用户受到伤害 —— 显然，任何人吹嘘自己的项目是无懈可击的都不可信。不幸的是，当处理一个新的资产类别时，特别是一个增长如此迅速的资产类别，会有一些人不断地寻找新的漏洞和可攻击点。在这样的环境中，在为你的项目选择正确的平台时，充分理解你们所面对的取舍至关重要。

ECN的翻译工作旨在为中国以太坊社区传递优质资讯和学习资源，文章版权归原作者所有，转载须注明原文出处以及ethereum.cn，若需长期转载，请联系[eth@ecn.co](http://mailto:eth@ecn.co/)进行授权。

---

*Originally published on [EthereumCN](https://paragraph.com/@ethereumcn-2/nft-3)*
