基于区块链的服务请求方法及装置与流程

文档序号:20689948发布日期:2020-05-08 19:18阅读:227来源:国知局
基于区块链的服务请求方法及装置与流程

本说明书一个或多个实施方式涉及区块链技术领域,尤其涉及一种基于区块链的服务请求方法及装置。



背景技术:

区块链技术,也被称之为分布式账本技术,是一种由若干台计算设备共同参与“记账”,共同维护一份完整的分布式数据库的新兴技术。由于区块链技术具有去中心化、公开透明、每台计算设备可以参与数据库记录、并且各计算设备之间可以快速的进行数据同步的特性,使得区块链技术已在众多的领域中广泛的进行应用。



技术实现要素:

有鉴于此,本说明书一个或多个实施方式提供一种基于区块链的服务请求方法、装置、计算机设备和计算机可读存储介质。

为实现上述目的,本说明书一个或多个实施方式提供了一种基于区块链的服务请求方法,所述区块链存储有由服务调用方生成的安全访问密钥和对应的访问密钥id;其中所述区块链存储的所述安全访问密钥预先基于服务提供方的公钥进行了加密处理;所述方法包括:

所述服务提供方接收所述服务调用方发送的服务请求;所述服务请求包括请求参数、所述访问密钥id、以及基于所述安全访问密钥对所述请求参数进行数字签名处理得到的第一数字签名;

基于所述访问密钥id查询对应的被加密处理的安全访问密钥;

基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证;

当所述第一数字签名被验证通过时,基于所述请求参数执行所述服务请求。

在又一示出的实施方式中,所述区块链上部署有用于管理安全访问密钥的智能合约;所述智能合约中的合约代码对应的处理逻辑包括密钥查询逻辑;

所述基于所述访问密钥id查询对应的被加密处理的安全访问密钥,包括:

构建智能合约调用交易;其中,所述智能合约调用交易包含所述访问密钥id;

将所述智能合约调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述智能合约调用交易,调用所述智能合约中的所述密钥查询逻辑,基于所述访问密钥id查询对应的被加密处理的安全访问密钥。

在又一示出的实施方式中,所述安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间;

所述基于所述访问密钥id查询对应的被加密处理的安全访问密钥,包括:

基于所述访问密钥id在所述智能合约对应的合约账户的账户存储空间中查询对应的被加密处理的安全访问密钥。

在又一示出的实施方式中,所述智能合约中的合约代码对应的处理逻辑还包括数字签名验证逻辑;

所述基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证,包括:

当基于所述访问密钥id查询到对应的被加密处理的安全访问密钥后,进一步调用所述智能合约中的所述数字签名验证逻辑,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证。

在又一示出的实施方式中,所述基于解密后的所述安全访问密钥对所述第一数字签名进行验证,包括:

基于解密后的所述安全访问密钥对所述请求参数进行数字签名得到第二数字签名;

确定第一数字签名和第二数字签名是否匹配;如果是,确定所述第一数字签名被验证通过。

在又一示出的实施方式中,在进一步调用所述智能合约中的所述密钥查询逻辑之前,还包括:

验证所述智能合约调用交易的发送者是否为服务提供方;如果是,进一步调用所述智能合约中的所述密钥查询逻辑。

在又一示出的实施方式中,所述智能合约调用交易还包括所述服务提供方的识别id;所述验证所述智能合约调用交易的发送者是否为所述服务提供方,包括:

查询所述服务提供方的识别id是否属于所述智能合约存储的密钥查询权限白名单;

如果是,所述智能合约调用交易的发送者为所述服务提供方。

相应地,本说明书的一个或多个实施方式还提供了一种基于区块链的服务请求方法,用于服务调用方向服务提供方发送服务请求,包括:

所述服务调用方生成安全访问密钥和对应的访问密钥id,并基于所述服务提供方的公钥对所述安全访问密钥进行了加密处理;

将被加密处理的安全访问密钥和所述访问密钥id发送至所述区块链,以使所述被加密处理的安全访问密钥和所述访问密钥id被所述区块链的节点设备共识验证后存储于所述区块链;

向所述服务提供方发送服务请求;所述服务请求包括请求参数、所述访问密钥id、以及基于所述安全访问密钥对所述请求参数进行数字签名处理得到的第一数字签名,以使所述服务调用方基于所述访问密钥id查询对应的被加密处理的安全访问密钥,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证,当所述第一数字签名被验证通过时,基于所述请求参数执行所述服务请求。

在又一示出的实施方式中,所述区块链上部署有用于管理安全访问密钥的智能合约;所述智能合约中的合约代码对应的处理逻辑包括密钥发布逻辑;

所述将被加密处理的安全访问密钥和所述访问密钥id发送至所述区块链,以使所述被加密处理的安全访问密钥和所述访问密钥id被所述区块链的节点设备共识验证后存储于所述区块链,包括:

构建密钥发布调用交易,所述密钥发布调用交易包含所述被加密处理的安全访问密钥和所述访问密钥id;

将所述密钥发布调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述密钥发布调用交易,调用所述智能合约中的所述密钥发布逻辑,将被加密处理的安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间。

在又一示出的实施方式中,所述将被加密处理的和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间,包括:

查询所述访问密钥id是否与已存储在所述账户存储空间的已有访问密钥id匹配;

