1.引入

Hyperledger Fabric私有链码(FPC)是一个开源项目,它使通道上的节点(区块链网络中节点的子集)在TEE内执行智能合约,特别是在Intel SGX Enclave内。由于物联网设备大多体积小,可能由电池供电,并嵌入低功耗处理器,FPC不容易在这种情况下部署,这极大地阻碍了其在论文的目标部署场景中的适用性。

image-20210613153529814

Fig1描述了论文预想的部署场景:一个异构的、可能分布的节点集合加入了区块链;智能合约必须跨通道执行,只有少数节点受到保护,免受攻击。例如,攻击者可以破坏一个通道,获得对其节点的访问权并收集敏感信息。为了遏制攻击并防止攻击传播到其他通道,某些通道的智能合约可以在TEE内执行。受到TEE保护的节点可以免受恶意攻击,特别是作为物联网设备部署在“野外”的节点更容易受到此类攻击。

本论文提出了结合ARM TZ的Hyperledger Fabric链码执行的原型系统TZ4Fabric。TZ4Fabric体系结构受到FPC的启发,但它隔离了TEE组件。该设计不仅可以利用ARM TZ,还可以TZ4Fabric扩展到未来的TEE。

2.背景

区块链和智能合约

在许可的区块链中(如Ripple和Hyperledger Fabric),网络的访问是受限制的,实体是已知的。

image-20210613160859297

Hyperledger Fabric (HF)是一个支持智能合约的许可区块链,在HF中,智能合约称为链码。Fig2给出了HF的高层架构和工作流程,在链码函数被调用之前,它必须被安装(存储在文件系统上)并在对等端实例化。

  • 1、2:客户端应用向对等端发送请求(交易提出),来调用链码函数;对等端执行链码函数
  • 3:对等端向客户端发送交易响应,交易响应由对等端签名,并包含执行响应消息以及读集合和写集合,读集合代表对等端在执行期间通过 GetState 从账本中查询到的所有键值,写集合包含对等端通过 PutState 生成的所有键值对更新
  • 4:当客户端收集了由认可策略定义的足够多的交易响应时,将它们发送给排序端,排序端将交易响应放入区块,并将它们分发给所有对等端,这是排序阶段。之后在验证阶段,每个对等端检查是否满足认可策略以及不同交易的读和写是否由冲突,然后就把交易写在账本上,账本包含两个促成部分:一个区块链和一个世界状态,世界状态是一个可插拔的数据库,用于存储和有效检索区块链中的键的当前值

ARM TrustZone

提供硬件组件,用于在ARM处理器上启用TEE。OP-TEE是一个流行的开源运行时,支持ARM TZ。ARM TZ的安全世界和正常世界的切换是通过安全监控呼叫(SMC)进行的。系统资源是严格隔离的:正常世界不能访问安全世界的资源(如内存、外设等)。在安全世界的引导过程中,将建立信任链,并对安全世界的软件映像进行完整性检查——这个过程称为安全引导。

3.威胁模型

考虑一个强大的攻击者,他拥有管理权限,并且可以物理访问所有支持ARM TZ的节点。进一步假设操作系统和用户空间在正常情况下是不可信的。但是假定TEE(包括引导加载程序、固件、OP-TEE和安全监视器)是可信的。

由于ARM TZ本身并不支持远程认证机制,因此攻击者可能会在协议执行之前试图破坏它。链码在正常情况下作为可信应用程序(TA)存储,并使用构建密钥进行签名。ARM TZ在运行时不提供完整性保护。本论文不考虑侧信道攻击。

4.TZ4Fabric架构

支持ARM TZ的设备通常是低功耗嵌入式设备,其中许多都是由电池供电的,它们资源(存储和内存)有限。TZ4Fabric依赖于Go编程语言环境、HF、OP-TEE以及gRPC等包,这些包不仅需要几百兆的持久存储,而且在运行时也需要几百兆的内存,因此论文提出通过代理将大型系统组件(如HF和Docker)与轻量级安全相关组件(如链码)解耦。

在设计中,链码操作及其响应中可以包含敏感信息,必须保护这些信息免受恶意攻击。因此,将链码存放到一个支持TEE的嵌入式设备。将TZ4Fabric分为三大组件:作为链码驻留在对等端上的包装器、代理、链码本身。包装器通过gRPC和代理通信,代理和链码运行在基于ARM的环境中,并使用TrustZone,其中代理在正常世界,链码在安全世界。论文的设计利用OP-TEE框架来进行代理和链码之间的交互。

包装器被安装和实例化为链码,并被用作对等端和账本的接口。它将来自客户端的输入调用转发到安全世界中的链码,处理与账本的通信,并将交易响应发送回对等端。

代理充当中介,在包装器和链码之间转发调用。它负责从正常世界到安全世界的上下文切换。

链码实现了区块链应用程序逻辑,并由客户端通过包装器调用。在执行过程中,链码可以使用代理通过 getStateputState 命令访问账本。

论文的设计允许在一个单一的安全世界中实例化和运行多个链码。

论文的原型侧重于在HF中包含ARM TZ,而没有实现一个机制在网络中复制链码。链码在原型中作为OP-TEE中的TAs执行,链码使用与机器上运行的OP-TEE相同的构建系统进行编译,TA使用原始的构建密钥进行签名,并可选地加密。因此,在调用链码之前,必须将每个链码编译到TA并在目标机器上安装,然后,链码可以在目标机器上复制并直接调用,而不必经过生成TA的过程。在原型中,为链码生成了一个TA,并将其部署在所有启用ARM TZ的代理上。