《Town Crier:An Authenticated Data Feed for Smart Contracts》论文阅读

论文Town Crier:An Authenticated Data Feed for Smart Contracts阅读报告

    • 背景及要解决的问题
    • 主要的贡献
    • 相关知识
    • 机制和安全模型
      • 组件及其作用简介
      • 安全模型分析与假设
      • TC机制分析
        • 数据报周期
        • 数据流
    • 两个关键的安全特性
      • gas可持续
      • 综合可信计算基(TCB)最小化
    • 结果分析

本文发表于第23届ACM计算机和通信安全会议,作者是美国康奈尔大学的博士候选人 Fan Zhang,另外几名作者都是其康奈尔大学的校友或老师, 论文可以在这下载。读完论文以后,就文章内容进行一个简要的解读,比较粗浅,欢迎批评指正,一起讨论。

背景及要解决的问题

论文主要针对的是智能合约,为智能合约提供一个用经过身份验证的数据馈送,该系统的名字也比较接地气----「城市小贩」,顾名思义就是为智能和合约提供数据支持的一个个数据提供商,后面为方便起见我们就称之为“小贩”吧。
智能合约的概念在1994年被萨博(Szabo)提出,由于比特币等加密货币的实现(尤其是以太坊,被证明是图灵完备的),为自我执行的分布式合约提供了可信的计算环境,比如日常的汽车贷款付款、保险等都可以通过该智能合约自动完成。但需要注意的是,智能合约的执行离不开真实生活中的数据,简单的例子,飞机延误险的理赔需要知道飞机是不是有延误、取消等异常情况。另外一个问题是数据的隐私性,尽管区块链的分布式的特点能够让每个人都去记账,从而达到防抵赖、防篡改的目的,但从另一个角度来看也是区块链的缺点,所有区块状态都是公开可见的,数据馈送可能会暴露出用户的请求,隐私性被破坏。
小贩所做的事就是处理上述的两个挑战,在智能合约和外部网络(论文假设外部的数据是可信的、真实的)中构建一座数据流通的桥梁,智能合约提供经过身份验证的数据馈送。小贩检索网站数据,然后将其作为依赖于区块链上的合同的数据,称只为数据报。同时小贩利用Intel可信组件SGX作为前端,以SGX安全区中受信任的代码段的形式执行其核心功能,从而保护其免受恶意进程和OS的侵扰,并可以向远程客户端证明该客户端正在与SGX支持的合法TC实例进行交互。小贩也支持隐私数据片段的请求,此时参数被小贩的公钥加密,加密过程在SGX中完成,因此数据片段和数据的请求在区块链上是被隐藏起来的。

主要的贡献

论文设计并实现了小贩机制,该机制可以广泛应用于智能合约的部署,且可以完成目前以太坊不能完成的吞吐和效率。实现的三个智能合约实例分别是:

  1. 使用股票报价器数据的金融衍生产品;
  2. 依赖于有关航班取消的私人数据请求的飞行保险合同;
  3. 使用自定义数据请求访问用户帐户的以太坊货币以太币(通过Steam Marketplace)销售虚拟商品和在线游戏的合同。

除此之外,论文的其他贡献主要集中在:

  • 介绍并报告了Town Crier的端到端实施,这是一种经过身份验证的数据馈送系统,可解决采用分散式智能合约的关键障碍。TC将以太坊中的智能合约前端和基于SGX的可信硬件后端结合在一起,以在没有可信服务运营商的情况下将经过身份验证的数据提供给智能合约,以及支持私有和自定义数据请求,支持加密请求和 安全使用访问控制的链下数据源。
  • 在通用组合(UC)框架内正式分析TC的安全性,定义了代表链上和链外组件的功能。 正式定义并证明数据报真实性和公平支出以及gas可持续性的基本属性,这是任何以太坊服务的基本可用性属性。
  • 引入了跨区块链和SGX enclave的混合可信计算基(TCB),这是可信赖系统组成的强大新范例。 我们提供了有助于在此模型中缩小TCB代码大小的通用技术,以及弥补各个SGX平台漏洞的技术。
  • 我们探索了三种小贩应用程序,这些应用程序显示了小贩能够支持远远超出当今以太坊的服务范围的能力。 这些应用程序的实验还表明,小贩可以轻松满足现代分散式区块链的延迟和吞吐量要求。

