一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于关键字索引的区块链高效检索及可靠性验证方法与流程

2021-10-24 05:57:00 来源:中国专利 TAG:区块 检索 高效 可靠性 索引


1.本发明属于区块链数据检索技术领域,具体涉及一种基于关键字索引的区块链高效检索及可靠性验证方法。


背景技术:

2.区块链从最初的数字货币逐渐扩展到各行各业,因此对区块链上数据检索功能的要求也越来越高。但当前区块链的检索能力十分的低下,只支持通过交易哈希来获取对应的交易,完全无法满足检索的需求。例如想要检索所有包含某个关键字的交易,只能通过遍历所有的交易进行检索,效率十分的低下。同时,目前用户对于区块链上数据检索的方式主要是通过轻节点向区块链网络中的全节点发送检索请求,而区块链网络又是一个不可信的网络,因此需要考虑检索结果的可信性。针对区块链上数据的检索的研究中,通过将区块链数据导入到外部数据库实现检索的丰富性与高效性,但数据的可靠性得不到保障;通过向区块链默克尔树引入相关索引,加强区块链的检索能力,并利用默克尔树保障检索结果的正确性,但并不能保障检索结果的完整性,对于检索可靠性性除了保障检索结果的正确性也应当考虑到检索结果的完整性,即全节点是否返回了用户所需要的全部的结果。检索结果的完整性在云储存领域的研究比较多,但区块链数据检索的领域鲜有研究,因此有必要构建能够高效检索能力的区块链的同时,还能对检索结果进行可靠性验证。


技术实现要素:

3.本发明的目的在于提供一种检索效率高、可靠性好的基于关键字索引的区块链检索及可靠性验证方法。
4.本发明提供的基于关键字索引的区块链高效检索及可靠性验证方法,具体步骤为:
5.步骤s1:对所述区块链中的区块进行可验证默克尔哈希树(merkle verifiable tree,mvt)构建;矿工为每一笔交易创建包含交易hash、关键字tags、数据存在证明prove三个字段的叶子节点,构建树时将交易所有关键字存储到布隆过滤器中;
6.步骤s2:对所述区块链进行针对关键字的可验证高效检索;区块链全节点根据用户发送的关键字检索请求,检索所有包含关键字的交易,并返回可验证结果集合(verifiable result set,vrs);
7.步骤s3:对所述可验证结果集合vrs进行正确性和完整性验证;用户根据可验证结果集合vrs的mvt认证路径和数据不存在证明π对检索结果进行正确性和完整性验证。
8.下面进一步介绍各步骤的具体内容:
9.所述步骤s1具体包括:
10.步骤a1:矿工为每一笔交易创建包含交易hash、关键字tags、数据存在证明prove三个字段的叶子节点,组成一个叶子节点列表;
11.步骤a2:将该叶子节点列表以两两节点的关键字集合的jaccard系数从大到小的
顺序进行排序,jaccard系数定义如下:
[0012][0013]
tag
i
、tag
j
为关键字;
[0014]
步骤a3:将排序后的叶子节点列表进行迭代合并,两两向上合并成非叶子节点,新生成节点的关键字newtags为其两孩子节点关键字tags的并集,即:
[0015]
newtags=tags
a
∪tags
b
[0016]
步骤a4:对步骤a3生成的所有非叶子节点计算数据存在证明prove字段,该字段用于检索完整性的验证;
[0017]
步骤a5:将区块内所有交易的关键字存储到布隆过滤器中。
[0018]
步骤a4中数据存在证明prove字段生成方法为:
[0019]
输入关键字tags=(tag1,tag2,

,tag
n
)和公钥pk,计算数据存在证明prove的值其中g为系统参数,sk为矿工私钥。
[0020]
所述步骤s2具体包括:
[0021]
步骤b1:用户发送所有包含目标关键字的交易检索请求;
[0022]
步骤b2:区块链全节点根据用户发送的目标关键字检索请求,检索所有包含目标关键字的交易,从最新区块开始,首先利用布隆过滤器判断目标关键字是否在当前区块,若在则进入步骤b3,否则进入步骤b4;
[0023]
步骤b3:从所述mvt的根节点开始,判断目标关键字与该节点是否匹配;若匹配且该节点非叶子节点则将该节点的数据存在证明prove
i
加入可验证结果集合vrs中,并向下进行递归操作,若为叶子节点则将交易加入结果集rs中;若不匹配,则调用provematch函数生成数据不存在证明π加入可验证结果集合vrs中并直接返回;
[0024]
步骤b4:对所述区块的前驱区块重复执行步骤b2

