一文了解基于 TEE 的智能合约以及密封隐患
2023-02-0818:05
论道 Web3 云服务
2023-02-08 18:05
论道 Web3 云服务
2023-02-08 18:05
收藏文章
订阅专栏


原文由 Andrew Miller 撰写,本文为原文译文,以下请 Enjoy:
https://medium.com/initc3org/tee-based-smart-contracts-and-sealing-pitfalls-eccd5d751329
 

前段时间,SGX.Fail(https://sgx.fail/部分团队成员和我联合发布了一份研究,其中包含了对影响 Secret Network 的漏洞披露。

Secret Network 是首个将可信执行环境 TEE 用于实际应用的智能合约系统,除此之外,还有几个与 TEE 技术密切相关的竞争项目也已推出了公共测试网,即 Oasis、Phala 和 Obscuro。

我们发布的研究披露引发了广泛的讨论,包括 Phala、Oasis 和 Secret 在内的这些项目都发表公开声明,解释其网络因为该项 TEE 漏洞可能会受到多大程度的影响以及其网络在开发中为应对漏洞问题采取的解决措施。

虽然这四个项目一直相互独立构建,但 TEE/SGX 漏洞必然会对所有使用 TEE 技术的项目构成共同威胁,这表明其实这些项目之间有机会合作

尽管他们还将面临很多未知挑战(包括可能出现的新 SGX 漏洞,以及对 Intel 中心化服务的固有依赖等),但项目达成合作的商机仍有望增长。

其中一个机遇与挑战并存的方向是 TEE 与多方安全计算 (MPC) 等加密技术的混合,而这也是我接下来讲述的重点。

与此同时,我们还需要讨论基于 TEE 的区块链的更基本的设计问题。最重要的是,我想解释 SGX 基于代码签名策略的数据持久化方案在错误使用的情况下可能导致漏洞。

具体来说,鉴于 Secret Network 当前的设计,开发人员代码签名密钥可直接用于解密主密钥,甚至无需利用任何漏洞或侧信道[1]。其他项目的测试网也在一定程度上存在这个问题。

除此之外,我还会指出几个基于 TEE 的智能合约可能会共同工作以加强整个领域的其他方面。

[1]:侧信道攻击是计算机安全中的一种攻击手段,它利用了计算机系统的非正常通信渠道来获取敏感信息。例如,攻击者可以通过观察计算机的电流、电压、功耗等信息来猜测计算机的密码或私钥。因此,在计算机系统的设计和使用中,应该注意保护系统免受侧信道攻击的威胁。


1
 基于 TEE 的智能合约

Web3 Cloud Service

TEE 是一种为智能合约增加机密性的方法TEE 或 Enclave 是支持隔离和远程认证的安全处理器硬件,其中最常用的是 Intel SGX。

这种方法灵活且高效,可支持现有的智能合约引擎,如 EVM 和 CosmWasm,而没有与 zkSNARKs 和 MPC 等密码学技术相关的开销[2]

[2]:开销是指使用特定的加密技术(如 zkSNARKs 和 MPC)所带来的负担或成本。这些技术在运算速度、存储空间和其他方面可能需要更多的资源,因此使用它们可能会增加开销。

该方法在包括 Ekiden、PDOs、Kaptchuk、Green、Miers 在内的研究论文中有所描述。

Secret Network 是第一个将其投入生产使用的网络,它自 2020 年以来一直在运行,并且已经为很多实时应用程序提供服务,包括 DeFi、NFT 等。除此之外,Oasis、Phala 和 Obscuro 等项目也已启动了公共测试网,很快将会启动主网。

对于上述的项目来说,使用 TEE 的基本原则都是相同的:交易和合约状态是加密的,只有在安全的 TEE Enclaves 中才能访问它们

以 Secret Network 为例,所有的解密密钥都来自一个主密钥,即“共识种子 Consensus Seed”,它被复制到网络上的所有 Enclaves 中。

要想获得共识种子的副本,Enclaves 必须完成远程认证过程。

这个远程认证过程涉及从英特尔认证服务(IAS)获取一个带有签名的报告,该报告表明您已在具有最新微码的处理器上运行正确的程序。

整个系统的隐私依赖于 TEE 的能力,它可以使得即使是物理环境中的节点运营商也无法在它运行时读取其内部状态

而接下来的很多讨论将重点以 Secret Network 为主。

虽然 Secret Network 存在部分漏洞,但不可否认的是,Secret 已经利用他们的先发优势做出了很多贡献,他们推出的几个非常先进的实用性应用程序都展示了其 TEE 的隐私功能,例如私有 NFT(https://tarantinonfts.com/)和 Stashh 市场(https://stashh.io/)就是最好的例子。

例如,用户可以购买一个 NFT,其中包含有凯文·史密斯未发行电影的秘密访问代码。(根据 Stashh 市场数据显示,其二手现价为 50 美元)。原则上,任何拥有者都可以泄露这个访问代码,如果他们愿意的话,但据我所知,还没有人这么做,因为它没有出现在任何在线搜索中。

具体信息可参阅 reddit:
https://www.reddit.com/r/ViewAskewniverse/comments/xtw8is/has_anyone_here_seen_kevs_new_movie_killroy_was/iuia7j7/?context=10000

因此,如果人们想看凯文·史密斯的未发行电影,购买 NFT 并查看私有的元数据是唯一的方法,这很好地证明了私有智能合约可以做什么。

讨论 1:TCB 恢复计划的必要性


TCB Recovery 大致是英特尔对发现可利用漏洞后发生的一切的名称,这可能是 SGX 生态中最不为人知的方面。


我将对最近的 AepicLeak 和 TCB Recovery 进行足够的解释,以帮助大家了解这两者与区块链有什么关系,但有关更多详细信息,读者们可以阅读我们的论文和 SGX.Fail 网站。


AepicLeak(https://aepicleak.com/)于 8 月公开披露

与研究人员发现的其他漏洞一样,AepicLeak 的公开披露是经过协调的,因此英特尔和许多硬件供应商在发布公告的同时发布了微码和 BIOS 补丁。

这可能给一些人(就像我一样)留下了这样的印象:在披露发布之前,IAS 已经采取了所有适当的缓解措施。

首先让我解释一下,我预计 IAS 在 AepicLeak 披露日期之前将如何运作。

每次 Enclave 需要生成远程认证时,它都必须与 IAS 交互,发送一些硬件和微码状态的某种表示,并接收认证报告作为响应。签名的认证报告包括状态标志和可选的详细建议列表。

因此,我预计作为第一道防线的 IAS 会针对我能找到的任何易受攻击的平台返回 SA-00657 警告(针对 xAPIC 漏洞的官方警告)。当我开始大量购买硬件时,这似乎是一个很难的事情。


*** 英特尔 IAS 无法评估证明 Enclave 是否具有必要的软件缓解措施,并且英特尔 PCS 不提供证明抵押品来评估证明 Enclave 是否具有必要的软件缓解措施。

如果当时我对 TCB Recovery 有更多的了解,我会对官方警告做出不同的解释。

该官方警告称计划进行 TCB Recovery,并估计将在 2023 年第一季度完成(后来改进为 2022 年第四季度)。

这是一个巨大的过度简化,但用户可以将 TCB Recovery 的日期视为 IAS 要求在发布新证明之前应用微码更新的时间。

SGX.Fail 论文的主要要点之一是 IAS 很难选择一个满足所有 SGX 应用程序的 TCB Recovery 计划

例如,如果 IAS 在云服务提供商可以修补之前返回新的错误代码,则 SGX 应用程序可能变得不可用。公开披露日期和 TCB Recovery 日期之间的延迟是可用性风险和机密性风险之间艰难妥协的结果。

基于 TEE 的区块链必须准备好执行 TCB Recovery 计划,而无需等待 IAS。最紧迫的行动必须是阻止新的易受攻击节点加入。

虽然该漏洞仅影响某些处理器,但公开披露可作为一个如何找到用于发起攻击的硬件的“提示”。

Secret Network 开发人员知道 AepicLeak,但他们估计(就像我一样)没有任何机器能同时满足 a) 易受 AepicLeak 攻击,b) 能够通过基于 IAS 的认证检查,所以他们决定开放注册。

因此,即使 AepicLeak 已经公开披露了将近两个月,我们仍然能够找到合适的硬件直接侵入共识种子 Consensus Seed。

作为对我们披露的回应,Secret Network 开发人员通过撤销他们在 IAS 的项目账户,来立即停止了新 Enclave 节点的注册

我们乐观地认为,机会窗口因此已经被关闭了,这种潜在的用户数据泄露永远不会发生,尽管警告用户这种可能性很重要。

必须接受的是,无论微码更新如何,任何已经在网络上的故意未打补丁的机器今天都会继续构成威胁。Secret Network 的开发人员估计,当时在网络上注册的节点中有 4% 可能存在漏洞。

第一个要点是,每个基于 TEE 的区块链都需要为下一个 SGX 漏洞制定 TCB Recovery 计划,尤其应该计划在最早接到通知时执行相当于冻结注册的计划。

该计划是一个应该出现利基范围[3]最佳实践的领域。据我了解,在公开声明之前,没有任何开发团队收到有关 AepicLeak 的预先警告。利基市场可能会联合起来更好地与英特尔协商 / 倡导,以获得提前通知。

[3]:可以理解为与某个特定领域或专业区域相关或适用的东西,此处特制的是 TEE 这个细分领域。

Secret Network 的部分回应是开发密钥轮换机制。密钥轮换意味着停止使用旧的主密钥,将每个合约的当前状态迁移到新密钥,然后继续处理在新密钥下加密的交易

一旦轮换密钥后,即使旧密钥最终被破坏,新交易也不再有被解密的风险。Phala 已经实现了密钥轮换,Oasis Sapphire 仍在继续开发中,且 Oasis 计划在完成密钥轮换机制之前启动他们的主网。

讨论 2:分区化


当然,事后看来,在发生问题后分析这些很容易,但对我来说,选择与任何通过认证的节点共享共识种子似乎风险太大。


Secret Network 的开发者解释说这是一种有意的设计权衡,因为它通常有利于保持网络的活力(需要更多节点崩溃才能停止网络)并使 API 端点和其他服务更容易运行。


其他基于 TEE 的区块链有何不同?我们可以从 Obscuro 的文档中推断出,他们的主密钥复制方法与 Secret Network 的相似,因为任何“有效的 TEE”,无论是聚合者(质押者)还是验证者(不需要质押),都会获得主种子的副本。

一种替代方法是 2018 年 Ekiden 发表的论文中解释的“分区化”。

Ekiden 有两层 TEE 节点:关键管理者和工作者。工作者在需要知道的基础上收到特定于合同的密钥,这样即使遭到泄露,他们也只会了解最近区块链状态的一部分。

密钥管理者节点仍然存储主密钥,但它们的数量较少并且可能需要一些抵押存款或从已知和受信任的实体中选择。

Oasis 和 Phala 都像 Ekiden 一样具有多层。在 Oasis Sapphire 测试网中,密钥管理者目前由 6 个节点组成,尽管他们的主网启动可能会有一个更大的委员会。

他们的帖子指出,他们“将这些委员会的成员限制为受信任的合作伙伴,作为一项额外措施,以防止未知的不良行为者试图利用Æpic 等漏洞。”

在 Phala 中,与 Oasis 类似,有权访问主密钥的“看门人”由他们的“议会”任命,这是一个链上治理流程。

虽然 Phala 也只是为他们的“Phat Contracts”系统启动了一个测试网,但该议会已经到位并且有 8 名成员,而且在此处记录了添加新看门人的动议。

总而言之,目前,Oasis 和 Phala 实施分区化以将主密钥限制在一个小委员会中,而 Obscuro 和 Secret 则更广泛地分发主密钥

这有什么好处?我们应该对这些委员会给予多少信任,我们究竟信任他们做什么?

这个问题与为 PoS 区块链建立验证者委员会相关但不同。

必须相信委员会成员不会利用下一个发生的 SGX 漏洞——在普通的权益证明区块链中没有这样的类比。它可能有助于定义一些利基范围的最佳实践,以了解从关于关键管理节点的透明度报告中期望得到哪些信息。

讨论 3:软件升级和 MRSIGNER 的问题


现在让我们进入这篇文章的重点。每个区块链项目都需要有一个软件升级过程,这需要将敏感数据(如主密钥)从旧 Enclave 迁移到新 Enclave 中


SGX 中最简单的方法是使用 "sealing with MRSIGNER" 特性。不幸的是,这会创建一个开发人员可以用来窥探主密钥的后门。我稍后会解释这一切意味着什么。


我对所有四个基于 TEE 的区块链代码库进行了快速调查(随后询问了意见),并确定 Secret 和 Obscuro 目前依赖于 MRSIGNER 密封,因此开发人员的代码签名密钥确实可以用来窃取主解密密钥而不留下任何证据,而 Oasis 和 Phala 则要求多个签名者在迁移发生之前都需要在链上发布的证明。

为了理解这个问题,我们需要从 TEE 中的“密封数据”开始,以及如何将其用于软件更新。

密封是在 Enclave 程序的调用之间保留数据的方法。例如,在 Secret Network 中,共识种子存储在密封文件“consensus_seed”中。

它是在节点第一次注册时创建的,然后在节点重新启动时加载。SGX 标准库提供了一个密封文件的抽象[4]。由一个 Enclave 创建的密封文件稍后可以被同一 Enclave 读取,但不能被不受信任的操作系统或任何其他 Enclave 读取。

[4]:指的是 SGX 标准库提供的一种用于管理和使用密封文件的抽象接口。这种抽象提供了一组简单的函数和数据类型,可以让开发人员使用它们来创建、读取和修改密封文件,而无需直接处理底层的密封实现细节。这样一来,开发人员就可以专注于应用程序的业务逻辑,而不必担心密封的底层实现。

在问题变得清晰之前,我再解释一下 SGX 的一个细节。SGX 提供两种密封密钥的策略:MRSIGNER 和 MRENCLAVE。MRENCLAVE 将密封数据绑定到创建它的程序二进制文件的哈希值中。

只有最初密封密钥的程序才能打开并访问它。另一种策略 MRSIGNER 将密封的数据绑定到开发人员的代码签名密钥。该策略表示,由相同开发人员签名的任何程序二进制文件都可以访问密封文件。

您不需要了解硬件侧信道就可以看到这里的问题。如果开发人员选择这样做,或者他们被胁迫或密钥被窃取,他们可以编写一个 Enclave 程序,以明文形式吐出共识种子,签名,然后在节点上运行。

代码签名密钥可用于直接检索主解密密钥,而无需利用任何 SGX 漏洞。这并不需要留下任何痕迹,开发者也很难提供他们没有这么做过的证据。

为什么要使用 MRSIGNER 呢?如果没有 MRSIGNER,部署软件更新将会更加困难。

所有基于 TEE 的区块链项目正在进行积极的开发和维护。

如果没有 MRSIGNER 密封数据,升级过程将更加复杂,因为运行新软件的节点需要重新注册。在 Phala 代码库的开发者讨论中,Shelven Zhou 非常清楚地解释了 MRSIGNER 的问题:

基于 MRSIGNER 的密封更容易实现,但它允许任何拥有签名程序的证书的人解密其密封数据。”

让我们从 Secret Network 开始。他们的文档明确指出“consensus_seed 是用 MRSIGNER 密封到本地文件。”查看这一过程发生的代码(storage.rs),可以看到共识种子是使用 Teaclave 库中 SgxFile 的默认选项来密封的,这的确是 MRSIGNER。

接下来,Obscuro 使用 EGo 库。它有两个选项,“seal_ex”(MRENCLAVE)和“seal”(MRSIGNER)。Obscuro 目前使用“seal”。Obscuro 开发人员证实,这是一个疏忽,而不是有意的设计选择。

Obscuro 的文档中提到“一组独立、可信、有能力的安全审核员必须分析代码,并通过仔细签署来批准它。”开发人员计划在他们的主网发布时在 Enclave 内强制执行这一点。

Phala 当前使用 MRSIGNER 密钥策略来密封主密钥。

然而,他们对 MRSIGNER 问题的详细讨论还包括实现一个更复杂的升级过程,该过程基于议会和 / 或看门人的法定人数签字,并要求在链上发布程序。他们的计划是在主网之前删除 MRSIGNER。

Oasis 仅使用 MRENCLAVE 进行密封。对于软件更新,他们实现了一种多密钥代码签名机制,需要 3 个代码签名者中的 2 个批准更新,然后主密钥才能从现有节点转移到具有升级软件的节点。此外,与 Phala 一样,程序二进制文件必须在链上发布。

我将在表格中总结到目前为止讨论的所有内容(但请注意,这不是详尽的,我们可以讨论更多的设计细节):


基于 TEE 的智能合约中选定的重要泄露发生时采取的缓解措施的非详尽总结。

主网中缺失的缓解措施为红色,而测试网络中的为黄色,因为它们仍然可以在任何敏感用户数据受到影响之前应用缓解措施。

Secret 的开发人员解释说,MRSIGNER 是一个深思熟虑的设计权衡。除了易于升级之外,出于安全考虑的一个论点是,更复杂的升级机制会引入更多潜在的漏洞,这些漏洞可能会阻塞网络或泄露共识种子

然而,我怀疑 Secret 的用户和开发者一般都不知道这个选择,或者还没有完全理解这个问题。一旦这个问题被讨论,我认为人们会达成一个明确的共识,那就是这是一个不必要的后门。

我的希望是在这篇文章之后,Secret 社区要求改变这一政策,并进行另一次密钥轮换,这样开发人员就不能单方面窥视密钥了。这将需要实现一种依赖于以下组合的升级机制:

  1. 开发人员代码签名

  2. 发布证明

  3. 需要多个独立的代码签名者,而不是只有一个


发布证明的意义在于,只有当他们的声誉真的受到威胁时,才值得要求一个可信的委员会签署代码更新。在不要求发布软件更新的情况下,该委员会可以合谋窃取主密钥,而不会被发现。

即使有了发布的证据,也不清楚代码签署委员会到底承诺做什么。没有一个项目因为他们的代码签名策略而获得“绿色”的原因是,我还没有看到关于声誉受到什么威胁的文档,以及他们在批准代码更新时遵循的流程。



致谢和披露:

我(Andrew Miller)是 Zcash 基金会的董事会成员,也是 Oasis 基金会 TAC 的成员,但与这里讨论的其他三个项目没有关系。这篇文章完全是我个人的观点,我的意图是尽可能保持中立。

感谢 Phala 的 Shelven Zhou、Oasis 的 Jernej Kos、Obscuro 的 Tudor Malene 和 Secret 的 Guy Zyskind 对这篇文章的评论。

一开始,我根据自己的代码评审和引用的代码片段编写了对这些代码库功能的描述,但我尽了最大努力根据开发人员的评论进行更正。如有遗漏是我的问题,而我做对的部分是在他们的帮助下完成的。






往期精彩回顾

原创科普

市场规模或达千亿?Web3 云为何获得众多资本垂青?

从十几亿暴涨至千亿规模的云计算究竟是什么来头?

打破中心化巨头垄断格局,Web3 云做出了哪些尝试?


观点聚焦

《羊了个羊》2 天崩 3 次?去中心化云会成为未来吗?

元宇宙&隐私计算碰撞会迸发出多么耀眼的火花?

深度丨一文了解隐私计算的前世今生


周报一览

周刊丨甲骨文发布 2023 年云计算领域的五大预测

周刊丨云存储平台 Wasabi 获 1500 万美元融资

周刊丨谷歌推出用于 Web3 开发的区块链节点引擎


【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。

专栏文章
查看更多
数据请求中

推荐专栏

数据请求中

一起「遇见」未来

DOWNLOAD FORESIGHT NEWS APP

Download QR Code