相关知识

小贩主要引入的技术包括可信执行环境(主要是Intel的SGX)、TLS/HTTPS以及智能合约

  • 可信执行环境SGX。可信执行环境是通过硬件实现或者软件技术实现的一个安全的代码运行环境,可以理解为一个黑盒子,将执行的代码放在黑盒子里,提供输入最后获取输出,整个执行的过程不能被外界更改,也不能被观察到,可以认为是安全的安全的模型。目前使用比较多的是SGX以及TrustZone,本论文实现过程也依赖的是SGX环境。个人理解TCB的概念就是一组可以在SGX内部安全运行的最小程序指令集合。
  • TLS/HTTPS。 关于TLS和HTTPS可以自行查阅资料。 正如我们稍后将解释的那样,小贩利用了HTTPS的重要功能,即可以将其划分为可互操作的层:与Web服务器交互的HTTP层,处理握手和安全通信的TLS层以及提供可靠数据流的TCP层。
  • 智能合约。尽管小贩原则上可以支持任何智能合约系统,但我们在本文中将重点放在以太坊中的使用上,我们现在将解释其模型。以太坊中的智能合约表示为所谓的合约账户,具有代码,货币余额和键/值存储形式的永久内存。合同接受消息作为许多指定功能中任何一个的输入。合同创建者确定的这些入口点代表合同的API。合同一旦创建,便会自动执行。它可以无限期地保留,甚至其创建者也无法修改其代码。合同代码的执行是响应于收到来自另一个合同的消息或来自非合同(外部拥有)帐户。因此,合同的执行总是由交易启动的,智能合约可以被视为区块链上的自治代理。以太坊有自己的关联加密货币称为以太币。 为了防止DoS攻击,防止合同内无意的无限循环以及总体上控制网络资源支出,以太坊允许基于以太坊的购买称为gas的资源。每项操作(包括发送数据,执行计算和存储数据)的gas成本都是固定的。交易包括一个参数gaslimit,该参数指定交易发起的计算所消耗的气体量的界限。当一个函数调用另一个函数时,可以选择为子调用指定一个较低的gaslimit,该子调用将消耗与父代相同的池中的gas。如果功能由于gas不足而无法完成,则会中止,并且部分计算引起的任何状态更改都将回滚到其调用前状态;但是,保留了呼叫路径上的先前计算,并且仍然消耗了gas。交易与gaslimit一起指定了gaspricegasprice是该交易愿意为每单位天然气支付的最大以太币金额。因此,只有在启动帐户的余额大于gaslimit x gasprice时交易才会完成且被矿工记账,且此时的gasprice要比“市场价”略高,使得矿工有利可图这笔交易才会被记账。

机制和安全模型

组件及其作用简介