b3,直至创世区块;
[0025]
步骤b5:将<rs,vrs>作为检索结果返回给用户。
[0026]
所述步骤b3中provematch函数具体为:输入两个集合x1,x2,如果则存在两个多项式q1,q2使得p(x1)q1 p(x2)q2=1,计算出多重集不相交证明=1,计算出多重集不相交证明
[0027]
所述步骤s3具体包括:
[0028]
步骤c1:用户收到检索结果后首先进行正确性验证,若所述结果集rs非空,则利用rs中交易以及可验证结果集合vrs中的验证路径重构mvt根节点与区块头mvt根节点对比验证;
[0029]
步骤c2:用户进行完整性验证,对于不匹配的对象,调用verifydisjoint函数判断该区块目标关键字的交易是否不存在。
[0030]
所述步骤c2中verifmatch函数具体为判断公式所述步骤c2中verifmatch函数具体为判断公式是否成立,其中e为系统中的双线性映射。
[0031]
本发明与现有技术相比,具有以下的优点和积极效果:
[0032]
本发明提出的基于关键字索引的区块链高效检索及可靠性验证方法,有效的提高
了区块链上对包含目标关键字数据检索的效率,能够高效的检索全部包含目标关键字的交易,并且为轻节点用户提供了检索结果可靠性验证的方法,使得用户能够对检索数据的正确性和完整性进行验证。
附图说明
[0033]
图1为本发明的基于关键字索引的可验证mvt的结构图。
[0034]
图2为本发明的包含关键字交易高效检索流程图。
[0035]
图3为本发明的检索结果可靠性验证流程图。
具体实施方式
[0036]
下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本技术所附权利要求书所限定的范围。
[0037]
本发明提供的基于关键字索引的区块链高效检索及可靠性验证方法。
[0038]
1、首先是块内索引的生成过程(如图1所示),具体步骤如下:
[0039]
(1)矿工打包交易生成区块之前,先将关键字tags按jaccard系数从大到小排序,然后按照顺序将tag
i
,tag
j
求并集生成tag
n
作为新节点的关键字tags字段;
[0040]
(2)利用acc(tags)函数计算出对应的prove
i
字段,作为可验证字段;
[0041]
(3)计算上述新生成节点的哈希值作为hash字段,并两两向上生成一个新节点,作为父节点;
[0042]
(4)重复迭代这一过程,直至生成一个基于关键字索引的可验证mvt。
[0043]
2、包含关键字交易高效检索方法(如图2所示),具体步骤如下:
[0044]
(1)用户发送关键字检索请求q,首先从最新区块开始,利用当前区块布隆过滤器bf判断该区块是否存在包含请求q的关键字的交易,若存在进入步骤(2);
[0045]
(2)从mvt的root节点开始,判断该节点的tags字段是否包含请求q的关键字,若包含则进入步骤(3),否则进入步骤(4);
[0046]
(3)判断该节点是否是叶子节点,若是,则将所检索交易数据加入结果集rs中,若不是,则将该节点的可验证字段prove
i
加入可验证结果集vrs中,并进行递归检索;
[0047]
(4)将该节点的可验证字段prove
i
加入可验证结果集vrs中,同时调用provedisjoint(tag
i
,tag
j
,pk)函数生成不相交证明π,将<π,prove
i
,tag
i
,hash
i
>加入可验证结果集vrs中;
[0048]
(5)重复步骤(1)

(4)直至当前区块检索完成;
[0049]
(6)继续检索前驱区块,重复步骤(1)

(5)直到创世区块。
[0050]
3、检索结果可靠性验证方法(如图3所示),具体步骤为:用户发送检索请求后得到结果集<rs,vrs>,首先利用结果集rs中返回的交易数据,以及可验证结果集vrs中的提供的节点计算hash值与根节点hash比较验证结果的正确性,然后调用verifydisjoint(acc(tag
i
),acc(tag
j
),π,pk)验证可验证结果集vrs中的节点是否不存在交集,即验证检索结果的完整性。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