CN116028947A - 一种基于加密关键字的可验证查询索引以及装置 - Google Patents

一种基于加密关键字的可验证查询索引以及装置 Download PDF

Info

Publication number
CN116028947A
CN116028947A CN202211614494.3A CN202211614494A CN116028947A CN 116028947 A CN116028947 A CN 116028947A CN 202211614494 A CN202211614494 A CN 202211614494A CN 116028947 A CN116028947 A CN 116028947A
Authority
CN
China
Prior art keywords
data
node
query
matrix
prime
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202211614494.3A
Other languages
English (en)
Inventor
尹波
谢天凉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Changsha University of Science and Technology
Original Assignee
Changsha University of Science and Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Changsha University of Science and Technology filed Critical Changsha University of Science and Technology
Priority to CN202211614494.3A priority Critical patent/CN116028947A/zh
Publication of CN116028947A publication Critical patent/CN116028947A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于加密关键字的可验证查询索引以及装置,本发明将关键字加密索引和Verkle树结合,使用素数矩阵为例对关键字进行编码。首先对数据关键字集合和查询关键字进行编码得到数据矩阵和查询矩阵,每个节点存储素数矩阵和矩阵哈希值,父节点的素数矩阵是子节点素数矩阵的哈达玛积,哈希值根据子节点素数矩阵与哈希值计算得来。但是仅通过对关键字的素数编码可能会造成数据泄露,因此,引入安全的KNN算法对矩阵加密,防止恶意第三方根据编码后的关键字矩阵推测出数据的内容。为了减少验证矢量的传输开销,引入Verkle树,使用该节点到根节点路径上相关节点的向量承诺与证明就可以验证数据的正确性与完整性,降低查询结果和验证矢量的传输带宽开销。

Description

