论文阅读《Ekiden: A Platform for Confidentiality-Preserving, Trustworthy, and Performant Smart Contracts》

摘要

智能合约是在区块链上执行的应用程序。今天,他们管理着数十亿美元的价值,并为广泛的区块链部署制定了有远见的计划。尽管智能合约继承了区块链的可用性和其他安全保证,但是由于区块链缺乏机密性和性能低下,它们受到阻碍。我们介绍了Ekiden,该系统通过将区块链与可信执行环境(TEE)相结合来解决这些关键差距。 Ekiden利用新颖的体系结构将共识与执行分开,从而实现了高效的TEE支持的保密性智能合约和高可扩展性。我们的原型(以Tendermint作为共识层)实现了比以太坊主网高600倍的吞吐量和400倍的延迟,而成本却降低了1000倍。本文的另一个贡献是,我们系统地识别和处理了统一TEE和区块链所产生的陷阱。 TEE和区块链被分开对待,提供了有力的保证,但是尽管混杂在一起,但它们会引发新的攻击。例如,在朴素的设计中,TEE支持的合同中的隐私可能会因伪造区块(似乎无关的攻击媒介)而受到损害。我们相信,从Ekiden获得的见解将在混合TEE区块链系统中被证明具有广泛的重要性。

基本信息

论文发表于 Computer Science 2019 IEEE European Symposium on Security and Privacy(Euro S&P),作者是Raymond Chen, 康奈尔大学(Cornell University)博士Fan Zhang和Jernej Kos等共九人。主要针对区块链在隐私保护方面和处理性能方面的缺陷,将可信执行环境和区块链结合起来完成了高效的隐私数据的处理,并提出两者结合后出现的问题并采取手段进行解决。

背景

智能合约做为一种可以可以在分布式多方中强制执行的数字合约,其一经被制定便不能被轻易修改(即便是合约的上传者),智能合约通过强制执行的机制在各方传递信任。智能合约主要运行在以太坊网络中,本身的数据是公开的且允许多方对数据进行验证,尽管这一点方便了监管,但对于用户的隐私来说却是致命的,用户的敏感数据被智能合约公开,隐私无处可藏。另外,智能合约系统在算力、存储能力和交易带宽方便也严重受限,最流行的智能合约平台—以太坊,如今只能处理简单的应用,复杂智能合约的应用只停留在理论阶段。

比较流行的解决方法包括ZKCP,即零和知识证明,数据被加密后不需要进行解密得到明文就可以验证结果的正确性。在智能合约中用户上传隐私数据进行处理,然后得到的结果解密后可以得到相应的结果。但是ZKCP的系统性能开销和负载被诟病。更广泛的用法是使用可信的执行环境(TEE),如SGX、TrustZone等。TEE开辟一个完全独立的环境,避免其他软件、操作系统以及第三方用户篡改、监测计算的过程和结果。

区块链和可信执行环境的结合,两者具有互补的特性:一方面,区块链能够保证可用性和状态的永久存储,相对而言,TEE出错时会被终止执行,可用性得不到保证,且TEE将运算结果输出后就会退出,不会进行持久化存储;另一方面,区块链的算力、隐私保护特性不足,TEE具有较强的算力、运算过程保密很好地弥补了区块链的缺陷。
基于以上互补特性,Ekiden采取将计算共识分割开的机制。计算节点在线下的TEE环境中完成隐私数据的计算,并向区块链提供正确计算的证明;共识节点维护区块链账本,需要验证计算节点计算的正确性并,共识节点不需要可信的执行环境。TEE将智能合约的计算放在链下的可信执行环境中,降低了链上的负载和计算的延迟;TEE内部执行保证了隐私特性,

但两者结合后会面临新的问题,主要是以下几个:

  1. TEE可能在运行时被终止。其主要原因是TEE内部缺少可信的时间戳。
  2. 侧链攻击
  3. 密钥管理

这些将在后文中详述。

Ekiden协议详述

动机

考虑一个信誉评估系统。信誉评分已被放贷人,保险公司和其他机构广泛用于评估消费者的信用度。尽管这方面的收入可观,但美国的信用报告行业仍集中在少数征信机构之中。 这种集中化会造成大量的单点故障和其他问题,最近影响到近一半美国人口的数据泄露突显了这一点。因此,基于区块链的分散式信用评分是一种有吸引力且受欢迎的选择。为了支持信用评分等大规模,对隐私敏感的应用程序,在保持区块链提供的完整性和可用性的同时满足这两个要求非常重要-所有这些都不需要可信的第三方。 Ekiden提供了一个机密,可信赖和高性能的平台,可以精确地实现智能合约执行的这一目标。

协议概述

