可验证的多模态时空数据索引结构和时空范围查询验证方法
文献发布时间:2024-04-18 19:58:30
技术领域
本发明属于网络安全技术领域,具体涉及一种可验证的多模态时空数据索引结构和时空范围查询验证方法。
背景技术
时空数据查询服务的数据规模化特点与服务实时性需求,时空数据通常外包给云服务提供商进行存储、管理并提供查询服务,其典型应用场景如图1所示,包含数据拥有者、云服务提供商、查询用户三个实体。因为云服务提供商不完全可信以及云服务数据所有权与控制权相分离的特性,云外包时空数据查询服务面临查询结果不可验证,查询结果不完整、不正确、不完备等安全威胁。
已有的可验证查询工作大都集中于查询结果的完整性、完备性研究。Liu等使用RSA累加器为搜索结果生成证明,代价是巨大的计算开销。Wan等利用同态MAC技术对各指标进行认证,验证相关得分计算的正确性。Tang等根据MHT提出了一种基于树的认证索引结构。Zhang等提出了利用区块链技术对数据完整性进行无证书公开验证,无需中央权威机构。对于兼顾完备性和完整性的验证,Xu等将MHT与Multiset累加器相结合,但它只支持明文设置中的检索,其完整性验证是无效的。恶意云服务提供商有可能伪造索引的累加值,从而不返回符合搜索查询的相应文档。Liu等采用RSA累加器对索引结构进行认证,计算开销大,不适用于基于树的索引结构。Shao等采用密钥散列消息认证码和基树来支持有效的可验证模糊多关键字搜索。但是,以上方案均无法实现IND-SCPA安全性。对于不可信云服务提供商所提供查询结果的完整性验证方法,现有的研究大多集中在外包数据库上。有两种典型的方法:支持使用基于电路的可验证计算技术的一般查询和支持使用可认证数据的特定查询。基于可验证计算的方法可以支持任意计算任务,但其计算开销通常较大;此外,这种方法需要繁杂的预处理步骤,因为数据和查询程序需要硬编码到证明密钥和验证密钥中。为了解决这个问题,Ben-Sasson等开发了一种SNARKs的变体,其中预处理步骤只依赖于数据库和查询程序的上限大小。最近,Zhang等人提出了一个vSQL系统,该系统利用交互式协议来支持可验证的SQL查询。但是,它仅限于具有固定模式的关系数据库。两种类型的结构通常用于作为ADS:数字签名和MHT。数字签名基于非对称加密对数字消息的内容进行认证。为了支持可验证查询,它要求对每个数据记录进行签名,因此无法扩展到大型数据集。另一方面,MHT构建在层次树上。叶子节点中的每个条目被分配一个数据记录的哈希摘要,内部节点中的每个条目被分配一个从子节点派生出来的摘要。数据所有者对MHT的根摘要进行签名,该根摘要可用于验证数据记录的任何子集。Dauterman等基于函数秘密共享(Function Secret Sharing,FSS)在三方诚实多数模型中提出了加密时序数据库Waldo。Waldo需要三个非共谋服务器,这在实际应用中难以实现。
云服务提供商的不完全可信特性导致查询结果的完整性、正确性和完备性无法保证。随着云服务的普及,低成本、灵活度高的数据云外包越来越普遍。然而,云服务提供商通常被视为不受信任的实体,可能会泄露外包数据的隐私。在应用中,由于经济因素、硬件故障、黑客攻击等因素,在数据查询的执行过程中,恶意的云服务提供商可能会只执行部分搜索或检索被篡改的数据集,返回不完整的或错误的查询结果;为了节约计算成本,云服务提供商可能会随机选择几个数据来冒充查询结果,从而影响查询结果的完整性与完备性。因此,如何设计可验证的时空范围查询系统,实现对查询结果的完整性、正确性和完备性检验是提高查询结果可用性、提升系统实际应用价值的关键性问题。
发明内容
为了解决现有技术中存在的上述问题,本发明提供了一种可验证的多模态时空数据索引结构和时空范围查询验证方法。本发明要解决的技术问题通过以下技术方案实现:
本发明提供了一种可验证的多模态时空数据索引结构和时空范围查询验证方法包括:明文数据库生成阶段,查询阶段以及验证阶段;
在明文数据库生成阶段:数据拥有者通过获取原始数据集,并对所述原始数据集中的每个原始数据进行编码得到Zorder编码;将每个Zorder编码经过前缀编码得到验证数据;根据树状结构中叶子节点和非叶子节点的不同情况,根据所述验证数据设置叶子节点和非叶子节点的属性得到明文树;将所述明文树作为明文数据库,并将明文数据库发送给云服务提供商;
在查询阶段:云服务提供商接收查询请求;根据所述查询请求生成查询令牌,并利用所述查询令牌在所述明文数据库中从根节点开始自下搜索,得到查询结果以及辅助验证信息;
在验证阶段:用于查询用户利用所述辅助验证信息检查所述查询结果是否符合时空搜索范围,并通过将重建的最小明文树的根属性与原来的明文树的根属性对比,确定所述查询结果是否符合准确性要求和完整性要求。
有益效果:
本发明提供了一种可验证的多模态时空数据索引结构和时空范围查询验证方法,分为明文数据库生成阶段,查询阶段以及验证阶段。在明文数据库生成阶段构建查询结果可验证的明文树,在明文树建立过程中,计算每个节点的标签、累加值和摘要作为验证信息;而明文树中的叶子节点则额外拥有时间信息,在每一个节点后都有该节点信息的布隆过滤器,之后作为节点属性一同上传到云服务提供商。在查询阶段,云服务提供商查询混合索引树得到查询结果。验证阶段查询用户在本地重构查询路径并对比根节点签名是否一致确定查询结果完整性,以及通过再次验证查询结果以确定查询结果准确性。本发明可以实现亚线性搜索复杂度搜索查询,极大的提高了搜索效率。本发明实现了时空数据的高效率、低延迟的查询,并且实现查询结果可验证,解决云服务提供商不完全可信的问题。最终形成高效可验证的时空范围查询系统,推动时空数据查询服务在目标人群推荐、物流派送和城市服务等领域的应用。
以下将结合附图及实施例对本发明做进一步详细说明。
附图说明
图1是现有技术中的时空数据查询服务典型应用场景与安全威胁示意图;
图2是本发明提供的VRBH-Tree的生成流程图;
图3是本发明提供的Z order编码的前缀编码形式示意图;
图4是本发明提供的VRBH-Tree节点生成示意图;
图5是本发明提供的VRBH-Tree实例示意图;
图6是本发明提供的DB的查询流程示意图;
图7是本发明提供的VRBH-Tree查询示意图;
图8是本发明与已有方案查询时间比较示意图。
具体实施方式
下面结合具体实施例对本发明做进一步详细的描述,但本发明的实施方式不限于此。
本发明使用Z order编码、前缀编码结合布隆过滤器,基于B-Tree构建查询结果可验证的混合索引树,实现了大规模时空交集查询;在分层索引树结构建立过程中,计算每个节点的标签、累加值和摘要,并一同上传到云服务器中,本地只保存根节点摘要的签名;查询用户在接收到查询结果后,在本地重构云服务器端的查询路径并计算查询路径根节点摘要值的签名,若与原分层索引树根节点摘要的签名一致则通过验证,否则说明查询结果未通过验证。
结合图2至图7,本发明提供了一种可验证的多模态时空数据索引结构和时空范围查询验证方法包括:明文数据库生成阶段,查询阶段以及验证阶段;
在明文数据库生成阶段:数据拥有者通过获取原始数据集,并对所述原始数据集中的每个原始数据进行编码得到Zorder编码;将每个Zorder编码经过前缀编码得到验证数据;根据树状结构中叶子节点和非叶子节点的不同情况,根据所述验证数据设置叶子节点和非叶子节点的属性得到明文树;将所述明文树作为明文数据库,并将明文数据库发送给云服务提供商;
其中,所述将每个原始数据经过前缀编码得到验证数据包括:利用前缀编码隶属度编码方法,将每个原始数据的Zorder编码以及预设的几何范围转换为前缀编码形式得到验证数据。
本发明的所述根据树状结构中叶子节点和非叶子节点的不同情况,根据所述验证数据设置叶子节点和非叶子节点的属性得到明文树包括:
将验证数据以及原始数据包含的时间数据插入布隆过滤器,作为叶子节点的属性;
将验证数据插入布隆过滤器,作为非叶子节点的属性;
按照空间数据优先、以四叉树的建立方式建立明文树;
其中,所述原始数据为二维数据,包括时间数据和空间数据,所述验证数据为一维数据,仅包括空间数据。
由于流调数据集的规模较大,时间复杂度为O(n)的搜索结构的搜索效率较慢。因此,基于B-Tree提出一种亚线性搜索时间复杂度的数据结构:为实现亚线性搜索复杂度并能够验证查询结果的完整性与完备性,本发明将编码后的数据对象组织为一个树状结构,称为可验证的范围查询布隆过滤器层次树(Verifiable Range Query Bloom filterHierarchical Tree,VRBH-Tree)。在VRBH-Tree中,本发明把原始数据保存在叶子结点上,它们是一个个单一的时空节点,如果数据库中一个用户有N个不同的时空节点,那么就为该用户创建N个原始数据,保存在N个不同的叶子结点上。对于非叶子结点,将其定义为一个能容纳至多M个孩子节点的范围(孩子可能是一个点,但也可能是一个范围)。为实现可搜索功能,本发明把VRBH-Tree上的所有节点经前缀编码处理后设置为布隆过滤器,将二维查询转化为存在性检测问题,从而可以容易地确定一个对象中是否包含所有的查询关键字,即判断单个节点是否属于某个范围。
如图3所示,使用布隆过滤器实现范围查询的关键在于如何确定一个空间点是否属于某一几何范围,从而确定待搜索的集合中是否包含目标数据。为了解决此问题,首先使用具有优秀局部性的Z order编码,根据各数据项的空间位置,通过“Z”形排列对所有的数据项进行编码,将二维空间中数据点映射到一维数轴上,并且能够使得一维编码接近的点在二维空间中不会相距太远。获得各数据项的Z order编码后,本发明利用前缀编码隶属度验证方案,将各数据项的Z order编码以及特定的几何范围化为前缀编码形式,以备后续检索。
在图3的a图中,使用Z order编码对节点O
在所述明文树中处于相同深度的节点拥有相同的布隆过滤器长度,不同深度的节点拥有不同的布隆过滤器长度。本发明在在明文数据库生成阶段:为所述明文树中的每个节点生成验证信息;其中验证信息包括摘要和累加值;对根节点的验证信息生成签名。
本发明使用Z order编码将二维坐标空间映射为一维数据,并采用前缀编码结合布隆过滤器表示节点时空数据,同时为了防止VRBH-Tree上各节点的布隆过滤器长度过大造成存储空间浪费以及查询平均时间复杂度的提高,规定:只有叶子节点包含空间、时间两个维度的布隆过滤器,其他所有非叶子结点只包含空间范围的布隆过滤器。VRBH-Tree的节点及其生成过程可以表示为图4所示的形式。
VRBH-Tree中父节点的布隆过滤器中保存的前缀编码的数量总是小于孩子节点中保存的前缀编码的数量,如果为所有节点的布隆过滤器都设置相同的长度m,如果m太小,那么树中下层的布隆过滤器会有很高的假阳性;如果m太大,则会耗费很多的内存空间,这通常导致无法接受的存储消耗。因此,本发明规定,在一个VRBH-Tree中,处于相同深度的节点拥有相同的布隆过滤器长度,不同深度的节点拥有不同的布隆过滤器长度。为了保持误报率小于千分之一,本发明设置m与布隆过滤器中元素数量a的关系:
m≈14·a.
为了验证查询结果的完整性与完备性,本发明需要进行以下准备。给定一个安全参数λ,首先执行KGen获取用于结果验证的密钥对{pk,sk},即:
pk←g
然后生成一对用于数字签名的公钥与私钥{K
在此算法设计中,本发明将把原始DB转化为一个节点队列并且定义一个标志变量flag,表示是否完成VRBH-Tree的建立。并且在建立过程中,为每个节点生成在查询结果完整性、完备性验证中需要的数据。树状结构中的每个节点存储其子节点时空数据最小前缀集的数据c,标签Tag(该节点的前缀编码)以及搭载前缀编码的布隆过滤器B。其中,父节点的B由所有子节点B合并得到;父节点的Tag为所有子节点Tag的最小前缀集。为实现查询结果验证功能,本发明在VRBH-Tree的每个节点上增加用于验证的信息{d,acc},其中摘要d=H
在循环中,如果flag的值为真,那么执行建树节点生成:取节点的首元素,判断其与在节点队列中紧跟着的k-1个元素是否满足同一个父节点的条件,若满足,生成父节点Node*并且加入节点队列并更新flag。如果flag的值为真,则代表VRBH-Tree完成建立,返回这个VRBH-Tree的实体。其中函数Acc的具体实现如下:对于集合T
由于检索过程中存在时间空间两个变量,为了防止VRBH-Tree上出现只由于某一个变量的不同产生过多只有一个孩子的非叶子节点,规定:只有叶子节点包含空间、时间两个维度的布隆过滤器,其他所有非叶子结点只包含空间范围的布隆过滤器,即追溯逻辑为先完成空间纬度的匹配,之后再对完成匹配的孩子节点进行时间的匹配。要为一个子叶集合V={s
1)布隆过滤器被初始化为一个m位的二进制向量B
2)选择t个独立哈希函数{H
3)对于任意元素s∈V,所有索引为{H
一个VRBH-Tree的实例如图5所示,在获取用户的时空数据后,利用Z order编码将二维空间数据转换为一维空间数据。将一维空间数据与一维时间数据生成前缀编码。然后按照空间数据优先、以四叉树的建立方式建立VRBH-Tree,值得注意的是,父节点中只存储覆盖所有子节点范围的最小前缀编码集合,而不保存子节点的具体信息,从而降低父节点数据长度。当父节点的子节点数达到最大值时,将父节点分裂为四个新节点,并将原来子节点根据空间信息附加到新节点上。同时,分别计算每个节点用于结果验证的证据,并存储在树的节点中。形成基本的树形结构后,分别对每个节点生成布隆过滤器从而得到最终的VRBH-Tree。
如图5所示,对于存储时空数据和布隆过滤器的数据点1、2、3、4,首先分别计算其累加值acc。在合并节点中存储时空数据前缀编码的布隆过滤器时,同时计算父节点的累加值acc
在查询阶段:云服务提供商接收查询请求;根据所述查询请求生成查询令牌,并利用所述查询令牌在所述明文数据库中从根节点开始自下搜索,得到查询结果以及辅助验证信息;
DB的查询流程如图6所示,从web服务端接收时空溯源请求后,服务器首先对参数进行处理,生成溯源参数对应的令牌(Token),系统使用此令牌,在数据库(DB)中进行搜索,得到一个结果的集合,并且返回给网页。
作为本发明一种可选的实施方式,所述根据所述查询请求生成查询令牌,并利用所述查询令牌在所述明文数据库中从根节点开始自下搜索,得到查询结果以及辅助验证信息包括:
获取所述查询请求包含的时空查询范围,并根据所述时空查询范围生成查询前缀;所述时空查询范围包括时间查询范围和空间查询范围;
利用所述查询前缀和在时间查询范围内的布隆过滤器建立查询令牌;
作为本发明一种可选的实施方式,所述利用所述查询前缀和在时间查询范围内的布隆过滤器建立查询令牌包括:
将在所述空间查询范围内所有可能的空间数据转换为Zorder编码,并将Zorder编码转换为第一前缀编码;
将在所述时间查询范围内所有可能的时间数据转换为第二前缀编码;
将所述第一前缀编码组成第一前缀编码集合,以及将所述第二前缀编码组成第二前缀编码集合;
将第一前缀编码集合和第二前缀编码集合作为查询前缀;
将所述查询前缀确定为查询令牌。
为了防止VRBH-Tree上各节点的布隆过滤器过长造成存储空间浪费以及查询平均时间复杂度的提高,本发明对应树结构中每层节点分别生成Token。在给定一个搜索查询Q={R
为实现查询结果的完整性、完备性查询,给定私钥集SK与时空查询Q,QU首先将Q中空间数据转化为Z order编码,然后将时空数据转化为前缀编码Tag
利用所述查询令牌在明文树上从根节点自下搜索记录根节点至叶子节点的搜索路径;
按照所述查询令牌查询每条搜索路径的节点,以确定满足查询条件的节点得到查询结果以及不满足查询条件的节点得到不匹配信息;
其中,所述查询条件为:节点属性中的空间查询范围与查询请求对应的空间查询范围存在存在交集。
作为本发明一种可选的实施方式,所述按照所述查询令牌查询每条搜索路径的节点,以确定满足查询条件的节点得到查询结果以及不满足查询条件的节点得到不匹配信息包括:
对于每个搜索路径上的非叶子节点,如果该非叶子节点满足查询条件则记录该非叶子节点的摘要;否则,计算该非叶子节点的不相交证明,并记录该非叶子节点的不匹配信息;
对于每个搜索路径上的叶子节点,如果该叶子节点满足查询条件,则将该叶子节点的摘要加入查询结果集中;否则计算该叶子节点的不相交证明,并记录该叶子节点的不匹配信息。
将每条查询路径的查询结果组成查询结果集;
根据查询结果集生成辅助验证信息,并将查询结果以及辅助验证信息发送至服务提供商。
对于VRBH-Tree中的第j层,它使用Query检查每个节点BF中保存的前缀编码,如果在查询过程中,任何一个BF与某个节点匹配,则继续搜索其子节点;否则,停止搜索此子树。当到达叶节点时,使用Query检查BF中保存的前缀编码,如果结果为“true”,则将该数据点添加到结果集R中。其具体算法流程如算法4。在搜索过程中,只需从根节点遍历VRBH-Tree。向下遍历孩子节点时,只继续查询满足查询条件的子树。由此得到的搜索空间是动态修剪的,大大降低了检索的复杂度。
同时,在搜索过程中要保存用于查询结果验证的相关证据。在查询过程中,本发明保存从根节点到叶子结点的深搜路径,记为verify-tree。对于路径中第j层的非叶子节点Node
其中,Q
并在该不匹配节点中记录{Node
VRBH-Tree查询示意图如图7所示:
如图7,在只有一颗三层结构的VRBH-Tree中,以空间查询范围{8,[12-15]}、时间查询范围[6-7]为例展示在VRBH-Tree上的查询过程。根据搜索范围,在每个层级上分别生成空间查询范围与时间查询范围的前缀编码集合,作为后续查询的Token,然后使用此Token在DB中分别查询对应层级。在图7中,第一次匹配:根节点的N4子节点成功匹配,其余子节点被剪枝,记录被剪枝节点的摘要、累加值、不匹配标记和不匹配证明。第二次匹配:N4的孩子,叶子节点O5被剪枝记录其摘要、累加值、不匹配标记和不匹配证明,叶子节点O6为查询结果,加入结果集合。
除查询结果集合外,得到辅助验证信息AP,其包括搜索路径上的每个节点的累加值、不在搜索路径上的每个节点的摘要、累加值、不匹配标记和不匹配证明以及根节点签名Sig组成,即AP={node.d,node.acc,node.π,node.T,Sig}。
在验证阶段:用于查询用户利用所述辅助验证信息检查所述查询结果是否符合时空搜索范围,并通过将重建的最小明文树的根属性与原来的明文树的根属性对比,确定所述查询结果是否符合准确性要求和完整性要求。
作为本发明一种可选的实施方式,所述查询用户利用所述辅助验证信息检查所述查询结果是否符合时空搜索范围,并通过将重建的最小明文树的根属性与原来的明文树的根属性对比,确定所述查询结果是否符合准确性要求和完整性要求包括:
查询用户利用所述辅助验证信息对每条查询路径上不满足查询条件的节点进行再验证,以确认所述查询结果的正确性;
查询用户对于存在存在不满足查询条件的节点的查询路径,根据节点之间的关系以及节点的摘要重建该条查询路径,并将重建后的该查询路径作为最小认证树;
查询用户对比所述最小认证树的根节点的摘要,与所述明文树上原本的根节点的摘要是否一致,以确定所述查询结果的完整性。
利用辅助验证信息AP,首先运行VDisjoint来检查未在查询结果中的点是否不符合时空范围查询Q,然后重建最小认证树verify-tree,并将其根摘要d′
其中,(a)式中VDisjoint函数具体实现如下:
本发明通过构建一个可验证的时空范围索引树,非叶子节点中包含经过Zorder编码处理以及前缀编码后的空间信息,叶子节点则额外拥有时间信息,在每一个节点后都有该节点信息的布隆过滤器,以实现亚线性搜索复杂度搜索查询,极大的提高了搜索效率。同时可以验证查询结果的完整性、正确性和完备性。为了防止服务器欺骗用户在查询时略过某些节点,在查询的时候如果查询令牌与当前节点匹配就继续搜索,如果不匹配则需要额外生成不相交证明。整个查询过程结束后将全部不相交证明连同其他信息一起发给用户,用户在本地使用Verify算法验证这些不相交证据,如果验证算法的返回值是true,则可证明搜索过程是正常运行的。如果验证算法返回值是false,则说明出现了服务器在搜索过程中省略了一些在匹配过程中本应匹配的节点。
本发明所提方案可以使用JAVA编程语言实现,安全参数λ=128。v-SKSE中VRBH-Tree的最深非叶节点的最大容量设置为16。布隆过滤器的大小设置为m=256,t=14,这样误报率为f≤(1-e
本发明对比Dauterman和Waldo方案,Dauterman等于函数秘密共享(FunctionSecret Sharing,FSS)在三方诚实多数模型中提出了加密时序数据库Waldo,Waldo支持时间、空间、文本等多谓词过滤,是当前仅有的支持多模态时空数据可验证查询的加密数据库。Waldo需要三个非共谋服务器,这在实际应用中难以实现。
参见图8,在模拟数据集上对本发明与已有方案的查询延迟进行对比,数据集大小N从2×10
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
- 一种基于密文时空数据的可验证范围查询方法
- 一种基于索引的面向区块链轻客户端的范围查询可验证查询方法