使用多重密钥对签名的程序执行和数据证明方案的制作方法

文档序号:20361503发布日期:2020-04-10 23:43阅读:391来源:国知局
使用多重密钥对签名的程序执行和数据证明方案的制作方法

本文涉及用于在可信执行环境(tee)中执行的程序的程序执行和数据证明。



背景技术:

分布式账本系统(dls),也可称为共识网络和/或区块链网络,使得参与的实体能够安全且不可篡改地存储数据。在不引用任何特定用例的情况下,dls通常被称为区块链网络。区块链网络的类型示例可以包括为选定的实体组群提供的联盟区块链网络,所述实体组群控制共识过程,并且所述联盟区块链网络包括访问控制层。

所谓可信执行环境(tee)是硬件(一个或多个处理器,存储器)中与硬件的操作环境隔离的可信环境。tee是处理器的单独的安全区域,可确保在主处理器中执行的代码和载入主处理器或从主处理器提供的数据的机密性和完整性。但是,在执行代码之前,首先执行认证处理,以验证(证明)tee是否按预期运行且tee是否正在执行预期在其中执行的代码。

在某些情况下,在tee中执行的代码执行状态子逻辑。即,可以根据各个状态在tee内执行不同的子逻辑。因此,当客户端调用在tee内执行的程序时,该调用包括请求参数、子逻辑代码和子逻辑代码的状态数据。在tee中执行的程序加载子逻辑代码和状态数据,并根据请求参数执行子逻辑以将结果提供给客户端。但是,在所述认证处理中,只有程序的静态代码和静态数据经测定和远程验证。因此,在tee中执行的程序需要提供证明,以证实预期的子逻辑已执行,且返回的结果是可信的。

尽管已提出用于在tee中执行的程序的程序执行和数据证明的技术,但是解决安全性和资源消耗问题的更有效的解决方案将是有利的。



技术实现要素:

本文描述了用于在可信执行环境(tee)中执行的程序的程序执行和数据证明的技术。

总体而言,本文所描述的主题的创新方面关于程序执行和数据证明方案,以证实预期在tee中执行的子逻辑代码确实已执行,并且所得到的数据是可信的。在一些实施方式中,多个子逻辑代码中的每个子逻辑代码被注册并存储在tee内,并且生成对应于所述子逻辑代码的密钥对(私钥,公钥)。客户端接收并存储公钥。当客户端向在tee内执行的程序发送请求时,所述请求包括将被执行的子逻辑的标识。tee检索与所述标识对应的已存储子逻辑,执行子逻辑代码并提供结果。tee使用通过使用所述子逻辑代码的私钥生成的数字签名对所述结果进行签名。客户端接收所述结果,并根据所述数字签名和所述子逻辑代码的公钥验证所述结果。

本文中描述的主题可以在特定实施方式实现以下技术优点中的一个或多个。例如,在客户端发送的请求中,仅发送要执行的子逻辑代码的标识,而不是子逻辑代码本身。这显著减小了请求的大小,从而节省计算资源(例如,处理器、存储器、网络带宽),并减轻网络瓶颈。此外,响应于接收到所述请求,可信程序无需解析并加载所述请求中携带的子逻辑代码,从而避免了更多的处理。作为另一个示例,在处理每个请求之后,可信程序仅对结果签名,而不对整个子逻辑代码签名,且客户端仅检查经签名的结果。与传统方法相比,这两种活动都导致处理量减少。此外,本文的实施方式改善了可信程序使用子逻辑代码及其变体的可扩展性。

本文还提供了耦接到一个或多个处理器并且其上存储有指令的一个或多个非暂态计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令促使所述一个或多个处理器按照本文提供的方法的实施方式执行操作。

本文还提供了用于实施本文提供的所述方法的系统。该系统包括一个或多个处理器,以及其上存储有指令的、耦接到所述一个或多个处理器的计算机可读存储介质,当所述指令由所述一个或多个处理器执行时,所述指令促使所述一个或多个处理器按照本文提供的方法的实施方式执行操作。

应了解,依据本文的方法可以包括本文描述的方面和特征的任意组合。也就是说,根据本文的方法不限于本文具体描述的方面和特征的组合,还包括所提供的方面和特征的任意组合。

本文的一个或多个实施方式的细节在附图和以下的描述中阐述。根据本文和附图以及权利要求,本文的其他特征和优点将显现。

附图说明

图1是示出可用于执行本文的实施方式的环境的示例的示图。

图2是示出根据本文的实施方式的概念性架构的示例的示图。

图3是示出根据本文的实施方式的系统的示例的示图。

图4描绘了根据本文的实施方式的信号流的示例。

图5描绘了根据本文的实施方式的信号流的示例。

图6描绘了根据本文的实施方式的信号流的示例。

图7a和7b描绘了根据本文实施方式可执行的过程的示例。

图8描绘了根据本文实施方式的装置的模块的示例。

在各个附图中,相同的附图标记和名称表示相同的元件。

具体实施方式

本文描述了用于在可信执行环境(tee)中执行的程序的程序执行和数据证明的技术。更具体地,且如本文所详述的,本文的实施方式关于程序执行和数据证明方案,以证实预期在tee中执行的子逻辑代码确实已执行,并且所得到的数据是可信的。在一些实施方式中,多个子逻辑代码中的每个子逻辑代码被注册并存储在tee内,并且生成对应于所述子逻辑代码的密钥对(私钥,公钥)。客户端接收并存储公钥。当客户端向在tee内执行的程序发送请求时,所述请求包括将被执行的子逻辑的标识。tee检索与所述标识对应的已存储子逻辑,执行子逻辑代码并提供结果。tee使用通过使用所述子逻辑代码的私钥生成的数字签名对所述结果进行签名。客户端接收所述结果,并根据所述数字签名和所述子逻辑代码的公钥验证所述结果。根据本公开的实施方式,在客户端发送的请求中,仅发送要执行的子逻辑代码的标识,而不是子逻辑代码本身。这显著减小了请求的大小,从而节省计算资源(例如,处理器、存储器、网络带宽),并减轻网络瓶颈。

为本文的实施方式提供进一步的背景,如上所述,分布式账本系统(dls),也可以称为共识网络(例如,由点对点(peer-to-peer)节点组成)和区块链网络,使参与实体能够安全且不可篡改地进行交易并存储数据。尽管术语“区块链”通常与特定网络和/或用例相关,但本文所使用的区块链一般指在不参考任何特定用例的情况下的dls。

区块链是以交易是不可篡改的方式存储交易的数据结构。因此,记录在区块链上的交易是可靠和值得信赖的。区块链包括一个或多个区块。链中的每个区块通过包括紧邻其之前的前一区块的加密哈希值(cryptographichash)链接到该前一区块。每个区块还包括时间戳、自身的加密哈希值以及一个或多个交易。已经由区块链网络的节点验证的交易经哈希处理并编码成默克尔(merkle)树。merkle树是数据结构,其中树的叶节点处的数据是经哈希处理的,并且在该树的每个分支中的所有哈希值在该分支的根处连接。此过程沿着树持续一直到整个树的根,在整个树的根处存储了代表树中所有数据的哈希值。声称是存储在树中的交易的哈希值可以通过确定其是否与树的结构一致而被快速验证。

