一种访问处理方法、装置、设备、介质及程序产品转让专利

申请号 : CN202311290322.X

文献号 : CN117040929B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄杨峻王宗友朱耿良时一防刘区城廖志勇刘汉卿聂凯轩

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本申请实施例提供了一种访问处理方法、装置、设备、介质及程序产品;其中的方法包括:统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t;获取访问对象被授权针对智能合约进行访问的访问次数阈值;若历史访问次数t超过访问次数阈值,则获取访问对象在t次历史访问过程中所使用的t个秘钥分片;基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理。采用本申请实施例可以避免智能合约被频繁访问,提高区块链网络的安全性。

权利要求 :

1.一种基于区块链网络的访问处理方法,其特征在于,所述方法应用于防治应用程序,所述防治应用程序在时间周期内缓存访问对象每次针对所述区块链网络中智能合约进行访问时所使用的秘钥分片;所述方法包括:统计访问对象在时间周期内针对所述区块链网络中智能合约的历史访问次数t;其中,在t次历史访问过程中,所述访问对象每次使用一个不同的秘钥分片进行访问;所述秘钥分片是对所述访问对象的秘钥执行分片处理得到的;t为正整数;

获取所述访问对象被授权针对所述智能合约进行访问的访问次数阈值;

若所述历史访问次数t超过所述访问次数阈值,则获取所述访问对象在t次历史访问过程中所使用的t个秘钥分片;

基于所述t个秘钥分片还原所述访问对象的秘钥,并通过所述访问对象的秘钥获取所述访问对象在所述区块链网络中的资源池,所述资源池用于存储所述访问对象在所述区块链网络中的资源;从所述资源池中扣除所述访问对象的资源。

2.如权利要求1所述的方法,其特征在于,所述获取所述访问对象在t次历史访问过程中所使用的t个秘钥分片之后,还包括:若所述t个秘钥分片的数量t小于还原所述秘钥所需的分片数量,则为所述访问对象设置访问条件;所述访问条件至少包括:所述访问对象在预设时间段内不具有访问所述智能合约的权限;

若所述t个秘钥分片的数量t大于或等于还原所述秘钥所需的分片数量,则触发执行所述基于所述t个秘钥分片还原所述访问对象的秘钥的步骤。

3.如权利要求1所述的方法,其特征在于,所述方法还包括:

删除在所述时间周期内所述访问对象在t次历史访问过程中所使用的t个秘钥分片。

4.如权利要求1‑3任一项所述的方法,其特征在于,所述方法还包括:

在所述访问对象首次访问所述智能合约之前,接收所述访问对象发送的关于所述访问对象的身份承诺;所述身份承诺是根据所述访问对象的秘钥派生得到的,所述身份承诺用于指示所述访问对象的身份信息;

将所述访问对象的身份承诺作为默克尔树的叶子节点,注册至所述默克尔树;所述默克尔树用于存储已注册为防治应用程序的注册用户的身份承诺。

5.如权利要求4所述的方法,其特征在于,所述访问对象访问所述智能合约的过程包括:接收访问对象发送的访问请求,所述访问请求中包括所述访问对象的证明信息;

对所述访问对象的证明信息进行验证,得到第一验证结果;

基于所述第一验证结果调用所述智能合约为所述访问对象提供服务;

其中,所述证明信息中包括:所述访问对象的证明者字符串及零知识证明电路的输出信息;所述证明者字符串是所述访问对象使用证明者秘钥为所述零知识证明电路计算得到输出信息的计算过程中生成的,所述证明者字符串的生成表示:所述访问对象基于所述零知识证明电路已执行所述计算过程;

所述零知识证明电路是基于待证明命题转化得到的,所述待证明命题用于指示对所述访问对象的身份承诺已注册所述默克尔树的正确性进行验证;所述零知识证明电路的输出信息中包括:所述访问对象采用所述零知识证明电路计算得到的所述默克尔树的根节点的预测哈希值,和电路检查结果;

所述电路检查结果用于指示:所述访问对象采用所述零知识证明电路计算得到的所述默克尔树的根节点的预测哈希值,与所述默克尔树的根节点的真实哈希值是否相同。

6.如权利要求5所述的方法,其特征在于,所述区块链网络存储有验证者秘钥;所述对所述访问对象的证明信息进行验证,得到第一验证结果,包括:采用所述验证者秘钥对所述证明信息中的证明者字符串进行验证,得到秘钥验证结果;以及,根据所述默克尔树的根节点的真实哈希值,对所述零知识证明电路的输出信息所包含的预测哈希值进行验证,得到哈希值验证结果;以及,从所述证明信息中的零知识证明电路的输出信息中获取所述电路检查结果的值;

基于所述秘钥验证结果,所述哈希值验证结果和所述电路检查结果的值,生成第一验证结果;

其中,若所述秘钥验证结果为验证成功,所述哈希值验证结果为验证成功,且所述电路检查结果的值为预设值,则所述第一验证结果为验证成功,且所述第一验证结果指示所述访问对象的身份承诺已注册至所述默克尔树。

7.如权利要求5所述的方法,其特征在于,所述基于所述第一验证结果调用所述智能合约为所述访问对象提供服务,包括:获取所述访问对象在本次访问所使用的秘钥分片;所述秘钥分片携带于所述访问请求中,或者,在所述第一验证结果为验证成功时从所述访问对象获取本次访问所使用的秘钥分片;

若本次访问所使用的秘钥分片在所述时间周期内未使用过,且所述第一验证结果为验证成功,则触发执行所述统计访问对象在时间周期内针对所述区块链网络中智能合约的历史访问次数t的步骤,并在所述历史访问次数t未超过所述访问次数阈值时,调用所述智能合约为所述访问对象提供服务;

若本次访问所使用的秘钥分片在所述时间周期内已使用过,或者所述第一验证结果为验证失败,则拒绝响应所述访问请求。

8.如权利要求7所述的方法,其特征在于,所述默克尔树中还注册有所述访问对象的M个秘钥分片的哈希值;所述M个秘钥分片属于所述访问对象的秘钥被分片处理所得到的N个秘钥分片;N为大于或等于t的整数,M为正整数且t≤M≤N;所述获取所述访问对象在本次访问所使用的秘钥分片之后,还包括:对所述访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果;所述第二验证结果用于指示:所述访问对象在本次访问所使用的秘钥分片的哈希值是否注册至所述默克尔树;

若所述第二验证结果为验证成功,本次访问所使用的秘钥分片在所述时间周期内未使用过,且第一验证结果为验证成功,则触发执行所述统计访问对象在时间周期内针对所述区块链网络中智能合约的历史访问次数t的步骤,并在所述历史访问次数t未超过所述访问次数阈值时,调用所述智能合约为所述访问对象提供服务;

若所述第二验证结果为验证失败,或者本次访问所使用的秘钥分片在所述时间周期内已使用过,或者第一验证结果为验证成功,则拒绝响应所述访问请求。

9.如权利要求8所述的方法,其特征在于,所述对所述访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果,包括以下任一种:采用零知识证明对所述访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果;或者,对所述访问对象在本次访问所使用的秘钥分片进行哈希运算,得到哈希运算结果,并检测所述哈希运算结果是否为所述默克尔树的叶子节点,生成第二验证结果。

10.如权利要求8所述的方法,其特征在于,所述方法还包括:

为注册所述默克尔树的各访问对象设置相同的访问次数阈值;或者,

根据访问对象注册所述默克尔树时提供的秘钥分片的数量,为不同访问对象设置不同的访问次数阈值;其中,为访问对象设置的访问次数阈值小于相应访问对象提供的秘钥分片的数量。

11.如权利要求10所述的方法,其特征在于,在为注册所述默克尔树的各访问对象设置的访问次数阈值相同的情况下,所述方法还包括:若访问对象在注册所述默克尔树时提供的秘钥分片的数量小于或等于所述访问次数阈值,则将访问对象的身份承诺添加至白名单;所述白名单中的身份承诺对应的访问对象发起访问请求时无需被执行阈值判断;

若访问对象在注册所述默克尔树时提供的秘钥分片的数量大于所述访问次数阈值,则将访问对象的身份承诺添加至黑名单;所述黑名单中的身份承诺对应的访问对象发起访问请求时需要被执行阈值判断。

12.一种基于区块链网络的访问处理装置,其特征在于,所述装置搭载于防治应用程序,所述防治应用程序在时间周期内缓存访问对象每次针对所述区块链网络中智能合约进行访问时所使用的秘钥分片;所述装置包括:统计单元,用于统计访问对象在时间周期内针对所述区块链网络中智能合约的历史访问次数t;其中,在t次历史访问过程中,所述访问对象每次使用一个不同的秘钥分片进行访问;所述秘钥分片是对所述访问对象的秘钥执行分片处理得到的;t为正整数;

处理单元,用于获取所述访问对象被授权针对所述智能合约进行访问的访问次数阈值;

所述处理单元,还用于若所述历史访问次数t超过所述访问次数阈值,则获取所述访问对象在t次历史访问过程中所使用的t个秘钥分片;

所述处理单元,还用于基于所述t个秘钥分片还原所述访问对象的秘钥,并通过所述访问对象的秘钥获取所述访问对象在所述区块链网络中的资源池,所述资源池用于存储所述访问对象在所述区块链网络中的资源;从所述资源池中扣除所述访问对象的资源。

13.一种计算机设备,其特征在于,包括:

处理器,适于执行计算机程序;

计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被所述处理器执行时,实现如权利要求1‑11任一项所述的方法。

14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序适于被处理器加载并执行如权利要求1‑11任一项所述的方法。

说明书 :

一种访问处理方法、装置、设备、介质及程序产品

技术领域

[0001] 本申请涉及电子技术领域,尤其涉及区块链领域,具体涉及一种基于区块链网络的访问处理方法、装置、设备、介质及程序产品。

背景技术

[0002] 智能合约是部署于区块链网络中,且能够通过计算机程序自动执行服务(或合约)的协议。通过访问或调用智能合约可以实现使用该智能合约提供的服务,这导致区块链网络中存在的恶意节点可能会通过频繁访问或调用智能合约的方式,来达到一些恶意目的。
[0003] 因此,如何避免智能合约被恶意访问,维护区块链网络的安全性成为研究热点。

发明内容

