本文发表在USENIX‘19上,实现了在比特币平台上以较低的成本执行任意复杂的智能合约。FastKitten通过使用TEE来隔离合约执行,支持在任何有限数量的参与者之间执行任意多轮智能合约。该系统可以在任何加密货币之上运行,只需要有限的脚本功能。本文实现的prototype通过一个脚本引擎支持任意的合约,并通过对一个可证明的公平的在线扑克游戏进行测试来评估性能。
PROBLEM
智能合约一直被认为是去中心化加密货币的杀手锏之一,它们能够根据复杂的程序逻辑在用户之间实现自我加强的支付。但是比特币作为规模最大应用最广泛的加密货币之一,并不提供对复杂智能合约的支持。此外,可以在比特币上执行的简单合约往往设计繁琐,执行成本非常高。以太坊作为对智能合约支持良好的另一主流加密货币,也存在执行成本高,保密性低的问题。本文的三个主要贡献分别是:
-
支持在任意加密货币上运行FastKitten,实现多轮智能合约的执行。
-
只需要低成本就能实现高效的链外执行。
-
在强对抗模型中正式分析了FastKitten的安全性。
DESIGN
在FastKitten中,只需要一个TEE来完成合约执行,可以由合约参与者之一或外部服务提供商来提供,将运行TEE的参与方称为operator。在系统设计中,需要考虑恶意的operator的可能行为。
①首先,为了防止operator中止TEE或者忽略、传递错误的消息,FastKitten设计了penalty transaction,该交易锁定了operator的货币,在行为不当的情况下,这些货币可以用来退还用户并惩罚operator。
②为了确保恶意operator不能编造虚假的区块链证据,FastKitten简化了验证流程,由检查全部区块改为从特定的chekpoint block开始检查;同时在验证交易是否需要被整合到区块中时,设置了一个必须确认交易的最小区块数,使得伪造区块对于恶意的operator来说在计算上是不可行的。
③虽然FastKitten希望通过减少与区块链的互动来减少开销,但也存在需要与区块链交互解决冲突的情况。这里使用了一个challenge-response协议来确定恶意行为的发起者,该协议的开销由参与挑战的双方平分。
④恶意的一方还可能会对合约执行平台进行DDoS攻击,即要求平台执行一个永远不会停止的合约。以太坊中通过让用户对合约执行的每一个步骤支付gas费,但FastKitten中无法确定应该由哪一方承担费用,为此引入了一个超时机制来防止DDoS攻击,即限制每一轮执行中的最大步骤数量。
如下图所示,FastKitten的一个实例由一个主机进程和一个enclave组成,主机进程负责初始化enclave配置、处理与参与者的链接以及通过网络进行区块链通信。enclave中则包含一个脚本引擎和几个辅助库(如用于生成和验证交易的加密库以及用于在主机进程和enclave之间传递数据的接口库)。
协议分三个阶段进行,分别是setup phase、round computation和finalization phase。在round computation中,operator会不断向参与者发送上一轮的输出,参与者验证输出后发送下一轮输入给operator,enclave会收到各方的输入,如果某一轮没有收到某个参与者的输出,enclave需要确定是operator存在恶意还是参与者没有发送,于是enclave将惩罚operator,除非operator对参与者进行challenge-response,如果参与者回应了,则继续执行协议,如果没有回应,operator也可以证明参与者的行为不端。
CONCLUSION
在evaluation中,FastKitten测试的互动在线游戏,参与者之间有几毫秒的回合延迟。在security analysis中证明并彻底分析了一般框架的安全性,也广泛地评估了它在一些用例和基准中的性能。此外,还讨论了许多可针对FastKitten进行的扩展,如支持私有状态和安全输入,提升智能合约的机密性;支持可能跨越多种不同加密货币的合约,每个参与者可以使用ta喜欢的货币来处理合约中的资金。本文与上一次分享的Ekiden很相近,但本文主要针对复杂的反应式多轮合约的链外执行,而Ekiden主要是为单轮合约执行设计的。
原文始发于微信公众号(COMPASS Lab):论文分享|FastKitten