从概念上讲,Ekiden为丰富的用户定义的智能合约实现了安全的执行环境。 Ekiden合同是确定性的有状态程序。在不失一般性的前提下,论文假设合同程序采用 ( o u t p , s t n e w ) : = C o n t r a c t ( s t o l d , i n p ) (outp,st_{new}):=Contract(st_{old},inp) (outp,stnew):=Contract(stold,inp)的形式,将先前的状态 s t o l d st_{old} stold和客户的输入inp做为输入,并生成输出outp和新状态 s t n e w st_{new} stnew

一旦在Ekiden上部署,智能合约将具有强大的保密性,完整性和可用性保证。 Ekiden通过将可信硬件和区块链相结合的混合架构来实现这些特性。上图描绘了Ekiden的体系结构和Ekiden智能合约的工作流程。如图所示,Ekiden中存在三种类型的实体:客户端计算节点共识节点

  • 客户端:客户是智能合约的最终用户。在Ekiden中,客户可以使用秘密输入来创建合同或执行现有合同。客户端都将计算委托给计算节点(在下面讨论)。客户是轻量级的,允许移动和Web应用程序与合同进行交互。
  • 计算节点:计算节点通过在合同TEE中运行合同并生成状态更新正确性的证明来处理来自客户端的请求。拥有TEE平台的任何人都可以作为计算节点参与,提升系统的活跃性和可伸缩性。法定计算节点构成密钥管理委员会,并运行分布式协议来管理合同TEE使用的密钥。合同TEE与密钥管理委员会联系以创建或检索密钥。
  • 共识节点:共识节点负责维护一个分布式的区块链账本,合约状态和证明机制以append-only的形式添加到账本中。同时,合约节点使用TEE证明来检测更新的状态是否合法,验证计算节点计算的正确性。

Ekiden协议流程