[0004] 本申请实施例提供一种基于区块链网络的访问处理方法、装置、设备、介质及程序产品,可以避免智能合约被频繁访问,提高区块链网络的安全性。
[0005] 一方面,本申请实施例提供了一种基于区块链网络的访问处理方法,该方法包括:
[0006] 统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t;其中,在t次历史访问过程中,访问对象每次使用一个不同的秘钥分片进行访问;秘钥分片是对访问对象的秘钥执行分片处理得到的;t为正整数;
[0007] 获取访问对象被授权针对智能合约进行访问的访问次数阈值;
[0008] 若历史访问次数t超过访问次数阈值,则获取访问对象在t次历史访问过程中所使用的t个秘钥分片;
[0009] 基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理。
[0010] 另一方面,本申请实施例提供了一种基于区块链网络的访问处理装置,该装置包括:
[0011] 统计单元,用于统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t;其中,在t次历史访问过程中,访问对象每次使用一个不同的秘钥分片进行访问;秘钥分片是对访问对象的秘钥执行分片处理得到的;t为正整数;
[0012] 处理单元,用于获取访问对象被授权针对智能合约进行访问的访问次数阈值;
[0013] 处理单元,还用于若历史访问次数t超过访问次数阈值,则获取访问对象在t次历史访问过程中所使用的t个秘钥分片;
[0014] 处理单元,还用于基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理。
[0015] 在一种实现方式中,处理单元,还用于:
[0016] 若t个秘钥分片的数量t小于还原秘钥所需的分片数量,则为访问对象设置访问条件;访问条件至少包括:访问对象在预设时间段内不具有访问智能合约的权限;
[0017] 若t个秘钥分片的数量t大于或等于还原秘钥所需的分片数量,则触发执行基于t个秘钥分片还原访问对象的秘钥的步骤。
[0018] 在一种实现方式中,处理单元,用于基于访问对象的秘钥对访问对象进行访问处理时,具体用于:
[0019] 通过访问对象的秘钥获取访问对象在区块链网络中的资源池,资源池用于存储访问对象在区块链网络中的资源;
[0020] 从资源池中扣除访问对象的资源。
[0021] 在一种实现方式中,处理单元,还用于:
[0022] 删除在时间周期内访问对象在t次历史访问过程中所使用的t个秘钥分片。
[0023] 在一种实现方式中,处理单元,还用于:
[0024] 在访问对象首次访问智能合约之前,接收访问对象发送的关于访问对象的身份承诺;身份承诺是根据访问对象的秘钥派生得到的,身份承诺用于指示访问对象的身份信息;
[0025] 将访问对象的身份承诺作为默克尔树的叶子节点,注册至默克尔树;默克尔树用于存储已注册为防治应用程序的注册用户的身份承诺。
[0026] 在一种实现方式中,访问对象访问智能合约的过程包括:
[0027] 接收访问对象发送的访问请求,访问请求中包括访问对象的证明信息;
[0028] 对访问对象的证明信息进行验证,得到第一验证结果;
[0029] 基于第一验证结果调用智能合约为访问对象提供服务;
[0030] 其中,证明信息中包括:访问对象的证明者字符串及零知识证明电路的输出信息;证明者字符串是访问对象使用证明者秘钥为零知识证明电路计算得到输出信息的计算过程中生成的,证明者字符串的生成表示:访问对象基于零知识证明电路已执行计算过程;
[0031] 零知识证明电路是基于待证明命题转化得到的,待证明命题用于指示对访问对象的身份承诺已注册默克尔树的正确性进行验证;零知识证明电路的输出信息中包括:访问对象采用零知识证明电路计算得到的默克尔树的根节点的预测哈希值,和电路检查结果;
[0032] 电路检查结果用于指示:访问对象采用零知识证明电路计算得到的默克尔树的根节点的预测哈希值,与默克尔树的根节点的真实哈希值是否相同。
[0033] 在一种实现方式中,区块链网络存储有验证者秘钥;处理单元,用于对证明信息进行验证,得到第一验证结果时,具体用于:
[0034] 采用验证者秘钥对证明信息中的证明者字符串进行验证,得到秘钥验证结果;以及,
[0035] 根据默克尔树的根节点的真实哈希值,对零知识证明电路的输出信息所包含的预测哈希值进行验证,得到哈希值验证结果;以及,
[0036] 从证明信息中的零知识证明电路的输出信息中获取电路检查结果的值;
[0037] 基于秘钥验证结果,哈希值验证结果和电路检查结果的值,生成第一验证结果;
[0038] 其中,若秘钥验证结果为验证成功,哈希值验证结果为验证成功,且电路检查结果的值为预设值,则第一验证结果为验证成功,且第一验证结果指示访问对象的身份承诺已注册至默克尔树。
[0039] 在一种实现方式中,处理单元,用于基于第一验证结果调用智能合约为访问对象提供服务时,具体用于:
[0040] 获取访问对象在本次访问所使用的秘钥分片;秘钥分片携带于访问请求中,或者,在第一验证结果为验证成功时从访问对象获取本次访问所使用的秘钥分片;
[0041] 若本次访问所使用的秘钥分片在时间周期内未使用过,且第一验证结果为验证成功,则触发执行统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t的步骤,并在历史访问次数t未超过访问次数阈值时,调用智能合约为访问对象提供服务;
[0042] 若本次访问所使用的秘钥分片在时间周期内已使用过,或者第一验证结果为验证失败,则拒绝响应访问请求。
[0043] 在一种实现方式中,默克尔树中还注册有访问对象的M个秘钥分片的哈希值; M个秘钥分片属于访问对象的秘钥被分片处理所得到的N个秘钥分片;N为大于或等于t的整数,M为正整数且t≤M≤N;处理单元,还用于:
[0044] 对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果;第二验证结果用于指示:访问对象在本次访问所使用的秘钥分片的哈希值是否注册至默克尔树;
[0045] 若第二验证结果为验证成功,本次访问所使用的秘钥分片在时间周期内未使用过,且第一验证结果为验证成功,则触发执行统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t的步骤,并在历史访问次数t未超过访问次数阈值时,调用智能合约为访问对象提供服务;
[0046] 若第二验证结果为验证失败,或者本次访问所使用的秘钥分片在时间周期内已使用过,或者第一验证结果为验证成功,则拒绝响应访问请求。
[0047] 在一种实现方式中,处理单元,用于对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果,包括以下任一种:
[0048] 采用零知识证明对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果;或者,
[0049] 对访问对象在本次访问所使用的秘钥分片进行哈希运算,得到哈希运算结果,并检测哈希运算结果是否为默克尔树的叶子节点,生成第二验证结果。
[0050] 在一种实现方式中,处理单元,还用于:
[0051] 为注册默克尔树的各访问对象设置相同的访问次数阈值;或者,
[0052] 根据访问对象注册默克尔树时提供的秘钥分片的数量,为不同访问对象设置不同的访问次数阈值;其中,为访问对象设置的访问次数阈值小于相应访问对象提供的秘钥分片的数量。
[0053] 在一种实现方式中,在为注册默克尔树的各访问对象设置的访问次数阈值相同的情况下,处理单元,还用于:
[0054] 若访问对象在注册默克尔树时提供的秘钥分片的数量小于或等于访问次数阈值,则将访问对象的身份承诺添加至白名单;白名单中的身份承诺对应的访问对象发起访问请求时无需被执行阈值判断;
[0055] 若访问对象在注册默克尔树时提供的秘钥分片的数量大于访问次数阈值,则将访问对象的身份承诺添加至黑名单;黑名单中的身份承诺对应的访问对象发起访问请求时需要被执行阈值判断。
[0056] 另一方面,本申请实施例提供了一种计算机设备,该设备包括:
[0057] 处理器,用于加载并执行计算机程序;
[0058] 计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,该计算机程序被处理器执行时,实现上述基于区块链网络的访问处理方法。
[0059] 另一方面,本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,该计算机程序适于由处理器加载并执行上述基于区块链网络的访问处理方法。
[0060] 另一方面,本申请实施例提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,计算机指令被处理器执行时实现上述的基于区块链网络的访问处理方法。
[0061] 在本申请实施例中,计算机设备可以统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t,t为正整数。然后,将该历史访问次数t和该访问对象被授权针对智能合约进行访问的访问次数阈值进行比较;在历史访问次数t超过访问次数阈值的情况下,可以获取该访问对象在t次历史访问过程中所使用的t个秘钥分片来还原访问对象的秘钥,从而可以基于该访问对象的秘钥对访问对象进行访问处理(如惩罚或惩治该访问对象的频繁访问智能合约)。通过上述方案可知,在时间周期内访问对象每次访问智能合约均会发送一份不同的秘钥分片,故在检测到时间周期内该访问对象的访问频率较高(即历史访问次数超过访问次数阈值)时,能够基于历史访问的多个秘钥分片还原该访问对象的秘钥,从而基于秘钥达到惩罚该访问对象的效果,进而有力地避免了智能合约被恶意的访问对象频繁访问,维护了区块链网络的安全性。

附图说明

[0062] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0063] 图1是本申请一个示例性实施例提供的一种电子优惠券的发放场景的场景示意图;
[0064] 图2是本申请一个示例性实施例提供的一种基于区块链网络的访问处理方法的流程示意图;
[0065] 图3是本申请一个示例性实施例提供的一种秘密分享的原理示意图;
[0066] 图4是本申请一个示例性实施例提供的另一种基于区块链网络的访问处理方法的流程示意图;
[0067] 图5是本申请一个示例性实施例提供的一种默克尔树的结构示意图;
[0068] 图6是本申请一个示例性实施例提供的一种访问对象与防治应用程序进行交互的流程示意图;
[0069] 图7是本申请一个示例性实施例提供的一种零知识证明电路的结构示意图;
[0070] 图8是本申请一个示例性实施例提供的一种在对象注册阶段,将访问对象划分至黑白名单的流程示意图;
[0071] 图9是本申请一个示例性实施例提供的一种基于区块链网络的访问处理装置的结构示意图;
[0072] 图10是本申请一个示例性实施例提供的一种计算机设备的结构示意图。

具体实施方式

