首页> 中国专利> 在FPGA上实现高效合约调用的方法及装置

在FPGA上实现高效合约调用的方法及装置

摘要

本说明书一个或多个实施例提供一种在FPGA上实现高效合约调用的方法及装置,该方法可以包括:FPGA结构向自身包含的FPGA芯片加载已部署的电路逻辑配置文件,以在所述FPGA芯片上分别形成片上处理器和片上缓存;其中,所述FPGA结构还包含与所述FPGA芯片相连的外部存储;所述FPGA结构确定所属区块链节点接收到的交易调用的智能合约;所述FPGA结构从所述片上缓存读取所述智能合约的代码程序以供所述片上处理器运行,所述代码程序由所述FPGA结构从所述外部存储获取并缓存至所述片上缓存。

著录项

  • 公开/公告号CN113157635A

    专利类型发明专利

  • 公开/公告日2021-07-23

    原文格式PDF

  • 申请/专利权人 支付宝(杭州)信息技术有限公司;

    申请/专利号CN202110276037.7

  • 发明设计人 潘国振;魏长征;闫莺;

    申请日2019-09-25

  • 分类号G06F15/78(20060101);G06F21/53(20130101);G06F21/60(20130101);G06F21/62(20130101);G06F21/71(20130101);

  • 代理机构11415 北京博思佳知识产权代理有限公司;

  • 代理人周嗣勇

  • 地址 310000 浙江省杭州市西湖区西溪路556号8层B段801-11

  • 入库时间 2023-06-19 11:57:35

说明书

技术领域

本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种在FPGA上实现高效合约调用的方法及装置。

背景技术

区块链技术构建在传输网络(例如点对点网络)之上。传输网络中的网络节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。

目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(Homomorphic encryption)和零知识证明(Zero-knowledge proof)等复杂度高,通用性差,而且还可能带来严重的性能损失。

可信执行环境(Trusted Execution Environment,TEE)是另一种解决隐私问题的方式。TEE可以起到硬件中的黑箱作用,在TEE中执行的代码和数据操作系统层都无法偷窥,只有代码中预先定义的接口才能对其进行操作。在效率方面,由于TEE的黑箱性质,在TEE中进行运算的是明文数据,而不是同态加密中的复杂密码学运算,计算过程效率没有损失,因此与TEE相结合可以在性能损失较小的前提下很大程度上提升区块链的安全性和隐私性。目前工业界十分关注TEE的方案,几乎所有主流的芯片和软件联盟都有自己的TEE解决方案,包括软件方面的TPM(Trusted Platform Module,可信赖平台模块)以及硬件方面的Intel SGX(Software Guard Extensions,软件保护扩展)、ARM Trustzone(信任区)和AMDPSP(Platform Security Processor,平台安全处理器)。

发明内容

有鉴于此,本说明书一个或多个实施例提供一种在FPGA上实现高效合约调用的方法及装置。

为实现上述目的,本说明书一个或多个实施例提供技术方案如下:

根据本说明书一个或多个实施例的第一方面,提出了一种在FPGA上实现高效合约调用的方法,包括:

FPGA结构向自身包含的FPGA芯片加载已部署的电路逻辑配置文件,以在所述FPGA芯片上分别形成片上处理器和片上缓存;其中,所述FPGA结构还包含与所述FPGA芯片相连的外部存储;

所述FPGA结构确定所属区块链节点接收到的交易调用的智能合约;

所述FPGA结构从所述片上缓存读取所述智能合约的代码程序以供所述片上处理器运行,所述代码程序由所述FPGA结构从所述外部存储获取并缓存至所述片上缓存。

根据本说明书一个或多个实施例的第二方面,提出了一种在FPGA上实现高效合约调用的装置,包括:

加载单元,使FPGA结构向自身包含的FPGA芯片加载已部署的电路逻辑配置文件,以在所述FPGA芯片上分别形成片上处理器和片上缓存;其中,所述FPGA结构还包含与所述FPGA芯片相连的外部存储;

确定单元,使所述FPGA结构确定所属区块链节点接收到的交易调用的智能合约;

读取单元,使所述FPGA结构从所述片上缓存读取所述智能合约的代码程序以供所述片上处理器运行,所述代码程序由所述FPGA结构从所述外部存储获取并缓存至所述片上缓存。

根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:

处理器;

用于存储处理器可执行指令的存储器;

其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。

根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。

附图说明

图1是一示例性实施例提供的一种在FPGA上实现高效合约调用的方法的流程图。

图2是一示例性实施例提供的一种区块链节点的结构示意图。

图3是一示例性实施例提供的一种在FPGA芯片上形成功能模块的示意图。

图4是一示例性实施例提供的一种片上缓存模块的结构示意图。