区块链是用于存储交易的去中心化或至少部分去中心化的数据结构,而区块链网络是通过广播、验证和确认交易等来管理、更新和维护一个或多个区块链的计算节点的网络。如上所述,区块链网络可提供为公有区块链网络、私有区块链网络或联盟区块链网络。在本文中参考联盟区块链网络进一步详细描述本文的实施方式。然而,可以预期,可以在任何适当类型的区块链网络中实现本文的实施方式。

通常,联盟区块链网络在参与的实体中是私有的。在联盟区块链网络中,共识过程由授权的节点集控制,该节点集可以被称为共识节点,一个或多个共识节点由相应实体(例如,金融机构、保险公司)操作。例如,由十(10)个实体(例如,金融机构、保险公司)组成的联盟可以操作联盟区块链网络,每个实体可以操作联盟区块链网络中的至少一个节点。

在一些示例中,在联盟区块链网络内,提供全局区块链作为跨所有节点复制的区块链。也就是说,所有的共识节点相对于全局区块链处于完全共识状态。为了达成共识(例如,同意将区块添加到区块链),在联盟区块链网络内实施共识协议。例如,联盟区块链网络可以实施实用拜占庭容错(pbft)共识,下面将进一步详细描述。

图1是示出可用于执行本文的实施方式的环境100的示例的示图。在一些示例中,示例性环境100使得实体能够参与到联盟区块链网络102中。示例性环境100包括计算系统106、108以及网络110。在一些示例中,网络110包括局域网(lan)、广域网(wan)、因特网或其组合,并且连接网络站点、用户设备(例如,计算设备)和后台系统。在一些示例中,可以通过有线和/或无线通信链路来访问网络110。

在所描述的示例中,计算系统106、108可以各自包括能够作为节点参与至联盟区块链网络102中的任何适当计算系统。示例性计算设备包括但不限于服务器、台式计算机、膝上型计算机、平板计算设备和智能电话。在一些示例中,计算系统106、108承载一个或多个由计算机实施的服务,用于与联盟区块链网络102交互。例如,计算系统106可以承载第一实体(例如,用户a)的由计算机实施的、例如交易管理系统的服务,第一实体使用该交易管理系统管理其与一个或多个其他实体(例如,其他用户)的交易。计算系统108可以承载第二实体(例如,用户b)的由计算机实施的、例如交易管理系统的服务,第二实体使用该交易管理系统管理其与一个或多个其他实体(例如,其他用户)的交易。在图1的示例中,联盟区块链网络102被表示为节点的点对点网络(peer-to-peernetwork),并且计算系统106、108分别提供参与联盟区块链网络102的第一实体和第二实体的节点。

图2描绘了根据本文实施方式的概念性架构200的示例。所述概念性架构200包括实体层202、承载服务层204和区块链网络层206。在所描绘的示例中,实体层202包括三个参与者,参与者a、参与者b和参与者c,每个参与者具有各自的交易管理系统208。

在所绘示的示例中,承载服务层204包括用于每个交易管理系统208的接口210。在一些示例中,相应的交易管理系统208使用协议(例如,超文本传输协议安全(https))通过网络(例如,图1的网络110)与相应的接口210通信。在一些示例中,每个接口210提供相应交易管理系统208与区块链网络层206之间的通信连接。更具体地说,接口210与区块链网络层206的区块链网络212通信。在一些示例中,接口210与区块链网络层206之间的通信是使用远程过程调用(rpc)进行的。在一些示例中,接口210“承载”用于各自的交易管理系统208的区块链网络节点。例如,接口210提供用于访问区块链网络212的应用编程接口(api)。

如本文所述,提供作为点对点网络的区块链网络212,包括将信息不可篡改地记录在区块链216中的多个节点214。尽管示意性地描述了单个区块链216,但在区块链网络212上提供并维护了区块链216的多个副本。例如,每个节点214存储区块链的副本。在一些实施例中,区块链216存储与在参与联盟区块链网络的两个或更多个实体之间执行的交易相关联的信息。

区块链(例如,图2的区块链216)由一系列区块组成,每个区块存储数据。示例性数据包括表示两个或更多个参与者之间的交易的交易数据。尽管本文通过非限制性示例使用了“交易”,但是可以预期,任何适当的数据可以存储在区块链中(例如,文档、图像、视频、音频)。示例性交易可以包括但不限于有价物的交换(例如,资产、产品、服务、货币)。交易数据不可篡改地存储在区块链中。也就是说,交易数据不能改变。

在将交易数据存储在区块中之前,对交易数据进行哈希处理。哈希处理是将交易数据(作为字符串数据提供)转换为固定长度哈希值(也作为字符串数据提供)的过程。不可能对哈希值进行去哈希处理(un-hash)以获取交易数据。哈希处理可确保即使交易数据轻微改变也会导致完全不同的哈希值。此外,如上所述,哈希值具有固定长度。也就是说,无论交易数据的大小如何,哈希值的长度都是固定的。哈希处理包括通过哈希函数处理交易数据以生成哈希值。示例性哈希函数包括但不限于输出256位哈希值的安全哈希算法(sha)-256。

多个交易的交易数据被哈希处理并存储在区块中。例如,提供两个交易的哈希值,并对它们本身进行哈希处理以提供另一个哈希值。重复此过程,直到针对所有要存储在区块中的交易提供单个哈希值为止。该哈希值被称为merkle根哈希值,并存储在区块的头中。任何交易中的更改都会导致其哈希值发生变化,并最终导致merkle根哈希值发生变化。

通过共识协议将区块添加到区块链。区块链网络中的多个节点参与共识协议,并竞相将区块添加到区块链中。这种节点称为共识节点。上面介绍的pbft用作共识协议的非限制性示例。共识节点执行共识协议以将交易添加到区块链,并更新区块链网络的整体状态。

更详细地,共识节点生成区块头,对区块中的所有交易进行哈希处理,并将所得的哈希值成对地组合以生成进一步的哈希值,直到为区块中的所有交易提供单个哈希值(merkle根哈希值)。将此哈希值添加到区块头中。共识节点还确定区块链中最新区块(即,添加到区块链中的最后一个区块)的哈希值。共识节点还向区块头添加随机数(nonce)和时间戳。

通常,pbft提供容忍拜占庭故障(例如,故障节点、恶意节点)的实用拜占庭状态机复制。这通过假设将发生故障(例如,假设存在独立节点故障和/或由共识节点发送的经操纵的消息)在pbft中实现。在pbft中,以包括主共识节点和备共识节点的顺序提供共识节点。主共识节点被周期性地改变。交易由区块链网络内的对区块链网络的全局状态达成一致的共识节点添加到区块链中。在该过程中,在共识节点之间传输消息,并且每个共识节点证明所述消息是从指定的对等节点(peernode)接收的,并验证在传输期间所述消息未被篡改。

在pbft中,共识协议是在所有共识节点以相同的状态开始的情况下分多个阶段提供的。首先,客户端向主共识节点发送调用服务操作(例如,在区块链网络内执行交易)的请求。响应于接收到所述请求,主共识节点将所述请求组播到备共识节点。所述备共识节点执行所述请求,并且各自向客户端发送回复。客户端等待直到接收到阈值数量的回复。在一些示例中,客户端等待直到接收到f+1个回复,其中f是区块链网络内可以容忍的故障共识节点的最大数量。最终结果是,足够数量的共识节点就将记录添加到区块链的顺序达成一致,并且该记录或被接受或被拒绝。

在一些区块链网络中,用密码学来维护交易的隐私。例如,如果两个节点想要保持交易隐私,以使得区块链网络中的其他节点不能看出交易的细节,则这两个节点可以对交易数据进行加密处理。示例性加密处理包括但不限于对称加密和非对称加密。对称加密是指使用单个密钥既进行加密(从明文生成密文)又进行解密(从密文生成明文)的加密过程。在对称加密中,同一密钥可用于多个节点,因此每个节点都可以对交易数据进行加密/解密。

非对称加密使用密钥对,每个密钥对包括私钥和公钥,私钥仅对于相应节点是已知的,而公钥对于区块链网络中的任何或所有其他节点是已知的。节点可以使用另一个节点的公钥来加密数据,并且该加密的数据可以使用其他节点的私钥被解密。例如,再次参考图2,参与者a可以使用参与者b的公钥来加密数据,并将加密数据发送给参与者b。参与者b可以使用其私钥来解密该加密数据(密文)并提取原始数据(明文)。使用节点的公钥加密的消息只能使用该节点的私钥解密。

非对称加密用于提供数字签名,这使得交易中的参与者能够确认交易中的其他参与者以及交易的有效性。例如,节点可以对消息进行数字签名,而另一个节点可以根据参与者a的该数字签名来确认该消息是由该节点发送的。数字签名也可以用于确保消息在传输过程中不被篡改。例如,再次参考图2,参与者a将向参与者b发送消息。参与者a生成该消息的哈希值,然后使用其私钥加密该哈希值以提供为加密哈希值的数字签名。参与者a将该数字签名附加到该消息上,并将该具有数字签名的消息发送给参与者b。参与者b使用参与者a的公钥解密该数字签名,并提取哈希值。参与者b对该消息进行哈希处理并比较哈希值。如果哈希值相同,参与者b可以确认该消息确实来自参与者a,且未被篡改。

在一些实施方式中,区块链网络的节点和/或与区块链网络通信的节点可以使用tee(可信执行环境)来操作。在较高层面上,tee是硬件(一个或多个处理器、存储器)内与硬件的操作环境(例如,操作系统(os)、基本输入/输出系统(bios))隔离的可信环境。更详细地,tee是确保主处理器中执行的代码和加载的数据的机密性和完整性的处理器的独立安全区域。在处理器内,tee与os并行运行。至少部分所谓的可信应用(ta)在tee内执行,并且可以访问处理器和存储器。通过tee,ta被保护免受主os中运行的其他应用的影响。此外,tee以密码学方式将tee内的ta彼此隔离。

tee的示例包括由美国加利福尼亚州圣克拉拉的英特尔公司提供的软件保护扩展(softwareguardextensions,sgx)。尽管本文以示例的方式讨论了sgx,但可以预期本文的实施方式可以使用任何适当的tee来实现。

sgx提供基于硬件的tee。在sgx中,可信硬件是中央处理器(cpu)的核心,物理存储器的一部分被隔离以保护选择的代码和数据。存储器的隔离部分被称为飞地(enclave)。更具体地,飞地被提供为存储器中的飞地页面缓存(epc),并被映射到应用地址空间。存储器(例如,dram)包括用于sgx的保留随机存储器(prm)。prm是最低bios级别的连续存储空间,并且不能被任何软件访问。每个epc都是存储器集(例如4kb),其由os分配以在prm中加载应用数据和代码。epc元数据(epcm)是各个epc的入口地址,并且确保每个epc只能由一个飞地共享。也就是说,单个飞地可以使用多个epc,而一个epc专用于单个飞地。

在执行ta期间,处理器在访问存储在飞地中的数据时以所谓的飞地模式操作。飞地模式下的操作对每个存储器访问强制执行额外的硬件检查。在sgx中,ta被编译为可信部分和不可信部分。可信部分不可被例如os、bios、特权系统代码、虚拟机管理器(vmm)、系统管理模式(smm)等访问。在操作中,ta在存储器的prm内运行并创建飞地。飞地内的可信部分执行的可信函数被不可信部分调用,在飞地内执行的代码将数据视为明文数据(未加密),并且对数据的外部访问被拒绝。可信部分对所述调用提供加密响应,ta继续执行。

可执行认证处理以验证预期代码(例如,ta的可信部分)是否在sgx提供的tee内安全执行。通常,认证处理包括ta接收来自质询者(例如,区块链网络中的另一个节点、区块链网络的密钥管理系统(kms))的认证请求。作为响应,ta要求其飞地提供远程认证,也称为报价(quote)。提供远程认证包括将本地认证从飞地发送到所谓的报价飞地,该报价飞地验证本地认证并通过使用非对称认证密钥对所述本地认证签名,从而将所述本地认证转换为远程认证。该远程认证(报价)被提供给质询者(例如,客户端或区块链网络的kms)。

质询者使用认证验证服务来验证远程认证。对于sgx,英特尔提供英特尔认证服务(ias),其接收来自质询者的远程认证并验证该远程认证。更具体地,ias处理该远程认证并提供报告(例如,认证验证报告(avr)),该报告指示该远程认证是否通过验证。如果未通过验证,则可以指示错误。如果通过验证(预期代码在tee中安全地执行),质询者可以发起或继续与ta交互。例如,响应于所述验证,kms(作为质询者)可以对执行tee的节点(例如,通过密钥交换处理,诸如椭圆曲线diffie-hellman(ecdh))发布非对称加密密钥(例如,公钥和私钥对),以使这些节点能够与其他节点和/或客户端安全通信。

如上所述,在使用sgx提供的tee中,至少一部分代码(例如ta的可信部分)在飞地内执行,该代码可被称为飞地程序。同样如上所述,在执行飞地程序之前执行认证处理(远程认证)。即,对飞地和代码进行测量以提供报价,该报价在远程认证中用于验证代码是否在飞地内按预期执行。通常,在认证中只测量飞地程序本身的代码和数据,而测量值的哈希值则在报价中携带,并由远程认证服务(例如ias)进行认证。

更详细地,远程认证处理(也称为远程认证)使用非对称加密和专门为远程认证而设置的报价飞地(qe)。qe使用特定于设备的私有非对称密钥(随硬件提供)对报价进行数字签名。为了进一步增强安全性,该认证使用了直接匿名认证(daa)方案的扩展,该方案被称为增强隐私id(epid)。epid可以被描述为组签名方案,该方案使平台能够对数据对象(例如,报价)进行数字签名,而无需唯一地标识平台或链接不同的签名。qe生成用于对平台认证进行签名的epid密钥。epid密钥由epid后端基础架构认证,并且代表平台,也代表底层硬件的可信赖性。只有qe能够访问与处理器固件版本绑定的epid密钥。因此,可以将使用epid密钥签名的报价视为由处理器本身发出的。

为了开始认证处理,客户端向ta发出质询,以证明ta正在飞地内执行预期代码。该qe的飞地身份(qeid)被提供给ta。qeid和客户端的质询被发送至飞地。飞地生成包含对质询的响应的清单以及可被客户端用来与飞地安全通信的公钥。公钥是作为认证处理的一部分暂时生成的。飞地生成该清单的哈希值,且飞地中包括用于生成将该清单绑定到飞地的报告的哈希值。飞地将报告发送到应用,该应用将报告提供给qe进行签名。qe创建报价,用其epid密钥对报价签名,然后将签名后的报价返回给ta。ta将报价发送给发起质询的客户端。

客户端将报价提供给远程认证服务以进行认证。例如,ias公开认证应用编程接口(api),从而对sgx使能的飞地的认证证据(例如,报价)进行验证。认证api是表述性状态转移(rest)api,认证api使用javascript对象表示法(json)作为数据序列化格式。客户端通过认证api向ias提交请求,该请求包括认证证据有效负载(aep)。aep包含报价,该报价被提供在isvenclavequote字段中。ias处理报价,从而验证飞地的身份及执行飞地所在平台的有效性。更具体地,ias提供avr作为验证飞地和平台的可信计算库(tcb)的身份的经加密签名的报告。avr包括提供在isvenclavequotestatus字段中的报价状态值。如果飞地和平台通过验证,则报价状态被提供为ok,这表示报价的epid签名已经验证,且平台的tcb级别为当前。

远程认证服务使用报告签名密钥(例如,使用rsa-sha256)对avr进行加密签名,且报告签名证书链(rscc)也随avr一并提供。客户端解码并验证rscc,并且验证rscc源于可信的认证报告签名ca证书,从而对avr上的签名进行验证。在客户端注册到认证服务后,认证报告签名ca证书即可被下载到客户端,这发生于客户端发起质询之前。客户端使用认证报告签名证书(例如,以x.509数字证书的形式分发的报告密钥的公共部分)验证avr上的签名。

响应于成功验证,客户端导出多个会话密钥,所述会话密钥用于后续与飞地的安全通信。会话密钥包括签名密钥(sk)和主密钥(mk)。会话密钥可以被称为包括私钥和公钥的密钥对。会话密钥是使用密钥导出密钥(kdk)导出的,该密钥导出密钥提供为客户端和飞地之间的diffie-hellman密钥交换(dhke)的一部分。客户端可以使用从该交换中获得的共享密钥来加密要提供给飞地的数据,该飞地能够导出相同的密钥并使用该密钥来解密数据。因此,在执行认证后,在通过密钥交换提供的共享密钥中提供信任锚。

在一些实例中,在飞地内执行的代码和/或飞地内的数据是动态的。也就是说,例如,飞地程序能够运行状态子逻辑代码,而状态随时间而变化。其示例可以包括但不限于使用特定注册证书连接到外部服务(例如,基于web的服务)的子逻辑代码(例如,智能合约代码,客户端代码)。在这种情况下,每次调用飞地程序时,都会在请求中提供注册证书。除了携带请求参数外,子逻辑代码及其状态数据也是必需的。飞地程序加载子逻辑代码和状态数据后,子逻辑将在飞地内执行,且请求参数将被处理以获得结果。由于飞地程序仅具有自己的通过原始认证处理测量和验证的静态代码和静态数据,因此飞地程序需要向客户端提供证明,以证实子逻辑提供了结果且该结果是可信的。

向客户端证明子逻辑提供了结果的传统方法包括随每个请求一同提供完整的子逻辑代码。例如,当要执行特定的子逻辑代码时,客户端将包含完整子逻辑代码和请求参数(例如,将要通过子逻辑代码处理的数据)的请求发送至飞地程序。飞地程序执行子逻辑代码以提供结果。使用tee的私钥(例如,上文也称为主密钥)对子逻辑代码或子逻辑代码的哈希值以及该结果进行签名。当客户端接收到从飞地程序返回的用于验证的结果时,客户端使用原始的子逻辑代码(或重新计算哈希值)来验证该结果并证明特定的子逻辑代码已由飞地程序执行以提供该结果。

这种向客户端证明子逻辑代码提供了结果的方法是有缺点的。例如,每次客户端向飞地程序发送请求时,都需要将子逻辑代码的完整表达携带在请求中,从而导致增大请求大小,加重网络传输的负担。作为另一个示例,为了处理每个请求,飞地程序需要解析并加载请求中携带的子逻辑代码,这导致处理量增加。作为另一个示例,在处理每个请求之后,飞地程序需要对子逻辑代码签名,而客户端需要对结果中提供的子逻辑代码重复检查。这两种活动都会导致处理量增加。作为又一个示例,由于不同的子逻辑代码的复杂性、多样性和不兼容性,难以直接以通用格式直接表达子逻辑代码。因此,子逻辑代码耦合在飞地程序查询接口中,可扩展性较差。

如本文所使用的,子逻辑代码可以指认证飞地程序后被提供以由飞地程序执行的计算机可执行代码。在一些示例中,子逻辑代码包括飞地程序所或缺的一个或多个函数。以这种方式,飞地程序可执行子逻辑代码,以扩展飞地程序的功能。

鉴于上述背景,本文的实施方式针对一种高效且简化的飞地程序子逻辑证明方案。更具体地,且如本文所详述的,本文的实施方式使用tee机制将飞地程序的逻辑表达的证明转换为基于多个独立签名的证明。更详细地,本文的实施方式将飞地程序执行子逻辑任务划分为多个阶段。第一阶段包括远程验证(认证)。第二阶段包括子逻辑代码注册。第三阶段包括子逻辑查询。如本文所述,本文的实施方式减少了网络传输和处理,并实现了更高的性能效率和更佳的可扩展性。

关于第一阶段,远程认证,客户端向飞地程序发起远程认证质询。作为响应,飞地程序生成密钥对(例如,公钥、私钥),如本文所述,该密钥对包括在返回给客户端的认证信息中。客户端将认证信息发送到远程认证服务(例如,ias)。远程认证服务处理认证信息以提供验证结果(例如,avr),并将验证结果返回给客户端。远程认证通过后,客户端使用飞地程序的公钥,来验证飞地程序返回的、经飞地程序以其私钥签名的响应。

图3是示出根据本文的实施方式的系统300的示例的示图。如图所示,系统300包括客户端308、节点310和认证服务312。在所描绘的示例中,节点310使用tee技术(例如,英特尔sgx)来实现。例如,且如本文所述,飞地程序在节点310的tee内执行。通常,认证服务312为客户端308验证节点310的合法性。认证服务的示例包括如上所述的ias。在认证处理中,客户端308将指示节点310具有合法性的认证证据320从节点310中继到认证服务312。在一些实施方式中,认证证据320包括节点310的测量值322和节点310的签名326。节点310的测量值322可以包括基于在节点310的tee内执行的飞地程序的静态代码的哈希值。包括在认证证据320中的节点310的签名326可以包括使用节点310的认证密钥签名的节点310的测量值322。

在一些实施方式中,节点310的认证密钥包括epid私钥。如上所述,epid是英特尔(intel)提供的一种用于认证可信系统同时保护隐私的算法。通常,网络的每个成员(例如,计算机或服务器)均被分配有用于对认证证据进行签名的epid私钥,且网络中认证证据的验证者存储与网络中其他成员的epid私钥配对的epid公钥。每个成员都可以使用自己的epid私钥生成认证证据的签名,验证者可以使用epid公钥来验证其他成员的签名。这样,epid密钥可用于证明设备(例如计算机或服务器)是真实设备。

认证证据320还可以包括由节点310生成的公钥324。如果认证证据320包括由节点310生成的公钥324,则节点310的签名326包括测量值322以及使用节点310的认证密钥签名的公钥324。

节点310包括任何合适的服务器、计算机、模块或计算元件,以提取并满足来自客户端308的请求。例如,且根据本公开的实施方式,节点310可以接收并处理来自诸如客户端308的各客户端的请求,以处理子逻辑代码并提供相应的结果。在处理来自客户端308的请求之前,客户端308质询节点310。作为响应,节点310生成认证证据320,并且将认证证据320发送到客户端308,客户端308将认证证据320提供给认证服务312以验证节点310的合法性。在一些实施方式中,节点310生成包括公钥324和私钥的密钥对,并将公钥324包括在认证证据320中。如本文所述,公钥324用于客户端308与节点310之间的未来通信。例如,节点310可以使用私钥来签名请求结果,且客户端308可以使用公钥324来验证签名后的请求结果。

认证服务312包括任何合适的服务器、计算机、模块或计算元件,以验证由客户端308从节点310转发的认证证据320的合法性。如上所述,认证证据320包括节点310的测量值322、节点310的签名326和(可选地)节点310生成的公钥324。在接收到认证证据320时,认证服务312验证认证证据320中的节点310的签名326,并生成认证验证报告(avr)330。

认证服务312使用认证服务312的认证密钥来验证认证证据320中的签名326。在一些实施方式中,认证服务312的认证密钥包括与节点310用来对认证证据320进行签名的epid私钥配对的epid公钥。在验证认证证据320中的签名之后,认证服务312生成avr330以包括认证证据320、表示认证证据320中的签名326是否有效的验证结果334以及认证服务312的签名336。

在一些实施方式中,avr330包括除中继系统节点310的签名326之外的认证证据320。例如,avr330可以包括中继系统节点310的测量值322、中继系统节点310生成的公钥324、验证结果334以及认证服务312的签名336。在一些实施方式中,认证服务312的签名336包括使用认证服务312的报告签名密钥(例如,认证服务312用来对认证验证报告进行签名的私钥)进行签名的认证证据320和验证结果334。注意,报告签名密钥可以与认证服务312的认证密钥不同。

图4描绘了根据本文的实施方式的信号流400的示例。信号流400表示认证验证过程。为方便起见,该过程被描述为由位于一个或多个位置并根据本文被适当地编程的一个或多个计算机的系统执行。例如,被适当编程的分布式系统(例如,图1的区块链系统100;图3的系统300)可以执行该过程。

通常,在操作中,客户端308从节点310接收认证证据,并且将该认证证据发送到认证服务312以验证该认证证据。客户端308基于对认证证据中的节点310的签名的验证,从认证服务312接收指示节点310的合法性的avr。

在图4的示例中,客户端308向节点310发送(410)认证请求(例如,质询)。认证请求被发送到节点310,以请求可指示节点310具有合法性或有效性的认证证据,以及在节点310的tee中执行的飞地程序。在一些实施方式中,认证证据包括节点310和飞地程序的测量值以及节点310的签名。节点310的测量值可以包括节点310的初始状态的哈希值。例如,节点310的测量值可以包括在节点310上实现的处理代码(飞地程序)的哈希值。

响应于所述认证请求,节点310生成(412)认证证据。如上所述,认证证据指示节点310的合法性或有效性,并且可以包括节点310和飞地程序的测量值以及节点310的签名。在一些实施方式中,认证证据还包括由节点310生成的公钥。例如,节点310可以使用预定的密钥生成算法(例如,rivest-shamir-adleman(rsa)算法)来生成包括私钥和公钥的随机加密密钥对。在一些示例中,公钥提供在认证证据中,并且可以用于客户端308和节点310之间的未来通信。例如,节点310可以使用私钥来对请求结果签名,且客户端308可以使用公钥来验证签名后的请求结果。

在一些实施方式中,节点310的测量值包括节点310的初始状态的哈希值。认证证据中的节点310的签名包括节点310生成的、使用节点310的认证密钥签名的测量值和公钥。在一些实施方式中,节点310的认证密钥包括epid私钥。验证者可以使用与epid私钥配对的epid公钥来验证使用epid私钥签名的认证证据,以证明生成认证证据的设备的真实性。

节点310将认证证据发送(414)到客户端308。客户端308将从节点310发送的认证证据转发(416)到认证服务312。在一些实施方式中,客户端308将认证验证请求发送到认证服务312。认证验证请求包括从节点310发送的认证证据及补充信息,例如指示节点310是否使用sgx平台服务的描述符。

响应于接收到客户端308转发的认证证据,认证服务312验证(418)认证证据。如上所述,认证证据包括节点310的测量值、节点310生成的公钥以及节点310的签名。认证服务312可使用认证服务312的认证密钥来验证认证证据中的节点310的签名,从而验证认证证据。例如,认证服务312可以使用认证验证服务器的epid公钥来验证节点310的签名,该epid公钥与节点310用来对认证证据签名的epid私钥配对。

如果认证服务312确定认证证据中的节点310的签名是有效的,则认证服务312可以确定节点310是真实设备或合法设备。如果认证服务312确定认证证据中的节点310的签名是无效的,则认证服务312可以确定节点310不是真实设备或者是非法设备,并且拒绝来自节点310的任何后续数据和请求。

认证服务312基于对认证证据的验证来生成(420)avr。在一些实施方式中,avr可以包括节点310的认证证据、认证验证结果以及认证服务312的数字签名。在一些实施方式中,avr可以包括除节点310的签名之外的节点310的认证证据。例如,avr可以包括节点310的测量值、节点310生成的公钥、认证验证结果以及认证服务312的签名。avr中的认证验证结果指示节点310的签名是否有效。例如,认证验证结果可以包括指示节点310的签名有效的值“valid”或“ok”,或指示签名无效的值“invalid”。

在一些实施方式中,认证服务312的签名包括使用报告签名密钥进行签名的认证证据和认证验证结果。报告签名密钥可以是认证服务312用来对avr进行签名的私钥。在一些实施方式中,报告签名密钥由认证服务312使用预定的密钥生成算法来生成。例如,可以使用rsa安全哈希算法(sha)256生成报告签名密钥。注意,报告签名密钥与认证服务312用来验证认证证据的认证密钥(例如,epid公钥)不同。

在一些实施方式中,认证服务312将avr发送(422)到客户端308。如上所述,avr包括对节点310的身份进行验证的经加密签名的报告,并且可以包括节点310的认证证据、认证验证结果以及认证服务312的数字签名。客户端308验证(424)avr。例如,客户端308可以验证avr中的认证服务312的签名。在一些实施方式中,客户端308使用报告签名证书来验证认证服务312的签名。报告签名证书可以是x.509数字证书。报告签名证书可以包括由认证服务312生成且与认证服务312用来对avr进行签名的报告签名密钥配对的公钥。

如果客户端308验证avr中的认证服务312的签名是有效的,则客户端308确定该avr确实是由认证服务312发送的。如果客户端308确定avr中的认证服务312的签名是无效的,则客户端308确定认证验证报告不是真实的,并且将拒绝该avr。客户端308可以进一步检查avr中的认证验证结果,以确定节点310的认证证据是否有效。在一些实施方式中,客户端308将认证证据中的测量值与客户端308存储的测量值进行比较,以确定认证证据是否有效。

响应于确定avr是真实的且节点310的认证证据是有效的,客户端308将节点310注册(426)为有效或合法设备。客户端308还存储有由节点310生成的、包含在认证证据中的公钥。如本文所述,公钥将被客户端308用于客户端308与节点310之间的未来通信。

关于第二阶段,子逻辑代码注册,且根据本文的实施方式,客户端308向节点310注册子逻辑代码以用于执行。在一些示例中,子逻辑代码是可由节点310内的飞地程序执行的计算机可执行代码。子逻辑代码可被描述为扩展了飞地程序功能的模块。在一些实施方式中,客户端308向节点310注册多个子逻辑代码。在一些示例中,每个子逻辑代码可以包括一个或多个版本(例如,v1、v1.1、v2)。

根据本公开的实施方式,子逻辑代码的注册包括客户端308向飞地程序发送注册请求,以及飞地程序提供注册结果。在一些示例中,对于每个待注册的子逻辑代码,注册请求包括唯一地标识子逻辑代码的标识以及子逻辑代码本身。在一些示例中,对于每个待注册的子逻辑代码,注册请求包括唯一地标识子逻辑代码的标识、版本号和子逻辑代码本身。在一些示例中,可以针对每个子逻辑代码发送注册请求(例如,针对单个子逻辑代码的单个注册请求)。在一些示例中,可以针对多个子逻辑代码发送注册请求(例如,针对两个或更多个子逻辑代码的单个注册请求)。

在一些实施方式中,响应于接收到注册请求,飞地程序存储子逻辑代码,并提供将所存储的子逻辑代码与相应标识相关联的索引。在一些实施方式中,对于每个子逻辑代码,飞地程序生成包括私有代码密钥和公共代码密钥的代码密钥对。以这种方式,每个子逻辑代码均有相应的代码密钥对。在一些示例中,如上所述,飞地程序使用基于kdk的密钥推导函数(kdf)生成代码密钥对。

在一些示例中,为同一子逻辑代码的多个版本提供单个代码密钥对。例如,如果子逻辑代码包括第一版本和第二版本,则同一代码密钥对应对子逻辑代码的第一版本和第二版本。在一些示例中,为同一子逻辑代码的每个版本各提供了代码密钥对。例如,如果子逻辑代码包括第一版本和第二版本,则为第一版本提供第一代码密钥对,为第二版本提供第二代码密钥对。

在一些实施方式中,在子逻辑代码由飞地程序注册并存储之后,飞地程序将注册结果提供给客户端308。在一些示例中,注册结果包括注册指示符(例如,指示子逻辑代码成功注册)、子逻辑代码的公共代码密钥和数字签名。在某些示例中,飞地程序使用其私钥生成数字签名,该私钥作为上述认证处理的一部分被提供。例如,通过哈希函数处理注册指示符和/或公共代码密钥,以提供第一哈希值。哈希函数的示例包括但不限于sha-256。飞地程序基于第一哈希值和私钥生成数字签名。例如,通过提供数字签名的签名算法来处理第一哈希值和私钥。

在一些实施方式中,客户端308接收注册结果,并使用飞地程序的公钥来验证注册结果,该公钥是作为上述认证处理的一部分被提供的。例如,客户端308通过哈希函数处理注册指示符和/或公共代码密钥以提供第二哈希值,并使用飞地程序的公钥从数字签名中确定第一哈希值。客户端308比较第一哈希值和第二哈希值。如果第一哈希值和第二哈希值相同,则注册结果有效,且客户端308存储了公共代码密钥。如果第一哈希值和第二哈希值不同,则注册结果无效。

图5描绘了子逻辑注册阶段的信号流500的示例。信号流500表示子逻辑注册过程。为方便起见,该过程将被描述为由位于一个或多个位置并根据本文被适当地编程的一个或多个计算机的系统执行。例如,被适当编程的分布式系统(例如,图1的区块链系统100;图3的系统300)可以执行该过程。

在图5的示例中,客户端308向节点310内执行的飞地程序发送(502)注册请求。在一些示例中,对于每个待注册的子逻辑代码,注册请求包括唯一地标识子逻辑代码的标识以及子逻辑代码本身。在一些示例中,对于每个待注册的子逻辑代码,注册请求包括唯一地标识子逻辑代码的标识、版本号和子逻辑代码本身。

在一些实施方式中,响应于接收到注册请求,飞地程序存储(504)子逻辑代码,并提供(506)将所存储的子逻辑代码与相应的标识相关联的索引。该飞地程序生成(508)代码密钥对,该代码密钥对包括用于被存储的子逻辑代码的私有代码密钥和公共代码密钥。飞地程序创建(510)注册结果。在一些示例中,注册结果包括注册指示符(例如,指示子逻辑代码成功注册)、子逻辑代码的公共代码密钥、以及数字签名。数字签名是基于飞地程序的私钥生成的,该私钥生成于认证处理中。飞地程序将注册结果发送(512)到客户端308。在一些实施方式中,客户端308接收注册结果,并使用上述飞地程序的公钥来验证(514)注册结果。如果注册结果有效,则客户端308存储(516)公共代码密钥。

关于第三阶段,子逻辑查询,且根据本文的实施方式,客户端308向在节点310内执行的飞地程序发送请求,以调用特定的子逻辑代码来提供结果。在一些实施方式中,该请求包括待执行的子逻辑的标识以及一个或多个请求参数。在一些实施方式中,该请求包括待执行的子逻辑的标识、待执行的子逻辑代码的版本、以及一个或多个请求参数。在一些示例中,一个或多个请求参数包括将使用子逻辑代码进行处理以提供结果的数据。

响应于接收到该请求,飞地程序检索所请求的子逻辑代码(以及版本,如果请求中包括版本的话),并执行该子逻辑代码以提供结果。例如,飞地程序通过子逻辑代码处理一个或多个请求参数。在一些示例中,基于通过子逻辑代码以及飞地程序的一个或多个函数来处理请求参数,以生成结果。在一些示例中,飞地程序通过子逻辑代码处理一个或多个请求参数和附加数据。示例性附加数据可以包括从飞地程序提供的数据(例如,存储在节点310中的数据)。

飞地程序提供包括结果和数字签名的响应。在一些示例中,飞地程序使用子逻辑代码的私有代码密钥来生成数字签名,该私有代码密钥作为上述注册过程的一部分被提供。例如,通过哈希函数处理结果以提供第一哈希值。哈希函数的示例包括但不限于sha-256。飞地程序基于第一哈希值和子逻辑代码的私有代码密钥生成数字签名。例如,通过提供数字签名的签名算法来处理第一哈希值和私有代码密钥。

在一些实施方式中,客户端308接收响应,并使用子逻辑代码的公共代码密钥来验证结果,该公共代码密钥是作为上述注册过程的一部分被提供的。例如,客户端308通过哈希函数处理结果以提供第二哈希值,并使用子逻辑代码的公共代码密钥从数字签名中确定第一哈希值。客户端308比较第一哈希值和第二哈希值。如果第一哈希值和第二哈希值相同,则结果有效,且客户端308能够基于结果执行进一步的操作。如果第一哈希值和第二哈希值不同,则结果无效。

图6描绘了子逻辑查询阶段的信号流600的示例。信号流600表示子逻辑查询过程。为方便起见,该过程将被描述为由位于一个或多个位置并根据本文被适当地编程的一个或多个计算机的系统执行。例如,被适当编程的分布式系统(例如,图1的区块链系统100;图3的系统300)可以执行该过程。

在图6的示例中,客户端308向节点310内执行的飞地程序发送(602)请求,以调用特定的子逻辑代码来提供结果。在一些实施方式中,该请求包括待执行的子逻辑的标识以及一个或多个请求参数。响应于接收到该请求,飞地程序检索(604)所请求的子逻辑代码(以及版本,如果请求中包括版本的话),并执行(606)该子逻辑代码以提供结果。飞地程序使用子逻辑代码的私有代码密钥提供(608)包括结果和数字签名的响应。飞地程序将响应发送(610)到客户端308。客户端308接收响应,并使用子逻辑代码的公共代码密钥来验证(612)结果。

图7a描绘了根据本文的实施方式可执行的过程700的示例。在一些实施方式中,示例性过程700可使用一个或多个计算设备执行的一个或多个计算机可执行程序来执行。在一些示例中,示例性过程700可以由执行tee的客户端和节点执行以注册用于在tee内执行的子逻辑。

发送注册请求(702)。例如,客户端308向节点310内执行的飞地程序发送注册请求。在一些示例中,对于每个待注册的子逻辑代码,注册请求包括唯一地标识子逻辑代码的标识以及子逻辑代码本身(例如,计算机可执行指令)。接收注册请求(704)。例如,注册请求由节点310内的飞地程序接收。在一些示例中,飞地程序解析请求以确定标识和子逻辑代码。

提供代码密钥对(706)。例如,飞地程序存储子逻辑代码,并提供将所存储的子逻辑代码与对应的标识相关联的索引。该飞地程序生成代码密钥对,该代码密钥对包括用于被存储的子逻辑代码的私有代码密钥和公共代码密钥。生成数字签名(708)。例如,飞地程序使用飞地程序的私钥生成数字签名,该私钥生成于认证处理中。如本文所述,数字签名是基于子逻辑代码的公共代码密钥和飞地程序的私钥来提供的。

发送注册结果(710)。例如,飞地程序将注册结果发送到客户端308。在一些示例中,注册结果包括子逻辑代码的公共代码密钥和数字签名。接收注册结果(712)。例如,客户端308接收注册结果。确定注册结果是否通过验证(714)。例如,如本文所述,客户端308使用飞地程序的公钥来执行哈希值比较。如果注册结果未通过验证,则指示错误(716)。如果注册结果通过验证,则存储公共代码密钥(718)。例如,客户端308存储子逻辑代码的公共代码密钥,并用子逻辑代码的标识索引公共代码密钥。

图7b描绘了根据本文的实施方式可执行的过程750的示例。在一些实施方式中,示例性过程750可使用一个或多个计算设备执行的一个或多个计算机可执行程序来执行。在一些示例中,示例性过程750可以由执行tee的客户端和节点执行,以在tee内执行子逻辑,并为子逻辑的执行提供程序执行和数据证明。

发送请求(752)。例如,客户端308向在节点310内执行的飞地程序发送请求,以调用特定的子逻辑代码以提供结果。在一些实施方式中,该请求包括待执行的子逻辑的标识以及一个或多个请求参数。接收该请求(754)。例如,该请求由节点310内的飞地程序接收。解析该请求(756)。例如,飞地程序解析该请求以确定标识以及一个或多个请求参数。

检索并执行子逻辑代码(758)。例如,飞地程序基于标识从计算机可读存储器中检索所请求的子逻辑代码(以及版本,如果请求中包含版本的话)。飞地程序执行子逻辑代码来处理一个或多个请求参数以提供结果数据。准备并发送响应(760)。例如,飞地程序使用子逻辑代码的私有代码密钥提供包含结果和数字签名的响应。飞地程序将响应发送到客户端308。

接收到响应(762)。例如,客户端308接收响应。确定响应是否通过验证(764)。例如,如本文所述,客户端308使用子逻辑代码的公共代码密钥来执行哈希值比较。如果响应未通过验证,则指示错误(766),且结果数据不被客户端308使用。如果响应通过验证,则使用结果数据(768)。例如,客户端308将结果数据用于进一步处理。

图8描绘了根据本文的实施方式的示例性装置800的模块。装置800可以是客户端的一种示例实施方式,例如图3中用于调用要在tee内执行的子逻辑代码并在tee内注册子逻辑代码的客户端308。装置800可以对应于上述实施方式,并且装置800包括:

发送模块802,将请求发送到节点。例如,且如本文所述,节点在tee内执行可信程序。在一些示例中,该请求包括标识和一个或多个请求参数,该标识用于标识子逻辑代码。接收模块804,接收对该请求的响应。例如,且如本文所述,响应包括结果数据和数字签名,该结果数据通过使用tee内的子逻辑代码处理一个或多个请求参数来生成。使用子逻辑代码的私有代码密钥生成数字签名。验证模块806,使用数字签名和子逻辑代码的公共代码密钥来验证结果数据。传输模块808,传输注册请求以向tee中的可信程序注册子逻辑代码。在一些示例中,注册请求包括标识和子逻辑代码。接收模块810,从可信程序接收注册结果。在一些示例中,注册结果包括子逻辑代码的公共代码密钥。

通常,本说明书中描述的主题的创新方面可以体现为以下动作:客户端设备向节点发送请求,该节点执行在tee中的可信程序,该请求包括标识和一个或多个请求参数,该标识用于标识子逻辑代码;客户端设备接收对该请求的响应,该响应包括结果数据和数字签名,该结果数据是通过使用tee中的子逻辑代码处理一个或多个请求参数生成的,该数字签名是使用子逻辑代码的私有代码密钥生成的;并且客户端设备使用数字签名和子逻辑代码的公共代码密钥来验证结果数据。该方面的其他实施方式包括相应的计算机系统、装置和记录在一个或多个计算机存储设备上的计算机程序,每个系统、装置和程序均被配置为执行所述方法的动作。