[0073] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0074] 在本申请实施例中,提出了一种基于区块链网络的访问处理方案。其中,区块链网络是一个公共基础设施网络,旨在提供一个可以低成本开发、部署、运维、互通和监管联盟链应用的公共基础设施网络;区块链网络中往往包含多个区块链节点来构成一个去中心化平台。区块链网络中维护有一条或多条区块链,具体是由区块链网络中的区块链节点实现对区块链的存储和更新。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式;本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
[0075] 其中,区块链网络是由多个区块链节点(接入网络中的任意形式的计算机设备,如终端和/或服务器)通过网络通信的形式连接形成的分布式系统。分布式网络中的各区块链节点之间形成的点对点网络;点对点协议是一个运行在传输控制协议(Transmission Control Protocol,TCP)协议之上的应用层协议。区块链网络中的区块链节点具有路由和应用的功能;其中:
[0076] 1)路由,是区块链节点具有的基本功能,用于支持区块链节点之间的通信。
[0077] 2)应用,用于部署在区块链中,可以根据实际业务需求而实现特定业务,且记录实现功能相关的数据形成记录数据。并且在记录数据中可以携带数字签名以表示任务数据的来源,记录数据还会发送到区块链网络中的其他区块链节点,供其他区块链节点在验证记录数据来源以及完整性成功时,将记录数据添加到临时区块中。应用实现的业务可以包括但是不限于:资源客户端和智能合约(Smart contract)。①资源客户端可以用以实现资源管理业务功能,并基于该资源管理业务功能实现与去中心化应用客户端之间的通信连接。换句话说,资源客户端是一种用于负责管理和存储用户数字资源的工具;例如,可以基于资源客户端向其它账户转移数字资源;又如,可以基于资源客户端接收其它账户所转入的数字资源。形式上,该资源客户端可以是硬件设备也可以为软件程序。可以理解的是,随着各类去中心化应用(Decentralized Application,DApp)在区块链上广泛部署,用户在区块链上的活动增加,一般用户在使用去中心化应用时,可使用区块链密钥(或秘钥)管理工具进行登录,该区块链密钥管理工具中的地址对应于区块链上的一个用户,去中心化应用能够通过一些接口从密钥管理工具获取到该用户地址,而为了解决去中心化平台的后台无法信任该去中心化应用登录时所使用的用户地址的问题。
[0078] ②智能合约是一种以代码形式编写的合约,可以在区块链上自动执行;实现多种功能,如转账、验证身份、创建数字身份等。智能合约是依托计算机在网络空间运行的合约,它以信息化方式传播、验证或执行,由计算机读取、执行,具备自助的特点。区块链的去中心化,数据的防篡改,决定了智能合约更加适合于在区块链上来实现。因此区块链技术的发展,让智能合约拥有了更广阔的发展前景。智能合约事实上是由计算机代码构成的一段程序,其构建过程是:第一步,参与缔约的双方或多方用户商定后将共同合意制定成一份智能合约,即编写一段用于实现任务或提供服务的代码片段。第二步,通过虚拟机编译成字节码后存储在区块链平台,因此智能合约也拥有在区块链上的唯一地址;且该智能合约通过区块链网络向全球各个区块链的支点广播并存储。第三步,当区块链网络中的区块链节点向智能合约所在地址发送交易或满足某些条件后即会触发智能合约代码,智能合约将自动以规定的方式在网络中的每个节点上独立和自动地执行,完成区块链内数据的存储或是某些状态的变化以及账本余额的变化等功能,其自动执行的特点可以完全抛开需要人为维护的中心化数据管理模式。
[0079] 在实际应用中,区块链网络中可能会存在恶意的区块链节点在时间周期内频繁地访问或调用智能合约,以达到某种恶意的目的。例如,智能合约是实现电子优惠券发放功能的合约,那么可能存在恶意的访问对象(或称为访问者)通过区块链节点在时间周期内多次访问该智能合约,以希望获得更多的电子优惠券的目的。也就是说,当同一访问对象通过区块链节点在一段时间内(如时间周期内)针对智能合约频繁发起访问,那么可以判定该访问对象可以是恶意对象。
[0080] 为及时发现频繁访问智能合约的恶意对象,实现针对恶意对象的惩罚,挽回损失;本申请实施例提供的基于区块链网络的访问处理方案提供一种防治应用程序,该防治应用程序可以用于检测访问对象在时间周期内访问智能合约的访问次数,和还原该访问对象的秘钥,从而基于该秘钥拿到该访问对象的区块链账户(或前述提及的资源客户端)后可以实现对该区块链账户的访问处理。
[0081] 具体实现中,本申请实施例提供的访问处理方案的流程大致可以包括三个部分,分别为:
[0082] (1)对象注册。
[0083] 具有访问智能合约的需求的访问对象,在首次访问智能合约之前需要在防治应用程序中注册自己的身份承诺,表示该访问对象针对智能合约的访问允许受到防治应用程序的防治。在对象注册的过程中,访问对象需要将自己的身份承诺发送至防治应用程序,该访问应用程序在预先存储该访问对象的身份承诺后,后续可以依据该身份承诺来识别访问对象的身份和历史访问次数。进一步的,在对象注册的过程中,还支持对访问对象的秘钥的多个秘钥分片进行注册,有利于后续比对访问对象访问智能合约时是否是使用自己的秘钥分片,避免秘钥分配的误使用。
[0084] (2)对象自证。
[0085] 由于访问对象与智能合约进行交互时智能合约无法验证访问对象的身份,故访问对象与智能合约进行交互之前,访问对象需要先向防治应用程序证明自己的身份,具体是证明自己的身份已注册防治应用程序,且具体为已注册防治应用程序的哪个身份。示例性地,对象自证时具体是基于零知识证明来实现自证的过程;也就是说,访问对象作为证明者,需要生成一个证明信息来证明自己的身份(即证明自己是防治应用程序的注册用户,且具体需要证明自己是哪一个注册用户)。
[0086] 其中,零知识证明是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤;例如,零知识证明涉及的两方可包括:证明者(如证明某个论断的正确性的对象)和验证者(如验证证明者提供的针对某个论断的证明是否正确的对象);在本申请实施例中证明者可包括访问对象,验证者可包括防治应用程序。在一次零知识证明的过程中,证明者可以在不向验证者提供任何有用的信息的前提下,和验证者进行多次数据交互,以使验证者相信某个论断的正确性;例如,在本申请实施例中证明者“访问对象”需要在不向验证者“防治应用程序”提供自己的身份的情况下,向验证者证明自己已注册防治应用程序,且自己具体为已注册防治应用程序的哪一个注册用户的论断的正确性。详细地,按照零知识证明算法的思路,对象自证的过程大致可以包括:确定待证明命题(即论证访问对象的身份是注册至防治应用程序且为防治应用程序维护的一个注册用户的论断的正确性),并生成该待证明命题的零知识电路。证明者使用零知识证明算法为待证明命题生成公共参数、证明者秘钥和验证者秘钥。证明者还基于证明者秘钥和零知识电路,生成证明信息。验证者采用验证者秘钥对证明信息进行验证,得到验证结果。
[0087] 进一步的,对象自证的过程还可以包括:验证访问对象本次访问所使用的秘钥分片与对象注册过程中注册的秘钥分片一致的过程。也就是说,防治应用程序可以对访问对象在本次访问过程中发送的秘钥分片的真实性进行判断,避免访问对象采用虚假的秘钥分片来频繁请求服务,而防治应用程序基于虚假的防治应用程序不能实现对该恶意的访问对象的访问处理(如惩罚)。
[0088] (3)对象交互。
[0089] 在前述对象自证阶段实现对访问对象的身份证明成功后,防治应用程序可以缓存访问对象在本次访问所使用的秘钥分片。防治应用程序还统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t;其中,在t次历史访问过程中,访问对象每次使用一个不同的秘钥分片进行访问;秘钥分片是对访问对象的秘钥执行分片处理得到的;t为正整数。然后,防治应用程序获取该访问对象被授权针对智能合约进行访问的访问次数阈值,若历史访问次数t超过访问次数阈值,表明该访问对象可能是频繁访问的虚假或恶意对象,可能存在作弊行为,则防治应用程序可以获取访问对象在t次历史访问过程中所使用的t个秘钥分片。最后,防治应用程序基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理。
[0090] 应当理解的是,上述只是对访问处理方案所涉及的三个部分的具体实施过程的简单介绍,在后续实施例中会对各部分的具体实施过程进行详细介绍。
[0091] 由此可见,本申请实施例支持在时间周期内访问对象每次访问智能合约均会发送一份不同的秘钥分片,故在检测到时间周期内该访问对象的访问频率较高(即历史访问次数超过访问次数阈值)时,能够基于历史访问的多个秘钥分片还原该访问对象的秘钥,从而基于秘钥达到惩罚该访问对象的效果,进而有力地避免了智能合约被恶意的访问对象频繁访问,维护了区块链网络的安全性。
[0092] 需要说明的是,本申请实施例对区块链网络中需要采用本方案这种防治机制的智能合约不作限定。根据智能合约的不同,本方案所适用的应用场景也有所不同。例如:智能合约是用于实现转账的合约,那么本方案所适用的应用场景可以是区块链网络中的转账场景。再如:智能合约是用于实现数据处理的合约,那么本方案所适用的应用场景可以是区块链网络中的数据处理场景。又如:智能合约是用于平台向消费者发放电子优惠券的合约,那么本方案所适用的应用场景可以是区块链网络中发放电子优惠券的发放场景。
[0093] 以应用场景为关于电子优惠券的发放场景为例,一种发放场景的场景示意图可以参见图1。如图1所示,该场景中包括至少一个终端101和服务器102;其中,终端101和服务器102均是区块链网络中的区块链节点,或者终端101是链下设备,通过与区块链网络中的区块链节点通信实现访问链上数据。其中:
[0094] 终端101是访问对象所使用的设备。终端101可以包括但不限于:智能手机(如部署安卓(Android)系统的智能手机,或部署互联网操作系统(Internetworking Operating System,IOS)的智能手机)、平板电脑、便携式个人计算机、移动互联网设备(Mobile Internet Devices,MID)、智能电视、车载设备或头戴设备等终端设备。终端101可以部署本申请实施例提供的防治应用程序。服务器102可以是具备发放电子优惠券的设备。服务器102可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、内容分发网络(Content Delivery Network,CDN)、以及大数据和人工智能平台等基础云计算服务的云服务器。服务器102中可以部署智能合约,如该智能合约为定义了电子优惠券的发放和领取规则的合约。
[0095] 在终端101和服务器102组成的系统中,一方面,访问对象可以通过终端101打开防治应用程序后在该防治应用程序中进行对象注册,具体是将该访问对象的秘钥(甚至是秘钥分片)插入至防治应用程序所维护的默克尔树中,实现对访问对象的身份的注册。另一方面,在服务器102发放电子优惠券的过程中,具体是该服务器102向区块链网络中各区块链节点发布关于电子优惠券的发放通知。这样,终端101在接收到该发送通知时,访问对象可以通过终端101向服务器102发送关于智能合约的访问请求,企图触发智能合约自动执行向该访问对象发放电子优惠券的动作;此时,终端101中部署的防治应用程序在拦截或获取到访问请求时就可以进行身份验证和历史访问次数的统计等操作,以避免该访问对象频繁访问智能合约,企图多次获得电子优惠券。在防治应用程序对访问对象的身份验证成功,且确定历史访问次数未超访问次数阈值时,防治应用程序可以向服务器102发送关于向该访问对象发放电子优惠券的通知,使得服务器102中的智能合约启动向该访问对象发放电子优惠券的操作;反之,防治应用程序会拒绝响应本次访问的访问请求,且会对该访问对象进行访问处理(如扣除押金,或者禁止访问等惩罚处理)。
[0096] 应当理解的是,上述图1所示场景示意图仅是电子优惠券发送场景的示例性结构示意图,在其他场景下的结构示意图可以发生适应性变化。例如,终端可以为链下设备,防治应用程序可以是部署于该链下设备的中心化应用;再如,终端可以为链上设备,防治应用程序可以是部署于区块链网络中的去中心化应用;等等。此外,图1所示的终端和服务器之间可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。此外,上述提及的终端和/或服务器可以是前述提及的区块链网络中的区块链节点,直接参与交易上链存储;或者,上述提及的终端和/或服务器还可以是接入至区块链网络的链下设备,这样终端和/或服务器可以与区块链网络中的区块链节点进行交互,以实现交易上链存储。
[0097] 还需说明的是,本申请实施例中相关数据收集处理应该严格根据相关法律法规的要求,获取个人信息需得到个人主体的知情或同意(或具备信息获取的合法性基础),并在法律法规及个人信息主体的授权范围内,开展后续数据使用及处理行为。例如,本申请实施例运用到具体产品或技术中时,如缓存访问对象的秘钥分配时,需要获得访问对象的许可或者同意,且相关数据的收集、使用和处理(如对象发布的弹幕的收集和发布等)需要遵守相关地区的相关法律法规和标准。
[0098] 基于上述描述的基于区块链网络的访问处理方案,本申请实施例提出更为详细的基于区块链网络的访问处理方法,下面将结合附图对本申请实施例提出的访问处理方法进行详细介绍。
[0099] 图2示出了本申请一个示例性实施例提供的一种基于区块链网络的访问处理方法的流程示意图;该访问处理方法可以由部署有防治应用程序的计算机设备来执行,该计算机设备可以为区块链节点或链下设备,该访问处理方法可包括但不限于步骤S201‑S204:
[0100] S201:统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t。
[0101] 具体地,计算机设备中部署的防治应用程序可以在时间周期内的任意时刻,执行统计某个访问对象在该时间周期内针对区块链网络中同一智能合约的历史访问次数t,该历史访问次数t对应的t次访问均发生于该时间周期内。此处的时间周期可以是预设时长的一段时间,如时长为1小时或30分钟等,本申请实施例对时间周期的时长不作限定。
[0102] 其中,防治应用程序统计访问对象在时间周期内针对区块链网络中同一智能合约的历史访问次数的触发条件,可以包括但是不限于:
[0103] ①接收并验证访问对象的身份成功后,触发执行统计该访问对象在时间周期内针对区块链网络中智能合约的历史访问次数。详细地,在每一次访问过程中针对访问对象的身份验证成功后,可以先不为该访问对象提供服务,而是自动触发执行针对该访问对象在时间周期内的历史访问次数的统计;此情况下,该访问对象在时间周期内的历史访问次数不包括本次访问,且防治应用程序会根据本次统计的结果来判断是否响应该访问对象本次发起的访问请求,如果统计结果知识历史访问次数未超过访问次数阈值,则响应该访问对象本次发起的访问请求,反之,拒绝响应本次发起的访问请求。
[0104] 举例来说,防治应用程序在时间周期8:00‑9:00内的时刻8:20接收到访问对象的访问请求;该访问请求中至少携带访问对象的证明信息,该证明信息是访问对象用于证明自己是已注册防治应用程序的A用户。此时,防治应用程序可以响应于该访问请求对证明信息进行验证,得到第一验证结果;并在第一验证结果指示验证成功后,再执行统计该访问对象在时间周期内(此情况下,具体是统计8:00‑8:20内)针对同一智能合约的历史访问次数t的步骤,该历史访问次数t不包括本次访问的1次;如该访问对象在时间周期内的8:10和8:17针对本次访问的智能合约发起了2次历史访问,则确定在8:20统计到的历史访问次数t=
2。
[0105] ②接收并验证访问对象的身份成功,且缓存本次访问时访问对象提供的秘钥分片,并响应本次访问的访问请求后,触发执行统计该访问对象在时间周期内针对区块链网络中智能合约的历史访问次数。详细地,在每一次访问过程中针对访问对象的身份验证成功后,可以自动为该访问对象提供服务,并同步执行针对该访问对象在时间周期内的历史访问次数的统计;此情况下,该访问对象在时间周期内的历史访问次数包括本次访问。当然,本申请实施例对触发防治应用程序统计访问对象在时间周期内的历史访问次数的触发条件的不作限定;例如,防治应用程序还可以定时(或周期性,如每个时间周期即将结束之前)发起一个或多个访问对象的历史访问次数的统计。
[0106] 举例来说,防治应用程序在时间周期8:00‑9:00内的时刻8:20接收到访问对象的访问请求;该访问请求中至少携带访问对象的证明信息,该证明信息是访问对象用于证明自己是已注册防治应用程序的A用户。此时,防治应用程序可以响应于该访问请求对证明信息进行验证,得到第一验证结果。在第一验证结果指示验证成功后,响应本次的访问请求,即调用智能合约为该访问对象提供服务,同时执行统计该访问对象在时间周期内(此情况下,具体是统计8:00‑8:20内)针对同一智能合约的历史访问次数t的步骤,该历史访问次数t包括本次访问的1次;如该访问对象在时间周期内的8:10和8:17针对本次访问的智能合约发起了2次历史访问,则确定在8:20统计到的历史访问次数t=3。
[0107] S202:获取访问对象被授权针对智能合约进行访问的访问次数阈值。
[0108] S203:若历史访问次数t超过访问次数阈值,则获取访问对象在t次历史访问过程中所使用的t个秘钥分片。
[0109] 步骤S202‑S203中,访问对象被授权针对智能合约进行访问的访问次数阈值指示了:在时间周期内该访问对象允许对智能合约进行访问的最大次数。本申请实施例对访问对象被授权的访问次数阈值的具体取值不作限定;如访问次数阈值为5次或10次等。例如,访问对象被授权针对智能合约进行访问的访问次数阈值为5次,表明该访问对象从时间周期的开始到结束的时间范围内允许访问智能合约的总访问次数为5次。
[0110] 具体实现中,防治应用程序可以在获取到访问对象被授权针对智能合约进行访问的访问次数阈值后,将该访问次数阈值和统计的该访问对象在时间周期内针对同一智能合约的历史访问次数t进行比较。若历史访问次数t超过访问次数阈值(如小于或等于访问次数阈值),表示该访问对象在时间周期内的访问次数较少,该访问对象不是频繁访问智能合约的恶意或虚假用户,则访问应用程序可以响应于本次访问请求调用智能合约为该访问对象提供服务。反之,若历史访问次数t超过访问次数阈值,表示该访问对象在时间周期内的访问次数过于频繁,该访问对象可能是频繁访问智能合约的恶意或虚假用户,则防治应用程序可以获取该访问对象在时间周期内的t次历史访问过程中的t个秘钥分片。
[0111] 值得注意的是,在t次历史访问过程中,该访问对象每次使用一个不同的秘钥分片进行访问,且秘钥分片是对访问对象的秘钥执行分片处理得到的,t为正整数。访问对象侧具体可以通过shamir秘密分享实现秘钥的分片处理。如图3所示,shamir秘密分享(或分享)的原理是:支持将访问对象持有的秘密值S(即私钥S)拆分为N份秘钥分片;具体是shamir秘密分享基于期望分片数量的门限签名i构造一个i阶shamir多项式,将需要共享的秘钥S作为shamir多项式的常数项,秘钥对应的秘钥分片分成N份。shamir秘密分享设置阈值k,这样当集齐不少于k份的秘钥分片,可联合恢复出秘密值S,获得的秘钥分片的数量少于k份,则无法获得关于S的任何信息。
[0112] 进一步的,防治应用程序在获取到时间周期内的历史访问次数t对应的t个秘钥分片后,需要判断该t个秘钥分片的数量t是否足够还原访问对象的完整的秘钥。具体地,若t个秘钥分片的数量t小于还原秘钥所需的分片数量(如上述shamir秘密分享所提及的阈值k),则为访问对象设置访问条件;该访问条件用于限制访问对象针对智能合约的访问权限,或者用于向区块链网络中的其他区块链节点通报该访问对象的不诚信行为,以达到惩罚该访问对象的目的。例如,该访问条件至少可以包括:访问对象在预设时间段(如永久或从本次访问时刻之后的一段时间(如一年或半年等))内不具有访问智能合约的权限。
[0113] 反之,若t个秘钥分片的数量t大于或等于还原秘钥所需的分片数量,则触发执行基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理的步骤,即步骤S204。
[0114] S204:基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理。
[0115] 如前述关于shamir秘密分享的相关描述,防治应用程序在判断访问对象在时间周期内的历史访问次数t对应的t个秘钥分片的数量t大于或等于还原访问对象的秘钥所需的分片数量后,防治应用程序就可以基于该t个秘钥分片还原得到访问对象的秘钥,从而能够基于该访问对象的秘钥对访问对象进行访问处理,以达到惩罚该访问对象作假的行为。
[0116] 应当理解的是,防治应用程序针对访问对象执行访问处理的目的是惩罚该访问对象的不诚信行为或作假行为,因此本申请实施例对访问对象的具体实施方式不作限定。其中,针对访问对象执行的访问处理可以包括以下至少一种:①扣除访问对象的资源。具体地:通过访问对象的秘钥获取访问对象在区块链网络中的资源池,资源池用于存储访问对象在区块链网络中的资源;然后,从资源池中扣除访问对象的资源。简而言之,防治应用程序在拿到访问对象的秘钥后,就可以从基于该访问对象的秘钥从该访问对象的区块链账户(即资源池)或资源客户端中将该访问对象的资源转移全部或部分,以通过扣除该访问对象的资源达到惩罚该访问对象的目的,也达到换回损失的效果。②限制访问对象针对智能合约的访问。可选的,访问对象可以限制该访问对象在预设时间段内禁止访问智能合约(如前述所描述的,预设时间段可以是永久或一段时间)。可选的,访问对象减小该访问对象在下一个时间周期内的访问次数阈值,使得该访问对象在下一个时间周期内能够访问智能合约的总次数减小,从而达到对该访问对象的惩治。
[0117] 此外,本申请实施例支持删除在时间周期内访问对象在t次历史访问过程中所使用的t个秘钥分片。可选的,支持访问对象在每个时间周期结束时,执行删除访问对象在相应时间周期内缓存的秘钥分片的操作。可选的,如果防治应用程序在时间周期内检测到某个访问对象的历史访问次数超过访问次数阈值,那么防治应用程序也不必须等到时间周期时再删除缓存的该访问对象的秘钥分片,而是在判断该访问对象的历史访问次数超过访问次数阈值,且对该访问对象进行访问处理后,就触发执行删除访问对象在相应时间周期内缓存的秘钥分片的操作。
[0118] 由此可见,防治应用程序并不会永久保存访问对象的秘钥分片。一方面,可以确保访问对象的秘钥分片在时间周期结束后,不会被访问应用程序用于下一时间周期的阈值判断(即将统计的秘钥分片的数量和访问次数阈值进行判断的过程),保证每个时间周期内访问次数的统计正确性。另一方面,也可以定期(如每个时间周期结束)删除访问对象的秘钥分片,也有利于避免防治应用程序针对访问对象的秘钥分片的滥用,确保访问对象的秘钥分片的安全性。
[0119] 综上所述,计算机设备可以统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t,并在比较历史访问次数t超过访问次数阈值的情况下,获取该访问对象在t次历史访问过程中所使用的t个秘钥分片来还原访问对象的秘钥,从而可以基于该访问对象的秘钥对访问对象进行访问处理(如惩罚或惩治该访问对象的频繁访问智能合约)。由于在时间周期内访问对象每次访问智能合约均会发送一份不同的秘钥分片,故在检测到时间周期内该访问对象的访问频率较高(即历史访问次数超过访问次数阈值)时,能够基于历史访问的多个秘钥分片还原该访问对象的秘钥,从而基于秘钥达到惩罚该访问对象的效果,进而有力地避免了智能合约被恶意的访问对象频繁访问,维护了区块链网络的安全性。
[0120] 上述图2所示实施例主要阐述了本申请实施例通过的访问处理方法中的对象交互部分。下面结合图4主要阐述访问处理方法中对象注册和对象自证的具体实施过程。图4示出了本申请一个示例性实施例提供的另一种基于区块链网络的访问处理方法的流程示意图;该访问处理方法可以由部署有防治应用程序的计算机设备来执行,该计算机设备可以为区块链节点或链下设备,该访问处理方法可包括但不限于步骤S401‑S410:
[0121] S401:访问对象将身份承诺发送至计算机设备,由计算机设备将该身份承诺进行注册。
[0122] 为了防治应用程序能够在访问对象访问智能合约之前,具有对该访问对象进行防治的权限。本申请实施例需要在任意想要访问智能合约的访问对象在首次访问智能合约之前,在防治应用程序中注册该访问对象的身份承诺。这样,在该访问对象发起关于智能合约的访问请求时,防治应用程序可以获取该访问请求先对该访问对象的身份和访问次数做验证,并在身份和访问次数均验证通过后才允许访问对象访问智能合约,故有效避免恶意的访问对象对智能合约的频繁访问。
[0123] 需要说明的是,①任一访问对象的身份承诺可以用于指示该任一访问对象的身份信息,且该任一访问对象的身份承诺是根据该任一访问对象的秘钥派生得到的。此处的派生可以包括但是不限于通过对该任一访问对象的秘钥进行哈希运算,以得到该访问对象的身份承诺。
[0124] ②防治应用程序维护有一颗默克尔树(Merkle trees),该默克尔树可以用于存储已注册为防治应用程序的注册用户的身份承诺。其中,默克尔树也称为哈希树(Hash Tree),一种用于验证数据完成性的树状数据结构;具体是一种通过将大数据拆分成多个文件块,并对每一块进行哈希计算,逐层向上构建树形结构。在验证场景中,通过验证在节点哈希和上层哈希的计算结果,可以快速验证整个数据文件的完整性,具有容错性和安全性。
[0125] 本申请实施例提供的一种示例性的默克尔树的结构示意图可以参见图5;如图5所示,如图5所示,默克尔树是由叶子节点和非叶子节点组成。叶子节点(如N0、N1、N2和N3)是不同访问对象的秘钥的哈希值(即身份承诺);非叶子节点(如第二层的N4和N5,以及根节点Root)是由叶子节点计算得到的哈希值,非叶子节点本身也是一个节点,从而形成了树形结构。详细地,图5中包含4个秘钥的身份承诺,可以构造一个叶子节点数目为4的默克尔树;构造过程包括:首先,将每一个秘钥进行哈希计算,得到4个哈希值(即身份承诺)作为叶子节点;接着,将底层的相邻2个叶子节点进行哈希计算,得到2个哈希值作为第二层非叶子节点;继续将倒数第二层中相邻的2个非叶子节点计算哈希值,得到1个哈希值作为根节点的哈希值,也就是整个数据文件的哈希值,该根节点的哈希值作为整个默克尔树的唯一标识,可以用于验证默克尔树的完整性。
[0126] 基于上述对默克尔树和身份承诺等基础内容的相关介绍,在本申请实施例中防治应用程序注册访问对象的身份承诺的具体实施过程可以包括:首先,在访问对象(任意具有访问智能合约需求的访问对象)首次访问智能合约之前,该访问对象向防治应用程序提供自己的身份承诺。然后,防治应用程序在接收到该访问对象的身份承诺后,将该访问对象的身份承诺作为默克尔树的新的叶子节点注册至默克尔树中,具体是作为叶子节点插入至默克尔树的底层。最后,重新对插入新的叶子节点的默克尔树按照图5所示的哈希计算方式进行计算,得到更新后的默克尔树。
[0127] S402:计算机设备接收访问对象发送的访问请求。
[0128] S403:计算机设备响应访问请求验证访问对象的身份。
[0129] 步骤S402‑S403中,访问对象按照步骤S401所示的具体实施过程在防治应用程序维护的默克尔树中注册了身份承诺后,且该访问对象在具有访问智能合约的需求时,该访问对象可以与防治应用程序之间进行交互,以实现对智能合约的访问。应当理解的是,不同已注册防治应用程序的访问对象与防治应用程序之间的交互流程是相同的,且同一已注册防治应用程序的访问对象与防治应用程序之间的多次交互的流程也是相同的。为便于阐述,下面以任一访问对象的单次交互过程为例,对访问对象与防治应用程序进行交互,以访问智能合约的具体实施过程进行介绍;如图6所示,包括但是不限于步骤s11‑s13,其中:
[0130] s11、防治应用程序接收访问对象发送的访问请求,访问请求中包括访问对象的证明信息。
[0131] 其中,访问对象的证明信息中包括:访问对象的证明者字符串及零知识证明电路的输出信息。其中:
[0132] ①访问对象的证明信息是访问对象通过证明者秘钥及零知识证明电路(即待证明命题转化成的R1CS电路),为该访问对象的身份承诺生成的。证明者秘钥是证明者(即访问对象)使用零知识证明中的生成算法为待证明命题生成的,一并生成的还有公共参数(采用生成算法随机生成且不可泄露的字符串)和验证者秘钥(作为验证者(即防治应用程序)验证证明信息的秘钥)。上述提及的待证明命题可以是指证明者和验证者之间待进行判断或验证的命题,在本申请实施例中该待证明命题用于指示:对访问对象的身份承诺已注册默克尔树的正确性进行验证;具体是验证访问对象的身份承诺是否注册至默克尔树,且验证该访问对象的身份承诺具体为默克尔树种的哪个叶子节点。
[0133] 进一步的,上述提及的零知识证明电路是基于待证明命题转化得到的,该零知识证明电路具体是采用运算符对上述提及的待证明命题对应的运算逻辑进行表达所得到的。一种示例性的零知识证明电路的结构可参见图7,该零知识电路是由一些加法门、乘法门以及一些常数门组成的,如图7所示的零知识证明电路包括两个乘法门和一个加法门;假设零知识证明电路的输入信息为a、b、c,采用零知识证明电路包含的加法门可对a、b进行相加得到a+b,采用乘法门对b、c进行相乘得到b c;然后,采用乘法门对a+b以及b c进行相乘,得到零知识证明电路的输出信息(a+b) b c。应当说明的是,一些常见的计算逻辑,如计算表达式、计算哈希值等均可以表示为零知识证明电路。
[0134] ②访问对象的证明信息所包括的证明者字符串,是访问对象使用证明者秘钥为零知识证明电路计算得到输出信息的计算过程中生成的;该证明者字符串的生成表示:该访问对象基于零知识证明电路已执行计算过程。访问对象的证明信息所包括的零知识证明电路的输出信息中包括:访问对象采用零知识证明电路计算得到的默克尔树的根节点的预测哈希值,和电路检查结果;其中,电路检查结果用于指示:访问对象采用零知识证明电路计算得到的默克尔树的根节点的预测哈希值,与默克尔树的根节点的真实哈希值是否相同。简而言之,本申请实施例是通过由零知识证明的证明者(即访问对象)根据自己持有的秘钥和验证者提供的信息(如默克尔树中的部分节点的取值)对默克尔树的根节点的哈希值进行计算,并由验证者(即防治应用程序)来验证证明者的计算结果是否正常,来对证明者的身份的正确性进行验证的。
[0135] s12、防治应用程序对访问对象的证明信息进行验证,得到第一验证结果。
[0136] 防治应用程序在获取到访问对象发送的证明信息后,可以通过验证该证明信息来实现对访问对象的身份的正确性进行验证。具体实现中,针对访问对象的证明信息的验证过程可以包括:
[0137] ①针对证明信息中的证明者字符串进行验证。具体地,正如前述所描述的,验证者秘钥是公开的,即区块链网络存储有验证者秘钥,这样防治应用程序可以从区块链网络中获取到验证者秘钥,并采用该验证者秘钥对证明信息中的证明者字符串进行验证,得到秘钥验证结果。考虑到证明字符串是由证明者(即访问对象)采用证明者秘钥,为零知识证明电路计算得到输出信息的计算过程生成的,那么当秘钥验证结果为验证成功时,可以确定访问对象确实已完成零知识证明电路的计算过程。
[0138] ②针对证明信息中零知识证明电路的输出信息进行验证。具体地,可以根据默克尔树的根节点的真实哈希值,对零知识证明电路的输出信息所包含的预测哈希值进行验证,得到哈希值验证结果。具体是比较零知识证明电路的输出信息所包含的由证明者计算的默克尔树的根节点的预测哈希值,与防治应用程序维护的默克尔树的根节点的真实哈希值是否相同。如果默克尔树的根节点的预测哈希值与默克尔树的根节点的真实哈希值相同,表示证明者基于自己的秘钥的身份承诺和验证者提供的有限信息(这些有限信息属于中间信息,提供给证明者并不会暴露其他注册用户的身份),能够还原出默克尔树的完整结构,即可以证明该证明者确实是已注册默克尔树的注册用户,且防治应用程序能够根据提供的有限信息推测出该访问对象(即证明者)在默克尔树中的叶子节点,从而确定出该访问对象的身份承诺所指示的身份信息。反之,如果默克尔树的根节点的预测哈希值与默克尔树的根节点的真实哈希值不同,表示证明者基于自己的秘钥的身份承诺和验证者提供的有限信息,不能还原出默克尔树的完整结构,即可以证明该证明者不是已注册默克尔树的注册用户。
[0139] ③针对证明信息中的电路检查结果进行验证。具体地,从访问对象的证明信息中的零知识证明电路的输出信息中获取电路检查结果的值。
[0140] 综上,基于上述验证所得到的秘钥验证结果,哈希值验证结果和电路检查结果的值,生成第一验证结果。其中,若秘钥验证结果为验证成功,哈希值验证结果为验证成功,且电路检查结果的值为预设值,则针对访问对象的证明信息进行验证所得到的第一验证结果为验证成功,且该第一验证结果指示访问对象的身份承诺已注册至默克尔树。
[0141] s13、基于第一验证结果调用智能合约为访问对象提供服务。
[0142] 为避免访问对象采用同一秘钥分片在时间周期内多次访问智能合约,造成对智能合约的频繁访问;本申请实施例还支持同时基于访问对象本次访问所使用的秘钥分片和第一验证结果来调用智能合约为访问对象提供服务,已达到避免智能合约被访问对象使用同一秘钥分片频繁访问,给区块链网络的安全造成威胁。
[0143] 具体实现中,防治应用程序获取访问对象在本次访问所使用的秘钥分片。其中,该秘钥分片可以携带于本次访问的访问请求中,即访问对象可以从访问请求中获取访问对象本次方案所提供的秘钥分片;或者,在第一验证结果指示访问对象是防治应用程序的注册用户时(即第一验证结果为验证成功时)从访问对象获取本次访问所使用的秘钥分片,具体是接收访问对象发送的秘钥分片,即防治应用程序在第一验证结果为验证成功后,可以通过访问对象将本次访问所使用的秘钥分片发送至防治应用程序。然后,若本次访问所使用的秘钥分片在时间周期内未使用过,且第一验证结果为验证成功,表明访问对象的身份验证成功,且秘钥分片在时间周期内也未重复使用,则触发执行防治应用程序统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t的步骤(即执行步骤S404‑S406);并在历史访问次数t未超过访问次数阈值时,防治应用程序可以调用智能合约为访问对象提供服务(即跳转至步骤S410),在历史访问次数t超过访问次数阈值时,还原该访问对象的秘钥和拒绝响应访问请求(即跳转至步骤S407‑S409)。反之,若本次访问所使用的秘钥分片在时间周期内已使用过,或者第一验证结果为验证失败,则防治应用程序可以拒绝响应访问对象的访问请求(即跳转至步骤S409)。
[0144] 需要说明的是,本申请实施例还支持在调用智能合约为访问对象提供服务之前,对访问对象在本次访问所提供的秘钥分片进行正确性验证。对秘钥分片的正确性验证,主要是验证该秘钥分片是否是访问对象在默克尔树中已注册的秘钥分片,以确保访问对象是使用自己的秘钥分片访问智能合约,从而避免秘钥分片被滥使用。当然,本申请实施例也支持不对秘钥分片的正确性进行验证,此情况下访问对象可以使用其他对象的秘钥分片访问智能合约。
[0145] 为了确保防治应用程序能够对访问对象的秘钥分片进行验证,本申请实施例支持在步骤S401所示的注册访问对象的身份承诺的过程中,也将访问对象的秘钥分片注册到访问应用程序维护的默克尔树中。也就是说,防治应用程序维护的默克尔树中还注册有访问对象的M个秘钥分片的哈希值,该M个秘钥分片属于访问对象的秘钥分片被分片处理所得到的N个秘钥分片,N为大于或等于t的整数,M为正整数且t≤M≤N。换句话说,本申请实施例支持访问对象在注册秘钥分片时,自定义注册的秘钥分片的数量。
[0146] 具体实现中,防治应用程序在接收到访问对象在本次访问所提供的秘钥分片后,可以对该秘钥分片的正确性进行验证,得到第二验证结果;该第二验证结果用于指示:访问对象在本次访问所使用的秘钥分片的哈希值是否注册至防治应用程序维护的默克尔树中。其中,防治应用程序对秘钥分片的正确性进行验证的过程,可以包括以下任一种:可选的,通过零知识证明来证明访问对象在对象注册阶段,已将本次访问所使用的秘钥分片的哈希值注册至默克尔树中;具体是采用零知识证明对秘钥分片的正确性进行验证,得到第二验证结果。其中采用零知识证明来证明秘钥分片的正确性的过程与前述描述的采用零知识证明来证明访问对象的身份的正确性的具体实施过程是类似的,在此不作赘述。可选的,还可以直接通过哈希计算来实现对秘钥分片的正确性验证;具体是对秘钥分片进行哈希运算,得到哈希运算结果,并检测该哈希运算结果是否为默克尔树的叶子节点,生成第二验证结果。也就是说,考虑到如果秘钥分片的哈希值在对象注册的阶段已注册,那么在默克尔树中一定会有该秘钥分片的哈希值,因此支持防治应用程序在接收到访问对象的秘钥分片后,采用与访问对象侧相同的哈希算法对该秘钥分片进行哈希运算;这样,如果防治应用程序计算的哈希运算结果落入默克尔树中,则确定本次访问所使用的秘钥分片已注册。
[0147] 然后,若第二验证结果为验证成功,即访问对象本次访问所提供的秘钥分片的哈希值在对象注册的阶段已作为叶子节点注册至默克尔树中,且本次访问所使用的秘钥分片在时间周期内未使用过,且第一验证结果为验证成功,则触发执行防治应用程序统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t的步骤(即执行步骤S404‑S406);并在历史访问次数t未超过访问次数阈值时,防治应用程序可以调用智能合约为访问对象提供服务(即跳转至步骤S410),在历史访问次数t超过访问次数阈值时,还原该访问对象的秘钥和拒绝响应访问请求(即跳转至步骤S407‑S409)。反之,若第二验证结果为验证失败,或者本次访问所使用的秘钥分片在时间周期内已使用过,或者第一验证结果为验证成功,则防治应用程序可以拒绝响应访问对象的访问请求(即跳转至步骤S409)。
[0148] S404:统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t。
[0149] S405:获取访问对象被授权针对智能合约进行访问的访问次数阈值。
[0150] S406:判断历史访问次数t是否超过访问次数阈值。
[0151] S407:若历史访问次数t超过访问次数阈值,则获取访问对象在t次历史访问过程中所使用的t个秘钥分片。
[0152] S408:基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理。
[0153] 需要说明的是,步骤S404‑S408所示的具体实施过程可以参见前述图2所示实施例中步骤S201‑S204所示的具体实施过程的相关描述,在此不作赘述。
[0154] 还需说明的是,步骤S405中根据访问对象的不同可能为不同访问对象获取的访问次数阈值不同。简而言之,本申请实施例支持为不同的访问对象设置授权针对智能合约进行访问的不同的访问次数阈值,且还支持为同一访问对象在不同时间周期授权针对智能合约进行访问的不同的访问次数阈值。
[0155] 在一种实现方式中,本申请实施例支持为注册防治应用程序维护的默克尔树的各访问对象设置相同的访问次数阈值。此实现方式中,根据访问对象在默克尔树中注册的秘钥分片的数量的不同,可以将访问对象(具体是访问对象的身份承诺)划分至白名单或黑名单。其中,白名单中的身份承诺对应的访问对象发起访问请求时无需被执行阈值判断(即统计访问对象在时间周期内访问智能合约的历史访问次数的过程);相反地,黑名单中的身份承诺对应的访问对象发起访问请求时需要被执行阈值判断。
[0156] 示例性地如图8所示,在访问对象将秘钥分片的哈希值注册至默克尔树的过程中,防治应用程序可以检测该访问对象提供的待注册的秘钥分片的数量。若访问对象在注册默克尔树时提供的秘钥分片的数量小于或等于访问次数阈值,那么在访问对象每次访问仅能提供与历史访问不同的秘钥分片的情况下,可以确定该访问对象在时间周期内的总访问次数始终小于或等于访问次数阈值,则将第一访问对象的身份承诺添加至白名单。不同的是,若访问对象在注册默克尔树时提供的秘钥分片的数量大于访问次数阈值,那么在访问对象每次访问仅能提供与历史访问不同的秘钥分片的情况下,可以确定该访问对象在时间周期内的总访问次数可能会大于访问次数阈值,则将该访问对象的身份承诺添加至黑名单。
[0157] 由此可见,通过根据访问对象注册默克尔树的秘钥分片的总数的不同,将访问对象的身份承诺划分至不同名单的方式;可以避免对白名单中的访问对象执行统计历史访问次数的过程,仅对黑名单中的访问对象进行统计历史访问次数等操作,在达到限制访问对象访问智能合约的频率,从而有效防治恶意的访问对象作假访问智能合约的基础上,在一定程度上可以有效减小防治应用程序的计算开销,提高合约的访问效率。
[0158] 其他实现方式,本申请实施例支持根据访问对象注册默克尔树时提供的秘钥分片的数量,为不同访问对象设置不同的访问次数阈值。为确保访问智能合约的每个访问对象在时间周期内针对智能合约的总访问次数均受到访问次数阈值的限制,本申请实施例支持为访问对象设置的访问次数阈值小于相应访问对象提供的秘钥分片的数量。举例来说,假设访问对象1在对象注册阶段提供的秘钥分片的哈希值的数量为10,那么为该访问对象授权针对智能合约进行访问的访问次数阈值需要小于10,如可以设置为8或9等。值得注意的是,在为访问对象设置访问次数阈值时,还可以参考还原该访问对象的秘钥所需的秘钥分片的数量;如上述例子中,访问对象的秘钥被分片处理时共分片得到10个秘钥分片,且还原该访问对象的秘钥所需的秘钥分片的数量为7,则在该访问对象注册10个秘钥分片时,可以设置该访问对象的访问次数阈值为大于还原秘钥所需的秘钥分片数量7,如设置为8、9或10。
[0159] S409:防治应用程序拒绝访问对象发送的访问请求。
[0160] 基于步骤S408,防治应用程序在确定访问对象在时间周期内的历史访问次数t超过访问次数阈值时,防治应用程序会拒绝响应访问对象发送的访问请求。进一步的,防治应用程序可以向访问对象返回关于拒绝响应的通知消息,以便于访问对象能够通过该通知消息直观感知响应结果。
[0161] S410:若历史访问次数t未超过访问次数阈值,则响应本次访问请求调用智能合约为该访问对象提供服务。
[0162] 具体地,防治应用程序在检测到访问对象在时间周期的历史访问次数还未超过访问次数阈值时,防治应用程序可以响应于访问对象本次访问的访问请求,调用智能合约为该访问对象提供服务;如智能合约为发放电子优惠券的合约,则可以触发智能合约的自动执行为该访问对象发放电子优惠券。
[0163] 本申请实施例中,规定访问对象每次访问智能合约,都必须向防治应用程序发送与时间周期内的历史访问所使用的一个不同的秘钥分片,且防治应用程序能够对访问对象在时间周期内发送的秘钥分片进行缓存;使得防治应用程序在检测到时间周期内访问对象的访问频率较高(即历史访问次数超过访问次数阈值)时,能够基于历史访问的多个秘钥分片还原该访问对象的秘钥,不仅可以限制访问对象访问智能合约的次数,而且达到基于秘钥惩罚访问对象的效果,进而有力地避免了智能合约被恶意的访问对象频繁访问,维护了区块链网络的安全性。
[0164] 上述详细阐述了本申请实施例的方法,为了便于更好地实施本申请实施例的上述方法,相应地,下面提供了本申请实施例的装置。
[0165] 图9示出了本申请一个示例性实施例提供的一种访问处理装置的结构示意图,该访问处理装置可以是运行于计算机设备中的一个计算机程序(包括程序代码);该访问处理装置可以用于执行图2及图4所示的方法实施例中的部分或全部步骤;该装置包括如下单元:
[0166] 统计单元901,用于统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t;其中,在t次历史访问过程中,访问对象每次使用一个不同的秘钥分片进行访问;秘钥分片是对访问对象的秘钥执行分片处理得到的;t为正整数;
[0167] 处理单元902,用于获取访问对象被授权针对智能合约进行访问的访问次数阈值;
[0168] 处理单元902,还用于若历史访问次数t超过访问次数阈值,则获取访问对象在t次历史访问过程中所使用的t个秘钥分片;
[0169] 处理单元902,还用于基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理。
[0170] 在一种实现方式中,处理单元902,还用于:
[0171] 若t个秘钥分片的数量t小于还原秘钥所需的分片数量,则为访问对象设置访问条件;访问条件至少包括:访问对象在预设时间段内不具有访问智能合约的权限;
[0172] 若t个秘钥分片的数量t大于或等于还原秘钥所需的分片数量,则触发执行基于t个秘钥分片还原访问对象的秘钥的步骤。
[0173] 在一种实现方式中,处理单元902,用于基于访问对象的秘钥对访问对象进行访问处理时,具体用于:
[0174] 通过访问对象的秘钥获取访问对象在区块链网络中的资源池,资源池用于存储访问对象在区块链网络中的资源;
[0175] 从资源池中扣除访问对象的资源。
[0176] 在一种实现方式中,处理单元902,还用于:
[0177] 删除在时间周期内访问对象在t次历史访问过程中所使用的t个秘钥分片。
[0178] 在一种实现方式中,处理单元902,还用于:
[0179] 在访问对象首次访问智能合约之前,接收访问对象发送的关于访问对象的身份承诺;身份承诺是根据访问对象的秘钥派生得到的,身份承诺用于指示访问对象的身份信息;
[0180] 将访问对象的身份承诺作为默克尔树的叶子节点,注册至默克尔树;默克尔树用于存储已注册为防治应用程序的注册用户的身份承诺。
[0181] 在一种实现方式中,访问对象访问智能合约的过程包括:
[0182] 接收访问对象发送的访问请求,访问请求中包括访问对象的证明信息;
[0183] 对访问对象的证明信息进行验证,得到第一验证结果;
[0184] 基于第一验证结果调用智能合约为访问对象提供服务;
[0185] 其中,证明信息中包括:访问对象的证明者字符串及零知识证明电路的输出信息;证明者字符串是访问对象使用证明者秘钥为零知识证明电路计算得到输出信息的计算过程中生成的,证明者字符串的生成表示:访问对象基于零知识证明电路已执行计算过程;
[0186] 零知识证明电路是基于待证明命题转化得到的,待证明命题用于指示对访问对象的身份承诺已注册默克尔树的正确性进行验证;零知识证明电路的输出信息中包括:访问对象采用零知识证明电路计算得到的默克尔树的根节点的预测哈希值,和电路检查结果;
[0187] 电路检查结果用于指示:访问对象采用零知识证明电路计算得到的默克尔树的根节点的预测哈希值,与默克尔树的根节点的真实哈希值是否相同。
[0188] 在一种实现方式中,区块链网络存储有验证者秘钥;处理单元902,用于对证明信息进行验证,得到第一验证结果时,具体用于:
[0189] 采用验证者秘钥对证明信息中的证明者字符串进行验证,得到秘钥验证结果;以及,
[0190] 根据默克尔树的根节点的真实哈希值,对零知识证明电路的输出信息所包含的预测哈希值进行验证,得到哈希值验证结果;以及,
[0191] 从证明信息中的零知识证明电路的输出信息中获取电路检查结果的值;
[0192] 基于秘钥验证结果,哈希值验证结果和电路检查结果的值,生成第一验证结果;
[0193] 其中,若秘钥验证结果为验证成功,哈希值验证结果为验证成功,且电路检查结果的值为预设值,则第一验证结果为验证成功,且第一验证结果指示访问对象的身份承诺已注册至默克尔树。
[0194] 在一种实现方式中,处理单元902,用于基于第一验证结果调用智能合约为访问对象提供服务时,具体用于:
[0195] 获取访问对象在本次访问所使用的秘钥分片;秘钥分片携带于访问请求中,或者,在第一验证结果为验证成功时从访问对象获取本次访问所使用的秘钥分片;
[0196] 若本次访问所使用的秘钥分片在时间周期内未使用过,且第一验证结果为验证成功,则触发执行统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t的步骤,并在历史访问次数t未超过访问次数阈值时,调用智能合约为访问对象提供服务;
[0197] 若本次访问所使用的秘钥分片在时间周期内已使用过,或者第一验证结果为验证失败,则拒绝响应访问请求。
[0198] 在一种实现方式中,默克尔树中还注册有访问对象的M个秘钥分片的哈希值;M个秘钥分片属于访问对象的秘钥被分片处理所得到的N个秘钥分片;N为大于或等于t的整数,M为正整数且t≤M≤N;处理单元902,还用于:
[0199] 对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果;第二验证结果用于指示:访问对象在本次访问所使用的秘钥分片的哈希值是否注册至默克尔树;
[0200] 若第二验证结果为验证成功,本次访问所使用的秘钥分片在时间周期内未使用过,且第一验证结果为验证成功,则触发执行统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t的步骤,并在历史访问次数t未超过访问次数阈值时,调用智能合约为访问对象提供服务;
[0201] 若第二验证结果为验证失败,或者本次访问所使用的秘钥分片在时间周期内已使用过,或者第一验证结果为验证成功,则拒绝响应访问请求。
[0202] 在一种实现方式中,处理单元902,用于对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果,包括以下任一种:
[0203] 采用零知识证明对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果;或者,
[0204] 对访问对象在本次访问所使用的秘钥分片进行哈希运算,得到哈希运算结果,并检测哈希运算结果是否为默克尔树的叶子节点,生成第二验证结果。
[0205] 在一种实现方式中,处理单元902,还用于:
[0206] 为注册默克尔树的各访问对象设置相同的访问次数阈值;或者,
[0207] 根据访问对象注册默克尔树时提供的秘钥分片的数量,为不同访问对象设置不同的访问次数阈值;其中,为访问对象设置的访问次数阈值小于相应访问对象提供的秘钥分片的数量。
[0208] 在一种实现方式中,在为注册默克尔树的各访问对象设置的访问次数阈值相同的情况下,处理单元902,还用于:
[0209] 若访问对象在注册默克尔树时提供的秘钥分片的数量小于或等于访问次数阈值,则将访问对象的身份承诺添加至白名单;白名单中的身份承诺对应的访问对象发起访问请求时无需被执行阈值判断;
[0210] 若访问对象在注册默克尔树时提供的秘钥分片的数量大于访问次数阈值,则将访问对象的身份承诺添加至黑名单;黑名单中的身份承诺对应的访问对象发起访问请求时需要被执行阈值判断。
[0211] 根据本申请的一个实施例,图9所示的访问处理装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本申请的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本申请的其它实施例中,该访问处理装置也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。根据本申请的另一个实施例,可以通过在包括中央处理单元(CPU)、存取存储介质(RAM)、只读存储介质(ROM)等处理元件和存储元件的例如计算机的通用计算设备上运行能够执行如图2及图4所示的相应方法所涉及的各步骤的计算机程序(包括程序代码),来构造如图9中所示的访问处理装置,以及来实现本申请实施例的访问处理方法。计算机程序可以记载于例如计算机可读记录介质上,并通过计算机可读记录介质装载于上述计算设备中,并在其中运行。
[0212] 本申请实施例中,计算机设备可以统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t,t为正整数。然后,将该历史访问次数t和该访问对象被授权针对智能合约进行访问的访问次数阈值进行比较;在历史访问次数t超过访问次数阈值的情况下,可以获取该访问对象在t次历史访问过程中所使用的t个秘钥分片来还原访问对象的秘钥,从而可以基于该访问对象的秘钥对访问对象进行访问处理(如惩罚或惩治该访问对象的频繁访问智能合约)。通过上述方案可知,在时间周期内访问对象每次访问智能合约均会发送一份不同的秘钥分片,故在检测到时间周期内该访问对象的访问频率较高(即历史访问次数超过访问次数阈值)时,能够基于历史访问的多个秘钥分片还原该访问对象的秘钥,从而基于秘钥达到惩罚该访问对象的效果,进而有力地避免了智能合约被恶意的访问对象频繁访问,维护了区块链网络的安全性。
[0213] 图10示出了本申请一个示例性实施例提供的一种计算机设备的结构示意图。请参见图10,该计算机设备包括处理器1001、通信接口1002以及计算机可读存储介质1003。其中,处理器1001、通信接口1002以及计算机可读存储介质1003可通过总线或者其它方式连接。其中,通信接口1002用于接收和发送数据。计算机可读存储介质1003可以存储在计算机设备的存储器中,计算机可读存储介质1003用于存储计算机程序,计算机程序包括程序指令,处理器1001用于执行计算机可读存储介质1003存储的程序指令。处理器1001(或称CPU(Central Processing Unit,中央处理器))是计算机设备的计算核心以及控制核心,其适于实现一条或多条指令,具体适于加载并执行一条或多条指令从而实现相应方法流程或相应功能。
[0214] 本申请实施例还提供了一种计算机可读存储介质(Memory),计算机可读存储介质是计算机设备中的记忆设备,用于存放程序和数据。可以理解的是,此处的计算机可读存储介质既可以包括计算机设备中的内置存储介质,当然也可以包括计算机设备所支持的扩展存储介质。计算机可读存储介质提供存储空间,该存储空间存储了计算机设备的处理系统。并且,在该存储空间中还存放了适于被处理器1001加载并执行的一条或多条的指令,这些指令可以是一个或多个的计算机程序(包括程序代码)。需要说明的是,此处的计算机可读存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non‑volatile memory),例如至少一个磁盘存储器;可选的,还可以是至少一个位于远离前述处理器的计算机可读存储介质。
[0215] 在一个实施例中,该计算机可读存储介质中存储有一条或多条指令;由处理器1001加载并执行计算机可读存储介质中存放的一条或多条指令,以实现上述访问处理方法实施例中的相应步骤;具体实现中,计算机可读存储介质中的一条或多条指令由处理器
1001加载并执行如下步骤:
[0216] 统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t;其中,在t次历史访问过程中,访问对象每次使用一个不同的秘钥分片进行访问;秘钥分片是对访问对象的秘钥执行分片处理得到的;t为正整数;
[0217] 获取访问对象被授权针对智能合约进行访问的访问次数阈值;
[0218] 若历史访问次数t超过访问次数阈值,则获取访问对象在t次历史访问过程中所使用的t个秘钥分片;
[0219] 基于t个秘钥分片还原访问对象的秘钥,并基于访问对象的秘钥对访问对象进行访问处理。
[0220] 在一种实现方式中,计算机可读存储介质中的一条或多条指令由处理器1001加载并还执行如下步骤:
[0221] 若t个秘钥分片的数量t小于还原秘钥所需的分片数量,则为访问对象设置访问条件;访问条件至少包括:访问对象在预设时间段内不具有访问智能合约的权限;
[0222] 若t个秘钥分片的数量t大于或等于还原秘钥所需的分片数量,则触发执行基于t个秘钥分片还原访问对象的秘钥的步骤。
[0223] 在一种实现方式中,计算机可读存储介质中的一条或多条指令由处理器1001加载并在执行基于访问对象的秘钥对访问对象进行访问处理时,具体执行如下步骤:
[0224] 通过访问对象的秘钥获取访问对象在区块链网络中的资源池,资源池用于存储访问对象在区块链网络中的资源;
[0225] 从资源池中扣除访问对象的资源。
[0226] 在一种实现方式中,计算机可读存储介质中的一条或多条指令由处理器1001加载并还执行如下步骤:
[0227] 删除在时间周期内访问对象在t次历史访问过程中所使用的t个秘钥分片。
[0228] 在一种实现方式中,计算机可读存储介质中的一条或多条指令由处理器1001加载并还执行如下步骤:
[0229] 在访问对象首次访问智能合约之前,接收访问对象发送的关于访问对象的身份承诺;身份承诺是根据访问对象的秘钥派生得到的,身份承诺用于指示访问对象的身份信息;
[0230] 将访问对象的身份承诺作为默克尔树的叶子节点,注册至默克尔树;默克尔树用于存储已注册为防治应用程序的注册用户的身份承诺。
[0231] 在一种实现方式中,访问对象访问智能合约的过程包括:
[0232] 接收访问对象发送的访问请求,访问请求中包括访问对象的证明信息;
[0233] 对访问对象的证明信息进行验证,得到第一验证结果;
[0234] 基于第一验证结果调用智能合约为访问对象提供服务;
[0235] 其中,证明信息中包括:访问对象的证明者字符串及零知识证明电路的输出信息;证明者字符串是访问对象使用证明者秘钥为零知识证明电路计算得到输出信息的计算过程中生成的,证明者字符串的生成表示:访问对象基于零知识证明电路已执行计算过程;
[0236] 零知识证明电路是基于待证明命题转化得到的,待证明命题用于指示对访问对象的身份承诺已注册默克尔树的正确性进行验证;零知识证明电路的输出信息中包括:访问对象采用零知识证明电路计算得到的默克尔树的根节点的预测哈希值,和电路检查结果;
[0237] 电路检查结果用于指示:访问对象采用零知识证明电路计算得到的默克尔树的根节点的预测哈希值,与默克尔树的根节点的真实哈希值是否相同。
[0238] 在一种实现方式中,区块链网络存储有验证者秘钥;计算机可读存储介质中的一条或多条指令由处理器1001加载并在执行对证明信息进行验证,得到第一验证结果时,具体执行如下步骤:
[0239] 采用验证者秘钥对证明信息中的证明者字符串进行验证,得到秘钥验证结果;以及,
[0240] 根据默克尔树的根节点的真实哈希值,对零知识证明电路的输出信息所包含的预测哈希值进行验证,得到哈希值验证结果;以及,
[0241] 从证明信息中的零知识证明电路的输出信息中获取电路检查结果的值;
[0242] 基于秘钥验证结果,哈希值验证结果和电路检查结果的值,生成第一验证结果;
[0243] 其中,若秘钥验证结果为验证成功,哈希值验证结果为验证成功,且电路检查结果的值为预设值,则第一验证结果为验证成功,且第一验证结果指示访问对象的身份承诺已注册至默克尔树。
[0244] 在一种实现方式中,计算机可读存储介质中的一条或多条指令由处理器1001加载并在执行基于第一验证结果调用智能合约为访问对象提供服务时,具体执行如下步骤:
[0245] 获取访问对象在本次访问所使用的秘钥分片;秘钥分片携带于访问请求中,或者,在第一验证结果为验证成功时从访问对象获取本次访问所使用的秘钥分片;
[0246] 若本次访问所使用的秘钥分片在时间周期内未使用过,且第一验证结果为验证成功,则触发执行统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t的步骤,并在历史访问次数t未超过访问次数阈值时,调用智能合约为访问对象提供服务;
[0247] 若本次访问所使用的秘钥分片在时间周期内已使用过,或者第一验证结果为验证失败,则拒绝响应访问请求。
[0248] 在一种实现方式中,默克尔树中还注册有访问对象的M个秘钥分片的哈希值;M个秘钥分片属于访问对象的秘钥被分片处理所得到的N个秘钥分片;N为大于或等于t的整数,M为正整数且t≤M≤N;计算机可读存储介质中的一条或多条指令由处理器1001加载并还执行如下步骤:
[0249] 对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果;第二验证结果用于指示:访问对象在本次访问所使用的秘钥分片的哈希值是否注册至默克尔树;
[0250] 若第二验证结果为验证成功,本次访问所使用的秘钥分片在时间周期内未使用过,且第一验证结果为验证成功,则触发执行统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t的步骤,并在历史访问次数t未超过访问次数阈值时,调用智能合约为访问对象提供服务;
[0251] 若第二验证结果为验证失败,或者本次访问所使用的秘钥分片在时间周期内已使用过,或者第一验证结果为验证成功,则拒绝响应访问请求。
[0252] 在一种实现方式中,计算机可读存储介质中的一条或多条指令由处理器1001加载并在执行对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果时,具体执行以下任一种步骤:
[0253] 采用零知识证明对访问对象在本次访问所使用的秘钥分片的正确性进行验证,得到第二验证结果;或者,
[0254] 对访问对象在本次访问所使用的秘钥分片进行哈希运算,得到哈希运算结果,并检测哈希运算结果是否为默克尔树的叶子节点,生成第二验证结果。
[0255] 在一种实现方式中,计算机可读存储介质中的一条或多条指令由处理器1001加载并还执行如下步骤:
[0256] 为注册默克尔树的各访问对象设置相同的访问次数阈值;或者,
[0257] 根据访问对象注册默克尔树时提供的秘钥分片的数量,为不同访问对象设置不同的访问次数阈值;其中,为访问对象设置的访问次数阈值小于相应访问对象提供的秘钥分片的数量。
[0258] 在一种实现方式中,在为注册默克尔树的各访问对象设置的访问次数阈值相同的情况下,计算机可读存储介质中的一条或多条指令由处理器1001加载并还执行如下步骤:
[0259] 若访问对象在注册默克尔树时提供的秘钥分片的数量小于或等于访问次数阈值,则将访问对象的身份承诺添加至白名单;白名单中的身份承诺对应的访问对象发起访问请求时无需被执行阈值判断;
[0260] 若访问对象在注册默克尔树时提供的秘钥分片的数量大于访问次数阈值,则将访问对象的身份承诺添加至黑名单;黑名单中的身份承诺对应的访问对象发起访问请求时需要被执行阈值判断。
[0261] 本申请实施例中,计算机设备可以统计访问对象在时间周期内针对区块链网络中智能合约的历史访问次数t,t为正整数。然后,将该历史访问次数t和该访问对象被授权针对智能合约进行访问的访问次数阈值进行比较;在历史访问次数t超过访问次数阈值的情况下,可以获取该访问对象在t次历史访问过程中所使用的t个秘钥分片来还原访问对象的秘钥,从而可以基于该访问对象的秘钥对访问对象进行访问处理(如惩罚或惩治该访问对象的频繁访问智能合约)。通过上述方案可知,在时间周期内访问对象每次访问智能合约均会发送一份不同的秘钥分片,故在检测到时间周期内该访问对象的访问频率较高(即历史访问次数超过访问次数阈值)时,能够基于历史访问的多个秘钥分片还原该访问对象的秘钥,从而基于秘钥达到惩罚该访问对象的效果,进而有力地避免了智能合约被恶意的访问对象频繁访问,维护了区块链网络的安全性。
[0262] 本申请实施例还提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述数据处理方法。
[0263] 本领域普通技术对象可以意识到,结合本申请中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术对象可以对每个特定的应用,使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0264] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程设备。计算机指令可以存储在计算机可读存储介质中,或者通过计算机可读存储介质进行传输。计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如,同轴电缆、光纤、数字线(DSL))或无线(例如,红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据处理设备。可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如,固态硬盘(Solid State Disk,SSD))等。
[0265] 以上描述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术对象在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。