一种基于加密关键字的可验证查询索引以及装置
技术领域
本发明涉及区块链技术领域,尤其是一种基于加密关键字的可验证查询索引以及装置。
背景技术
区块链技术是比特币等数字加密货币的核心技术。区块链并不是一种完全创新的技术,而是由P2P网络、非对称加密算法、共识机制等技术综合组成的新技术,它是具有去中心化、安全性和不可篡改等特点的分布式账本。这些特点使得区块链成为了现在研究的热点。区块链由所有节点共同维护,不需要依赖权威可靠的第三方。交易一旦被存入区块链中,哈希函数与共识保障了交易的不可篡改。区块链中的所有节点都遵循共识协议,由于工作量证明,当一个交易经过6个区块确认过后,几乎没有被破解的可能。
现如今,数据成为数字经济中重要的一个组成部分。数据的价值在于流通,已经成为市场交易中的新型商品。拥有数据的一方称为数据拥有者,对数据有需求的一方称为数据需求者。数据拥有者通过对数据进行交易获得金钱,为了保护自己的利益,需要先对数据进行加密再上传索引到SP中,数据需求者需要从SP上进行检索想要的数据。SP上存储的数据记录使用关键字集合作为标识符,通过关键字检索数据对象是否存在SP上,并保证查询存在数据的正确性和完整性。现在大多数的可验证查询方案都支持精确查询,其中查询关键字的拼写错误将无法返回正确的查询结果。通常情况下,需求者在查询时即便忘记了关键字的正确拼写,也仍然希望尽可能准确地返回想要的数据。在模糊查询中,当需求者忘记了某个关键字的准确拼写时,可以用通配符代替无法确定的字符。比如,需求者想要查询‘dolphin’却无法确定后两个字符时,可以输入‘dolph**’,其中‘*’为通配符。系统只支持精确搜索时,将无法返回需求者想要的查询结果,而模糊查询可以返回尽可能相似的查询结果。
考虑将区块链应用到智慧医疗场景。一个病人可能有多条就诊记录,一条就诊记录包含病因和多个病症,医生需要快速检索到满足查询条件的就诊记录。例如,医生想要查询病人Alice病症为edema的就诊记录,可输入查询q=<Alice∧edema>,SP进行关键字检索,如果有满足该查询的就诊记录,则会返回这些记录的详细信息。如果没有,则会快速的返回空。
目前区块链系统的可验证查询问题已有许多研究工作,其核心思想是设计一个由区块链维护的ADS证明查询结果的正确性和完整性。其中Xu等人研究了针对可验证的布尔范围查询,通过在区块中添加一个基于多集累加器的额外字段聚合关键字集合实现检索与查询结果验证。Dai等人提出了一个轻量级的可验证查询方法,通过只在块头中存储Bloom过滤器的哈希值减少轻节点的存储开销,通过合并多个连续的Bloom过滤器消除查询结果的通信开销,通过返回树的分支而不是整个块减小查询结果的大小进一步减少网络开销。但上述工作存在以下不足之处:(1)只提出了针对精确关键字的可验证查询方案,没有提出针对模糊关键字查询的有效解决方案。(2)未对区块链上加密数据的可验证查询问题进行研究,ADS无法保护加密数据不被泄露。(3)在验证数据结构中使用Merkle哈希树,但Merkle树提供的验证矢量的大小较大,传输过程中会浪费许多的带宽资源。k叉Merkle树的证明大小为O(klogkn),而k叉Verkle树的证明大小为O(logkn)。
发明内容
本发明提出一种基于加密关键字的可验证查询索引以及装置,既能支持精确查询和模糊查询,也能验证结果的完整性与正确性。使用KVerkle树索引代替区块中原本的Merkle树,将关键字加密索引和Verkle树结合,本发明使用素数矩阵为例对关键字进行编码。首先对数据关键字集合和查询关键字进行编码得到数据矩阵和查询矩阵,根据素数矩阵可以判断查询的数据是否存在于叶子节点中,也可以对加密后的关键字检索。每个节点存储素数矩阵和矩阵哈希值,可以快速检索,也可以验证查询结果的完整性。父节点的素数矩阵是子节点素数矩阵的哈达玛积,哈希值根据子节点素数矩阵与哈希值计算得来。但是仅通过对关键字的素数编码可能会造成数据泄露,恶意用户可以通过大量的查询分析出数据相关信息。因此,为了进一步提高索引的安全性,引入安全的KNN算法对数据矩阵和查询矩阵加密,防止恶意的第三方根据编码后的关键字矩阵推测出数据的内容,保护数据安全。为了减少验证矢量的传输开销,引入Verkle树。Verkle树中使用向量承诺和成员证明,父节点处的向量承诺由孩子节点中的数据结合而成,孩子节点存储成员证明,成员证明可证明孩子节点与父节点的关系。仅使用该节点到根节点路径上相关节点的向量承诺与证明就可以验证数据的正确性与完整性,减少了验证矢量的大小,降低查询结果和验证矢量的传输带宽开销。
本发明提供了一种基于加密关键字的可验证查询索引,包括以下步骤:
把Verkle树和索引结构进行结合,构建新的KVerkle索引树;
针对每条数据抽象为一个数据对象,所述的数据对象为:
o=<id,M,Ek(data)>
其中,所述id表示数据的id,所述M表示数据关键字集合编码后的素数矩阵,所述Ek(data)表示数据加密值;
针对区块链中的加密数据,按照Verkle树的构造方法生成KVerkle树。定义矩阵相似度为两个矩阵中对应位置相同元素的个数与总元素个数的比值。寻找索引树中当前层中矩阵相似度最大的每q个节点,将其合并插入到同一个父节点中,直到所有节点均有父节点。在索引树的每一层从下往上进行同样的操作,直到生成根节点。
非叶子节点的数据由其孩子节点的数据计算得来,所有的数据记录存储在叶子节点中。令Ni表示树中的一个节点,q表示节点的孩子个数。叶子节点Ni存储的数据为:
(M(o),Ek(o),πp,i)
其中,所述M(o)为数据关键字集合编码后得到的素数矩阵(用来进行检索),所述Ek(o)为数据记录o的加密值,所述πp,i证明叶子节点的数据加密值是其父节点的向量中第i处的元素。索引树的每个节点都有一个唯一的位置编码pos。所有q个子节点构成的承诺组合成父节点的向量<C1,…Cq>。位置为pos处的非叶子节点存储的内容为:
{Mpos,hpos,Cpos,πp,i}
其中,所述Mpos为所有子节点的素数矩阵的哈达玛乘积,可以使用Mpos作为搜索键来判断后代叶子节点是否包含K(q)中的关键字。所述hpos
Figure BDA0004000051780000031
计算得来的哈希值,用来保证子节点的素数矩阵没有被改变。所述Cpos是由
Figure BDA0004000051780000041
是根据子节点承诺构成的向量<C1,…Cq>计算得到的承诺。所述πpar,i是成员证明,用来证明该节点是父节点npar的第i个子节点,并且其承诺是Cpos。当该节点的孩子节点为叶子节点时,该节点的Cpos
Figure BDA0004000051780000042
计算得到,hpos
Figure BDA0004000051780000043
计算得到。
搜索数据记录和生成验证矢量,查询从根节点开始,自上往下检索整个索引树。如果树中节点查询失败,则意味着所有底层的数据对象都不满足条件。如果树中节点查询成功,则继续往下查询直到叶子节点。所述验证矢量由该叶子节点的数据加密值、树路径上节点的向量承诺和成员证明以及不满足查询条件子树的根节点的素数矩阵和哈希值组成。
根据本发明的实施例,至少具有以下技术效果:
首先为每一条上传到区块链的数据生成一个数据对象,数据加密值和加密索引能够避免数据泄露。根据素数矩阵相似度合并节点插入到一个父节点,能够得到最大的查询效率和验证效率。然后根据树中节点的父子关系,计算父节点素数矩阵、哈希值、向量承诺和孩子节点的成员证明,构建索引树。然后利用素数不可分解的特性,使用素数矩阵作为索引键,实现加密数据的查询。利用向量承诺的性质,使用向量承诺与成员证明实现查询结果数据的可验证。
本发明的第二方面,提供了一种基于加密关键字的可验证查询索引的装置,包括:
第一计算单元,用于计算每个数据对象的id、素数矩阵和加密值;
第二计算单元,用于计算树中同一层节点素数矩阵的相似度,将当前层中矩阵相似度最大的每q个节点,将其合并插入到同一个父节点中,直到所有节点均有父节点;
第三计算单元,用于构建KVerkle树,在索引树的每一层从下往上进行合并,直到生成根节点;
第四计算单元,用于从索引树中查询数据记录,并生成验证矢量。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为区块链系统模型;
图2为本发明实施例提供的素数矩阵Merkle逻辑结构树;
图3为本发明实施例提供的素数矩阵Verkle逻辑结构树;
图4为本发明实施例提供的电子设备的结构示意图。
具体实施方式
以下结合附图通过实施例对本发明作进一步详细说明:
下面从四个方面对本发明进行详细说明。1)介绍本发明中使用到的两种方案与相关概念;2)介绍本发明中的区块链系统模型;3)介绍素数矩阵Merkle逻辑结构树;4)介绍素数矩阵Verkle逻辑结构树。
一、相关概念:本发明主要使用了素数矩阵和向量承诺两种方案。
素数编码:素数编码用来将关键字进行编码为素数向量,利用素数不可再分解的特性,通过向量乘法可以直接搜索相匹配的关键字;因此将关键字搜索转化为基于素数矩阵的搜索问题。素数矩阵不仅可以判断查询数据是否存在于叶子节点中,还可以实现精确查询和模糊查询。将数据关键字编码为由素数构成的向量并且构建索引,查询关键字编码为由素数倒数构成的查询向量。只有当两个向量内积的结果为整数时,表示两个关键字匹配。当进行多关键字查询的时候,一个交易中的一组关键字可编码为一个索引矩阵,一个查询中的一组关键字也可编码为一个查询矩阵,使用矩阵乘法进行多个关键字的查询。
由于素数具有不可再分解性,只有一个素数和它的倒数相乘时,积才为1。所以将字符编码为素数p或者素数p的倒数q,只有当两个字符相同时,有p×q=1,即
Figure BDA0004000051780000051
但是素数的倒数计算可能会引起精度损失,即
Figure BDA0004000051780000052
所以在计算中可以四舍五入保留z位小数(z一般取值为6)。因此,一个相同的数据关键字和查询关键字经过素数编码后,可通过向量点积得到整数结果。一条数据或许包含多个关键字,所以数据的关键字集合可编码成为一个矩阵。为了实现矩阵乘法,将矩阵都设为d维。若编码后得到的素数矩阵维度小于d,则用数字1填充矩阵。
给定一个向量vi,其中第m个元素表示为vi[m]。由l个d维向量组成的矩阵为Md×l=[v1,v2,…,vl],其中第i行第j列的元素表示为M[i][j]。由l个d维向量组成的转置矩阵为Nl ×d=[v1,v2,…,vl]T,其中第i行第j列的元素表示为N[i][j]。向量点积用‘·’表示,矩阵乘积运算用‘×’表示,哈达玛乘积用
Figure BDA0004000051780000063
表示。
定义矩阵乘积运算为Rd×k=Md×l×Nl×k
Figure BDA0004000051780000061
定义Hadamard乘积为
Figure BDA0004000051780000064
Figure BDA0004000051780000062
为了实现素数编码,先定义一个素数集合。将关键字A中的每个字符使用伪随机函数依次映射为素数集合中的一个素数,编码为一个素数向量。关键字B中的每个字符使用伪随机函数依次映射为素数集合中一个素数的倒数,编码为一个素数倒数向量。计算素数向量和素数倒数向量的点积,如果点积结果为整数,说明两个关键字一致;如果结果不为整数,则说明两个关键字不一致。由此可以确定两个关键字是否匹配。
向量承诺:向量承诺用来构建ADS,从而验证查询结果的正确性和完整性。向量承诺将一个消息向量映射为一个承诺,具有隐藏和位置绑定的特性。向量承诺不存储向量本身,只存储承诺C,从而降低存储开销。Catalano等人提出的向量承诺允许将一个消息向量映射为一个固定大小的承诺,然后该承诺可以在特定位置打开,并证明与初始承诺一致。令向量v为<m1,m2,…,mk>,mi是v中第i个元素。向量承诺将向量v映射为一个承诺C,该承诺可以在i处打开,证明mi是v中第i个元素。向量承诺方案由几个函数组成:
VC.keyGen(1k,q):给定安全参数k和提交向量的长度q(q=poly(k)),该密钥生成函数输出一些公共参数PP(隐式定义消息空间)。
VC.ComPP(<m1,…,mq>,r):输入q个消息m1,…,mq、公共参数PP和随机参数r,该提交函数输出一个承诺字符C和辅助信息aux。
VC.OpenPP(m,i,aux):该函数由SP运行产生一个m是第i个提交的消息的证明p。
VC.VerPP(C,m,i,p):仅在p是一个有效证明,可证明C是给序列m1,…,mq创建的承诺且m=mi时,该验证函数才输出1。
VC.UpdatePP(C,m,m′,i):位于第i个位置上的元素m更新为m′,计算更新后的向量承诺C′和更新信息U=(m,m′,i)。
VC.ProofUpdatePP(C,πi,m′,U):使用更新信息U=(m,m′,i),计算更新后的向量承诺C′和成员证明π′j。当i=j时,π′j=πj
向量承诺可以基于CDH和RSA累加器实现。以RSA累加器为例,用户先调用函数keyGen(1k,q),随机选择两个k/2位的素数p1,p2,设置N=p1p2,选择q个不能整除φ(N)的(l+1)位素数e1,…,eq。从i=1,2,…,q,设置
Figure BDA0004000051780000071
其中消息空间M={0,1}l,得到pp=(N,a,S1,…Sq,e1,…,eq)。调用函数ComPP(m1,…,mq)提交一个消息向量,生成一个向量承诺
Figure BDA0004000051780000072
Figure BDA0004000051780000073
和辅助信息aux=(mi,…,mq)。然后调用函数OpenPP(m,i,aux)计算
Figure BDA0004000051780000074
再调用函数VerPP(C,m,i,p)判断如果m∈M并且C=
Figure BDA0004000051780000075
验证成功输出1,否则输出0。
二、区块链系统模型
参照图1,介绍区块链系统模型。区块链系统包含全节点和轻节点两种类型的节点。全节点存储了区块链中所有数据,包括区块头和区块体。轻节点只存储区块头,不存储数据记录。我们的系统包含两个角色:数据拥有者和数据需求者。数据拥有者为提供数据且拥有密钥对的组织或个人,数据需求者为请求数据的用户。我们的系统还包含两个硬件设施:服务提供者(SP)和应用智能合约的区块链。SP是存储数据加密值且提供索引服务的链下存储服务器。区块链是存储数据哈希值并应用智能合约维护可验证数据结构的分布式账本。如图1所示,数据拥有者不断将数据加密值发送到SP中进行存储,且将数据哈希值发送到区块链上用于查询结果验证,数据需求者将查询请求发送给数据拥有者,数据拥有者对查询请求编码后发送给SP,SP为数据需求者提供查询服务。
存储在区块链的每条数据抽象为一个数据对象o=<id,M,Ek(data)>,其中id表示数据的id,M表示数据关键字集合编码后的素数矩阵,Ek(data)表示数据加密值,数据拥有者将数据加密值而不是原始数据发送给SP,将数据哈希值上传到区块链。数据需求者向数据拥有者发送查询请求Q,数据拥有者对查询请求Q编码后发送给SP,SP在本地存储检索与查询条件Q匹配的数据对象。查询Q表示为子句的析取表达式Q=q1Vq2…Vqk,其中每个子句q为合取表达式,例如
Figure BDA0004000051780000081
表示查询同时包含关键字
Figure BDA0004000051780000082
Figure BDA0004000051780000083
均数据记录。Kq为q中包含的关键字集合:
Figure BDA0004000051780000084
令K(oi)为数据对象oi的关键字集合。对于每个q,基于索引树进行查询。使用R(q)表示满足查询q的结果集,这里返回的是真实数据的加密数据;那么
Figure BDA0004000051780000085
SP返回查询结果R(q)和验证矢量VO给数据需求者,返回查询结果的数据id集合ID给数据拥有者。数据需求者向区块链请求经过验证的区块头部信息(VOchain);基于VOchain和VO来验证R(q)的完整性和正确性。数据拥有者将ID中对应的数据发送给数据需求者。数据需求者收到数据后,使用数据拥有者的公钥对数据进行加密,对比加密后的数据和R(q)中的数据;如果一致,那么数据拥有者正确发送了ID对应的数据,这样数据需求者收到的数据确实是R(q)中数据的原始值。
三、素数矩阵Merkle逻辑结构树
参照图2,介绍素数矩阵Merkle树给定一条数据记录o,我们使用K(o)={k1,…,km}表示该数据记录包含的关键字。使用
Figure BDA0004000051780000086
表示查询q包含的关键字集合。给定一个素数集合P=(p1,p2,…,pl),数据拥有者把关键字中的字符逐个编码为集合P中素数的倒数,这样一个关键字映射到一个素数向量,该向量的最大长度为α。令关键字ki编码所得的向量为vi,那么|vi|=α。令不同数据的关键字集合中元素个数最大为d。数据需求者把查询请求发送给数据拥有者,数据拥有者将查询关键字中的字符编码为集合P中的素数。对于关键字集合K(o)中长度||ki||小于最大长度α的关键字,首先用符号ε将关键字的长度填充至α。再把向量元素都初始化为1,即v=[1,1,…,1]。然后用伪随机函数PRF依次生成关键字中字符编码所对应的位置,即posj=PRF(ki[j])。把素数集合P中posj处的素数即1/P[posj]赋给v[j],即
Figure BDA0004000051780000087
直到整个填充后的关键字中的所有字符均被编码完成。符号ε也以该种方法被编码为素数集合P以外的一个素数。这样关键字集合K(o)编码为素数矩阵M′(o)=[v1,v2,…,vm]T。如果m<d,则用数字1填充d-m个虚拟行,得到最终的d行α列索引素数矩阵M(o)=[v1,v2,…,vm,…,vd]T。查询关键字的编码与数据关键字的编码类似。对于精确查询关键字,差别在于关键字将编码为素数,即编码后的v[j]=v[j]×P[posj],如果字符为符号*,则直接赋为0。关键字集合K(q)编码为素数矩阵M(q)=[v1,v2,…,vn]。对于模糊查询关键字,与精确查询关键字编码类似。差别在于因为模糊关键字字符中存在通配符*,所以在编码时如果字符为通配符*,则将向量对应位置处元素设为0。
数据关键字编码为素数矩阵后,使用安全的KNN算法的索引矩阵加密函数对矩阵进行加密。加密后的数据关键字素数矩阵为M′(o)=(M′a(o),M′b(o))。使用添加人工标注函数对查询素数矩阵添加随机整数得到拓展查询矩阵
Figure BDA0004000051780000091
再使用查询矩阵加密函数对拓展查询矩阵进行加密得到
Figure BDA0004000051780000092
使用查询函数计算
Figure BDA0004000051780000093
根据R判断查询是否成功。
将素数矩阵与Merkle树结合,Merkle树中父节点的哈希值由其子节点的素数矩阵和哈希值或数据加密值连接后再哈希计算得到,但是使用MHT为查询结果提供的验证矢量VO需要较大的传输开销,查询结果的成员证明需要树路径上所有节点的兄弟节点的哈希值,当查询结果过于分散时,Merkle树中查询结果的VO会很大。参照图2,给出了一个素数矩阵Merkle树,树中一共存储了8条数据记录,有15个节点。所述对于非叶子节点的哈希值为:
hi=hash(Ml|hl|Mr|hr)
其中,所述Ml和Mr对应节点左右子节点的素数矩阵,hl和hr对应节点左右子节点的哈希值。例如节点n15中的h15=hash(M13|h13|M14|h14),节点n6的验证矢量VO包括<<<M5,Ek(5)>,h12,M12>,M13,h13>。
四、素数矩阵Verkle逻辑结构树
1)数据加密和关键字编码
数据拥有者为了维护自己的利益,不会将数据直接上传到区块链中。使用在本地生成的密钥对数据加密后,再将数据加密值上传到区块链中,数据需求者可以用其检验数据的正确性。同时,数据拥有者使用素数编码对数据的关键字进行编码,并且将编码后的数据关键字集合发送到SP中用来构建索引结构。针对关键字查询的加密方法包括素数编码,一元语法模型与双bloom过滤器等。下文以素数编码为例来阐述针对关键字查询的KVerkle树的构建。实际应用时关键字也可以采用其他的加密方式。
为了提高查询方案的安全性,使用安全的KNN算法对素数矩阵进行加密。但是安全的KNN算法加密无法抵抗线性分析攻击。如果查询关键字素数矩阵被公开,那么SP可以通过足够多的查询素数矩阵和查询结果求解线性方程组来得到数据关键字素数矩阵。为了抵抗线性分析攻击,可以通过添加人工标注提高加密方案的安全性,提高线性方程组求解出来的难度。安全的KNN算法由以下五个部分组成,本文以对素数矩阵加密为例描述具体算法:
密钥:获得密钥sk=(MA,MB,s),其中MA和MB为两个α行α列的可逆矩阵,s为α维二进制向量(s中0和1的数量近似相等)。
索引矩阵加密函数:根据s将α列的索引矩阵M(I)分成两个矩阵Ma(I)和Mb(I)。对于i∈[1,α],当s[i]=1时,M[*][i]随机分为Ma[*][i]和Mb[*][i],有Ma[*][i]+Mb[*][i]=M[*][i];当s[i]=0时,则Ma[*][i]=Mb[*][i]=M[*][i]。再利用密钥中的可逆矩阵MA和MB对索引矩阵加密,得到M′(I)=(M′a(I),M′b(I)),其中M′a(I)=Ma(I)×MA,M′b(I)=Mb(I)×MB。加密后的索引矩阵为M′(I)=(M′a(I),M′b(I))。
添加人工标注函数:将α行n列查询矩阵M(q)转换为α行u*n列的矩阵
Figure BDA0004000051780000101
其中u∈[2,α]。在不改变矩阵元素所在行号的同时,将查询矩阵中第j列数据随机分散到第j个连续的u列之中。具体过程为:对于i∈[1,α],j∈[1,n],M(q)[i][j]的数据随机散列到
Figure BDA0004000051780000102
中任意一个位置,其余位置用随机数填充。拓展过程要同时满足(1)
Figure BDA0004000051780000103
中(j-1)u+1列至ju列中的每一列至少包含M(q)第j行的一个元素;(2)
Figure BDA0004000051780000104
Figure BDA0004000051780000105
中所有随机数之和为t*M(q)[i]|j],t为0或(t+1)是集合P以外的一个素数。
查询矩阵加密函数:根据s将α行的查询矩阵
Figure BDA0004000051780000106
分成两个矩阵
Figure BDA0004000051780000107
Figure BDA0004000051780000108
对于i∈[1,α],当s[i]=0时,则
Figure BDA0004000051780000109
随机分成
Figure BDA00040000517800001010
Figure BDA00040000517800001011
Figure BDA00040000517800001012
当s[i]=1时,
Figure BDA00040000517800001013
再利用密钥中的α行α列可逆矩阵MA和MB对查询矩阵加密,得到加密查询矩阵
Figure BDA00040000517800001014
Figure BDA00040000517800001015
其中
Figure BDA00040000517800001016
查询函数:输入加密索引矩阵M′(I)和加密查询矩阵
Figure BDA00040000517800001017
输出矩阵乘法结果R=M′(I)×M′(q)。由于查询矩阵的拓展,所以计算查询结果
Figure BDA00040000517800001018
Figure BDA00040000517800001019
时,需要合并
Figure BDA00040000517800001020
中每u个列的元素。最终用于检索判断的矩阵为
Figure BDA0004000051780000111
根据矩阵乘法的性质可得,加密后的数据关键字矩阵与查询关键字矩阵对于查询结果的判定不造成影响:
Figure BDA0004000051780000112
给定一条数据记录o,我们使用K(o)={k1,…,km}表示该数据记录包含的关键字。使用
Figure BDA0004000051780000113
表示查询q包含的关键字集合。给定一个素数集合P=(p1,p2,…,pl),数据拥有者把关键字中的字符逐个编码为集合P中素数的倒数,这样一个关键字映射到一个素数向量,该向量的最大长度为α。令关键字ki编码所得的向量为vi,那么|vi|=α。令不同数据的关键字集合中元素个数最大为d。数据需求者把查询请求发送给数据拥有者,数据拥有者将查询关键字中的字符编码为集合P中的素数。对于关键字集合K(o)中长度||ki||小于最大长度α的关键字,首先用符号ε将关键字的长度填充至α。再把向量元素都初始化为1,即v=[1,1,…,1]。然后用伪随机函数PRF依次生成关键字中字符编码所对应的位置,即posj=PRF(ki[j])。把素数集合P中posj处的素数即1/P[posj]赋给v[j],即
Figure BDA0004000051780000114
直到整个填充后的关键字中的所有字符均被编码完成。符号ε也以该种方法被编码为素数集合P以外的一个素数。这样关键字集合K(o)编码为素数矩阵M′(o)=[v1,v2,…,vm]T。如果m<d,则用数字1填充d-m个虚拟行,得到最终的d行α列索引素数矩阵M(o)=[v1,v2,…,vm,…,vd]T。查询关键字的编码与数据关键字的编码类似。对于精确查询关键字,差别在于关键字将编码为素数,即编码后的v[j]=v[j]×P|posj],如果字符为符号*,则直接赋为0。关键字集合K(q)编码为素数矩阵M(q)=[v1,v2,…,vn]。对于模糊查询关键字,与精确查询关键字编码类似。差别在于因为模糊关键字字符中存在通配符*,所以在编码时如果字符为通配符*,则将向量对应位置处元素设为0。
数据关键字编码为素数矩阵后,使用安全的KNN算法的索引矩阵加密函数对矩阵进行加密。加密后的数据关键字素数矩阵为M′(o)=(M′a(o),M′b(o))。使用添加人工标注函数对查询素数矩阵添加随机整数得到拓展查询矩阵
Figure BDA0004000051780000115
再使用查询矩阵加密函数对拓展查询矩阵进行加密得到
Figure BDA0004000051780000116
使用查询函数计算
Figure BDA0004000051780000117
根据R判断查询是否成功。
2)构建KVerkle索引树
参照图3,所有的数据记录存储在叶子节点中。叶子节点存放的值为(M(o),Ek(o),πp,i),其中M(o)为数据关键字集合编码后得到的素数矩阵(用来进行检索),Ek(o)为数据记录o的加密值,πp,i证明叶子节点的数据加密值是其父节点的向量中第i处的元素。索引树的每个节点都有一个唯一的位置编码pos。所有q个子节点构成的承诺组合成父节点的向量<C1,…Cq>。例如图3中C11=ComPP(<Ek(4),Ek(5),Ek(6)>),h11=hash(M4|M5|M6)。根节点不是任何节点的子节点,所以节点中不包含成员πp,i
Figure BDA0004000051780000121
如算法1所示,描述了构建索引树的过程。当前节点集不为空,则执行循环运算。第4、5行为确定当前节点集中q个矩阵相似度最大的节点,第6、8行为计算新节点素数矩阵、哈希值和向量承诺。第9-11行为计算新节点的孩子节点的成员证明。在索引树构建过程中寻找矩阵相似度最大的节点进行合并,这样可最大化查询时的效率,可以减少查询过程中访问的节点个数。
为了便于理解,这里提供一个具体实例。在图3中,节点n10的向量v10为:v10=<Ek(1),Ek(2),Ek(3)>,其中Ek(1)、Ek(2)和Ek(3)为其孩子节点的加密值。n10的哈希值h10由hash(M1|M2|M3),其中M1、M2和M3为其孩子节点的素数矩阵。
Figure BDA0004000051780000131
n10的素数矩阵为:
Figure BDA0004000051780000132
的C10由ComPP(<Ek(1),Ek(2),Ek(3)>)计算而来,其孩子节点的成员证明τ10,i由OpenPP(Ci,i,aux)计算而来。由此类推,得到根节点处素数矩阵Mt、哈希值ht和向量承诺Ct
3)查询和验证
数据需求者检索存储在SP中数据记录,需要先向数据拥有者发送包含查询关键字的查询请求Q。对于Q中的每个子句q,数据拥有者编码后得到的素数矩阵为M(q)。SP接收到数据拥有者发送的查询请求Q后,分别对每个子句M(q)检索,最后再对每个子句的查询结果R(q)进行或操作。查询从根节点开始,自上往下检索整个索引树。如果树中节点查询失败,则意味着所有底层的数据对象都不满足条件。如果树中节点查询成功,则继续往下查询直到叶子节点。对于检索的每个节点,计算查询矩阵M(q)与当前节点的矩阵Mt的乘积Mr=M(q)×Mt。若q为AND查询,Mr中每一列有一个或多个整数(非0)元素,则查询成功,若q为OR查询,Mr中至少有一列包含一个或多个整数(非0)元素,则查询成功。
在Verkle索引树中验证某个数据对象存在,只需要将该叶子节点的数据加密值以及树路径上节点的向量承诺和成员证明就可以验证成员关系。如果当前节点查询失败,将该节点的Mi、hi和Ci添加到验证矢量VO中,并停止查询该子树。如果当前节点查询成功,将节点中的Mi、Ci和τpar,j添加到VO中,数据id添加到ID中,将满足条件的叶子节点中的数据添加到查询结果R(q)中。但是使用Verkle树只能证明查询结果没有被篡改,不能证明查询结果的完整性,即不能证明其它节点不包含结果集数据。因此必须把不满足查询条件子树的根节点的素数矩阵加入验证矢量,节点的矩阵与查询矩阵的乘积不满足查询成功条件,则该子树中存储的数据对象不符合查询条件。
查询结束后,SP把R(q)和VO发送给轻节点,ID发送给数据拥有者。数据拥有者收到ID后将对应的原始数据和公钥发送给数据需求者。轻节点首先使用VO和R(q)中的素数矩阵和哈希值,从下往上聚合计算出根部哈希与本地存储的区块头部数据进行比较,确保素数矩阵未被篡改。再使用VO和R(q)中的向量承诺、成员证明和数据加密值。使用R(q)中的数据加密值与数据拥有者发送的数据进行加密后的值对比,一致则查询成功。
Figure BDA0004000051780000141
算法2描述了验证查询结果的过程,第1-2行表示如果返回结果为空且yO验证成功,结束验证。反之,第3-7行表示VO中每一层的数据往上聚合计算素数矩阵和哈希值,并且验证成员关系。第8-9行表示将计算得的根节点素数矩阵与哈希值和块头存储的数据对比,一致则验证成功。
为了便于理解,这里提供一个实例。数据拥有者发送的查询矩阵为M(q)=[11 3]T给SP。SP首先从根节点n13开始检索,计算M13×M(q)结果中存在整数,将C13添加到VO中,继续检索其子树。接下来计算
Figure BDA0004000051780000142
所以节点n10的子树节点均不满足查询条件,将M10和h10添加到VO中,停止往下检索。再计算
Figure BDA0004000051780000143
将C11和τ13,2添加到VO中,继续往下检索。一直检索到叶子节点,满足查询条件的结果为n6
Figure BDA0004000051780000144
说明数据对象o6中存在一个关键词满足查询条件,将Ek(6)添加到R(q),id6添加到ID,M4、M5、M6和τ11,3添加到认证矢量VO。再计算
Figure BDA0004000051780000145
满足查询条件,把M12和h12添加到VO中,停止往下检索。
SP把R(q)=<Ek(6)>和VO=<<〈M4,M5,M6>,M10,h1o,M12,h12>,<C13,C11,τ13,2,τ11,3>>一起返回给数据需求者,把ID发送给数据拥有者。VO分为两个部分,前面部分用来验证节点是否包含数据,后面部分用来验证数据没被篡改。轻节点首先计算M6×M(q),结果中存在整数说明数据对象o6与查询条件匹配。再根据VO中每层的素数矩阵和哈希值(参考图3中浅色阴影部分),聚合计算出根节点素数矩阵M12和哈希值h13与本地存储的根节点数据进行对比。轻节点再用VO中的根向量承诺C13与本地存储的根向量承诺Ct进行对比。对比成功后,根据VO中的C13,τ13,2和C11验证C11的正确性,C11,τ11,3和Ek(6)(参考图3中深色阴影部分)从下往上验证Ek(6)的正确性。
本发明的一个实施例,提供了一种基于加密关键字的可验证查询索引的装置,包括第一计算单元、第二计算单元、第三计算单元以及第四计算单元,其中:第一计算单元用于计算每个数据对象的id、素数矩阵和加密值;第二计算单元用于计算树中同一层节点素数矩阵的相似度,将当前层中矩阵相似度最大的每q个节点,将其合并插入到同一个父节点中,直到所有节点均有父节点;第三计算单元用于构建KVerkle树,在索引树的每一层从下往上进行合并,直到生成根节点;第四计算单元用于从索引树中查询数据记录,并生成验证矢量。
参照图4,本发明还提供一种电子设备,包括:电子计算机、移动通讯设备、存储服务器以及存储在存储服务器上并可在电子计算机上运行的计算机程序,移动通讯设备向电子计算机发起查询,电子计算机执行程序时实现:上述的基于加密关键字的可验证查询索引方法。
存储服务器可存储实现上述实施例的基于加密关键字的可验证查询索引所需的非暂态软件程序以及指令,当程序及指令被电子计算机执行时,执行上述实施例中的基于加密关键字的可验证查询索引的装置。