小贩包含三个主要的组件:

  • TC Contract, 小贩智能合约( CTC。CTC是一种智能合约,充当小贩的区块链前端。 它旨在为依赖合同的CU提供一个简单的API,以向小贩提出请求。 其接受来自CU的数据报请求,并从小贩返回相应的数据报。
  • Enclave, SGX飞地程序(progencl。在SGX enclave中运行的小贩智能代码实例简称为飞地,并用progencl表示代码本身。Enclave提取并完成来自区块链的数据报请求。 为了获取要包含在数据报中的数据,它查询外部数据源,特别是启用HTTPS的Internet服务。 它将数据报作为数字签名的区块链消息返回到请求合同CU
  • Relay, 中继(R)。由于在SGX中缺少直接的网络访问,因此将R布置在enclave中代替其处理双向的数据流量处理,提供了从飞地到三个不同实体的数据连接,即区块链、客户和数据源

Enclave和Relay驻留在TC服务器上,而TC Contract驻留在区块链上。 我们将利用Town Crier服务作为请求者或依赖合同的智能合约称为“用户智能合约”,我们将其表示为CU,并将其所有者称为客户或用户。 数据源是一个在线服务器(运行HTTPS),该服务器为TC提供用来构成数据报的数据。 图1给出了TC的架构示意图,显示了它与外部实体的交互。
《Town Crier:An Authenticated Data Feed for Smart Contracts》论文阅读_第1张图片
需要注意的是,图中R作为TC Server的一部分,不受到SGX的保护,可以被外部攻击,从而导致延迟和失败。但根据小贩实际的初衷,R一般不会产生错误的数据(因为这样他们可能会支付gas),只会产生拒绝服务攻击。

安全模型分析与假设

  • TC Contract。小贩的合约全局可见,且源代码被客户共享,因此假设CTC行为诚实可信。
  • Data Source。假设客户信任从HTTPS上获得的数据报,同时假设数据源稳定、在特定的时间间隔可以产生请求者所需要的数据。
  • Enclave。飞地程序正确执行合约代码;每个飞地产生的公私钥对(skTC,pkTC),私钥尽自己知道;飞地程序内部有确切的时间。
  • Blockchain communication。交易和消息源是可验证的,即,接收方帐户将从钱包WX发送的交易m标识为源自X。交易和消息受到完整性保护,但不是机密信息。
  • NetWork comunication。 中继可能会篡改或延迟与Enclave之间的通信。 正如我们在SGX安全模型中所解释的那样,中继不能以其他方式观察或改变安全区的行为。因此,中继可以被控制网络的对手所占领。

TC机制分析

小贩的整体流程相对简单,一个用户合约CU向小贩智能合约CTC请求数据,CTC将请求转发给飞地,然后等待其返回数据报。

数据报周期

大致可以分为以下几个步骤:

  • 初始化请求。CU给CTC发送一个数据报请求。
  • 监视和中继。 中继监视CTC,并将带有参数***params***的数据报请求中继到飞地。
  • 飞地获取数据。 为了处理在***params***中指定的请求,Enclave通过HTTPS与数据源联系并获取请求的数据报。它通过中继将数据报转发到CTC
  • 返回数据报。 CTC将数据报返回给CU

数据流

CU发出的数据报请求采用消息m1=(params, callback)的形式发送给区块链上的CTCparams指定所请求的数据报,例如params=(url,spec,T),其中url是目标数据源,spec指定要检索的数据报的内容(例如,特定时间的股票行情自动收录器),以及T指定数据报的传递时间(通过抓取数据源启动)。 m1中的参数回调指示数据报将返回到的入口点。 CTC生成一个新的唯一ID,并将m2=(id,params)转发给Enclave。作为响应,它从TC服务接收m3 =(id,params,data),其中data是所请求的数据报(例如所需的股票行情价格)。 CTC检查请求和响应上的参数的一致性,如果匹配,则将数据转发到消息m4中的回调入口点。为了简单起见,我们假设CU发出一次数据报请求。因此,它可以简单地将m4与m1匹配。论文的完整协议包含一个优化,通过该优化,CTC在m1之后将ID作为所有数据流的一致,可信赖的标识符返回给CU。这使得直接处理来自相同CU实例的多个数据报请求成为可能。图2显示了处理数据报请求所涉及的数据流。为简单起见,该图省略了中继,该中继仅负责数据传递。需要数字签名来验证消息,例如m3,这些消息将从外部来源进入区块链。我们让(skTC,pkTC)表示与Enclave关联的用于此消息身份验证的私钥/公钥对。为了简单起见,图2假定Enclave可以将签名的消息直接发送到CTC
《Town Crier:An Authenticated Data Feed for Smart Contracts》论文阅读_第2张图片

两个关键的安全特性

gas可持续

以太坊的费用模型要求汽油费用由发起交易的用户支付,包括因交易确认不断调用而产生的所有费用。这意味着发起对以太坊合约的调用服务必须花费金钱来执行那些调用。如果没有精心设计,这可能会导致财务耗尽,并导致应用程序层拒绝服务攻击。因此,对于基于以太坊的服务的可用性至关重要的是,始终向其发起的区块链计算报销它们的费用。为了确保服务不会受到此类攻击的影响,我们定义了gas可持续性,这是基于区块链合同的服务的活力所必需的新条件。gas可持续性是任何以太坊服务永续发展的基本要求。它也可以推广到以太坊之外;任何基于分散式区块链的智能合约系统都必须收取某种费用,以补偿矿工进行和验证计算的费用。

令bal(W)表示以太坊钱包W的余额。
定义1(K-Gas可持续性)  具有钱包W和区块链功能f1,....,fn的服务是K-gas可持续的充分条件是:
1.如果在执行任何fi之前bal(W)≥K;
2.服务诚实运行,则在每次执行由W发起的fi时,bal(W)≥K。

具体的实现可以观看论文section 6。

综合可信计算基(TCB)最小化

在涉及智能合约与链下可信计算环境(例如SGX)交互的系统中,TCB是具有不同属性的两个组件的混合体。智能合约中的计算速度慢,成本高且完全透明,这意味着它不能依赖秘密。 SGX飞地具有强大的计算功能并可以私下执行,但是所有外部交互(尤其是与合同的通信)都必须经过不受信任的中介。尽管此混合TCB的功能强大且远超过TC,但仍带来了挑战:在组件之间建立安全的通信,同时最大程度地减少TCB中的代码。
由于以太坊块是使用Merkle树进行自我认证的,因此原则上我们可以通过在TCB中包含以太坊客户端来实现OAuth。这样做极大地增加了代码占用空间,但是,以太坊的核心实现大约是5万行C ++。类似地,智能合约可以通过检查证明来验证来自SGX的消息,但是在智能合约中实现veri275认证将很容易出错,并且在计算上(因此在经济上)昂贵。相反,我们提出了两种通用技术来避免这些调用,从而最大程度地减少TCB中的代码大小第一种适用于任何TCB组件为区块链合同的混合系统第二个适用于TCB组件仅通信以发出和响应请求的任何混合系统。将TOff绑定到WTC。由于链上TCB的计算速度快且成本高,我们希望避免实施签名验证。确实存在一个预编译的以太坊合同,以验证ECDSA签名,但是操作需要高昂的燃气费用。取而代之的是,我们在这里描述如何将TOff的身份绑定到以太坊钱包,这使TOn可以简单地检查消息发件人,该消息发件人已经作为以太坊交易协议的一部分进行了验证。关键观察是信息只能作为来自钱包的交易插入以太坊区块链。因此,中继器可以将消息从TOff中继到TOn的唯一方法是通过钱包WTC。由于以太坊本身已经验证了交易上的签名(即用户通过经过身份验证的渠道与以太坊进行交互),因此我们可以在现有交易签名验证机制的基础上piggy带TOff签名的验证。简而言之,TOff使用新的公钥pkOff创建WTC,该公钥的秘密只有TOff知道。为了使这个想法充分发挥作用,必须将公共密钥pkOff硬编码到TOn中。创建或依赖使用TOn的合同的客户负责确保与TOn交互之前,此硬编码的pkOff具有适当的SGX证明。总而言之,通过假设依赖客户端已经验证了TOff的证明,我们可以假定从WTC发送的数据报被信任为源自TOff。这样就无需在TOn中进行昂贵的EPID签名验证。另外,SGX可以将pkOff密封在非易失性存储中,同时保护完整性和机密性,使我们可以通过服务器重启来保持相同的绑定。

结果分析

论文实现了三种智能合约的实例,经过检验小贩能够在这三种模型下正确提供数据,且区块的大小、响应时间、gas花费都优于以太坊。

关于小贩的应用可以参考文章

写在最后:本人是个小白,对论文理解不是很深,不正确的地方还希望指正,也希望有相关兴趣的可以一起交流下。谢谢!

你可能感兴趣的:(区块链,智能合约)