如果否,将所述安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间。

相应地,本说明书还提供了一种基于区块链的服务请求装置,所述区块链存储有由服务调用方生成的安全访问密钥和对应的访问密钥id;其中所述区块链存储的所述安全访问密钥预先基于服务提供方的公钥进行了加密处理;所述装置应用于所述服务提供方,包括:

接收单元,接收所述服务调用方发送的服务请求;所述服务请求包括请求参数、所述访问密钥id、以及基于所述安全访问密钥对所述请求参数进行数字签名处理得到的第一数字签名;

查询单元,基于所述访问密钥id查询对应的被加密处理的安全访问密钥;

验证单元,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证;

执行单元,当所述第一数字签名被验证通过时,基于所述请求参数执行所述服务请求。

在又一示出的实施方式中,所述区块链上部署有用于管理安全访问密钥的智能合约;所述智能合约中的合约代码对应的处理逻辑包括密钥查询逻辑;

所述查询单元,进一步用于:

构建智能合约调用交易;其中,所述智能合约调用交易包含所述访问密钥id;

将所述智能合约调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述智能合约调用交易,调用所述智能合约中的所述密钥查询逻辑,基于所述访问密钥id查询对应的被加密处理的安全访问密钥。

在又一示出的实施方式中,所述安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间;

所述基于所述访问密钥id查询对应的被加密处理的安全访问密钥,包括:

基于所述访问密钥id在所述智能合约对应的合约账户的账户存储空间中查询对应的被加密处理的安全访问密钥。

在又一示出的实施方式中,所述智能合约中的合约代码对应的处理逻辑还包括数字签名验证逻辑;

所述验证单元,进一步用于:

当基于所述访问密钥id查询到对应的被加密处理的安全访问密钥后,进一步调用所述智能合约中的所述数字签名验证逻辑,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证。

在又一示出的实施方式中,所述基于解密后的所述安全访问密钥对所述第一数字签名进行验证,包括:

基于解密后的所述安全访问密钥对所述请求参数进行数字签名得到第二数字签名;

确定第一数字签名和第二数字签名是否匹配;如果是,确定所述第一数字签名被验证通过。

在又一示出的实施方式中,在进一步调用所述智能合约中的所述密钥查询逻辑之前,所述验证单元,还用于:

验证所述智能合约调用交易的发送者是否为服务提供方;如果是,进一步调用所述智能合约中的所述密钥查询逻辑。

在又一示出的实施方式中,所述智能合约调用交易还包括所述服务提供方的识别id;所述验证所述智能合约调用交易的发送者是否为所述服务提供方,包括:

查询所述服务提供方的识别id是否属于所述智能合约存储的密钥查询权限白名单;

如果是,所述智能合约调用交易的发送者为所述服务提供方。

相应地,本说明书还提供了一种基于区块链的服务请求装置,用于服务调用方向服务提供方发送服务请求,所述装置应用于所述服务调用方,包括:

生成单元,生成安全访问密钥和对应的访问密钥id,并基于所述服务提供方的公钥对所述安全访问密钥进行了加密处理;

发送单元,将被加密处理的安全访问密钥和所述访问密钥id发送至所述区块链,以使所述被加密处理的安全访问密钥和所述访问密钥id被所述区块链的节点设备共识验证后存储于所述区块链;

所述发送单元,进一步用于:向所述服务提供方发送服务请求;所述服务请求包括请求参数、所述访问密钥id、以及基于所述安全访问密钥对所述请求参数进行数字签名处理得到的第一数字签名,以使所述服务调用方基于所述访问密钥id查询对应的被加密处理的安全访问密钥,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证,当所述第一数字签名被验证通过时,基于所述请求参数执行所述服务请求。

在又一示出的实施方式中,所述区块链上部署有用于管理安全访问密钥的智能合约;所述智能合约中的合约代码对应的处理逻辑包括密钥发布逻辑;

所述发送单元,进一步用于:

构建密钥发布调用交易,所述密钥发布调用交易包含所述被加密处理的安全访问密钥和所述访问密钥id;

将所述密钥发布调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述密钥发布调用交易,调用所述智能合约中的所述密钥发布逻辑,将被加密处理的安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间。

在又一示出的实施方式中,所述将被加密处理的和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间,包括:

查询所述访问密钥id是否与已存储在所述账户存储空间的已有访问密钥id匹配;

如果否,将所述安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间。

相应地,本说明书还提供了一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如上述各实施方式所述的、服务提供方所执行的基于区块链的服务请求方法。

本说明书还提供了一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如上述各实施方式所述的、服务调用方所执行的基于区块链的服务请求方法。

相应地,本说明书还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行如上述各实施方式所述的、服务提供方所执行的基于区块链的服务请求方法。

本说明书还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行如上述各实施方式所述的、服务调用方所执行的基于区块链的服务请求方法。

本说明书各个实施方式提供的基于区块链的服务请求方法、装置、计算机设备或计算机可读存储介质,将与服务调用方对应的安全访问密钥和访问密钥id存储于区块链中,基于区块链的防篡改机制,有效防止安全访问密钥被篡改,保证了安全访问密钥的安全性;而且,由于上述被区块链存储的安全访问密钥预先基于所述服务提供方的公钥进行了加密处理,仅有服务提供方持私钥方可解密上述安全访问密钥,从而保证了上述与服务调用方对应的安全访问密钥的隐私性。

附图说明

图1是一示例性实施方式提供的创建智能合约的示意图;

图2是一示例性实施方式提供的一种调用智能合约的示意图;

图3是一示例性实施方式提供的创建智能合约和调用智能合约的示意图;

图4是一示例性实施方式提供的基于区块链的服务请求方法的流程示意图;

图5是一示例性实施方式提供的应用于服务提供方的基于区块链的服务请求装置的示意图;

图6是一示例性实施方式提供的应用于服务调用方的基于区块链的服务请求装置的示意图;

图7是运行本说明书所提供的基于区块链的服务请求装置实施方式的一种硬件结构图。

具体实施方式

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

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

服务提供方是为服务调用方提供具体服务内容的运营方,服务调用方是基于自身需求向服务提供方提出服务请求的客户方。服务提供方在接收到服务调用方发送的某项具体服务调用请求时,需对服务调用方的身份进行验证。

基于访问密钥id及访问密钥对(一般称为ak/sk对)对服务调用方发送的服务请求进行身份验证,是公有云上常见的api验证方式之一。与服务调用方对应的访问密钥id及访问密钥对通常是由服务提供方生成且分发的,一方面,服务提供方需要一个中心化的数据库系统来存储维护访问密钥id及访问密钥对,中心化的数据库系统可能被恶意修改,这将导致服务调用方无法通过身份验证;另一方面,上述访问密钥id及访问密钥对是由服务提供方生成的,通常需要通过https等方式在网络中将其传输给服务调用方,在传输过程中上述访问密钥id及访问密钥对可能被截获,为服务调用方的身份验证带来风险。

鉴于以上的问题,本说明书的一个或多个实施方式提供了基于区块链的服务请求方法,用于服务调用方向服务提供方发送服务请求。

本说明书一个或多个实施方式所述的区块链网络,具体可指一个各节点设备通过共识机制达成的、具有分布式数据存储结构的p2p网络系统,该区块链内的数据分布在时间上相连的一个个“区块(block)”之内,后一区块可包含前一区块的数据摘要,且根据具体的共识机制(如pow、pos、dpos或pbft等)的不同,达成全部或部分节点的数据全备份。

对于物理世界产生的真实数据,可以将其构建成区块链所支持的标准的交易(transaction)格式,然后发布至区块链,由区块链中的节点设备对收到的交易进行共识处理,并在达成共识后,由区块链中作为记账节点的节点设备,将这笔交易打包进区块,在区块链中进行持久化存证。

其中,区块链中支持的共识算法可以包括:

第一类共识算法,即节点设备需要争夺每一轮的记账周期的记账权的共识算法;例如,工作量证明(proofofwork,pow)、股权证明(proofofstake,pos)、委任权益证明(delegatedproofofstake,dpos)等共识算法;

第二类共识算法,即预先为每一轮记账周期选举记账节点(不需要争夺记账权)的共识算法;例如,实用拜占庭容错(practicalbyzantinefaulttolerance,pbft)等共识算法。

在采用第一类共识算法的区块链网络中,争夺记账权的节点设备,都可以在接收到交易后执行该笔交易。争夺记账权的节点设备中可能有一个节点设备在本轮争夺记账权的过程中胜出,成为记账节点。记账节点可以将收到的交易与其它交易一起打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识。

在采用第二类共识算法的区块链网络中,具有记账权的节点设备在本轮记账前已经商定好。因此,节点设备在接收到交易后,如果自身不是本轮的记账节点,则可以将该交易发送至记账节点。对于本轮的记账节点,在将该交易与其它交易一起打包以生成最新区块的过程中或者之前,可以执行该交易。记账节点在生成最新区块后,可以将该最新区块或者该最新区块的区块头发送至其它节点设备进行共识。

如上所述,无论区块链采用以上示出的哪种共识算法,本轮的记账节点均可以将接收到的交易打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识验证。如果其它节点设备接收到最新区块或者该最新区块的区块头后,经验证没有问题,可以将该最新区块追加到原有的区块链末尾,从而完成区块链的记账过程。其它节点验证记账节点发来的新的区块或区块头的过程中,也可以执行该区块中的包含的交易。

本领域的技术人员熟知,由于区块链网络系统在相应共识机制下运行,已收录至区块链数据库内的数据很难被任意的节点篡改,例如采用pow共识的区块链,至少需要全网51%算力的攻击才有可能篡改已有数据,因此区块链系统有着其他中心化数据库系统所无法比拟的保证数据安全、防攻击篡改的特性。由此可知,被收录至区块链的分布式数据库中的数据不会被攻击或篡改,从而保证了存证入区块链的分布式数据库的数据信息的真实可靠性。

区块链网络的示例类型可以包括公有区块链网络、私有区块链网络和联盟区块链网络。尽管术语区块链通常与比特币加密货币网络相关联,但是本文使用的区块链可指代不参考任何特定用例的dls(分布式账本系统)。

在公有区块链网络中,共识过程由共识网络的节点控制。例如,数百、数千、甚至数百万个实体可以在公有区块链网络中协作,每个实体在公有区块链网络中操作至少一个节点。因此,公有区块链网络可以被认为是相对于参与实体的公有网络。示例公有区块链网络包括比特币网络,比特币网络是对等支付网络。比特币网络利用分布式账本,被称为区块链。然而如上所述,术语区块链通常用于指代不特别参考比特币网络的分布式账本。

通常,公有区块链网络支持公有交易。公有交易与公有区块链网络内的所有节点共享,并存储在全局区块链中。全局区块链是跨所有节点复制的区块链。也就是说,对于全局区块链,所有节点处于完全一致的状态。为了达成共识(例如,同意向区块链添加块),在公有区块链网络内实施共识协议。示例共识协议包括但不限于,在比特币网络中实施的工作量证明(proof-of-work,pow)。

通常,私有区块链网络提供给特定实体,特定实体集中控制读取和写入权限。该实体控制哪些节点能够参与区块链网络。因此,私有区块链网络通常被称为许可网络,其对允许谁参与网络及其参与水平(例如,仅在某些交易中)施加限制。可以使用各种类型的访问控制机制(例如,现有参与者投票添加新实体,监管机构可以控制准入)。

通常,联盟区块链网络在参与实体中是私有的。在联盟区块链网络中,共识过程由授权的一组节点(联盟成员节点)控制,一个或多个节点由相应的实体(例如,企业)操作。例如,由十(10)个实体(例如,企业)组成的联盟可以操作联盟区块链网络,每个实体在该联盟区块链网络中操作至少一个节点。因此,就参与实体而言,联盟区块链网络可以被认为是私有网络。在一些示例中,每个实体(节点)必须对每个块进行签名,以使该块有效并将有效的块添加到区块链。在一些示例中,至少实体(节点)的子集(例如,至少7个实体)必须对每个块进行签名以使该块有效,并且将有效的块添加到区块链。

可以预期,本说明书所提供的实施方式能够在任何合适类型的区块链网络中实现。

在实际应用中,不论是公有链、私有链还是联盟链,都可能提供智能合约(smartcontract)的功能。区块链上的智能合约是在区块链上可以被交易触发执行的合约。智能合约可以通过代码的形式定义。

以以太坊为例,支持用户在以太坊网络中创建并调用一些复杂的逻辑。以太坊作为一个可编程区块链,其核心是以太坊虚拟机(evm),每个以太坊节点都可以运行evm。evm是一个图灵完备的虚拟机,通过它可以实现各种复杂的逻辑。用户在以太坊中发布和调用智能合约就是在evm上运行的。实际上,evm直接运行的是虚拟机代码(虚拟机字节码,下简称“字节码”),所以部署在区块链上的智能合约可以是字节码。

如图1所示,bob将一笔包含创建智能合约信息的交易(transaction)发送到以太坊网络后,各节点均可以在evm中执行这笔交易。其中,图中交易的from字段用于记录发起创建智能合约的账户的地址,交易的data字段的字段值保存的合约代码可以是字节码,交易的to字段的字段值为一个null(空)的账户。当节点间通过共识机制达成一致后,这个智能合约成功创建,后续用户可以调用这个智能合约。

智能合约创建后,区块链上出现一个与该智能合约对应的合约账户,并拥有一个特定的地址;比如,图1中各节点中的“0x68e12cf284…”就代表了创建的这个合约账户的地址;合约代码(code)和账户存储(storage)将保存在该合约账户的账户存储中。智能合约的行为由合约代码控制,而智能合约的账户存储则保存了合约的状态。换句话说,智能合约使得区块链上产生包含合约代码和账户存储的虚拟账户。

前述提到,包含创建智能合约的交易的data字段保存的可以是该智能合约的字节码。字节码由一连串的字节组成,每一字节可以标识一个操作。基于开发效率、可读性等多方面考虑,开发者可以不直接书写字节码,而是选择一门高级语言编写智能合约代码。例如,高级语言可以采用诸如solidity、serpent、lll语言等。对于采用高级语言编写的智能合约代码,可以经过编译器编译,生成可以部署到区块链上的字节码。

以solidity语言为例,用其编写的合约代码与面向对象编程语言中的类(class)很相似,在一个合约中可以声明多种成员,包括状态变量、函数、函数修改器、事件等。状态变量是永久存储在智能合约的账户存储(storage)字段中的值,用于保存合约的状态。

如图2所示,仍以以太坊为例,bob将一笔包含调用智能合约信息的交易发送到以太坊网络后,各节点均可以在evm中执行这笔交易。其中,图中交易的from字段用于记录发起调用智能合约的账户的地址,to字段用于记录被调用的智能合约的地址,交易的data字段用于记录调用智能合约的方法和参数。调用智能合约后,合约账户的账户状态可能改变。后续,某个客户端可以通过接入的区块链节点查看合约账户的账户状态。

智能合约可以以规定的方式在区块链网络中每个节点独立的执行,所有执行记录和数据都保存在区块链上,所以当这样的交易执行完毕后,区块链上就保存了无法篡改、不会丢失的交易凭证。

创建智能合约和调用智能合约的示意图如图3所示。以太坊中要创建一个智能合约,需要经过编写智能合约、变成字节码、部署到区块链等过程。以太坊中调用智能合约,是发起一笔指向智能合约地址的交易,各个节点的evm可以分别执行该交易,将智能合约代码分布式的运行在以太坊网络中每个节点的虚拟机中。

在本说明书提供的一个或多个实施方式中,上述服务调用方或服务提供方对应的终端设备,可以作为各实施方式所述的区块链网络的节点设备;也可以为与上述区块链网络中的节点设备连接的区块链客户端,还可以为与区块链网络中的节点设备连接的、链下终端设备或服务器,通过与区块链网络中的节点设备数据通信传输以向区块链上发布数据或从区块链上获取数据。为简洁起见,本说明书以下以“服务调用方”代表服务调用方使用的线下终端,或服务调用方节点设备或服务调用方区块链客户端等终端设备,以“服务提供方”代表服务提供方使用的线下服务器终端,或服务提供方节点设备或服务提供方区块链客户端等终端设备,执行各实施方式所述的基于区块链的服务请求方法。

图4示意了本说明书一示例性实施方式提供的基于区块链的服务请求方法的流程步骤,包括:

步骤402,服务调用方生成安全访问密钥和对应的访问密钥id。

在本实施方式中,访问密钥id和安全访问密钥对(即ak/sk对)可由服务调用方本地生成,避免了传统方式中,访问密钥id和安全访问密钥对(即ak/sk对)由服务提供方生成并传输带来的安全访问密钥被泄露或被篡改风险。

步骤404,服务调用方基于服务提供方的公钥对所述安全访问密钥进行了加密处理。

服务提供方可基于非对称加密算法生成公钥-私钥对(publickey-secretkey对),并将其公钥进行公开,具体的公开方式不限于在各个服务调用方运行服务注册程序时接收服务提供方传输的身份证书,或将其公钥作为公开信息进行公示发布,等等。服务调用方可使用服务提供方的公钥将其生成的安全访问密钥sk进行加密,如生成encrypt_sk。

本说明书的各个实施方式中并不限定服务提供方生成公钥-私钥对所使用的非对称加密算法,例如可使用rsa算法、ecc算法等等。

步骤406,服务调用方将所述被加密处理的安全访问密钥和所述访问密钥id发送至所述区块链,以使所述被加密处理的安全访问密钥和所述访问密钥id被所述区块链的节点设备共识验证后存储于所述区块链。

当服务调用方直接作为上述区块链系统的节点设备时,服务调用方可将上述被加密处理的安全访问密钥(encrypt_sk)和对应的访问密钥id(ak)打包成交易格式,再将该交易广播至区块链的节点设备,以使所述交易被所述区块链的节点设备共识验证后存储于所述区块链。当服务调用方不直接作为上述区块链系统的节点设备、而作为与节点设备通信连接的终端设备时,可将上述被加密处理的安全访问密钥(encrypt_sk)和对应的访问密钥id(ak)传输至上述区块链系统的节点设备,再由该节点设备将上述encrypt_sk和ak打包为交易格式上传区块链。本说明书如前已简述了区块链中常用的共识算法,在此对上述区块链网络的共识算法不作限定。

在本实施方式中,由服务调用方将上述被加密处理的安全访问密钥(encrypt_sk)和对应的访问密钥id(ak)存储于区块链中,基于区块链的防篡改机制,可有效防止encrypt_sk和对应的ak被篡改;而且服务调用方的安全访问密钥sk是以加密状态存储于区块链中的,更加保护了上述安全访问密钥sk的隐私性,提高了服务调用方调用服务的安全性。

在账户模式的区块链网络系统(如以太坊区块链、hyper-ledger等)中,区块链的存储空间除了包括区块(blocks)外,还包括用户账户及智能合约账户等账户模型对应的存储空间。因此,本实施方式所述的将encrypt_sk和对应的访问密钥id存储于区块链,既可以包括将encrypt_sk和对应的访问密钥id存储于区块链的区块(blocks)内,还可以包括将encrypt_sk和对应的访问密钥id存储于账户模型对应的存储空间,例如,智能合约账户的存储空间。

在又一示出的实施方式中,上述区块链上部署有用于管理安全访问密钥的智能合约;所述智能合约中的合约代码对应的处理逻辑包括密钥发布逻辑;上述将所述被加密处理的安全访问密钥和所述访问密钥id发送至所述区块链,以使所述被加密处理的安全访问密钥和所述访问密钥id被所述区块链的节点设备共识验证后存储于所述区块链的过程,可具体包括如下步骤:

服务调用方构建密钥发布调用交易,所述密钥发布调用交易包含所述被加密处理的安全访问密钥(encrypt_sk)和所述访问密钥id(ak);

将所述密钥发布调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述密钥发布调用交易,调用所述智能合约中的所述密钥发布逻辑,将所述安全访问密钥(encrypt_sk)和对应的访问密钥id(ak)存储在所述智能合约对应的合约账户的账户存储空间。

上述密钥发布调用交易还可包括上述智能合约的区块链地址、密钥发布逻辑的函数名称、接口信息等等;本说明书之前已详细论述了智能合约的调用过程,在此不再赘述。相较于仅通过以交易的形式在区块(blocks)在存储encrypt_sk和对应的ak的实现方式,通过智能合约在合约账户的存储空间存储encrypt_sk和对应的ak,更加方便了服务提供方对多个服务调用方的安全访问密钥进行管理。服务提供方可作为上述智能合约的发布部署方,通过为上述智能合约设置相应的密钥发布逻辑,完成相应的密钥管理方式。

在又一示出的实施方式中,上述密钥发布逻辑声明的将所述安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间的具体过程,可包括:

查询所述访问密钥id是否与已存储在所述账户存储空间的已有访问密钥id匹配;

如果是,发出密钥发布失败提示;

如果否,将所述安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间。

基于账户模型的区块链网络系统中,如以太坊区块链系统,在节点设备本地维护有与区块对应的交易树及收据树(以太坊区块链系统中,在节点设备本地还维护有与账户全局状态对应的状态树)。上述智能合约运行密钥发布逻辑的结果(包括密钥发布失败提示、或密钥存储成功提示、或密钥存储地址等)会写入区块链的交易日志,上述交易日志或交易日志的编码值可被收录至区块链的收据树(recipestree)中。服务调用方通过监听区块链的收据树,可获取到交易日志中记录的密钥发布逻辑的结果。

通过上述处理过程,可有效防止服务调用方生成的访问密钥id(ak)对撞重复,如多个服务调用方生成同样的访问密钥id、或一个服务调用方多次生成的访问密钥id相同,保证每个访问密钥id仅唯一对应一个服务调用方,从而方便密钥管理及身份验证。

步骤408,所述服务调用方向所述服务提供方发送服务请求;所述服务请求包括请求参数、所述访问密钥id、以及基于所述安全访问密钥对所述请求参数进行数字签名处理得到的第一数字签名。

服务调用方发送的请求参数可包括请求服务内容参数、或服务类型参数、或调用入参、或调用接口等参数中的一项或多项,以方便服务提供方基于上述请求参数执行服务请求。

值得注意的是,上述第一数字签名是服务调用方基于其安全访问密钥至少对上述请求参数进行数字签名而得到的,本领域的技术人员从技术或业务需求出发,还可在上述过程中,对上述请求参数及其他技术或业务参数进行数字签名而得到第一数字签名,在此不做限定。

步骤410,所述服务提供方接收所述服务调用方发送的上述服务请求。

步骤412,所述服务提供方基于所述访问密钥id查询对应的被加密处理的安全访问密钥。

基于上述访问密钥id和被加密处理的安全访问密钥被存储的空间不同,上述服务提供方基于所述访问密钥id查询对应的被加密处理的安全访问密钥的具体过程有所不同。

在一示出的实施方式中,当上述访问密钥id和被加密处理的安全访问密钥被存储于区块链(包括blocks或节点设备本地维护的账户存储空间)时,服务提供方可作为上述区块链的节点设备或与上述区块链的节点设备连接,基于上述访问密钥id和被加密处理的安全访问密钥的存储地址(如txhash),可查询上述访问密钥id和被加密处理的安全访问密钥对。

在又一示出的实施方式中,当上述区块链网络部署有用于管理安全访问密钥的智能合约时,上述访问密钥id和被加密处理的安全访问密钥通过上述实施方式所述的密钥发布调用交易对智能合约的调用而被存储于区块链内(包括blocks或节点设备本地维护的账户存储空间如上述智能合约的账户空间),由于上述密钥发布调用交易的执行结果可包括上述访问密钥id和被加密处理的安全访问密钥地址(如交易hash值或智能合约地址);上述智能合约中的合约代码对应的处理逻辑可包括密钥查询逻辑;相应地,上述基于所述访问密钥id查询对应的被加密处理的安全访问密钥的具体过程可包括以下步骤:

构建智能合约调用交易;其中,所述智能合约调用交易包含所述访问密钥id;

将所述智能合约调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述智能合约调用交易,调用所述智能合约中的所述密钥查询逻辑,基于所述访问密钥id查询对应的被加密处理的安全访问密钥。

基于账户模型的区块链网络系统中,如以太坊区块链系统,在节点设备本地维护有与区块对应的交易树及收据树(以太坊区块链系统中,在节点设备本地还维护有与账户全局状态对应的状态树)。上述智能合约执行密钥查询逻辑的结果会存储于与上述智能合约调用交易对应的交易日志中,上述交易日志(可经过预设的编码,如rlp编码)以交易收据的形式被保存于收据树(recipestree)中。服务提供方可通过监听本地维护的收据树,获取到上述智能合约基于上述访问密钥id查询对应的被加密处理的安全访问密钥的结果。

在又一示出的实施方式中,当上述访问密钥id和被加密处理的安全访问密钥被存储于上述用于管理安全访问密钥的智能合约的账户存储空间时,亦即,当上述访问密钥id和被加密处理的安全访问密钥是基于服务调用方发送的密钥发布调用交易、由上述智能合约执行密钥发布逻辑而存储于智能合约的账户存储空间时,上述智能合约中的合约代码对应的处理逻辑除上述密钥发布逻辑外,还可包括密钥查询逻辑;相应地,上述基于所述访问密钥id查询对应的被加密处理的安全访问密钥的具体过程可包括以下步骤:

构建智能合约调用交易;其中,所述智能合约调用交易包含所述访问密钥id;

将所述智能合约调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述智能合约调用交易,调用所述智能合约中的所述密钥查询逻辑,基于所述访问密钥id在所述智能合约对应的合约账户的账户存储空间中查询对应的被加密处理的安全访问密钥。

上述智能合约调用交易可包括与密钥查询逻辑对应的函数名称及接口地址,以完成对上述密钥查询逻辑的调用。

基于账户模型的区块链网络系统中,如以太坊区块链系统,在节点设备本地维护有与区块对应的交易树及收据树(以太坊区块链系统中,在节点设备本地还维护有与账户全局状态对应的状态树)。上述智能合约在合约账户的存储空间中执行密钥查询逻辑的结果会存储于与上述智能合约调用交易对应的交易日志中,上述交易日志(可经过预设的编码,如rlp编码)以交易收据的形式被保存于收据树(recipestree)中。服务提供方可通过监听本地维护的收据树,获取到上述智能合约基于上述访问密钥id查询对应的被加密处理的安全访问密钥的结果。

步骤414,所述服务提供方基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证。

上述服务提供方在获取到与服务调用方对应的安全访问密钥后,可以在其终端本地对服务调用方对应的安全访问密钥进行解密,并基于解密后的安全访问密钥对第一数字签名进行验签。对第一数字签名进行验证的方法可以有多种,在一种示出的实施方式中,上述基于解密后的安全访问密钥对第一数字签名进行验证的过程可具体包括以下步骤:

基于解密后的所述安全访问密钥对所述请求参数进行数字签名得到第二数字签名;

确定第一数字签名和第二数字签名是否匹配;如果是,确定所述第一数字签名被验证通过。

上述基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证的过程,还可以通过由智能合约调用交易进一步调用上述智能合约的数字签名验证逻辑来执行。具体地,上述智能合约中的合约代码对应的处理逻辑还包括数字签名验证逻辑;上述智能合约调用交易可进一步包括与数字签名验证逻辑对应的函数名称及接口地址,以完成对上述数字签名验证逻辑的调用。

所述基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证,包括:当基于所述访问密钥id查询到对应的被加密处理的安全访问密钥后,进一步调用所述智能合约中的所述数字签名验证逻辑,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证。

值得注意的是,由于服务提供方的私钥是涉及到服务提供方隐私、及服务信息安全的重要数据,通常要求智能合约在安全运算环境中执行上述基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证的过程。将服务提供方的私钥及智能合约的逻辑代码部署于可信执行环境(tee)中,可实现安全隐私地解密安全访问密钥并验证第一数字签名。

步骤416,当所述第一数字签名被验证通过时,服务提供方基于所述请求参数执行所述服务请求。

由于区块链上的节点设备均可向部署于区块链上的智能合约发起调用交易,进一步地,为规范服务调用方的安全访问密钥管理,防止对智能合约的恶意攻击,上述智能合约还可设置权限控制逻辑,限制仅由服务提供方的调用方可执行上述密钥查询逻辑。在一示出的实施方式中,在进一步调用所述智能合约中的所述密钥查询逻辑之前,智能合约可执行的处理逻辑还包括的:验证智能合约调用交易的发送者是否为上述服务提供方;如果是,进一步调用所述智能合约中的所述密钥查询逻辑。

验证智能合约调用交易的发送者是否为上述服务提供方的具体方式可以有多种,在一示出的实施方式中,上述智能合约调用交易还包括所述服务提供方的识别id;所述验证所述智能合约调用交易的发送者是否为所述服务提供方,包括:查询所述服务提供方的识别id是否属于所述智能合约存储的密钥查询权限白名单;如果是,所述验证交易的发送者为所述服务提供方。

智能合约声明有一系列可执行程序代码,可在区块链节点设备的evm上执行。由于智能合约在被部署到区块链后,智能合约的任何变动或更改都在区块链上有迹可循,因此有着较低的人为干预风险和去中心化权威特性,区块链网络的节点设备均可准确执行且达成共识的执行结果,相比于可能受人为干预的服务提供方提供的中心化可执行程序,通过调用智能合约执行的密钥查询、或电子签名验证可获得更加公平、公正、准确的执行结果。

与上述流程实现对应,本说明书的实施方式还提供了基于区块链的服务请求装置50和60。装置50和60可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的cpu(centralprocessunit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图7所示的cpu、内存以及存储器之外,上述装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。

如图5所示,本说明书还提供了一种基于区块链的服务请求装置50,所述区块链存储有由服务调用方生成的安全访问密钥和对应的访问密钥id;其中所述区块链存储的所述安全访问密钥预先基于服务提供方的公钥进行了加密处理;所述装置50应用于所述服务提供方,包括:

接收单元502,接收所述服务调用方发送的服务请求;所述服务请求包括请求参数、所述访问密钥id、以及基于所述安全访问密钥对所述请求参数进行数字签名处理得到的第一数字签名;

查询单元504,基于所述访问密钥id查询对应的被加密处理的安全访问密钥;

验证单元506,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证;

执行单元508,当所述第一数字签名被验证通过时,基于所述请求参数执行所述服务请求。

在又一示出的实施方式中,所述区块链上部署有用于管理安全访问密钥的智能合约;所述智能合约中的合约代码对应的处理逻辑包括密钥查询逻辑;

所述查询单元504,进一步用于:

构建智能合约调用交易;其中,所述智能合约调用交易包含所述访问密钥id;

将所述智能合约调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述智能合约调用交易,调用所述智能合约中的所述密钥查询逻辑,基于所述访问密钥id查询对应的被加密处理的安全访问密钥。

在又一示出的实施方式中,所述安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间;

所述基于所述访问密钥id查询对应的被加密处理的安全访问密钥,包括:

基于所述访问密钥id在所述智能合约对应的合约账户的账户存储空间中查询对应的被加密处理的安全访问密钥。

在又一示出的实施方式中,所述智能合约中的合约代码对应的处理逻辑还包括数字签名验证逻辑;

所述验证单元506,进一步用于:

当基于所述访问密钥id查询到对应的被加密处理的安全访问密钥后,进一步调用所述智能合约中的所述数字签名验证逻辑,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证。

在又一示出的实施方式中,所述基于解密后的所述安全访问密钥对所述第一数字签名进行验证,包括:

基于解密后的所述安全访问密钥对所述请求参数进行数字签名得到第二数字签名;

确定第一数字签名和第二数字签名是否匹配;如果是,确定所述第一数字签名被验证通过。

在又一示出的实施方式中,在进一步调用所述智能合约中的所述密钥查询逻辑之前,所述验证单元506,还用于:

验证所述智能合约调用交易的发送者是否为服务提供方;如果是,进一步调用所述智能合约中的所述密钥查询逻辑。

在又一示出的实施方式中,所述智能合约调用交易还包括所述服务提供方的识别id;所述验证所述智能合约调用交易的发送者是否为所述服务提供方,包括:

查询所述服务提供方的识别id是否属于所述智能合约存储的密钥查询权限白名单;

如果是,所述智能合约调用交易的发送者为所述服务提供方。

上述装置50中各个单元的功能和作用的实现过程具体详见上述区块链的服务提供方所执行的基于区块链的服务请求方法中对应步骤的实现过程,相关之处参见方法实施方式的部分说明即可,在此不再赘述。

如图6所示,本说明书还提供了一种基于区块链的服务请求装置60,用于服务调用方向服务提供方发送服务请求,所述装置60应用于所述服务调用方,包括:

生成单元602,生成安全访问密钥和对应的访问密钥id,并基于所述服务提供方的公钥对所述安全访问密钥进行了加密处理;

发送单元604,将被加密处理的安全访问密钥和所述访问密钥id发送至所述区块链,以使所述被加密处理的安全访问密钥和所述访问密钥id被所述区块链的节点设备共识验证后存储于所述区块链;

所述发送单元604,进一步用于:向所述服务提供方发送服务请求;所述服务请求包括请求参数、所述访问密钥id、以及基于所述安全访问密钥对所述请求参数进行数字签名处理得到的第一数字签名,以使所述服务调用方基于所述访问密钥id查询对应的被加密处理的安全访问密钥,基于所述服务调用方的私钥解密所述安全访问密钥,并基于解密后的所述安全访问密钥对所述第一数字签名进行验证,当所述第一数字签名被验证通过时,基于所述请求参数执行所述服务请求。

在又一示出的实施方式中,所述区块链上部署有用于管理安全访问密钥的智能合约;所述智能合约中的合约代码对应的处理逻辑包括密钥发布逻辑;

所述发送单元602,进一步用于:

构建密钥发布调用交易,所述密钥发布调用交易包含所述被加密处理的安全访问密钥和所述访问密钥id;

将所述密钥发布调用交易发布至区块链网络,以由所述区块链网络中的节点设备响应于所述密钥发布调用交易,调用所述智能合约中的所述密钥发布逻辑,将被加密处理的安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间。

在又一示出的实施方式中,所述将被加密处理的和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间,包括:

查询所述访问密钥id是否与已存储在所述账户存储空间的已有访问密钥id匹配;

如果否,将所述安全访问密钥和对应的访问密钥id存储在所述智能合约对应的合约账户的账户存储空间。

上述装置60中各个单元的功能和作用的实现过程具体详见上述区块链的服务调用方所执行的基于区块链的服务请求方法中对应步骤的实现过程,相关之处参见方法实施方式的部分说明即可,在此不再赘述。

以上所描述的装置实施方式仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部单元或模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

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

与上述方法实施方式相对应,本说明书的实施方式还提供了一种计算机设备,如图7所示,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施方式中上述服务提供方所执行的基于区块链的服务请求方法的各个步骤。对上述服务提供方所执行的基于区块链的服务请求方法的各个步骤的详细描述请参见之前的内容,不再重复。

与上述方法实施方式相对应,本说明书的实施方式还提供了一种计算机设备,如图7所示,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施方式中上述服务调用方所执行的基于区块链的服务请求方法的各个步骤。对上述服务调用方所执行的基于区块链的服务请求方法的各个步骤的详细描述请参见之前的内容,不再重复。

与上述方法实施方式相对应,本说明书的实施方式还提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施方式中服务提供方所执行的基于区块链的服务请求方法的各个步骤。对上述服务提供方所执行的基于区块链的服务请求方法的各个步骤的详细描述请参见之前的内容,不再重复。

与上述方法实施方式相对应,本说明书的实施方式还提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施方式中服务调用方所执行的基于区块链的服务请求方法的各个步骤。对上述服务调用方所执行的基于区块链的服务请求方法的各个步骤的详细描述请参见之前的内容,不再重复。

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

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

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

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。

计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

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

本领域技术人员应明白,本说明书的实施方式可提供为方法、系统或计算机程序产品。因此,本说明书的实施方式可采用完全硬件实施方式、完全软件实施方式或结合软件和硬件方面的实施方式的形式。而且,本说明书的实施方式可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

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