为简单起见,假设客户端具有要使用的计算节点的优先级列表,可以采用协调器来促进计算节点发现和负载平衡。我们将客户端表示为 P \mathcal{P} P,将计算节点表示为 C o m p \mathrm{Comp} Comp

  1. 合约创建:创建合约时, P \mathcal{P} P给计算节点 C o m p \mathrm{Comp} Comp发送合约代码 C o n t r a c t \mathrm{Contract} Contract C o m p \mathrm{Comp} Comp C o n t r a c t \mathrm{Contract} Contract加载到TEE内部,开始合约的初始化。TEE创建一个新的合约id,即 c i d \mathrm{\color{blue}cid} cid,密钥管理委员会产生新的公私钥对 ( p k c i d i n , s k c i d i n ) (\mathrm{pk^{in}_{\color{blue}cid},sk^{in}_{\color{blue}cid} }) (pkcidin,skcidin)和合约状态的密钥 k c i d s t a t e \mathrm{k^{state}_{\color{blue}cid}} kcidstate,并且产生加密后的初始状态 E n c ( k c i d s t a t e , 0 ⃗ ) \mathrm{Enc(k^{state}_{\color{blue}cid},\vec{0})} Enc(kcidstate,0 )和用来证明初始状态正确性的证明 σ T E E \sigma_{TEE} σTEE C o m p \mathrm{Comp} Comp从证明服务获得 σ T E E \sigma_{TEE} σTEE证明的证据,将其与 σ T E E \sigma_{TEE} σTEE一起绑定在 π \pi π中,该变量已被证明。 C o m p \mathrm{Comp} Comp向共识节点发送 ( C o n t r a c t , p k c i d i n , E n c ( k c i d s t a t e , 0 ⃗ ) , π ) \mathrm{(Contract, pk^{in}_{\color{blue}cid},Enc(k^{state}_{\color{blue}cid},\vec{0}),\pi)} (Contract,pkcidin,Enc(kcidstate,0 ),π)消息,共识节点收到消息后先验证 π \pi π的正确性,而后选择是否接受合约代码 C o n t r a c t \mathrm{Contract} Contract,加密后的初始状态和合约的密钥 k c i d s t a t e \mathrm{k^{state}_{\color{blue}cid}} kcidstate被存储到区块链中。
  2. 请求执行
    2.1 请求执行智能合约时,用户选择要执行合约的 c i d \mathrm{\color{blue}cid} cid并提供输入 i n p \mathrm{inp} inp P \mathcal{P} P首先获得与合约 c i d \mathrm{\color{blue}cid} cid相对应的合约公钥 p k c i d i n pk^{in}_{\color{blue}cid} pkcidin,用获得的公钥对数据用户输入进行加密,即 i n p c t = E n c ( p k c i d i n , i n p ) \mathrm{inp_{ct}=Enc(pk^{in}_{\color{blue}cid},inp)} inpct=Enc(pkcidin,inp);而后将加密后的数据以及合约id发送给计算节点,即向计算节点 C o m p \mathrm{Comp} Comp发送消息 ( c i d , i n p c t ) ({\color{blue}cid}, inp_{ct}) (cid,inpct)
    2.2 计算节点收到 P \mathcal{P} P发送的消息后,检索合约代码并且使用合约密钥 k c i d s t a t e k^{state}_{\color{blue}cid} kcidstate对合约的当前状态进行加密,即 s t c t = E n c ( k c i d s t a t e , s t o l d ) \mathrm{st_{ct}=Enc(k^{state}_{\color{blue}cid},st_{old})} stct=Enc(kcidstate,stold)。加密完成后将合约状态 s t c t \mathrm{st_{ct}} stct和来自 P \mathcal{P} P的输入均加载到TEE中进行运算。
    2.3 TEE从密钥管理委员会中获得合约的解密密钥 k c i d s t a t e k^{state}_{\color{blue}cid} kcidstate s k c i d i n sk^{in}_{\color{blue}cid} skcidin,解密 s t c t st_{ct} stct i n p c t inp_{ct} inpct得到合约的状态和客户端的输入。执行合约代码,获得输出 o u t p \mathrm{out_p} outp和合约状态更新为 s t n e w \mathrm{st_{new}} stnew,对新的合约状态进行加密, s t c t ′ = E n c ( k c i d s t a t e , s t n e w ) \mathrm{st'_{ct}= Enc(k^{state}_{\color{blue}cid},st_{new})} stct=Enc(kcidstate,stnew)。最后,提供数字签名 π \pi π来验证计算结果的正确性。
    2.4 计算完成后TEE执行一个原子操作,将运算结果输出给 P \mathcal{P} P并将新的合约状态和证明 ( s t c t ′ , π ) \mathrm{(st'_{ct},\pi)} (stct,π)发送给共识节点。原子操作的概念是两者必须都成功送达,不能出现一方成功另一方失败的情况,否则会产生不一致问题,系统被攻击。

Ekiden与现有智能合约平台(例如,以太坊)之间的主要区别是Ekiden将请求执行与共识脱钩。在以太坊中,网络中的所有节点都会复制请求执行以达成共识,从而使整个网络的速度与单个节点一样慢。而在Ekiden中,请求仅由K个计算节点执行,用于一些较小的K(例如,将K设置为1),并且共识节点仅验证K个正确执行的证明,而无需重复执行。

安全性分析

正确执行:合状态转换反映了合同代码在给定状态和输入上的正确执行。

一致性:在任何时候,区块链都存储与每个计算节点的视图一致的单个状态转换序列。

隐私性:在没有违反任何TEE的时期内,Ekiden保证合同状态和诚实客户的输入对所有其他方都是秘密的。此外,Ekiden可以抵抗某些关键管理器TEE的破坏。

保密性降级:如果在计算节点(而不是密钥管理器节点)中发生保密性破坏,Ekiden可提供前向保密性并与受影响的TEE进行合理隔离。具体来说,假设机密性破坏发生在t时刻。攻击者最多可以访问直到t − ∆的历史记录,其中∆是系统参数。如此,受损的TEE仅会影响合约的子集。

问题分析及解决措施

区块链存储证明

为了利用区块链作为持久性存储,TEE必须能够有效地验证项目已存储在区块链中。对于许可的区块链,这样的证明可以包括来自一定数量共识节点的签名。为了建立基于PoW的区块链的发布证明,TEE必须能够验证新区块。不幸的是,通过安全信道的定时源(例如SGX定时器)不能保证有限的响应时间。为了解决此限制,论文利用TEE的机密性,以使攻击者延迟计时器的响应不会阻止enclave成功验证区块链内容。我们的解决方案甚至可以在没有为SGX计时器给予信任的情况下工作,例如启用TLS的NTP服务器。论文V-A节详细叙述了PoW区块链的发布证明协议。

密钥管理

使用区块链保持TEE状态的基本限制是缺乏机密性。但另一个问题:如何才能保留加密密钥?如何进行密钥的分发与管理?

通常,该方法是跨多个TEE复制密钥。但是,面对保密漏洞(例如,通过旁信道攻击)时,不稳定的一面是最大程度地降低密钥泄露风险。通常,暴露风险和可用性之间存在根本的紧张关系:较高的复制因子不仅意味着对状态丢失的弹性更好,而且意味着攻击面更大。因此,权衡和可实现的属性将取决于威胁模型。

由于可能没有确定的和实用的全系统边信道缓解措施,因此我们的方法是针对密钥管理器设计一个更强大的对抗模型,在该模型中,允许攻击者破坏一小部分TEE的机密性,并限制来自其他组件的访问。论文V-B节中概述了密钥管理协议。基本思想是从众多参与者中选出N个节点组成密钥管理委员会(KMC),初始化合约时KMC调用DKG协议生成无偏的随机密钥 k c k_c kc作为长期密钥,该密钥只在KMC内部传播;然后利用该长期密钥产生短期密钥用做协议的执行运算,短期密钥一定时间后作废然后重新产生,动态淘汰。

执行结果的原子传递

在区块链系统中,确保执行的原子性,即两个执行 e 1 , e 2 e_1,e_2 e1,e2完成或都不执行,已成为一个基本问题。在TEE-区块链合并中出现了类似但更复杂的问题。

对于一般的有状态TEE区块链协议,TEE执行会产生两条消息: m 1 m_1 m1 m 2 m_2 m2均通过对抗性通道将输出传递给调用方,而 m 2 m_2 m2将状态更新传递给区块链。我们强调必须强制原子传递这两个消息,即同时传递 m 1 m_1 m1 m 2 m_2 m2或系统永久不可用。当呼叫者接收到 m 1 m_1 m1时,就将其发送出去。一旦状态被区块链接受,就会交付新状态 m 2 m_2 m2。拒绝状态更新不视为已交付。

要了解原子传递的必要性,请考虑在违反原子传递时(即,仅传递两个消息之一时)可能发生的攻击。首先,如果仅输出输出 m 1 m_1 m1,则倒带攻击变为可能。由于TEE无法判断输入状态是否新鲜,因此攻击者可以提供陈旧状态,以从旧状态恢复TEE的执行。这样可以针对随机的TEE程序进行攻击。攻击者可能会反复倒带,直到收到所需的输出为止.另一个例子是,倒带可能会破坏基于预算的隐私保护,例如差异隐私。另一方面,如果仅传送状态更新 m 2 m_2 m2,则用户可能会遭受输出永久性损失的风险,因为可能无法以更新后的状态再现相同的输出。论文在第V-C节中详述了原子传送协议,基本思想如下:

假设TEE与客户端P之间的通信通道是安全的,通过以下两阶段协议实现 m 1 m_1 m1 m 2 m_2 m2的原子传递:(1)交付时,TEE从密钥管理器获取新密钥 k k k,并通过安全通道将经证明的消息 m 1 c = E n c ( k , m 1 ) m_1^c = Enc(k,m_1) m1c=Enc(km1)发送给 P \mathcal{P} P。(2) 一旦 P \mathcal{P} P确认收到 m 1 c m_1^c m1c后,TEE将 m 2 m_2 m2发送到区块链。最后,在看到 m 2 m_2 m2发布的证明 π m 2 \pi_{m_2} πm2后,TEE将密钥k发送给 P \mathcal{P} P

以上协议实现了原子传递。一方面,由于TEE可以通过验证 π m 2 \pi_{m_2} πm2来确定 m 2 m_2 m2的传递,因此只有在 m 2 m_2 m2被传递时才显示密钥k。另一方面,如果已交付 m 2 m_2 m2,则最终将释放k,因为至少有一个TEE可用,并且密钥管理协议确保了k的可用性。

实现

论文实现了Ekiden的系统,大约7.5k行Rust代码,不确定是不是这个开源项目。除此之外,Ekiden可以与现存的区块链系统兼容,可扩展性较强。

实现的应用场景

  1. 机器学习智能合约。正确性和隐私性。
  2. 智能建筑热建模。表明系统对在线环境中的高度交互工作负载具有足够的响应能力。
  3. ERC20代币合约。Ekiden能提供匿名和隐私性。
  4. 扑克游戏。
  5. CryptoKitties。
  6. Origin

实验结果分析

  1. ERC20代币合约中,相较于以太坊,吞吐率增大了600倍,延迟降低了400倍,交易成本降低了1000倍。
  2. Ekiden可以有效支持计算密集型工作负载,例如机器学习应用程序,但这些对以太坊来说是成本高昂的。
  3. 批处理,缓存和预写日志可以提高性能,并降低与区块链同步状态的网络成本。

相关论文和项目

隐私智能合约

  • Hawk
  • Hyperledger Private Data Objects(PDO)
  • Microsoft Coco Framework

区块链交易隐私

  • ZeroCash
  • Cryptonote
  • Solidus
  • ZeroCoin

基于可信硬件的隐私保护系统

  • M 2 R M^2R M2R
  • VC3
  • Opaque
  • Ohrimenko
  • Ryoan

总结

论文整体比较详细,主要针对智能合约在隐私保护和性能低的问题,将智能合约和可信执行环境结合在一起,利用两者互补的特性将计算和共识分隔开,提高性能的同时又保护了隐私。
困惑和不足:

  1. 计算节点向共识节点证明运算结果的正确性怎么证明?论文中有描述,但是没看懂,有看明白的大佬可以讲讲。
  2. 计算的结果不需要加密,那么这个结果万一是涉及一些隐私呢,会不会破坏隐私特性?

本人水平有限,以上内容不保证正确,欢迎大家批评指正,一起讨论学习。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值