可选地,前述实施方式和其他实施方式可以各自独立地或相互组合地包括以下特征中的一个或多个:动作还包括客户端设备发送注册请求,以向tee内的可信程序注册子逻辑代码,该注册请求包括所述标识和所述子逻辑代码;且客户端设备从可信程序接收注册结果,该注册结果包括所述子逻辑代码的公共代码密钥。动作还包括使用可信程序的数字签名和可信程序的公钥来验证注册结果,该可信程序的数字签名使用可信程序的私钥生成,可信程序的公钥和私钥在可信应用的认证期间作为密钥对生成;子逻辑代码是基于标识从计算机可读存储器中检索而来的,并在tee中执行以生成结果;子逻辑代码是存储在节点中的多个子逻辑代码之一;公共代码密钥和私有代码密钥是在tee内注册所述子逻辑代码期间作为代码密钥对生成的;该请求还包括版本号,该版本号指示将被执行以提供结果的子逻辑代码的版本;客户端设备包括区块链网络内的节点。

如本文所述,本文的实施方式实现了优于传统系统的一个或多个技术效果。在一些实施方式中,在客户端发送的请求中,仅发送要执行的子逻辑代码的标识,而不是子逻辑代码本身。这显著减小了请求的大小,从而节省计算资源(例如,处理器、存储器、网络带宽),并减轻网络瓶颈。在一些实施方式中,响应于接收到请求,飞地程序无需解析并加载请求中携带的子逻辑代码,从而避免了更多的处理。在一些实施方式中,在处理每个请求之后,飞地程序仅对结果签名,而不对整个子逻辑代码签名,且客户端仅检查经签名的结果。与传统方法相比,这两种活动都导致处理量减少。在一些实施方式中,子逻辑代码使用的可扩展性得到提升,且子逻辑代码的变体(例如,版本)得到支持。

本文中描述的主题和动作以及操作的实施可以在数字电子电路中、在有形体现的计算机软件或固件中和计算机硬件中实现,包括本文中公开的结构及其结构等同物,或者它们中的一个或多个的组合。本文中描述的主题的实施可以实现为一个或多个计算机程序,例如,一个或多个计算机程序指令模块,编码在计算机程序载体上,用于由数据处理装置执行或控制数据处理装置的操作。载体可以是有形的非暂态计算机存储介质。可选地或附加地,载体可以是人工生成的传播信号,例如,机器生成的电、光或电磁信号,其被生成来编码信息用于传输到合适的接收器装置以供数据处理装置执行。计算机存储介质可以是或可以部分是机器可读存储设备、机器可读存储基板、随机或串行访问存储器设备或它们中的一个或多个的组合。计算机存储介质不是传播信号。

术语“数据处理装置”包括用于处理数据的所有类型的装置、设备和机器,包括例如可编程处理器、计算机或者多处理器或计算机。数据处理装置可以包括专用逻辑电路,例如fpga(现场可编程门阵列)、asic(专用集成电路)或gpu(图形处理单元)。除了硬件,该装置还可以包括为计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统、或者它们一个或多个的组合的代码。

计算机程序也可以被称为或描述为程序、软件、软件应用程序、app、模块、软件模块、引擎、脚本或代码,可以以任何形式的编程语言编写,包括编译或演绎性语言、说明或程序性语言;它可以被配置为任何形式,包括作为独立程序,或者作为模块、组件、引擎、子程序或适合在计算环境中执行的其他单元,该环境可包括由通信数据网络互联的在一个或多个位置的一台或多台计算机。

计算机程序可以但非必须对应于文件系统中的文件。计算机程序可以存储在:保存其他程序或数据的文件的一部分中,例如,存储在标记语言文档中的一个或多个脚本;专用于所讨论的程序的单个文件;或者多个协调文件,例如,存储一个或多个模块、子程序或代码部分的多个文件。

本文中描述的过程和逻辑流程可由一台或多台计算机执行一个或多个计算机程序进行,以进行通过对输入数据进行运算并生成输出的操作。过程和逻辑流程也可以由例如fpga、asic、gpu等的专用逻辑电路或专用逻辑电路与一个或多个编程计算机的组合来执行。

适合于执行计算机程序的计算机可以基于通用和/或专用微处理器,或任何其他种类的中央处理单元。通常,中央处理单元将从只读存储器和/或随机存取存储器接收指令和数据。计算机的元件可包括用于执行指令的中央处理单元和用于存储指令和数据的一个或多个存储设备。中央处理单元和存储器可以补充有专用逻辑电路或集成在专用逻辑电路中。

通常,计算机还将包括或可操作地耦接至一个或多个大容量存储设备,以从一个或多个大容量存储设备接收数据或将数据传输到一个或多个大容量存储设备。大容量存储设备可以是例如,磁盘、磁光盘或光盘或固态驱动器。然而,计算机不需要具有这样的设备。此外,计算机可以嵌入在另一个设备中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制台、全球定位系统(gps)接收器或例如通用串行总线(usb)闪存驱动器的便携式存储设备,仅举几例。

为了提供与用户的交互,本文中描述的主题的实施例可以在计算机上实现或配置为与该计算机通信,该计算机具有:显示设备,例如,lcd(液晶显示器)监视器,用于向用户显示信息;以及输入设备,用户可以通过该输入设备向该计算机提供输入,例如键盘和例如鼠标、轨迹球或触摸板等的指针设备。其他类型的设备也可用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感官反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以接收来自用户的任何形式的输入,包括声音、语音或触觉输入。此外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过向用户设备上的web浏览器发送web页面以响应从web浏览器收到的请求,或者通过与例如智能电话或电子平板电脑等的用户设备上运行的应用程序(app)进行交互。此外,计算机可以通过向个人设备(例如,运行消息应用的智能手机)轮流发送文本消息或其他形式的消息来并接收来自用户的响应消息来与用户交互。

本文使用与系统,装置和计算机程序组件有关的术语“配置为”。对于被配置为执行特定操作或动作的一个或多个计算机的系统,意味着系统已经在其上安装了在运行中促使该系统执行所述操作或动作的软件、固件、硬件或它们的组合。对于被配置为执行特定操作或动作的一个或多个计算机程序,意味着一个或多个程序包括当被数据处理装置执行时促使该装置执行所述操作或动作的指令。对于被配置为执行特定操作或动作的专用逻辑电路,意味着该电路具有执行所述操作或动作的电子逻辑。

虽然本文包含许多具体实施细节,但是这些不应被解释为由权利要求本身限定的对要求保护的范围的限制,而是作为对特定实施例的具体特征的描述。在本文多个单独实施例的上下文中描述的多个特定特征也可以在单个实施例中的组合实现。相反,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实现。此外,尽管上面的特征可以描述为以某些组合起作用并且甚至最初如此要求保护,但是在一些情况下,可以从要求保护的组合中删除来自该组合的一个或多个特征,并且可以要求保护指向子组合或子组合的变体。

类似地,虽然以特定顺序在附图中描绘了操作并且在权利要求中叙述了操作,但是这不应该被理解为:为了达到期望的结果,要求以所示的特定顺序或依次执行这些操作,或者要求执行所有示出的操作。在某些情况下,多任务并行处理可能是有利的。此外,上述实施例中的各种系统模块和组件的划分不应被理解为所有实施方式中都要求如此划分,而应当理解,所描述的程序组件和系统通常可以一起集成在单个软件产品或者打包成多个软件产品。

已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。例如,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程无需要求所示的特定顺序或次序来实现期望的结果。在一些情况下,多任务并行处理可能是有利的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1