Claims (6)

1.一种基于加密关键字的可验证查询索引方法,其特征在于,包括以下步骤:
把Verkle树和索引结构进行结合,构建新的KVerkle索引树;
针对每条数据抽象为一个数据对象,所述的数据对象为:
o=<id,M,Ek(data)>
其中,所述id表示数据的id,所述M表示数据关键字集合编码后的素数矩阵,所述Ek(data)表示数据加密值;
针对区块链中的加密数据,按照Verkle树的构造方法生成KVerkle树;
定义矩阵相似度为两个矩阵中对应位置相同元素的个数与总元素个数的比值;
寻找索引树中当前层中矩阵相似度最大的每q个节点,将其合并插入到同一个父节点中,直到所有节点均有父节点;
在索引树的每一层从下往上进行同样的操作,直到生成根节点;
非叶子节点的数据由其孩子节点的数据计算得来,所有的数据记录存储在叶子节点中,令Ni表示树中的一个节点,q表示节点的孩子个数,叶子节点Ni存储的数据为:
(M(o),Ek(o),πp,i)
其中,所述M(o)为数据关键字集合编码后得到的素数矩阵(用来进行检索),所述Ek(o)为数据记录o的加密值,所述πp,i证明叶子节点的数据加密值是其父节点的向量中第i处的元素,索引树的每个节点都有一个唯一的位置编码pos,所有q个子节点构成的承诺组合成父节点的向量<C1,…Cq>,位置为pos处的非叶子节点存储的内容为:
{Mpos,hpos,Cposp,i}
其中,所述Mpos为所有子节点的素数矩阵的哈达玛乘积,可以使用Mpos作为搜索键来判断后代叶子节点是否包含K(q)中的关键字,所述hpos
Figure FDA0004000051770000011
计算得来的哈希值,用来保证子节点的素数矩阵没有被改变,所述Cpos是由
Figure FDA0004000051770000012
是根据子节点承诺构成的向量<C1,…Cq>计算得到的承诺,所述πpar,i是成员证明,用来证明该节点是父节点npar的第i个子节点,并且其承诺是Cpos,当该节点的孩子节点为叶子节点时,该节点的Cpos
Figure FDA0004000051770000021
计算得到,hpos
Figure FDA0004000051770000022
计算得到。
2.根据权利要求1所述的一种基于加密关键字的可验证查询索引,其特征在于,在获取树中每一个节点存储的素数矩阵、哈希值、向量承诺和成员证明,还包括步骤:
按照预设规则将整棵树由下往上建立。
3.根据权利要求2所述的一种基于加密关键字的可验证查询索引的可验证查询,其特征在于,搜索数据记录和生成验证矢量,查询从根节点开始,自上往下检索整个索引树,所述验证矢量由该叶子节点的数据加密值、树路径上节点的向量承诺和成员证明以及不满足查询条件子树的根节点的素数矩阵和哈希值组成。
4.根据权利要求3所述的一种基于加密关键字的可验证查询索引,其特征在于,查询结果验证,根据查询结果和验证矢量从下往上聚合计算出根部哈希与本地存储的区块头部数据进行比较,确保素数矩阵未被篡改,从下往上使用向量承诺和成员证明确保叶子节点数据未被篡改。
5.一种基于加密关键字的可验证查询索引装置,其特征在于,包括:
第一计算单元,用于计算每个数据对象的id、素数矩阵和加密值;
第二计算单元,用于计算树中同一层节点素数矩阵的相似度,将当前层中矩阵相似度最大的每q个节点,将其合并插入到同一个父节点中,直到所有节点均有父节点;
第三计算单元,用于构建KVerkle树,在索引树的每一层从下往上进行合并,直到生成根节点;
第四计算单元,用于从索引树中查询数据记录,并生成验证矢量。
6.一种电子设备,其特征在于:包括至少一台电子计算机和用于与所述至少一台电子计算机通信连接的存储服务器,所述存储服务器存储有可被所述至少一台电子计算机执行的命令,所述命令被所述至少一台电子计算机执行,以使所述至少一台电子计算机能够执行基于加密关键字的可验证查询索引方法。
CN202211614494.3A 2022-12-15 2022-12-15 一种基于加密关键字的可验证查询索引以及装置 Pending CN116028947A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211614494.3A CN116028947A (zh) 2022-12-15 2022-12-15 一种基于加密关键字的可验证查询索引以及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211614494.3A CN116028947A (zh) 2022-12-15 2022-12-15 一种基于加密关键字的可验证查询索引以及装置

