本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种基于fpga实现虚拟机运算的方法及装置。
背景技术:
区块链技术构建在传输网络(例如点对点网络)之上。传输网络中的网络节点利用链式数据结构来验证与存储数据,并采用分布式节点共识算法来生成和更新数据。
目前企业级的区块链平台技术上最大的两个挑战就是隐私和性能,往往这两个挑战很难同时解决。大多解决方案都是通过损失性能换取隐私,或者不大考虑隐私去追求性能。常见的解决隐私问题的加密技术,如同态加密(homomorphicencryption)和零知识证明(zero-knowledgeproof)等复杂度高,通用性差,而且还可能带来严重的性能损失。
可信执行环境(trustedexecutionenvironment,tee)是另一种解决隐私问题的方式。tee可以起到硬件中的黑箱作用,在tee中执行的代码和数据操作系统层都无法偷窥,只有代码中预先定义的接口才能对其进行操作。在效率方面,由于tee的黑箱性质,在tee中进行运算的是明文数据,而不是同态加密中的复杂密码学运算,计算过程效率没有损失,因此与tee相结合可以在性能损失较小的前提下很大程度上提升区块链的安全性和隐私性。目前工业界十分关注tee的方案,几乎所有主流的芯片和软件联盟都有自己的tee解决方案,包括软件方面的tpm(trustedplatformmodule,可信赖平台模块)以及硬件方面的intelsgx(softwareguardextensions,软件保护扩展)、armtrustzone(信任区)和amdpsp(platformsecurityprocessor,平台安全处理器)。
技术实现要素:
有鉴于此,本说明书一个或多个实施例提供一种基于fpga实现虚拟机运算的方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种基于fpga实现虚拟机运算的方法,包括:
fpga结构将已部署的电路逻辑配置文件加载至fpga芯片上,以在所述fpga芯片上形成字节码指令集cpu;
所述fpga结构将智能合约的字节码程序传入所述字节码指令集cpu,使所述字节码指令集cpu运行所述字节码程序,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
根据本说明书一个或多个实施例的第二方面,提出了一种基于fpga实现虚拟机运算的方法,包括:
fpga芯片上的字节码指令集cpu读取智能合约的字节码程序,所述字节码指令集cpu由所述fpga芯片加载所属fpga结构上已部署的电路逻辑配置文件而形成;
所述字节码指令集cpu运行所述字节码程序,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
根据本说明书一个或多个实施例的第三方面,提出了一种基于fpga实现虚拟机运算的装置,包括:
加载单元,使fpga结构将已部署的电路逻辑配置文件加载至fpga芯片上,以在所述fpga芯片上形成字节码指令集cpu;
传入单元,使所述fpga结构将智能合约的字节码程序传入所述字节码指令集cpu,使所述字节码指令集cpu运行所述字节码程序,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
根据本说明书一个或多个实施例的第四方面,提出了一种基于fpga实现虚拟机运算的装置,包括:
读取单元,使fpga芯片上的字节码指令集cpu读取智能合约的字节码程序,所述字节码指令集cpu由所述fpga芯片加载所属fpga结构上已部署的电路逻辑配置文件而形成;
运行单元,使所述字节码指令集cpu运行所述字节码程序,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
根据本说明书一个或多个实施例的第三方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。
根据本说明书一个或多个实施例的第四方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种基于fpga实现虚拟机运算的方法的流程图。
图2是一示例性实施例提供的另一种基于fpga实现虚拟机运算的方法的流程图。
图3是一示例性实施例提供的一种区块链节点的结构示意图。
图4是一示例性实施例提供的一种在fpga芯片上形成功能模块的示意图。
图5是一示例性实施例提供的一种对fpga板卡进行可新更新的示意图。
图6是一示例性实施例提供的一种基于fpga实现虚拟机运算的装置的框图。
图7是一示例性实施例提供的另一种基于fpga实现虚拟机运算的装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
区块链一般被划分为三种类型:公有链(publicblockchain),私有链(privateblockchain)和联盟链(consortiumblockchain)。此外,还有多种类型的结合,比如私有链 联盟链、联盟链 公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
不论是公有链、私有链还是联盟链,区块链网络中的节点出于隐私保护的目的,均可能通过区块链与tee(trustedexecutionenvironment,可信执行环境)相结合的解决方案,在tee内执行收到的交易。tee是基于cpu硬件的安全扩展,且与外部完全隔离的可信执行环境。tee最早是由globalplatform提出的概念,用于解决移动设备上资源的安全隔离,平行于操作系统为应用程序提供可信安全的执行环境。arm的trustzone技术最早实现了真正商用的tee技术。伴随着互联网的高速发展,安全的需求越来越高,不仅限于移动设备,云端设备,数据中心都对tee提出了更多的需求。tee的概念也得到了高速的发展和扩充。现在所说的tee相比与最初提出的概念已经是更加广义的tee。例如,服务器芯片厂商intel,amd等都先后推出了硬件辅助的tee并丰富了tee的概念和特性,在工业界得到了广泛的认可。现在提起的tee通常更多指这类硬件辅助的tee技术。
以intelsgx技术为例,sgx提供了围圈(enclave,也称为飞地),即内存中一个加密的可信执行区域,由cpu保护数据不被窃取。以第一区块链节点采用支持sgx的cpu为例,利用新增的处理器指令,在内存中可以分配一部分区域epc(enclavepagecache,围圈页面缓存或飞地页面缓存),通过cpu内的加密引擎mee(memoryencryptionengine)对其中的数据进行加密。epc中加密的内容只有进入cpu后才会被解密成明文。因此,在sgx中,用户可以不信任操作系统、vmm(virtualmachinemonitor,虚拟机监控器)、甚至bios(basicinputoutputsystem,基本输入输出系统),只需要信任cpu便能确保隐私数据不会泄漏。因此,围圈就相当于sgx技术下产生的tee。
不同于移动端,云端访问需要远程访问,终端用户对硬件平台不可见,因此使用tee的第一步就是要确认tee的真实可信。例如,相关技术中提供了针对上述sgx技术的远程证明机制,以用于证明目标设备上的sgx平台与挑战方部署了相同的配置文件。但是,由于相关技术中的tee技术是以软件或软硬件结合的方式实现,使得即便通过远程证明方式可以在一定程度上表明tee内所部署的配置文件未经篡改,但是tee本身所依托的运行环境却无法被验证。例如,在需要实现隐私功能的区块链节点上,tee内需要配置用于执行智能合约的虚拟机,该虚拟机所执行的指令并非直接执行,而是实际上执行了对应的若干条x86指令(假定目标设备采用x86架构),从而造成了一定程度上的安全性风险。
为此,本说明书提出了一种基于fpga实现的硬件tee技术,fpga通过加载电路逻辑配置文件而实现硬件tee。由于电路逻辑配置文件的内容可以被预先查看与检验,并且fpga完全基于电路逻辑配置文件中记载的逻辑而配置运行,因而可以确保fpga所实现的硬件tee具有相对更高的安全性。同时,本说明书中通过在fpga上实现采用字节码指令集的cpu,可以提升运行效率。
以下结合实施例说明本说明书提供的一种基于fpga实现虚拟机运算的方法,以兼顾安全性与运算效率。
图1是一示例性实施例提供的一种基于fpga实现虚拟机运算的方法的流程图。如图1所示,该方法应用于fpga结构,可以包括以下步骤:
步骤102,fpga结构将已部署的电路逻辑配置文件加载至fpga芯片上,以在所述fpga芯片上形成字节码指令集cpu。
fpga芯片上包含若干可编辑的硬件逻辑单元,这些硬件逻辑单元经由电路逻辑配置文件进行配置后,可以实现为相应的功能模块,以用于实现相应的逻辑功能。具体的,该电路逻辑配置文件可以基于比特流的形式被烧录至fpga结构。
因此,通过向fpga结构部署相应的电路逻辑配置文件,可使fpga芯片上形成字节码指令集cpu,该字节码指令集cpu可用于实现相关技术中的虚拟机逻辑,相当于在fpga芯片上配置形成的“硬件虚拟机”,譬如该虚拟机逻辑可以包括以太坊虚拟机的执行逻辑或者wasm虚拟机的执行逻辑等,本说明书并不对此进行限制。
步骤104,所述fpga结构将智能合约的字节码程序传入所述字节码指令集cpu,使所述字节码指令集cpu运行所述字节码程序,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
字节码(byte-code)由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码程序,而是选择一门高级语言编写智能合约的代码程序。高级语言编写的代码程序经过编译器编译,可以生成相应的字节码程序,进而该字节码程序可以部署至区块链。以太坊支持的高级语言很多,如solidity、serpent、lll语言等。上述的编译器可以部署在客户端上,使得该客户端可以通过该编译器将采用高级语言编写的代码程序编译为字节码程序后,通过交易提交至区块链网络;或者,上述的编译器可以部署在区块链节点处,使得区块链节点在收到客户端提交的交易后,通过编译器将采用高级语言编写的代码程序编译为字节码程序。
以solidity语言为例,用其编写的合约与面向对象编程语言中的类(class)很相似,在一个合约中可以声明多种成员,包括合约状态(或称状态变量)、函数、函数修改器、事件等。合约状态是永久存储在智能合约的账户存储中的值,用于保存合约的状态。
如下是以solidity语言编写的一个简单的智能合约的代码示例:
对于上述代码示例中的c()函数部分,编译器的编译结果例如为如下所示(/*…*/中…的部分为注释,后面如有汉字则为对应的中文注释):
/*compilefunctionc()balance =1编译函数c()balance =1*/
tag_2
/*pushes1ontostack将1压入栈顶,这个1就是要赋值的1*/
0x1
/*pushes0ontostack将0压入栈顶,这个0是指balance这个数据将要存储到合约账户数据存储的0号位置。上面这两句执行完后,堆栈里从顶往下,就有了0和1两个数据*/
0x0
/*balance =1将balance赋值为balance 1后的值*/
dup2/*复制栈中从顶往下数的第二项,所以这时堆栈从顶往上就有了1、0、1三个数据*/
swap1/*交换栈顶的两项数据,这时堆栈从顶往下存储的是0、1、1*/
/*store(0x0,0x1)存储(0x0,0x1),从栈顶往下数,将第二项数据存储到第一项标识的位置上,同时将这两项弹出堆栈。这里便是将数据1存储到0号位置,前面因为已经将balance与0号位置做了绑定,所以就完成了balance=1的赋值。这时堆栈里就只剩一层数据:1*/
sstore
pop/*丢弃栈顶数据,这时堆栈变成空,等待下一条指令的执行*/
可见,上述代码示例中的solidity代码被编译为相应的字节码程序,该字节码程序所含的每一字节码包括一个字节长度的操作码(opcode)及跟随在后的零至多个操作数(operands),该操作数为相应操作码在执行时所需的参数。
在相关技术中,当上述字节码程序运行于区块链节点上的虚拟机时,譬如该区块链节点采用x86架构,那么该区块链节点将字节码程序在虚拟机内运行时,实际上是通过x86指令集来模拟实现字节码程序所含的各个字节码。而在本说明书的技术方案中,通过在fpga芯片上配置形成上述的字节码指令集cpu,使得该字节码指令集cpu在执行字节码程序的过程中,直接采用字节码指令集中的字节码指令执行字节码程序所含的各个字节码,而无需通过其他指令集来模拟执行字节码程序,从而具有相对更高的处理效率。
上述的字节码指令集cpu维护有字节码指令集,该字节码指令集中可以包含预定义的任意类型的字节码指令。例如,add指令用于实现加运算,sub指令用于实现减运算,mul指令用于实现乘运算,div指令用于实现除运算,or指令用于实现按位或运算,and指令用于实现按位与运算,xor指令用于实现按位异或运算等,本说明书并不对此进行限制。
fpga结构可以从区块链节点处获得处于加密状态的上述交易,并将该交易传入fpga芯片上的加解密模块。该加解密模块由上述已部署的电路逻辑配置文件在fpga芯片上形成,其形成过程类似于上述字节码指令集cpu。然后,fpga结构根据加解密模块输出的解密后交易内容,获取字节码程序。
如果该交易用于部署智能合约,那么解密后交易内容的data字段会包含该智能合约的代码程序;若代码程序基于高级语言编写,则fpga结构还可以通过已部署的电路逻辑配置文件在fpga芯片上形成编译器,并通过该编译器将代码程序编译为字节码程序。
如果上述交易用于调用智能合约,那么解密后交易内容的to字段会包含被调用的智能合约的合约地址,而fpga结构可以基于该合约地址调用相应已部署的字节码程序;譬如,当智能合约被部署于区块链节点处时,fpga结构可以向区块链节点发送上述的合约地址,由区块链节点将对应于该合约地址的字节码程序返回至fpga结构。
fpga结构上可以部署有节点私钥,该节点私钥对应的节点公钥处于公开状态。上述交易可由交易发起方基于自身维护(譬如针对每笔交易随机生成)的对称密钥和节点公钥而采用数字信封方式进行加密生成:交易发起方通过对称密钥对明文交易内容进行加密、得到密文交易内容,以及通过节点公钥对上述的对称密钥进行加密、得到密文对称密钥,而上述交易包含该密文交易内容和该密文对称密钥。相应地,加解密模块在解密过程中,首先基于节点私钥对密文对称密钥进行解密、得到上述的对称密钥,然后基于该对称密钥对密文交易内容进行解密、得到上述的明文交易内容,即前述的解密后交易。
字节码指令集cpu执行上述的字节码程序后,可以生成相应的合约状态、交易收据等内容。交易收据中可以包括交易执行结果等信息,需要反馈至交易发起方。在上述的交易采用数字信封方式进行加密的情况下,fpga结构可以将字节码指令集cpu产生的交易收据传入加解密模块中,以基于数字信封采用的对称密钥进行加密,然后将加密后交易收据返回区块链节点,进而提供至交易发起方。由于数字信封采用的对称密钥仅由交易发起方持有,因而使用该对称密钥生成加密后交易收据,可以确保该加密后交易收据仅该交易发起方能够解密,以确保交易收据的安全和隐私保护。
如前所述,fpga结构需要执行的字节码程序可以部署在区块链节点处,那么fpga结构可以向区块链节点请求获得该字节码程序,以在fpga芯片上形成的字节码指令集cpu中予以执行。区块链节点属于fpga芯片之外的外部存储空间,而该外部存储空间还可以存在其他形式,比如fpga结构可以包含与fpga芯片相连的外接ddr存储器等,同样可以用于部署上述的字节码程序,此时可以减少fpga结构与区块链节点之间的交互次数。除了上述的外部存储空间之外,字节码程序还可以部署于fpga芯片的片上存储空间。
对于fpga结构而言,只有fpga芯片上被认为属于安全环境(基于fpga结构形成的tee),而fpga芯片之外的环境被认为不安全,所以字节码程序可以采用明文形式部署于上述的片上存储空间,但必须以密文形式部署于上述的外部存储空间。因此,当fpga结构从诸如外部存储空间获得加密后的字节码程序后,可以将该加密后的字节码程序传入fpga芯片上的加解密模块,并获得该加解密模块输出的解密后的字节码程序,以便在字节码指令集cpu中予以执行。
其中,加密后的字节码程序可由fpga结构所维护的业务根密钥或该业务根密钥的衍生密钥对字节码程序进行加密得到。例如,在fpga结构获得用于部署智能合约的交易后,可以从该交易中获得明文的合约代码,该合约代码可能为字节码程序,或者当该合约代码是采用高级语言编写时,可以通过编译器进行编译得到相应的字节码程序,总之fpga结构最终可以获得明文形式的字节码程序。然后,fpga结构可以通过加解密模块对该字节码程序进行加密、得到上述加密后的字节码程序,所采用的密钥即上述的业务根密钥或该业务根密钥的衍生密钥。
前文所述的节点私钥和业务根密钥可由用户部署至fpga结构。用户可以在本地完成部署,或者通过客户端实现远程部署。在远程部署过程中,客户端可以预先与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由密钥协商模块掌握,因而可以确保区块链节点无法获知最终得到的秘密值和业务秘密部署密钥,避免可能造成的安全性风险。
fpga结构中可以部署有认证根密钥,该认证根密钥可以被预置于fpga结构中,或者该认证根密钥可由客户端或其他对象在离线安全环境下部署至fpga结构中,或者该认证根密钥可由客户端或其他对象远程部署至fpga结构中。该认证根密钥属于非对称密钥。密钥协商模块可以通过该认证根密钥对所生成的密钥协商信息kb-2进行签名,而客户端可以通过验证签名而确定收到的信息是否确实来自于fpga结构且传输过程中未经篡改,而未通过签名验证的信息将不会被客户端信任和采纳。其中,认证根密钥的公钥可以由认证服务器管理且不公开,那么客户端可以通过将收到的信息发送至该认证服务器,由该认证服务器通过维护的公钥进行签名验证;然后,认证服务器可以向客户端提供验证结果,该验证结果由认证服务器进行签名,且该验证结果包含认证服务器的证书或者该认证服务器的公钥可以被公开,使得客户端可以验签以确定验证结果的有效性。或者,认证根密钥的公钥可以被公开,使得客户端可以自行基于该公钥对来自fpga结构的信息进行签名验证,而无需经由认证服务器,这样可以减少签名验证过程所经历的交互环节,从而提升验证效率、降低更多交互环节所导致的安全性风险。
上述的认证根密钥可以被基于前述已部署的电路逻辑配置文件部署至fpga结构。fpga结构可以避免将认证根密钥从电路逻辑配置文件中取出,使得fpga结构在将该电路逻辑配置文件加载至fpga芯片后,可以获知相应的认证根密钥。或者,fpga结构可以包含独立于fpga芯片的密钥管理芯片,且fpga结构可以将认证根密钥从所属的电路逻辑配置文件中取出后维护于密钥管理芯片中,使得认证根密钥仅存在于密钥管理芯片中,而不会再出现于fpga结构上部署的电路逻辑配置文件中,以提升认证根密钥的安全性。
fpga结构上可以部署有客户端对应的公钥或者预置证书。客户端可以针对前述的密钥协商信息ka-2进行签名后发送至fpga结构,使得fpga结构可以针对收到的密钥协商信息ka-2进行签名验证,并将签名通过验证作为基于该密钥协商信息ka-2生成秘密值的条件之一。其中,客户端对应的公钥或证书可由前述的电路逻辑配置文件部署于fpga结构。
除了上述的业务秘密部署密钥之外,fpga结构还可以与客户端协商其他密钥,以用于其他场景下。例如,fpga结构可以通过密钥协商模块与客户端协商得到配置文件部署密钥,其过程可以参考上述对于业务秘密部署密钥的协商过程。当然,除了分别单独协商得到配置文件部署密钥和业务秘密部署密钥之外,fpga结构还可以一次性协商得到多个密钥;比如,当密钥协商模块与客户端协商得到上述的秘密值之后,可以基于kdf一次性导出32位字符串,并将前16位、后16位字符串分别作为不同密钥,譬如分别作为上述的配置文件部署密钥和业务秘密部署密钥。
fpga结构上已部署的电路逻辑配置文件进行实现更新。例如,fpga结构在接收到来自客户端的加密后新版电路逻辑配置文件后,可以将该加密后新版电路逻辑配置文件读入fpga芯片上的可信更新模块进行解密,该可信更新模块由已部署的电路逻辑配置文件在fpga芯片上形成;相应地,fpga结构可以基于解密得到的新版电路逻辑配置文件对已部署的电路逻辑配置文件进行更新。其中,客户端可以采用上述的配置文件部署密钥对新版电路逻辑配置文件进行加密、以得到加密后新版电路逻辑配置文件,而可信更新模块同样可以基于上述的配置文件部署密钥对加密后新版电路逻辑配置文件进行解密、以得到新版电路逻辑配置文件。进一步地,客户端在加密之前,还可以对新版电路逻辑配置文件进行签名,而可信更新模块可以基于fpga结构上预配置的用户公钥或预置证书,对解密得到的新版电路逻辑配置文件进行验签。那么,在解密失败或验签失败的情况下,可信更新模块均可以终止更新操作。
上述的新版电路逻辑配置文件中,“新版”是相对于fpga结构上已部署的电路逻辑配置文件而言,以表明该已部署的电路逻辑配置文件被配置于fpga结构的时刻相对靠前,而并非表明相应的电路逻辑配置文件所实现的逻辑或功能上必然实现版本迭代。
fpga结构在部署电路逻辑配置文件时,可以将电路逻辑配置文件直接读取并配置于fpga芯片内。但是,fpga芯片具有易失性,断电后部署的电路逻辑配置文件就会丢失,使得重新上电后需要客户端重新部署电路逻辑配置文件。因此,为了减少客户端的部署次数,fpga结构可以进一步包含存储器,该存储器与fpga芯片相连,使得电路逻辑配置文件被部署于存储器中,且fpga芯片从存储器中读取电路逻辑配置文件以实现相关功能;其中,存储器具有非易失性,即便断电仍然可以保存电路逻辑配置文件,而重新上电后只需重新从存储器读入fpga芯片即可,无需客户端重新部署。存储器可以具有多种形式,比如闪存等可重复擦写的非易失性存储器,再比如熔丝存储器等不可重复擦写的存储器等,本说明书并不对此进行限制。因此,当已部署的电路逻辑配置文件位于存储器时,fpga结构可以基于新版电路逻辑配置文件对该存储器进行更新部署,使得存储器中已部署的电路逻辑配置文件被更新为新版电路逻辑配置文件。
fpga结构可以针对更新部署的新版电路逻辑配置文件生成认证结果,该认证结果包含与新版电路逻辑配置文件相关的内容。例如,上述与新版电路逻辑配置文件相关的内容可以为新版电路逻辑配置文件的哈希值或该哈希值的衍生值;而客户端可以基于自身维护的新版电路逻辑配置文件生成哈希值或其衍生值,那么在客户端接收和生成的哈希值(或其衍生值)一致的情况下,客户端可以确定新版电路逻辑文件已成功部署至fpga结构。当然,fpga结构可以通过认证根密钥对认证结果进行签名后发送至客户端,以使客户端确定收到的认证结果来自fpga结构且未经篡改。其中,fpga结构采用的认证根密钥可以由前述已部署的电路逻辑配置文件提供;或者,当新版电路逻辑配置文件包含新版认证根密钥的情况下,fpga结构可以基于该新版认证根密钥对认证结果进行签名。
除了上述新版电路逻辑文件的哈希值(或其衍生值)之外,认证结果还可与其他信息相关。例如,fpga结构在部署了新版电路逻辑配置文件后,可以在fpga芯片上加载该新版电路逻辑配置文件而形成新版密钥协商模块,并基于该新版密钥协商模块与客户端进行密钥协商、得到新版配置文件部署密钥,那么上述的其他信息可以为该新版配置文件部署密钥的哈希值(或其衍生值)。新版密钥协商模块与客户端协商新版配置文件部署密钥的过程中,采用fpga结构上最近部署的认证根密钥,该认证根密钥可以来自于前述已部署的电路逻辑配置文件或新版电路逻辑配置文件。其中,当fpga结构上前述已部署的电路逻辑配置文件与新版电路逻辑配置文件并非同一用户生成和部署的情况下,前述已部署的电路逻辑配置文件在烧录至fpga结构之前可能被其他用户查看或检验,导致该已部署的电路逻辑配置文件所含的认证根密钥被其他用户获知,存在一定的安全性风险。因此,通过新版电路逻辑配置文件部署新版认证根密钥,可以有效提升安全性。举例而言,fpga结构可以分别生成新版电路逻辑配置文件的哈希值、新版配置文件部署密钥的哈希值,并通过诸如sm3算法或其他算法对这两个哈希值进行计算,得到的计算结果可以被作为上述与新版电路逻辑配置文件相关的内容;相应地,基于认证结果可使客户端确定:新版电路逻辑配置文件在fpga结构上成功部署,且客户端与fpga结构之间成功协商得到了新版配置文件部署密钥。
图2是一示例性实施例提供的另一种基于fpga实现虚拟机运算的方法的流程图。如图2所示,该方法应用于fpga结构,可以包括以下步骤:
步骤202,fpga芯片上的字节码指令集cpu读取智能合约的字节码程序,所述字节码指令集cpu由所述fpga芯片加载所属fpga结构上已部署的电路逻辑配置文件而形成。
fpga芯片上包含若干可编辑的硬件逻辑单元,这些硬件逻辑单元经由电路逻辑配置文件进行配置后,可以实现为相应的功能模块,以用于实现相应的逻辑功能。具体的,该电路逻辑配置文件可以基于比特流的形式被烧录至fpga结构。
因此,通过向fpga结构部署相应的电路逻辑配置文件,可使fpga芯片上形成字节码指令集cpu,该字节码指令集cpu可用于实现相关技术中的虚拟机逻辑,相当于在fpga芯片上配置形成的“硬件虚拟机”,譬如该虚拟机逻辑可以包括以太坊虚拟机的执行逻辑或者wasm虚拟机的执行逻辑等,本说明书并不对此进行限制。
字节码由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码程序,而是选择一门高级语言编写智能合约的代码程序。高级语言编写的代码程序经过编译器编译,可以生成相应的字节码程序,进而该字节码程序可以部署至区块链。以太坊支持的高级语言很多,如solidity、serpent、lll语言等。上述的编译器可以部署在客户端上,使得该客户端可以通过该编译器将采用高级语言编写的代码程序编译为字节码程序后,通过交易提交至区块链网络;或者,上述的编译器可以部署在区块链节点处,使得区块链节点在收到客户端提交的交易后,通过编译器将采用高级语言编写的代码程序编译为字节码程序。
如前所述,采用高级语言编写的合约代码被编译为相应的字节码程序,该字节码程序所含的每一字节码包括一个字节长度的操作码及跟随在后的零至多个操作数,该操作数为相应操作码在执行时所需的参数。
在相关技术中,当上述字节码程序运行于区块链节点上的虚拟机时,譬如该区块链节点采用x86架构,那么该区块链节点将字节码程序在虚拟机内运行时,实际上是通过x86指令集来模拟实现字节码程序所含的各个字节码。而在本说明书的技术方案中,通过在fpga芯片上配置形成上述的字节码指令集cpu,使得该字节码指令集cpu在执行字节码程序的过程中,直接采用字节码指令集中定义的操作码执行字节码程序所含的各个字节码,而无需通过其他指令集来模拟执行字节码程序,从而具有相对更高的处理效率。
fpga结构可以从区块链节点处获得处于加密状态的上述交易,并将该交易传入fpga芯片上的加解密模块。该加解密模块由上述已部署的电路逻辑配置文件在fpga芯片上形成,其形成过程类似于上述字节码指令集cpu。然后,fpga结构根据加解密模块输出的解密后交易内容,获取字节码程序。
如果该交易用于部署智能合约,那么解密后交易内容的data字段会包含该智能合约的代码程序;若代码程序基于高级语言编写,则fpga结构还可以通过已部署的电路逻辑配置文件在fpga芯片上形成编译器,并通过该编译器将代码程序编译为字节码程序。
如果上述交易用于调用智能合约,那么解密后交易内容的to字段会包含被调用的智能合约的合约地址,而fpga结构可以基于该合约地址调用相应已部署的字节码程序;譬如,当智能合约被部署于区块链节点处时,fpga结构可以向区块链节点发送上述的合约地址,由区块链节点将对应于该合约地址的字节码程序返回至fpga结构。
fpga结构上可以部署有节点私钥,该节点私钥对应的节点公钥处于公开状态。上述交易可由交易发起方基于自身维护(譬如针对每笔交易随机生成)的对称密钥和节点公钥而采用数字信封方式进行加密生成:交易发起方通过对称密钥对明文交易内容进行加密、得到密文交易内容,以及通过节点公钥对上述的对称密钥进行加密、得到密文对称密钥,而上述交易包含该密文交易内容和该密文对称密钥。相应地,加解密模块在解密过程中,首先基于节点私钥对密文对称密钥进行解密、得到上述的对称密钥,然后基于该对称密钥对密文交易内容进行解密、得到上述的明文交易内容,即前述的解密后交易。
如前所述,fpga结构需要执行的字节码程序可以部署在区块链节点处,那么fpga结构可以向区块链节点请求获得该字节码程序,以在fpga芯片上形成的字节码指令集cpu中予以执行。区块链节点属于fpga芯片之外的外部存储空间,而该外部存储空间还可以存在其他形式,比如fpga结构可以包含与fpga芯片相连的外接ddr存储器等,同样可以用于部署上述的字节码程序,此时可以减少fpga结构与区块链节点之间的交互次数。除了上述的外部存储空间之外,字节码程序还可以部署于fpga芯片的片上存储空间。
对于fpga结构而言,只有fpga芯片上被认为属于安全环境(基于fpga结构形成的tee),而fpga芯片之外的环境被认为不安全,所以字节码程序可以采用明文形式部署于上述的片上存储空间,但必须以密文形式部署于上述的外部存储空间。因此,当fpga结构从诸如外部存储空间获得加密后的字节码程序后,可以将该加密后的字节码程序传入fpga芯片上的加解密模块,并获得该加解密模块输出的解密后的字节码程序,以便在字节码指令集cpu中予以执行。
其中,加密后的字节码程序可由fpga结构所维护的业务根密钥或该业务根密钥的衍生密钥对字节码程序进行加密得到。例如,在fpga结构获得用于部署智能合约的交易后,可以从该交易中获得明文的合约代码,该合约代码可能为字节码程序,或者当该合约代码是采用高级语言编写时,可以通过编译器进行编译得到相应的字节码程序,总之fpga结构最终可以获得明文形式的字节码程序。然后,fpga结构可以通过加解密模块对该字节码程序进行加密、得到上述加密后的字节码程序,所采用的密钥即上述的业务根密钥或该业务根密钥的衍生密钥。
前文所述的节点私钥和业务根密钥可由用户部署至fpga结构。用户可以在本地完成部署,或者通过客户端实现远程部署。在远程部署过程中,客户端可以预先与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由密钥协商模块掌握,因而可以确保区块链节点无法获知最终得到的秘密值和业务秘密部署密钥,避免可能造成的安全性风险。
fpga结构中可以部署有认证根密钥,该认证根密钥可以被预置于fpga结构中,或者该认证根密钥可由客户端或其他对象在离线安全环境下部署至fpga结构中,或者该认证根密钥可由客户端或其他对象远程部署至fpga结构中。该认证根密钥属于非对称密钥。密钥协商模块可以通过该认证根密钥对所生成的密钥协商信息kb-2进行签名,而客户端可以通过验证签名而确定收到的信息是否确实来自于fpga结构且传输过程中未经篡改,而未通过签名验证的信息将不会被客户端信任和采纳。其中,认证根密钥的公钥可以由认证服务器管理且不公开,那么客户端可以通过将收到的信息发送至该认证服务器,由该认证服务器通过维护的公钥进行签名验证;然后,认证服务器可以向客户端提供验证结果,该验证结果由认证服务器进行签名,且该验证结果包含认证服务器的证书或者该认证服务器的公钥可以被公开,使得客户端可以验签以确定验证结果的有效性。或者,认证根密钥的公钥可以被公开,使得客户端可以自行基于该公钥对来自fpga结构的信息进行签名验证,而无需经由认证服务器,这样可以减少签名验证过程所经历的交互环节,从而提升验证效率、降低更多交互环节所导致的安全性风险。
上述的认证根密钥可以被基于前述已部署的电路逻辑配置文件部署至fpga结构。fpga结构可以避免将认证根密钥从电路逻辑配置文件中取出,使得fpga结构在将该电路逻辑配置文件加载至fpga芯片后,可以获知相应的认证根密钥。或者,fpga结构可以包含独立于fpga芯片的密钥管理芯片,且fpga结构可以将认证根密钥从所属的电路逻辑配置文件中取出后维护于密钥管理芯片中,使得认证根密钥仅存在于密钥管理芯片中,而不会再出现于fpga结构上部署的电路逻辑配置文件中,以提升认证根密钥的安全性。
fpga结构上可以部署有客户端对应的公钥或者预置证书。客户端可以针对前述的密钥协商信息ka-2进行签名后发送至fpga结构,使得fpga结构可以针对收到的密钥协商信息ka-2进行签名验证,并将签名通过验证作为基于该密钥协商信息ka-2生成秘密值的条件之一。其中,客户端对应的公钥或证书可由前述的电路逻辑配置文件部署于fpga结构。
步骤204,所述字节码指令集cpu运行所述字节码程序,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
字节码指令集cpu执行上述的字节码程序后,可以生成相应的合约状态、交易收据等内容。交易收据中可以包括交易执行结果等信息,需要反馈至交易发起方。在上述的交易采用数字信封方式进行加密的情况下,fpga结构可以将字节码指令集cpu产生的交易收据传入加解密模块中,以基于数字信封采用的对称密钥进行加密,然后将加密后交易收据返回区块链节点,进而提供至交易发起方。由于数字信封采用的对称密钥仅由交易发起方持有,因而使用该对称密钥生成加密后交易收据,可以确保该加密后交易收据仅该交易发起方能够解密,以确保交易收据的安全和隐私保护。
除了上述的业务秘密部署密钥之外,fpga结构还可以与客户端协商其他密钥,以用于其他场景下。例如,fpga结构可以通过密钥协商模块与客户端协商得到配置文件部署密钥,其过程可以参考上述对于业务秘密部署密钥的协商过程。当然,除了分别单独协商得到配置文件部署密钥和业务秘密部署密钥之外,fpga结构还可以一次性协商得到多个密钥;比如,当密钥协商模块与客户端协商得到上述的秘密值之后,可以基于kdf一次性导出32位字符串,并将前16位、后16位字符串分别作为不同密钥,譬如分别作为上述的配置文件部署密钥和业务秘密部署密钥。
fpga结构上已部署的电路逻辑配置文件进行实现更新。例如,fpga结构在接收到来自客户端的加密后新版电路逻辑配置文件后,可以将该加密后新版电路逻辑配置文件读入fpga芯片上的可信更新模块进行解密,该可信更新模块由已部署的电路逻辑配置文件在fpga芯片上形成;相应地,fpga结构可以基于解密得到的新版电路逻辑配置文件对已部署的电路逻辑配置文件进行更新。其中,客户端可以采用上述的配置文件部署密钥对新版电路逻辑配置文件进行加密、以得到加密后新版电路逻辑配置文件,而可信更新模块同样可以基于上述的配置文件部署密钥对加密后新版电路逻辑配置文件进行解密、以得到新版电路逻辑配置文件。进一步地,客户端在加密之前,还可以对新版电路逻辑配置文件进行签名,而可信更新模块可以基于fpga结构上预配置的用户公钥或预置证书,对解密得到的新版电路逻辑配置文件进行验签。那么,在解密失败或验签失败的情况下,可信更新模块均可以终止更新操作。
上述的新版电路逻辑配置文件中,“新版”是相对于fpga结构上已部署的电路逻辑配置文件而言,以表明该已部署的电路逻辑配置文件被配置于fpga结构的时刻相对靠前,而并非表明相应的电路逻辑配置文件所实现的逻辑或功能上必然实现版本迭代。
fpga结构在部署电路逻辑配置文件时,可以将电路逻辑配置文件直接读取并配置于fpga芯片内。但是,fpga芯片具有易失性,断电后部署的电路逻辑配置文件就会丢失,使得重新上电后需要客户端重新部署电路逻辑配置文件。因此,为了减少客户端的部署次数,fpga结构可以进一步包含存储器,该存储器与fpga芯片相连,使得电路逻辑配置文件被部署于存储器中,且fpga芯片从存储器中读取电路逻辑配置文件以实现相关功能;其中,存储器具有非易失性,即便断电仍然可以保存电路逻辑配置文件,而重新上电后只需重新从存储器读入fpga芯片即可,无需客户端重新部署。存储器可以具有多种形式,比如闪存等可重复擦写的非易失性存储器,再比如熔丝存储器等不可重复擦写的存储器等,本说明书并不对此进行限制。因此,当已部署的电路逻辑配置文件位于存储器时,fpga结构可以基于新版电路逻辑配置文件对该存储器进行更新部署,使得存储器中已部署的电路逻辑配置文件被更新为新版电路逻辑配置文件。
fpga结构可以针对更新部署的新版电路逻辑配置文件生成认证结果,该认证结果包含与新版电路逻辑配置文件相关的内容。例如,上述与新版电路逻辑配置文件相关的内容可以为新版电路逻辑配置文件的哈希值或该哈希值的衍生值;而客户端可以基于自身维护的新版电路逻辑配置文件生成哈希值或其衍生值,那么在客户端接收和生成的哈希值(或其衍生值)一致的情况下,客户端可以确定新版电路逻辑文件已成功部署至fpga结构。当然,fpga结构可以通过认证根密钥对认证结果进行签名后发送至客户端,以使客户端确定收到的认证结果来自fpga结构且未经篡改。其中,fpga结构采用的认证根密钥可以由前述已部署的电路逻辑配置文件提供;或者,当新版电路逻辑配置文件包含新版认证根密钥的情况下,fpga结构可以基于该新版认证根密钥对认证结果进行签名。
除了上述新版电路逻辑文件的哈希值(或其衍生值)之外,认证结果还可与其他信息相关。例如,fpga结构在部署了新版电路逻辑配置文件后,可以在fpga芯片上加载该新版电路逻辑配置文件而形成新版密钥协商模块,并基于该新版密钥协商模块与客户端进行密钥协商、得到新版配置文件部署密钥,那么上述的其他信息可以为该新版配置文件部署密钥的哈希值(或其衍生值)。新版密钥协商模块与客户端协商新版配置文件部署密钥的过程中,采用fpga结构上最近部署的认证根密钥,该认证根密钥可以来自于前述已部署的电路逻辑配置文件或新版电路逻辑配置文件。其中,当fpga结构上前述已部署的电路逻辑配置文件与新版电路逻辑配置文件并非同一用户生成和部署的情况下,前述已部署的电路逻辑配置文件在烧录至fpga结构之前可能被其他用户查看或检验,导致该已部署的电路逻辑配置文件所含的认证根密钥被其他用户获知,存在一定的安全性风险。因此,通过新版电路逻辑配置文件部署新版认证根密钥,可以有效提升安全性。举例而言,fpga结构可以分别生成新版电路逻辑配置文件的哈希值、新版配置文件部署密钥的哈希值,并通过诸如sm3算法或其他算法对这两个哈希值进行计算,得到的计算结果可以被作为上述与新版电路逻辑配置文件相关的内容;相应地,基于认证结果可使客户端确定:新版电路逻辑配置文件在fpga结构上成功部署,且客户端与fpga结构之间成功协商得到了新版配置文件部署密钥。
图3是一示例性实施例提供的一种区块链节点的结构示意图。基于本说明书的技术方案,可以在区块链节点上添加fpga结构以实现硬件tee,譬如该fpga结构可以为如图3所示的fpga板卡。fpga板卡可以通过pcie接口连接至区块链节点上,以实现fpga板卡与区块链节点之间的数据交互。fpga板卡可以包括fpga芯片、flash芯片和密管芯片等结构;当然,在一些实施例中除了包含fpga芯片之外,可能仅包含剩余的flash芯片和密管芯片等中的部分结构,或者可能包含更多结构,此处仅用于举例。
在初始阶段,fpga芯片上并未烧录用户定义的任何逻辑,相当于fpga芯片处于空白状态。用户可以通过向fpga芯片上烧录电路逻辑配置文件,以在fpga芯片上形成相应的功能或逻辑。在首次烧录电路逻辑配置文件时,fpga板卡不具有安全防护的能力,因而通常需要外部提供安全环境,比如用户可以在离线环境下实施对电路逻辑配置文件的烧录以实现物理安全隔离,而非在线上实施远程烧录。
针对用户所需实现的功能或逻辑,可以通过fpga硬件语言形成相应的逻辑代码,并进而对该逻辑代码进行镜像化处理,即可得到上述的电路逻辑配置文件。在烧录至fpga板卡之前,用户可以针对上述的逻辑代码进行检查。尤其是,当同时涉及到多个用户时,多个用户可以分别对上述的逻辑代码进行检查,以确保fpga板卡最终能够满足所有用户的需求,防止出现安全性风险、逻辑错误、欺诈等异常问题。
在确定代码无误后,用户可以在上述的离线环境下,将电路逻辑配置文件烧录至fpga板卡上。具体的,电路逻辑配置文件被从区块链节点传入fpga板卡,进而部署至如图3所示的flash芯片中,使得即便fpga板卡发生掉电,flash芯片仍然能够保存上述的电路逻辑配置文件。
图4是一示例性实施例提供的一种在fpga芯片上形成功能模块的示意图。通过将flash芯片中所部署的电路逻辑配置文件加载至fpga芯片,可以对fpga芯片所含的硬件逻辑单元进行配置,从而在fpga芯片上形成相应的功能模块,譬如所形成的功能模块可以包括如图4所示的密钥协商模块、解密验签模块、加解密模块、明文计算模块等。同时,电路逻辑配置文件还可以用于向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芯片上形成的明文计算模块用于实现相关技术中的虚拟机逻辑,即明文计算模块相当于fpga板卡上的“硬件虚拟机”。因此,基于上述明文交易内容确定出合约代码后,可以将该合约代码传入明文计算模块中,以由该明文计算模块执行该合约代码。执行完毕后,合约代码所涉及的合约状态可能发生更新。如果合约状态需要存储至fpga芯片之外,那么可由加解密模块通过前述的业务根密钥或其衍生密钥对发生更新的合约状态进行加密,并对加密后合约状态进行存储,以确保与隐私交易相关的数据仅在fpga芯片内处于明文状态、在fpga芯片之外均处于密文状态,从而保证数据的安全性。
明文计算模块可以为本说明书中的字节码指令集cpu,针对区块链节点所收到的交易需要部署或调用的智能合约,fpga板卡可以将该智能合约的字节码程序读入字节码指令集cpu,使得字节码指令集cpu直接执行该字节码程序所含的各个字节码,而无需通过其他指令集对字节码进行模拟,极大地提升了针对字节码的执行效率,从而加快了交易处理速度。
基于一些原因,用户可能希望对fpga板卡上部署的电路逻辑配置文件进行版本更新,比如该电路逻辑配置文件所含的认证根密钥可能被风险用户获知、再比如用户希望对fpga板卡上部署的功能模块进行升级等,本说明书并不对此进行限制。为了便于区分,可以将上述过程中已部署的电路逻辑配置文件称之为旧版电路逻辑配置文件,而将需要部署的电路逻辑配置文件称之为新版电路逻辑配置文件。
与旧版电路逻辑配置文件相类似的,用户可以通过编写代码、镜像化等过程生成新版电路逻辑配置文件。进一步的,用户可以通过自身持有的私钥对新版电路逻辑配置文件进行签名,然后通过上文协商出的配置文件部署密钥对签名后的新版电路逻辑配置文件进行加密,得到加密后新版电路逻辑配置文件。在一些情况下,可能同时存在多名用户,那么旧版电路逻辑配置文件需要将这些用户对应的预置证书均部署至fpga板卡中,且这些用户需要分别采用自身持有的私钥对新版电路逻辑配置文件进行签名。
用户可以通过客户端远程将加密后新版电路逻辑配置文件发送至区块链节点,并由区块链节点进一步将其传入fpga板卡。图5是一示例性实施例提供的一种对fpga板卡进行可新更新的示意图。如图5所示,前述过程中在fpga芯片上形成的解密验签模块位于pcie接口与flash芯片之间的传输通路上,使得加密后新版电路逻辑配置文件必然需要优先经过解密验签模块的成功处理后,才能够被传入flash芯片以实现可信更新,无法绕过解密验签的过程而直接对flash芯片进行更新。
解密验签模块在收到加密后新版电路逻辑配置文件后,首先通过fpga板卡上部署的配置文件部署密钥进行解密,如果解密成功则解密验签模块进一步基于fpga芯片上部署的预置证书,对解密后的新版电路逻辑配置文件进行签名验证。如果解密失败或者签名验证未通过,则说明收到的文件并非来自上述用户或者遭到篡改,解密验签模块将触发终止本次的更新操作;而在解密成功且验签通过的情况下,可以确定得到的新版电路逻辑配置文件来自上述用户且传输过程中未遭到篡改,可以将该新版电路逻辑配置文件进一步传输至flash芯片,以针对flash芯片中的旧版电路逻辑配置文件进行更新部署。
新版电路逻辑配置文件被加载至fpga芯片后,同样可以在该fpga芯片上形成诸如上述的密钥协商模块、解密验签模块,以及向fpga芯片存入预置证书、向密管芯片存入认证根密钥等信息。其中,所形成的密钥协商模块、解密验签模块等,所实现的功能逻辑可以发生变化和升级,所存入部署的预置证书、认证根密钥等信息也可能区别于更新前的信息。那么,fpga板卡可以基于更新后的密钥协商模块、认证根密钥等,与用户进行远程协商得到新的配置文件部署密钥,该配置文件部署密钥可以被用于下一次的可新更新过程。类似地,可以据此不断实现针对fpga板卡的可信更新操作。
在完成更新部署后,fpga板卡可以针对新版电路逻辑配置文件生成认证结果。例如,上述的密钥协商模块可以通过诸如sm3算法或其他算法对新版电路逻辑配置文件的哈希值、基于新版电路逻辑配置文件协商得到的配置文件部署密钥的哈希值进行计算,得到的计算结果可以被作为上述的认证结果,并由密钥协商模块将该认证结果发送至用户。相应地,用户可以在客户端上基于所维护的新版电路逻辑配置文件和据此协商的配置文件部署密钥对认证结果进行验证,如果验证成功则表明新版电路逻辑配置文件在fpga板卡上成功部署,且用户与fpga板卡之间据此成功协商得到了一致的配置文件部署密钥,从而确认成功完成了针对电路逻辑配置文件的更新部署。
图6是一示例性实施例提供的一种基于fpga实现虚拟机运算的装置的示意结构图。请参考图6,在软件实施方式中,该基于fpga实现虚拟机运算的装置可以包括:
加载单元601,使fpga结构将已部署的电路逻辑配置文件加载至fpga芯片上,以在所述fpga芯片上形成字节码指令集cpu;
传入单元602,使所述fpga结构将智能合约的字节码程序传入所述字节码指令集cpu,使所述字节码指令集cpu运行所述字节码程序,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
可选的,所述fpga结构获得所述字节码程序,包括:
所述fpga结构从所述区块链节点处获得处于加密状态的所述交易;
所述fpga结构将所述交易传入所述fpga芯片上的加解密模块,所述加解密模块由所述已部署的电路逻辑配置文件在所述fpga芯片上形成;
所述fpga结构根据所述加解密模块输出的解密后交易内容,获取所述字节码程序。
可选的,所述交易由交易发起方基于自身维护的对称密钥和节点公钥而采用数字信封方式进行加密生成;其中,所述fpga结构维护有所述节点公钥对应的节点私钥,使所述加解密模块基于所述节点私钥对所述交易进行解密得到所述解密后交易内容。
可选的,还包括:
加密单元603,使所述fpga结构将所述字节码指令集cpu产生的交易收据传入所述加解密模块中,以基于所述数字信封采用的对称密钥进行加密;
返回单元604,使所述fpga结构将加密后交易收据返回所述区块链节点,以提供至所述交易发起方。
可选的,所述fpga结构获得所述字节码程序,包括:
在所述交易用于部署所述字节码程序的情况下,所述fpga结构从所述交易中提取所述字节码程序;
在所述交易用于调用所述字节码程序的情况下,所述fpga结构从所述交易中提取所述智能合约的合约地址,并基于所述合约地址获取已部署的所述字节码程序。
可选的,所述字节码程序被明文部署于所述fpga芯片的片上存储空间;或者,所述字节码程序被密文部署于所述fpga芯片之外的外部存储空间。
可选的,所述fpga结构获得所述字节码程序,包括:
所述fpga结构获得加密后的字节码程序;
所述fpga结构将所述加密后的字节码程序传入所述fpga芯片上的加解密模块,所述加解密模块由所述已部署的电路逻辑配置文件在所述fpga芯片上形成;
所述fpga结构获得所述加解密模块输出的解密后的所述字节码程序。
可选的,所述加密后的字节码程序由所述fpga结构所维护的业务根密钥或所述业务根密钥的衍生密钥对所述字节码程序进行加密得到。
可选的,还包括:
明文存储单元605,使所述fpga结构将对所述字节码程序运行后更新的合约状态明文存储于所述fpga结构上的片上存储空间;或者,
密文存储单元606,使所述fpga结构通过所述加解密模块对所述字节码程序运行后更新的合约状态进行加密,并将加密后合约状态输出至所述fpga结构之外的外部存储空间进行存储。
可选的,所述字节码指令集cpu用于实现虚拟机逻辑。
可选的,所述虚拟机逻辑包括:以太坊虚拟机的执行逻辑或者wasm虚拟机的执行逻辑。
可选的,还包括:
接收单元607,使所述fpga结构接收来自客户端的加密后新版电路逻辑配置文件;
解密单元608,使所述fpga结构将所述加密后新版电路逻辑配置文件读入所述fpga芯片上的可信更新模块进行解密,所述可信更新模块由所述已部署的电路逻辑配置文件在所述fpga芯片上形成;
更新单元609,使所述fpga结构基于解密得到的新版电路逻辑配置文件对所述已部署的电路逻辑配置文件进行更新。
可选的,还包括:
协商单元610,使所述fpga结构基于已部署的认证根密钥与所述客户端进行远程协商,以协商得到配置文件部署密钥;
其中,所述加密后新版电路逻辑配置文件被所述fpga结构基于所述配置文件部署密钥在所述可新更新模块中进行解密。
可选的,
还包括:验签单元611,使所述fpga结构将所述加密后新版电路逻辑配置文件读入所述可信更新模块进行签名验证,所述fpga结构上已部署所述客户端对应的预置证书;
所述更新单元609具体用于:使所述fpga结构在签名验证成功的情况下,基于所述新版电路逻辑配置文件对所述已部署的电路逻辑配置文件进行更新。
可选的,所述fpga结构包含所述fpga芯片之外的存储器,所述已部署的电路逻辑配置文件和所述新版电路逻辑配置文件部署于所述存储器上。
图7是一示例性实施例提供的另一种基于fpga实现虚拟机运算的装置的示意结构图。请参考图7,在软件实施方式中,该基于fpga实现虚拟机运算的装置可以包括:
读取单元701,使fpga芯片上的字节码指令集cpu读取智能合约的字节码程序,所述字节码指令集cpu由所述fpga芯片加载所属fpga结构上已部署的电路逻辑配置文件而形成;
运行单元702,使所述字节码指令集cpu运行所述字节码程序,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
可选的,所述读取单元701具体用于:
在所述交易用于部署所述字节码程序的情况下,使所述字节码指令集cpu从所述交易中提取所述字节码程序;
在所述交易用于调用所述字节码程序的情况下,使所述字节码指令集cpu从所述交易中提取所述智能合约的合约地址,并基于所述合约地址获取已部署的所述字节码程序。
可选的,所述字节码程序被明文部署于所述fpga芯片的片上存储空间;或者,所述字节码程序被密文部署于所述fpga芯片之外的外部存储空间。
可选的,所述fpga结构包含所述fpga芯片之外的存储器,所述已部署的电路逻辑配置文件部署于所述存储器上。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
1.一种基于fpga实现虚拟机运算的方法,包括:
fpga结构将已部署的电路逻辑配置文件加载至fpga芯片上,以在所述fpga芯片上形成字节码指令集cpu;
所述fpga结构将智能合约的字节码程序传入所述字节码指令集cpu以执行所述智能合约,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
2.根据权利要求1所述的方法,所述fpga结构获得所述字节码程序,包括:
所述fpga结构从所述区块链节点处获得处于加密状态的所述交易;
所述fpga结构将所述交易传入所述fpga芯片上的加解密模块,所述加解密模块由所述已部署的电路逻辑配置文件在所述fpga芯片上形成;
所述fpga结构根据所述加解密模块输出的解密后交易内容,获取所述字节码程序。
3.根据权利要求2所述的方法,所述交易由交易发起方基于自身维护的对称密钥和节点公钥而采用数字信封方式进行加密生成;其中,所述fpga结构维护有所述节点公钥对应的节点私钥,使所述加解密模块基于所述节点私钥对所述交易进行解密得到所述解密后交易内容。
4.根据权利要求3所述的方法,还包括:
所述fpga结构将所述字节码指令集cpu产生的交易收据传入所述加解密模块中,以基于所述数字信封采用的对称密钥进行加密;
所述fpga结构将加密后交易收据返回所述区块链节点,以提供至所述交易发起方。
5.根据权利要求1-4中任一项所述的方法,所述fpga结构获得所述字节码程序,包括:
在所述交易用于部署所述字节码程序的情况下,所述fpga结构从所述交易中提取所述字节码程序;
在所述交易用于调用所述字节码程序的情况下,所述fpga结构从所述交易中提取所述智能合约的合约地址,并基于所述合约地址获取已部署的所述字节码程序。
6.根据权利要求5所述的方法,所述fpga结构从所述交易中提取所述字节码程序,包括:
所述fpga结构从所述交易所包含交易内容的data字段中获取所述字节码程序;或者,
所述fpga结构从所述交易所包含交易内容的data字段中获取基于高级语言编写的合约代码,并将所述合约代码编译为所述字节码程序。
7.根据权利要求1所述的方法,所述字节码程序被明文部署于所述fpga芯片的片上存储空间;或者,所述字节码程序被密文部署于所述fpga芯片之外的外部存储空间。
8.根据权利要求1所述的方法,所述fpga结构获得所述字节码程序,包括:
所述fpga结构获得加密后的字节码程序;
所述fpga结构将所述加密后的字节码程序传入所述fpga芯片上的加解密模块,所述加解密模块由所述已部署的电路逻辑配置文件在所述fpga芯片上形成;
所述fpga结构获得所述加解密模块输出的解密后的所述字节码程序。
9.根据权利要求8所述的方法,所述加密后的字节码程序由所述fpga结构所维护的业务根密钥或所述业务根密钥的衍生密钥对所述字节码程序进行加密得到。
10.根据权利要求8所述的方法,还包括:
所述fpga结构将对所述字节码程序运行后更新的合约状态明文存储于所述fpga结构上的片上存储空间;或者,
所述fpga结构通过所述加解密模块对所述字节码程序运行后更新的合约状态进行加密,并将加密后合约状态输出至所述fpga结构之外的外部存储空间进行存储。
11.根据权利要求1所述的方法,所述字节码指令集cpu维护有字节码指令集,所述字节码指令集中包含预定义类型的字节码指令。
12.根据权利要求1所述的方法,所述字节码指令集cpu用于实现虚拟机逻辑。
13.根据权利要求12所述的方法,所述虚拟机逻辑包括:以太坊虚拟机的执行逻辑或者wasm虚拟机的执行逻辑。
14.根据权利要求1所述的方法,还包括:
所述fpga结构接收来自客户端的加密后新版电路逻辑配置文件;
所述fpga结构将所述加密后新版电路逻辑配置文件读入所述fpga芯片上的可信更新模块进行解密,所述可信更新模块由所述已部署的电路逻辑配置文件在所述fpga芯片上形成;
所述fpga结构基于解密得到的新版电路逻辑配置文件对所述已部署的电路逻辑配置文件进行更新。
15.根据权利要求14所述的方法,还包括:
所述fpga结构基于已部署的认证根密钥与所述客户端进行远程协商,以协商得到配置文件部署密钥;
其中,所述加密后新版电路逻辑配置文件被所述fpga结构基于所述配置文件部署密钥在所述可新更新模块中进行解密。
16.根据权利要求15所述的方法,
还包括:所述fpga结构将所述加密后新版电路逻辑配置文件读入所述可信更新模块进行签名验证,所述fpga结构上已部署所述客户端对应的预置证书;
所述fpga结构基于解密得到的新版电路逻辑配置文件对所述已部署的电路逻辑配置文件进行更新,包括:所述fpga结构在签名验证成功的情况下,基于所述新版电路逻辑配置文件对所述已部署的电路逻辑配置文件进行更新。
17.根据权利要求15所述的方法,所述fpga结构包含所述fpga芯片之外的存储器,所述已部署的电路逻辑配置文件和所述新版电路逻辑配置文件部署于所述存储器上。
18.根据权利要求15所述的方法,所述认证根密钥被基于所述电路逻辑配置文件部署至所述fpga结构。
19.根据权利要求1所述的方法,所述字节码指令集cpu执行所述智能合约后得到针对所述交易的交易结果,所述fpga结构将所述交易结果返回至所述交易的发起方。
20.一种基于fpga实现虚拟机运算的方法,包括:
fpga芯片上的字节码指令集cpu读取智能合约的字节码程序,所述字节码指令集cpu由所述fpga芯片加载所属fpga结构上已部署的电路逻辑配置文件而形成;
所述字节码指令集cpu运行所述字节码程序以执行所述智能合约,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
21.根据权利要求20所述的方法,所述fpga芯片上的字节码指令集cpu读取智能合约的字节码程序,包括:
在所述交易用于部署所述字节码程序的情况下,所述字节码指令集cpu从所述交易中提取所述字节码程序;
在所述交易用于调用所述字节码程序的情况下,所述字节码指令集cpu从所述交易中提取所述智能合约的合约地址,并基于所述合约地址获取已部署的所述字节码程序。
22.根据权利要求20所述的方法,所述字节码程序被明文部署于所述fpga芯片的片上存储空间;或者,所述字节码程序被密文部署于所述fpga芯片之外的外部存储空间。
23.根据权利要求20所述的方法,所述fpga结构包含所述fpga芯片之外的存储器,所述已部署的电路逻辑配置文件部署于所述存储器上。
24.根据权利要求20所述的方法,所述字节码指令集cpu维护有节码指令集,所述字节码指令集中包含预定义类型的字节码指令。
25.根据权利要求20所述的方法,所述字节码指令集cpu用于实现虚拟机逻辑。
26.根据权利要求25所述的方法,所述虚拟机逻辑包括:以太坊虚拟机的执行逻辑或者wasm虚拟机的执行逻辑。
27.一种基于fpga实现虚拟机运算的装置,包括:
加载单元,使fpga结构将已部署的电路逻辑配置文件加载至fpga芯片上,以在所述fpga芯片上形成字节码指令集cpu;
传入单元,使所述fpga结构将智能合约的字节码程序传入所述字节码指令集cpu以执行所述智能合约,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
28.一种基于fpga实现虚拟机运算的装置,包括:
读取单元,使fpga芯片上的字节码指令集cpu读取智能合约的字节码程序,所述字节码指令集cpu由所述fpga芯片加载所属fpga结构上已部署的电路逻辑配置文件而形成;
运行单元,使所述字节码指令集cpu运行所述字节码程序以执行所述智能合约,所述智能合约与所述fpga结构所属的区块链节点接收到的交易相关。
29.一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如权利要求1-26中任一项所述的方法。
30.一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如权利要求1-26中任一项所述方法的步骤。
技术总结