图5是一示例性实施例提供的一种在片上缓存模块中实现预加载的示意图。

图6是一示例性实施例提供的一种在FPGA上实现高效合约调用的装置的框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。

需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。

区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。

不论是公有链、私有链还是联盟链,区块链网络中的节点出于隐私保护的目的,均可能通过区块链与TEE(Trusted Execution Environment,可信执行环境)相结合的解决方案,在TEE内执行收到的交易。TEE是基于CPU硬件的安全扩展,且与外部完全隔离的可信执行环境。TEE最早是由Global Platform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。ARM的Trust Zone技术最早实现了真正商用的TEE技术。伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对TEE提出了更多的需求。TEE的概念也得到了高速的发展和扩充。现在所说的TEE相比与最初提出的概念已经是更加广义的TEE。例如,服务器芯片厂商Intel,AMD等都先后推出了硬件辅助的TEE并丰富了TEE的概念和特性,在工业界得到了广泛的认可。现在提起的TEE通常更多指这类硬件辅助的TEE技术。

以Intel SGX技术为例,SGX提供了围圈(enclave,也称为飞地),即内存中一个加密的可信执行区域,由CPU保护数据不被窃取。以第一区块链节点采用支持SGX的CPU为例,利用新增的处理器指令,在内存中可以分配一部分区域EPC(Enclave Page Cache,围圈页面缓存或飞地页面缓存),通过CPU内的加密引擎MEE(Memory Encryption Engine)对其中的数据进行加密。EPC中加密的内容只有进入CPU后才会被解密成明文。因此,在SGX中,用户可以不信任操作系统、VMM(Virtual Machine Monitor,虚拟机监控器)、甚至BIOS(BasicInput Output System,基本输入输出系统),只需要信任CPU便能确保隐私数据不会泄漏。因此,围圈就相当于SGX技术下产生的TEE。

不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用TEE的第一步就是要确认TEE的真实可信。例如,相关技术中提供了针对上述SGX技术的远程证明机制,以用于证明目标设备上的SGX平台与挑战方部署了相同的配置文件。但是,由于相关技术中的TEE技术是以软件或软硬件结合的方式实现,使得即便通过远程证明方式可以在一定程度上表明TEE内所部署的配置文件未经篡改,但是TEE本身所依托的运行环境却无法被验证。例如,在需要实现隐私功能的区块链节点上,TEE内需要配置用于执行智能合约的虚拟机,该虚拟机所执行的指令并非直接执行,而是实际上执行了对应的若干条X86指令(假定目标设备采用X86架构),从而造成了一定程度上的安全性风险。

为此,本说明书提出了一种基于FPGA实现的硬件TEE技术,FPGA通过加载电路逻辑配置文件而实现硬件TEE。由于电路逻辑配置文件的内容可以被预先查看与检验,并且FPGA完全基于电路逻辑配置文件中记载的逻辑而配置运行,因而可以确保FPGA所实现的硬件TEE具有相对更高的安全性。但是,相关技术中智能合约的代码程序都部署于区块链节点处,使得FPGA需要频繁从区块链节点获取代码程序,导致消耗大量资源。

以下结合实施例说明本说明书提供的一种在FPGA上实现高效合约调用的方法,以减少数据交互次数。

图1是一示例性实施例提供的一种在FPGA上实现高效合约调用的方法的流程图。如图1所示,该方法应用于FPGA结构,可以包括以下步骤:

步骤102,FPGA结构向自身包含的FPGA芯片加载已部署的电路逻辑配置文件,以在所述FPGA芯片上分别形成片上处理器和片上缓存;其中,所述FPGA结构还包含与所述FPGA芯片相连的外部存储。

FPGA芯片上包含若干可编辑的硬件逻辑单元,这些硬件逻辑单元经由电路逻辑配置文件进行配置后,可以实现为相应的功能模块,以用于实现相应的逻辑功能。具体的,该电路逻辑配置文件可以基于比特流的形式被烧录至FPGA结构。例如,上述的片上处理器等即为通过已部署的电路逻辑配置文件而形成,而通过进一步部署相关的其他功能模块,可以将FPGA结构配置为区块链节点上的硬件TEE。由于这些功能模块完全由电路逻辑配置文件进行配置而形成,因而通过检查电路逻辑配置文件即可确定由此配置得到的功能模块所实现的逻辑等各方面的信息,确保功能模块能够按照完全用户的需求而形成和运行。其中,上述的片上处理器用于实现虚拟机逻辑,譬如该虚拟机逻辑可以包括以太坊虚拟机的执行逻辑或者WASM虚拟机的执行逻辑等,本说明书并不对此进行限制。

用户生成电路逻辑配置文件后,如果位于FPGA结构所在地点处,则可以在本地将该电路逻辑配置文件部署至FPGA结构,譬如可以在离线环境下实施部署操作,以确保安全性。或者,在FPGA结构处于线上环境的情况下,用户可以将电路逻辑配置文件远程部署至FPGA结构。

步骤104,所述FPGA结构确定所属区块链节点接收到的交易调用的智能合约。

FPGA结构通过解析交易的to字段,可以获得该交易所调用的智能合约的合约地址,并基于该合约地址获取相应智能合约的代码程序。如果该交易由交易发起方经过加密后提交至区块链,那么FPGA结构需要对该交易进行解密,以读取to字段的信息。其中,通过加载上述已部署的电路逻辑配置文件,可以在FPGA芯片上形成解密模块,从而通过该解密模块对交易进行解密。

例如,FPGA结构可以维护有节点私钥,且该节点私钥对应的节点公钥被公开。那么,交易发起方一方面可以获得上述的节点公钥,另一方面可以自行生成一对称密钥,并基于该节点公钥和对称密钥对明文交易内容实施数字信封形式的加密操作:通过对称密钥对明文交易内容进行加密、得到密文交易内容,通过节点公钥对该对称密钥进行加密、得到密文对称密钥,而上述的交易包括密文交易内容和密文对称密钥。相应地,上述的解密模块可以基于节点私钥对交易所含的密文对称密钥进行解密、得到对称密钥,然后解密模块可以基于对称密钥对密文交易内容进行解密、得到明文交易内容,从而在明文交易内容中读取to字段的信息,确定交易所调用的智能合约的合约地址。

步骤106,所述FPGA结构从所述片上缓存读取所述智能合约的代码程序以供所述片上处理器运行,所述代码程序由所述FPGA结构从所述外部存储获取并缓存至所述片上缓存。

片上处理器从片上缓存读取数据的速度相对更快,但是片上缓存的存储空间通常相对较小且扩展性差,无法满足大量代码程序的部署需求。而片上处理器从外部存储读取数据的速度相对较慢,但是外部存储的存储空间通常相对较大且扩展性好,可以满足大量代码程序的部署需求。因此,通过将代码程序部署在外部存储,而在使用时将代码程序从外部存储缓存至片上缓存,并由片上处理器从片上缓存中读取代码程序以运行,既可以满足对代码程序进行大量部署的需求,又可以使得片上处理器快速读取和运行代码程序,以提升交易执行效率。实际上,虽然外部存储所能实现的读取速度相对低于片上缓存,但相比于将代码程序部署在区块链节点而言,片上处理器从外部存储读取代码程序的速度远快于从区块链节点处进行读取。

上述的片上缓存位于FPGA芯片内部,由该FPGA芯片上的存储器件形成。外部存储位于FPGA芯片外部,可以插接至FPGA结构的接口上,譬如该外部存储可以包括外接DDR等。由于FPGA芯片内部被认为处于安全范围、FPGA芯片外部被认为存在安全风险,因而当代码程序位于片上缓存时,可以直接以明文形式进行缓存,而当代码程序存储于外部存储时,需要通过FPGA芯片上的加密模块对代码程序进行加密后实现存储,其中加密模块由FPGA芯片加载前述已部署的电路逻辑配置文件而形成,采用的密钥可以为FPGA结构所维护的业务根密钥或其衍生密钥。而在代码程序被加密后存储于外部存储的情况下,FPGA结构通过FPGA芯片上如前所述的解密模块对代码程序进行解密,以将解密后的代码程序缓存至片上缓存,使得片上处理器可以直接从片上缓存读取解密后的代码程序。

通过加载前述已部署的电路逻辑配置文件,可以在FPGA芯片上形成预处理模块,而FPGA结构可以通过该预处理模块对获得的代码程序进行预处理,并将预处理后的代码程序缓存至片上缓存,以由片上处理器读取和运行。这里的预处理是指在执行原始的代码程序(即未经过预处理的代码程序)之前必须预先实施的处理操作,通过在存入片上缓存之前实施预处理,使得片上处理器在后续执行该代码程序时,可以省去临时执行预处理所需消耗的运算资源和处理时间,有助于加快代码程序的执行速度。其中,上述预处理可以包括以下至少之一:将代码程序所含的各个字段解析并转换为预设数据结构,调整代码程序中的跳转指令(jump指令)的偏移量(offset)。

片上处理器并非一次性读取和执行代码程序所含的所有操作指令,而是逐条读取和执行代码程序所含的操作指令。因此,片上处理器可以首先尝试从片上缓存中读取所需的操作指令;在片上缓存中存在所需的操作指令的情况下,片上处理器可以从片上缓存读取相应的操作指令并予以执行,相比于从外部存储或区块链节点读取该操作指令,具有相对更高的效率;以及,在片上缓存中不存在所需的操作指令的情况下,FPGA结构可以从外部存储获取该操作指令并缓存至片上缓存,以供片上处理器读取和执行。

由于数据在外部存储中通常按顺序进行依次存储,譬如同一代码程序的各个操作指令对应的存储地址通常是依次排列的。因此,在片上处理器希望读取某一操作指令的情况下,该片上处理器通常会继续读取和执行附近的其他操作指令,直至这些操作指令所属的合约代码执行完毕。所以,虽然FPGA结构可以仅从外部存储获取上述片上处理器所需的一条操作指令,但是实际上FPGA结构还可以从外部存储获取包含该操作指令的代码程序段,即该代码程序段还包含片上处理器后续可能需要的其他操作指令,通过将该代码程序段缓存至片上缓存,可使片上处理器后续直接从片上缓存读取上述的其他操作指令,而无需临时从外部存储进行读取,有助于提升效率。

例如,FPGA结构可以确定片上处理器所需的上述操作指令在外部存储中的起始存储地址,并从外部存储获取包含该起始存储地址的预设地址段,并确保上述的代码程序段位于该预设地址段。那么,通过从外部存储读取对应于该预设地址段的数据,即可获得上述的代码程序段。其中,上述的预设地址段可以包括上述的起始存储地址和位于该起始存储地址之后的地址,使得上述代码程序段所含的其他操作指令均排列于上述的操作指令之后;考虑到片上处理器在执行代码程序的过程中从前向后依次执行各个操作指令的处理逻辑,以及操作指令在外部存储中的存储地址依次排列的存储逻辑,上述方案可使片上缓存中缓存的操作指令被片上处理器读取和执行的概率相对更高,避免将排列在上述操作指令之前、被片上处理器读取和执行的概率相对更低的其他操作指令被存入片上缓存,有助于优化对片上缓存的合理使用。

片上缓存中的缓存空间可以被划分为若干缓存块,这些缓存块分别用于存入相应数据。因此,当FPGA结构从外部存储读取预设地址段对应的代码程序段时,所采用的预设地址段的长度可以为片上缓存中的单个缓存块的缓存长度,即每次存入片上缓存的数据均占用一个缓存块,以便于对片上缓存的缓存空间进行有效管理。其中,FPGA结构在片上缓存内的代码程序段的已读取比例达到预设比例的情况下,可以自动从外部存储预获取代码程序段之后的其他代码程序段,并缓存至片上缓存,而无需片上处理器临时发起请求,使得片上处理器在执行同一智能合约的合约代码的过程中,至多仅需要在读取首条操作指令时需要请求FPGA结构从外部存储获取并存入片上缓存,后续均可以直接从片上缓存高效地读取其他的操作指令,有助于提升对智能合约的执行效率。例如,FPGA结构每次可以从外部存储读取一个缓存块对应的代码程序段,并存入片上缓存;在监测到片上缓存已存入的代码程序段的已读取比例达到50%的情况下,FPGA结构可以针对前一次读取的代码程序段在外部存储中对应的存储地址,自动从外部存储读取后续的代码程序段。

进一步的,在片上缓存中包含若干缓存块的情况下,每一缓存块可以设有相应的权重,而权重的取值大小与相应缓存块中的数据被淘汰的概率呈负相关,即权重越大的缓存块被淘汰(缓存块所含数据被淘汰)的概率越小、权重越小的缓存块被淘汰的概率越大。因此,通过将包含有智能合约中首条操作指令的缓存块设置为对应于相对更大的权重,可使其在片上缓存中的存留时长相对更长,那么片上处理器具有更大概率可以直接从片上缓存读取某一合约代码的首条操作指令,而无需FPGA结构临时从外部存储进行读取,再配合上述对后续操作指令的自动加载方案,可使片上处理器总是能够从片上缓存中读取所需的操作指令,从而实现更高的操作指令读取和执行效率。

图2是一示例性实施例提供的一种区块链节点的结构示意图。基于本说明书的技术方案,可以在区块链节点上添加FPGA结构以实现硬件TEE,譬如该FPGA结构可以为如图2所示的FPGA板卡。FPGA板卡可以通过PCIE接口连接至区块链节点上,以实现FPGA板卡与区块链节点之间的数据交互。FPGA板卡可以包括FPGA芯片、Flash芯片、密管芯片和外接DDR等结构;当然,在一些实施例中除了包含FPGA芯片和外接DDR之外,可能仅包含剩余的Flash芯片和密管芯片等中的部分结构,或者可能包含更多结构,此处仅用于举例。

在初始阶段,FPGA芯片上并未烧录用户定义的任何逻辑,相当于FPGA芯片处于空白状态。用户可以通过向FPGA芯片上烧录电路逻辑配置文件,以在FPGA芯片上形成相应的功能或逻辑。在首次烧录电路逻辑配置文件时,FPGA板卡不具有安全防护的能力,因而通常需要外部提供安全环境,比如用户可以在离线环境下实施对电路逻辑配置文件的烧录以实现物理安全隔离,而非在线上实施远程烧录。

针对用户所需实现的功能或逻辑,可以通过FPGA硬件语言形成相应的逻辑代码,并进而对该逻辑代码进行镜像化处理,即可得到上述的电路逻辑配置文件。在烧录至FPGA板卡之前,用户可以针对上述的逻辑代码进行检查。尤其是,当同时涉及到多个用户时,多个用户可以分别对上述的逻辑代码进行检查,以确保FPGA板卡最终能够满足所有用户的需求,防止出现安全性风险、逻辑错误、欺诈等异常问题。

在确定代码无误后,用户可以在上述的离线环境下,将电路逻辑配置文件烧录至FPGA板卡上。具体的,电路逻辑配置文件被从区块链节点传入FPGA板卡,进而部署至如图2所示的Flash芯片中,使得即便FPGA板卡发生掉电,Flash芯片仍然能够保存上述的电路逻辑配置文件。

图3是一示例性实施例提供的一种在FPGA芯片上形成功能模块的示意图。通过将Flash芯片中所部署的电路逻辑配置文件加载至FPGA芯片,可以对FPGA芯片所含的硬件逻辑单元进行配置,从而在FPGA芯片上形成相应的功能模块,譬如所形成的功能模块可以包括如图3所示的片上缓存模块、预处理模块、明文计算模块、密钥协商模块、解密验签模块、加解密模块等。同时,电路逻辑配置文件还可以用于向FPGA板卡传输需要存储的信息,比如可以将预置证书存储于FPGA芯片上、将认证根密钥存储于密管芯片中(认证根密钥也可以存储于FPGA芯片上)等。

基于FPGA芯片上所形成的密钥协商模块,以及部署于FPGA板卡上的认证根密钥,使得FPGA板卡可以与用户实现远程的密钥协商,该密钥协商过程可以采用相关技术中的任意算法或标准来实现,本说明书并不对此进行限制。举例而言,密钥协商过程可以包括:用户可以在本地的客户端生成一密钥Ka-1、密钥协商模块可以在本地生成一密钥Kb-1,且客户端可以基于密钥Ka-1计算得到密钥协商信息Ka-2、密钥协商模块可以基于密钥Kb-1计算得到密钥协商信息Kb-2,然后客户端将密钥协商信息Ka-2发送至密钥协商模块、密钥协商模块将密钥协商信息Kb-2发送至客户端,使得客户端可以基于密钥Ka-1与密钥协商信息Kb-2生成一秘密值,而密钥协商模块可以基于密钥Kb-1与密钥协商信息Ka-2生成相同的秘密值,最后由客户端、密钥协商模块分别基于密钥导出函数从该相同的秘密值导出相同的配置文件部署密钥,该配置文件部署密钥可以存在FPGA芯片或密管芯片。在上述过程中,虽然密钥协商信息Ka-2、密钥协商信息Kb-2是经由区块链节点在客户端与密钥协商模块之间传输,但是由于密钥Ka-1由客户端掌握、密钥Kb-1由密钥协商模块掌握,因而可以确保区块链节点无法获知最终得到的秘密值和配置文件部署密钥,避免可能造成的安全性风险。

除了配置文件部署密钥之外,秘密值还用于导出业务秘密部署密钥;例如,秘密值可以导出32位数值,可以将前16位作为配置文件部署密钥、后16位作为业务秘密部署密钥。用户可以通过业务秘密部署密钥向FPGA板卡部署业务密钥,譬如该业务密钥可以包括节点私钥和业务根密钥。例如,用户可以在客户端上采用业务秘密部署密钥对节点私钥或业务根密钥进行签名、加密并发送至FPGA板卡,使得FPGA板卡通过解密验签模块进行解密、验签后,对得到的节点私钥或业务根密钥进行部署。

基于部署的节点密钥、业务根密钥和FPGA芯片上的加解密模块、明文计算模块,使得FPGA板卡可以实现为区块链节点上的TEE,以满足隐私需求。例如,当区块链节点收到一笔交易时,如果该交易为明文交易,区块链节点可以直接处理该明文交易,如果该交易为隐私交易,区块链节点将该隐私交易传入FPGA板卡进行处理。

明文交易的交易内容为明文形式,并且交易执行后所产生的合约状态等同样采用明文形式进行存储。隐私交易的交易内容为密文形式,由交易发起方对明文交易内容进行加密而得到,且交易执行后产生的合约状态等需要采用密文形式进行存储,从而确保交易隐私保护。例如,交易发起方可以随机或基于其他方式生成一对称密钥,同样上述的业务私钥对应的业务公钥被公开,那么交易发起方可以基于该对称密钥和业务公钥对明文交易内容进行数字信封加密:交易发起方通过对称密钥加密明文交易内容,并通过业务公钥对该对称密钥进行加密,得到的两部分内容均被包含于上述的隐私交易中;换言之,隐私交易中包含两部分内容:采用对称密钥加密的明文交易内容、采用业务公钥加密的对称密钥。

因此,FPGA板卡在收到区块链节点传入的隐私交易后,可由加解密模块通过业务私钥对采用业务公钥加密的对称密钥进行解密、得到对称密钥,然后由加解密模块通过对称密钥对采用对称密钥加密的明文交易内容进行解密、得到明文交易内容。隐私交易可以用于部署智能合约,那么明文交易内容的data字段可以包含待部署的智能合约的合约代码;或者,隐私交易可以用于调用智能合约,那么明文交易内容的to字段可以包含被调用的智能合约的合约地址,而FPGA板卡可以基于该合约地址调取相应的合约代码。

如前所述,FPGA板卡上同时设有片上缓存模块和外接DDR。外接DDR的存储空间往往大于甚至远大于片上缓存模块的存储空间,并且具有高度的可扩展性,使得外接DDR可以实现更多数据的存储。因此,当隐私交易用于部署智能合约时,FPGA板卡可以将明文交易内容的data字段所含的合约代码部署至外接DDR中。那么,当FPGA板卡后续收到用于调用该智能合约的隐私交易时,FPGA板卡可以基于明文交易内容的to字段所含的合约地址,从外接DDR中查找到相应的合约代码,以通过明文计算模块执行该合约代码。其中,FPGA芯片上形成的明文计算模块用于实现相关技术中的虚拟机逻辑,即明文计算模块相当于FPGA板卡上的“硬件虚拟机”。因此,基于上述明文交易内容确定出合约代码后,可以将该合约代码传入明文计算模块中,以由该明文计算模块执行该合约代码。该明文计算模块相当于本说明书中在FPGA芯片上形成的片上处理器。

针对用于部署智能合约的隐私交易,FPGA板卡在获得待部署的合约代码后,可以直接存入外接DDR,或者可以通过预处理模块进行预处理,然后将预处理后的合约代码存入外接DDR。如果在存入外接DDR之前未通过预处理模块进行预处理,那么明文计算模块在用于执行该合约代码之前,需要临时通过预处理模块实施预处理操作,然后由明文计算模块对预处理后的合约代码进行处理。可见,如果将经过预处理模块实施预处理之后的合约代码存入外接DDR,则从外接DDR获得的合约代码已经过预处理,使得明文计算模块无需临时实施预处理操作而可以直接执行该合约代码,从而加快交易执行速度、降低延迟。

针对合约代码的预处理可以包括若干维度,并且针对不同语言或规则所编写的合约代码,所涉及的预处理维度可能存在差异。以wasm智能合约的合约代码为例,预处理可以包括以下两个方面:

1)数据格式转换。对合约代码进行数据结构解析,并转换为所需的预设格式的数据结构,以便于后续执行。

2)调整jump指令的偏移量。下述两个方面可能导致jump指令的偏移量产生更新:通过解析合约代码中的jump指令,将jump指令对应的symbol标识转换为片上处理器能够识别的地址信息,使得合约代码的长度发生变化;对合约代码中经过编码的操作数进行解码,使得合约代码的长度发生变化,这里的编码方式譬如可以包括LEB(Little-Endian Base)编码或其他编码。

当FPGA板卡收到的隐私交易用于调用智能合约时,FPGA板卡可以从隐私交易的to字段读取合约地址,并基于该合约地址从外接DDR中获得相应的代码程序,以供明文计算模块执行。其中,明文计算模块需要从前向后依次读取和执行代码程序所含的各条操作指令:

明文计算模块首先访问片上缓存模块,以从片上缓存模块中读取首条操作指令;如果读取失败,即片上缓存模块中并未缓存有相应代码程序的首条操作指令,则FPGA板卡需要从外接DDR中读取该首条操作指令。确定出首条操作指令在外接DDR中的存储地址后,FPGA板卡并非仅读取该首条操作指令,而是读取该存储地址及其后续地址对应的一代码程序段,并存入片上缓存模块。

例如,图4是一示例性实施例提供的一种片上缓存模块的结构示意图。如图4所示,假定片上缓存模块包含B1、B2、B3、B4、B5和B6等缓存块,这些缓存块初始时为空。FPGA板卡可以按照单个缓存块的大小从外接DDR中读取上述的代码程序段,比如该代码程序段可以被存入图4所示的B1缓存块中。因此,在B1缓存块中除了包含上述的首条操作指令即指令1之外,还包含位于该指令1之后的其他指令。

在将上述代码程序段存入片上缓存模块之后,明文计算模块可以从片上缓存模块的缓存块B1中读取指令1即上述的首条操作指令并执行。在完成对指令1的执行操作后,明文计算模块需要依次执行后续的操作指令。而由于FPGA板卡在前述步骤中,已经将指令1及其后续的若干指令一并读取并存入了缓存块B1,因而明文计算模块可以直接从片上缓存模块的缓存块B1读取后续的操作指令,而无需FPGA板卡临时从外接DDR读取,省去了明文计算模块的等待时间,可以加快对智能合约的执行速度。

类似地,FPGA板卡还可以自动从外接DDR中读取后续的其他指令,而明文计算模块等待。例如,图5是一示例性实施例提供的一种在片上缓存模块中实现预加载的示意图。如图5所示,如果监测到先前存入缓存块B1中的数据已经被明文计算模块读取达到或超过50%(或者其他比例),那么FPGA板卡可以自动从外接DDR中读取操作指令并存入片上缓存模块。例如,FPGA板卡可以根据先前存入缓存块B1的代码程序段在外接DDR中对应的终止地址,并从终止地址的后一存储地址开始向后读取一代码程序段,并存入片上缓存模块中的诸如缓存块B2中,以供明文计算模块继续读取。基于上述方式,明文计算模块总是能够在片上缓存模块中直接读取操作指令,而无需等待FPGA板卡临时从外接DDR进行读取。

片上缓存模块的存储空间有限。因而,片上缓存模块通过淘汰机制对所存储的不常用数据进行淘汰,以提升存储空间的使用效率。例如,可以为每一缓存块设定权重,使得权重相对更大的缓存块相对不容易被淘汰,权重相对更小的缓存块相对容易被淘汰。相应地,可以为包含智能合约的合约代码的首条操作指令的缓存块设置相对更大的权重,使得包含首条操作指令的缓存块相对更加不容易被淘汰,那么对于一些经常被执行的智能合约,明文计算模块可以直接从片上缓存模块中读取其首条操作指令,再配合上述方案中对后续操作指令的预加载操作,可使明文计算模块无延迟地从片上缓存模块中读取相应智能合约的所有合约代码,具有极高的执行效率。

基于一些原因,用户可能希望对FPGA板卡上部署的电路逻辑配置文件进行版本更新,比如该电路逻辑配置文件所含的认证根密钥可能被风险用户获知、再比如用户希望对FPGA板卡上部署的功能模块进行升级等,本说明书并不对此进行限制。为了便于区分,可以将上述过程中已部署的电路逻辑配置文件称之为旧版电路逻辑配置文件,而将需要部署的电路逻辑配置文件称之为新版电路逻辑配置文件。

与旧版电路逻辑配置文件相类似的,用户可以通过编写代码、镜像化等过程生成新版电路逻辑配置文件。进一步的,用户可以通过自身持有的私钥对新版电路逻辑配置文件进行签名,然后通过上文协商出的配置文件部署密钥对签名后的新版电路逻辑配置文件进行加密,得到加密后新版电路逻辑配置文件。在一些情况下,可能同时存在多名用户,那么旧版电路逻辑配置文件需要将这些用户对应的预置证书均部署至FPGA板卡中,且这些用户需要分别采用自身持有的私钥对新版电路逻辑配置文件进行签名。

用户可以通过客户端远程将加密后新版电路逻辑配置文件发送至区块链节点,并由区块链节点进一步将其传入FPGA板卡。前述过程中在FPGA芯片上形成的解密验签模块位于PCIE接口与Flash芯片之间的传输通路上,使得加密后新版电路逻辑配置文件必然需要优先经过解密验签模块的成功处理后,才能够被传入Flash芯片以实现可信更新,无法绕过解密验签的过程而直接对Flash芯片进行更新。

解密验签模块在收到加密后新版电路逻辑配置文件后,首先通过FPGA板卡上部署的配置文件部署密钥进行解密,如果解密成功则解密验签模块进一步基于FPGA芯片上部署的预置证书,对解密后的新版电路逻辑配置文件进行签名验证。如果解密失败或者签名验证未通过,则说明收到的文件并非来自上述用户或者遭到篡改,解密验签模块将触发终止本次的更新操作;而在解密成功且验签通过的情况下,可以确定得到的新版电路逻辑配置文件来自上述用户且传输过程中未遭到篡改,可以将该新版电路逻辑配置文件进一步传输至Flash芯片,以针对Flash芯片中的旧版电路逻辑配置文件进行更新部署。

新版电路逻辑配置文件被加载至FPGA芯片后,同样可以在该FPGA芯片上形成诸如上述的明文计算模块、片上缓存模块、密钥协商模块、加解密模块、解密验签模块,以及向FPGA芯片存入预置证书、向密管芯片存入认证根密钥等信息。其中,所形成的明文计算模块、片上缓存模块、密钥协商模块、加解密模块、解密验签模块等,所实现的功能逻辑可以发生变化和升级,所存入部署的预置证书、认证根密钥等信息也可能区别于更新前的信息。那么,FPGA板卡可以基于更新后的密钥协商模块、认证根密钥等,与用户进行远程协商得到新的配置文件部署密钥,该配置文件部署密钥可以被用于下一次的可新更新过程。类似地,可以据此不断实现针对FPGA板卡的可信更新操作。

在完成更新部署后,FPGA板卡可以针对新版电路逻辑配置文件生成认证结果。例如,上述的密钥协商模块可以通过诸如sm3算法或其他算法对新版电路逻辑配置文件的哈希值、基于新版电路逻辑配置文件协商得到的配置文件部署密钥的哈希值进行计算,得到的计算结果可以被作为上述的认证结果,并由密钥协商模块将该认证结果发送至用户。相应地,用户可以在客户端上基于所维护的新版电路逻辑配置文件和据此协商的配置文件部署密钥对认证结果进行验证,如果验证成功则表明新版电路逻辑配置文件在FPGA板卡上成功部署,且用户与FPGA板卡之间据此成功协商得到了一致的配置文件部署密钥,从而确认成功完成了针对电路逻辑配置文件的更新部署。

图6是一示例性实施例提供的一种在FPGA上实现高效合约调用的装置的示意结构图。请参考图6,在软件实施方式中,该装置可以包括:

加载单元601,使FPGA结构向自身包含的FPGA芯片加载已部署的电路逻辑配置文件,以在所述FPGA芯片上分别形成片上处理器和片上缓存;其中,所述FPGA结构还包含与所述FPGA芯片相连的外部存储;

确定单元602,使所述FPGA结构确定所属区块链节点接收到的交易调用的智能合约;

读取单元603,使所述FPGA结构从所述片上缓存读取所述智能合约的代码程序以供所述片上处理器运行,所述代码程序由所述FPGA结构从所述外部存储获取并缓存至所述片上缓存。

可选的,还包括:

指令确定单元604,使所述FPGA结构确定所述片上处理器需要从所述代码程序中读取的操作指令;

指令缓存单元605,使所述FPGA结构在所述片上缓存中不存在所述操作指令的情况下,从所述外部存储获取所述操作指令并缓存至所述片上缓存,以进一步提供至所述片上处理器。

可选的,所述指令缓存单元605具体用于:

使所述FPGA结构从所述外部存储获取包含所述操作指令的代码程序段,并缓存至所述片上缓存。

可选的,所述指令缓存单元605具体用于:

使所述FPGA结构确定所述操作指令在所述外部存储中的起始存储地址;

使所述FPGA结构从所述外部存储获取包含所述起始存储地址的预设地址段,所述代码程序段位于所述预设地址段。

可选的,所述预设地址段包括所述起始存储地址和位于所述起始存储地址之后的地址。

可选的,所述预设地址段的长度为所述片上缓存中的单个缓存块的缓存长度。

可选的,所述指令缓存单元605具体用于:

使所述FPGA结构在所述片上缓存内的所述代码程序段的已读取比例达到预设比例的情况下,从所述外部存储预获取所述代码程序段之后的其他代码程序段,并缓存至所述片上缓存。

可选的,所述代码程序被加密后存储于所述外部存储中;所述装置还包括:

解密单元606,使所述FPGA结构通过所述FPGA芯片上的解密模块对所述代码程序进行解密,以将解密后的代码程序缓存至所述片上缓存;

其中,所述解密模块由所述FPGA芯片加载所述已部署的电路逻辑配置文件而形成。

可选的,还包括:

预处理单元607,使所述FPGA结构通过所述FPGA芯片上的预处理模块对所述代码程序进行预处理,以将预处理后的代码程序缓存至所述片上缓存;

其中,所述预处理模块由所述FPGA芯片加载所述已部署的电路逻辑配置文件而形成。

可选的,所述预处理包括以下至少之一:将代码程序所含的各个字段解析并转换为预设数据结构;调整所述代码程序中的跳转指令的偏移量。

可选的,所述片上缓存中包含若干缓存块;其中,包含智能合约中首条操作指令的缓存块对应于相对更大的权重,以使其在所述片上缓存中的存留时长相对更长。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。

在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号