Publications (1)

Publication Number Publication Date
CN116028947A true CN116028947A (zh) 2023-04-28

Family

ID=86069791

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211614494.3A Pending CN116028947A (zh) 2022-12-15 2022-12-15 一种基于加密关键字的可验证查询索引以及装置

Country Status (1)

Country Link
CN (1) CN116028947A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117134993A (zh) * 2023-10-24 2023-11-28 武汉大学 基于可累加承诺验证的检索密文可检测方法及设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117134993A (zh) * 2023-10-24 2023-11-28 武汉大学 基于可累加承诺验证的检索密文可检测方法及设备
CN117134993B (zh) * 2023-10-24 2024-01-05 武汉大学 基于可累加承诺验证的检索密文可检测方法及设备

Similar Documents

Publication Publication Date Title
WO2022099495A1 (zh) 云计算环境中的密文搜索方法及系统、设备
Su et al. Revocable attribute-based signature for blockchain-based healthcare system
Liu et al. Merkle tree: A fundamental component of blockchains
Papamanthou et al. Authenticated hash tables
CN112332979B (zh) 云计算环境中的密文搜索方法及系统、设备
CN112131227A (zh) 一种基于联盟链的数据查询方法及装置
Azraoui et al. Publicly verifiable conjunctive keyword search in outsourced databases
CN109088719B (zh) 外包数据库多关键词可验证密文搜索方法、数据处理系统
CN106980796A (zh) 云环境下基于mdb+树的多域连接关键词的搜索方法
CN114531220A (zh) 一种基于前向和后向隐私的高效容错动态短语搜索方法
CN112446041A (zh) 一种基于安全索引的可验证多关键词密文查询方法及系统
CN112699123A (zh) 一种数据存储系统中数据存在性和完整性校验方法及系统
de Ocáriz Borde An overview of trees in blockchain technology: merkle trees and merkle patricia tries
CN116028947A (zh) 一种基于加密关键字的可验证查询索引以及装置
Zhu et al. Enabling generic verifiable aggregate query on blockchain systems
CN116579001A (zh) 一种基于区块链的多关键字可搜索加密方法
Wang et al. An efficient and privacy-preserving range query over encrypted cloud data
Loporchio et al. A survey of set accumulators for blockchain systems
Wang et al. Efficient verifiable databases with additional insertion and deletion operations in cloud computing
CN113434739A (zh) 一种云环境下前向安全的多用户动态对称加密检索方法
CN112671712A (zh) 一种支持高效动态更新的云数据完整性验证方法及系统
CN116132029A (zh) 基于三选一茫然传输协议的通配符模式匹配方法及系统
US10409845B1 (en) Authenticated pattern matching and exact path queries
CN115766136A (zh) 一种面向能源区块链监管数据的多关键字可搜索加密方法
CN114710357A (zh) 一种可编辑区块链中支持分块验证的动态可搜索加密方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination