一种支持错误记录定位可验证数据库的检测方法与流程

文档序号:15817306发布日期:2018-11-02 22:46阅读:244来源:国知局
一种支持错误记录定位可验证数据库的检测方法与流程

本发明属于数据完整保护技术领域,尤其涉及一种支持错误记录定位可验证数据库的检测方法。

背景技术

目前,业内常用的现有技术是这样的:云计算技术将大量物理设备的计算、网络和存储资源整合起来,通过互联网为用户提供按需和弹性的相应服务。然而,为了充分利用这些服务,以往在本地设备执行的任务需要委托给云服务提供商。在这种情况下,云计算的用户失去了对自己数据的控制,数据所有权与管理权分离会带来许多安全与隐私问题。因此,通常要对外包数据进行加密,保证只有合法用户才能访问并解密外包数据。然而,加密主要保护的是外包数据的机密性,于是产生了可验证数据库(vdb)的概念,其可被视为一种特殊的可验证计算,为云存储提供了可靠性、完整性、可验证性等安全保障。虽然大量研究者已经充分研究了可验证数据库并提出了许多可验证数据库方案,但在处理大量外包数据上仍然存在不同的问题和挑战。首先,现有可验证数据库方案中密钥参数的大小对于大规模数据来说是不可接受的。以基于向量承诺(vc)的第一个可验证数据库方案为例,如果一个由该可验证数据库方案保护的数据库拥有q条记录,其私钥参数的大小超过q,其公钥参数的大小超过q2。巨大的公钥量给可验证数据库的初始化和查询步骤带来了更高的计算和通信开销,使得密钥分发和其他相关管理过程更加复杂。因此,无论外包数据有多大,需要保持密钥大小尽可能地小。其次,现有可验证数据库方案可以验证外包数据库是否被篡改,但无法在验证结果表明外包数据未经数据拥有者认证而被修改时定位错误的记录。可验证数据库的最终目标不应该只是检测到数据库被篡改,可验证数据库的用户需要找到特定的错误记录。这一方法在现实应用中是不可行的,特别是当数据库很大时。因此,错误记录定位的功能应该引入可验证数据库方案中。此外,属于同一个逻辑完整数据库的记录通常存储在不同的地理位置,例如云存储和内容分发网络(cdn)。采用现有的可验证数据库方案验证这种数据库,服务器传输分布式记录时会带来额外的通信开销。此外,由于企业常常以严格的等级结构组织,群组应用和分层数据管理结构被广泛采用,数据的访问由用户的权限来控制。然而,所有的传统可验证数据库方案只能验证整个外包数据库,无法直接应用于这些分布式数据场景和分层数据场景。

综上所述,现有技术存在的问题是:

(1)现有可验证数据库方案在初始化和查询阶段效率较低,特别是其中的公钥参数大小无法适用于现实场景,造成了过大的服务器存储空间压力;

(2)现有可验证数据库方案只关注于整个外包数据库的验证,也就是说,验证者只能判断整个数据库是否被篡改,而无法验证数据库的一部分并对错误的数据进行定位,影响了数据库完整性验证的灵活性;

(3)现有可验证数据库方案缺少分布式和分层验证,限制了数据库系统在分布式场景下的应用。

解决上述技术问题的难度和意义:如何压缩现有技术中的公钥参数是解决上述问题(1)的难点,可实现以较小的存储空间开销完成数据库的完整性验证;如何基于向量承诺方法设计一种新的数据结构是解决上述问题(2)的难点,可实现灵活的数据库错误记录定位;如何构造一种新的分层验证机制是解决上述问题(3)的难点,可实现支持分布式与分层验证的数据库系统。



技术实现要素:

针对现有技术存在的问题,本发明提供了一种支持错误记录定位可验证数据库的检测方法。

本发明是这样实现的,一种向量承诺树,所述向量承诺树是以递归方式对消息序列做承诺的q叉树,叶子节点共有q个消息,最深非叶子节点是对其q个孩子消息所做的承诺,其他非叶子节点是对其q个孩子承诺所做的承诺;向量承诺树的高度n、消息序列的大小q和承诺单元的大小q之间满足关系

进一步,所述向量承诺树的承诺单元是采用向量承诺方法做承诺的基本单位,承诺单元是消息子序列或承诺集合;

进一步,所述向量承诺树包含:

(1)生成密钥vct.keygen(1k,q,q):输入安全参数k、每个承诺单元的大小q和整个消息的大小q(q=poly(k)),密钥生成算法vct.keygen(1k,q,q)输出公共参数集pp和向量承诺树的高度n,从根到最深的非叶子节点;消息空间记为承诺空间记为

(2)计算承诺vct.compp(m1,…,mq,f):输入含有q个消息的序列和映射函数f:根据公共参数pp,承诺算法vct.compp(m1,…,mq,f)输出附加信息aux和承诺集合c,其中c中的每个值是对含有消息或承诺的承诺单元所做的向量承诺;

(3)打开承诺vct.openpp(m,i,aux,ac,f):输入数据库中索引为i的消息m、附加信息aux、访问控制参数和映射函数f:只有当ac满足访问控制规则时,打开算法vct.openpp(m,i,aux,ac,f)才输出证据集合m是所有q个被承诺消息中的第i个;打开算法由原始承诺者或其他合法用户运行;

(4)验证承诺vct.verpp(c,m,i,λi,ac):输入承诺集合c、索引为i的消息m、证据集合λi和访问控制参数ac,验证函数vct.verpp(c,m,i,λi,ac)输出或(⊥,ω);输出意味着ac不满足访问控制策略;否则,只有当λi是一个有效证据,证明c是对序列(m1,…,mq)生成的,其中m=mi,则验证函数才并输出否则,输出(⊥,ω),其中ω是错误记录所在范围;

(5)更新承诺vct.verpp(c,m,i,λi,ac):输入承诺集合c、第i个位置上的原消息mi和新消息m′i以及映射函数f:承诺更新算法vct.updatepp(c,mi,m′i,i,f)输出新的承诺集合c′和更新信息集合u;承诺更新算法由生成c并拟将其中第i个消息mi更新为m′i的原始承诺者运行;

(6)更新证据vct.proofupdatepp(c,λj,m′i,i,u):输入承诺集合c、证据集合λi、拟替换外包数据库中第i个记录的新消息m′i、更新信息u和映射函数f:证据更新算法vct.proofupdatepp(c,λj,m′i,i,u,f)输出新的证据集合λ′j;证据更新算法由任何拥有对应c中第j个消息的证据集合λj的用户运行,计算对新的承诺集合c′有效的证据集合λ′j。

进一步,所述密钥生成算法具体包括:

vct.keygen(1k,q,q):q为每个承诺单元的大小,q为所有被承诺消息的总数;为了便于表示,令q=qn;密钥生成算法具体构造如下:令为两个素数p阶双线性群,满足双线性映射e:为一个随机生成元;在中随机选择z1,…,zq;对所有i=1,…,q,设置对所有i,j=1,…,q且i≠j,设置设置pp=(g,{hi}i∈[1,q],{hi,j}i,j∈[1,q],i≠j);消息空间为承诺空间为

所述(2)具体包括:

vct.compp(m1,…,mq,f):令cx,y表示向量承诺树中第x层的第y个承诺值,承诺集合c是这些cx,y的集合;根节点表示为c0,1,最深节点表示为最深节点计算如下:

其中y=1,…,qn-1;采用一个抗碰撞哈希函数f:将双线性群中的元素映射为中的元素,则其它节点(cx,y,其中x=n-2,…,0且y=1,…,qx)计算如下:

然后,承诺算法输出承诺集合c={cx,y|x∈[0,n-1],y∈[1,qx]}和附加信息aux=(m1,…,mq);

所述(3)具体包括:

vct.openpp(m,i,aux,ac,f):分解访问控制参数ac=(μ,ν),即只允许访问第μ层的第ν个元素,验证ac参数的有效性如下:若打开算法终止并输出⊥;否则,计算证据集合λi;首先,最深证据λi,n-1计算如下:

其中是两个分别用于确定第x层中第i个消息承诺单元序号和对应元素序号的函数;然后,对于x=n-2,…,ν,计算:

其中θ(i,·)和δ(·)是上式中的函数相同;此外,还需计算一个与λi,x对应的mi,x:

mi,n-1=mθ(i,n-1)q+δ(i,n-1);

然后,对于x=n-2,…,ν:

mi,x=f(cx+1,θ(i,x)q+δ(i,x));

最后,打开算法输出λi={(λi,x,mi,x)|x∈[ν,n-1]};输入参数μ和ν用于控制可验证记录的规模;

所述(4)的验证过程包括:

vct.verpp(c,m,i,λi,ac):分解并验证访问控制参数ac=(μ,ν)如下:若验证算法终止并输出0和一个空集否则,设置rst=(α,β)=(-1,-1);对于x=n-1,…,ν,设置β=x,若设置α=1并继续;否则设置α=⊥并退出循环;在x的循环结束后,若α=1且β=ν,则验证通过,验证算法输出否则说明有未经认证被篡改的消息,验证失败,验证算法给出错误消息所在的范围;令φ(cx,y)表示以cx,y为承诺的消息集合,则错误的记录在ω=φ(cβ,θ(i,β)+1)-φ(cβ+1,θ(i,β+1)+1)范围内,验证算法输出(⊥,ω);

所述(5)更新包括:

vct.updatepp(c,mi,m′i,i):承诺更新算法更新从叶子节点(第i个消息)到根节点路径上的所有承诺;首先,承诺更新算法更新第n-1层上的承诺,

然后,对于其他x=n-2,…,0,承诺更新如下:

其中cn,i=mi且c′n,i=m′i;最后,承诺更新算法输出c′和u,其中c′是新的承诺集合{c′x,y|x∈[0,n-1],y∈[1,qx]},u是更新信息(mi,m′i,i);

所述(6)证据更新具体包括:

vct.proofupdatepp(c,λj,m′i,i,u):给定u,拥有位于j位置消息原始承诺集合c和证据集合λj的用户可以使用证据更新算法更新其证据集合和承诺集合,更新包括以下两个步骤:

更新承诺:与承诺更新算法vct.updatepp(·)相同;

更新证据:对于所有x=n-1,…,0,若δ(j,x)=δ(i,x),则λj,x保持不变;否则对于x=n-1,计算:

对于x=n-2,…,0,计算:

本发明的另一目的在于提供一种应用所述向量承诺树的支持错误记录定位可验证数据库的检测方法,所述支持错误记录定位可验证数据库的检测方法包括:

(1)配置阶段hvdb.setup(1k,q,db,q):输入安全参数k、承诺单元大小q和大小为q的数据库db,配置算法hvdb.setup(1k,q,db,q)输出拟分发给客户端并为其私有的密钥sk、拟分发给所有需要验证证据的用户的公钥pk以及拟上传至服务器的编码为s的数据库;配置算法由客户端运行;

(2)查询阶段hvdb.query(pk/sk,s,x,ac):输入公钥pk或私钥sk、编码后的数据库s、查询索引x和查询请求者的访问控制参数ac,查询算法hvdb.query(pk/sk,s,x,ac)首先检查访问控制参数ac是否有效,只有当ac满足访问控制策略时,才输出一个查询结果τ=(v,π);否则,输出一个错误结果⊥;查询算法由客户端或合法用户请求,由服务器执行;

(3)验证阶段hvdb.verify(pk,x,τ,ac):输入公钥pk、查询索引x、查询结果τ和验证者的访问控制参数ac,与查询算法类似,验证算法hvdb.verify(pk,x,τ,ac)同样首先检查ac的有效性,当同时满足ac有效且τ正确验证x则输出一个值v和一个空集;否则,输出一个错误结果⊥和一个空集表示访问控制参数ac是无效的,或输出一个错误结果⊥和一个表示错误记录所在位置的非空范围ω;

(4)客户端更新阶段hvdb.clientupdate(sk,x,v′):输入私钥sk、更新记录索引x和第x个记录新的值v′,若记录更新成功,则客户端更新算法hvdb.clientupdate(sk,x,v′)输出一个更新令牌t′x和一个新的公钥pk′;否则,输出一个错误⊥;客户端更新算法由客户端运行,以将第x个数据库记录的值修改为v′;

(5)服务器更新阶段hvdb.serverupdate(pk,s,x,t′x):输入公钥pk、编码后的数据库s、更新记录索引x和更新令牌t′x,服务器更新算法hvdb.serverupdate(pk,s,x,t′x)输出s中第x个记录新的值v′;服务器更新算法由服务器运行,以根据客户端提供的口令t′x来更新数据库s。

进一步,所述(1)中配置算法具体包括:

hvdb.setup(1k,q,db,q):输入的原始数据库是键-值对的形式,并将其表示为db={(i,vi)|i=1,…,q};首先,调用向量承诺树中的密钥生成算法获取公共参数集合pp:

pp←vct.keygen(1k,q,q);

其中的输入参数与本配置算法中的输入参数相对应;然后分解数据库db中的键-值对记录以建立一个含有q个值的数组(v1,…,vq),并使用公共参数集合pp调用向量承诺树中的承诺算法获取(c,aux):

(c,aux)←vct.compp(v1,…,vq);

最后,将中间参数组合成三个输出结果:

进一步,所述(2)中查询算法具体过程如下:

hvdb.query(pk,s,x,ac):令vx=db(x)表示数据库db中的第x条记录,分解访问控制参数为ac=(μ,ν),表示查询请求者可以访问第μ层中第ν个承诺所属的所有元素;调用向量承诺树中的打开算法,获取第x条记录的证据集合:

λx←vct.openpp(vx,x,aux,(μ,ν));

其中所有输入都从本查询算法中直接或间接得到;然后,输出结果τ由下式构成:

τ=(vx,λx)。

进一步,所述(3)中验证算法具体包括:

hvdb.verify(pk,x,τ,ac):通过调用向量承诺树中的验证算法完成数据库查询结果验证:

(rstvalue,rstset)←vct.verpp(c,x,vx,λx);

然后处理临时结果(rstvalue,rstset)如下:

rstvalue=0且验证算法输出表示验证者没有权限访问第i条记录;

rstvalue=1且验证算法输出其中vx为从τ中分解得到的数据库第x条记录,这一输出结果表示数据库没有被修改;

rstvalue=⊥且验证算法输出(⊥,ω),表示数据库中位置范围ω中有数据未经认证被篡改;符号⊥表示错误,区间ω表示错误记录所在位置范围。

进一步,所述(4)中客户端更新算法具体包括:

hvdb.clientupdate(sk,x,v′):通过调用向量承诺树中的承诺更新算法完成客户端更新;在执行更新之前,通过查询算法和验证算法确认当前数据库的完整性;更新过程如下:首先,客户端通过调用查询算法获取数据库的第x条记录:

τ←hvdb.query(pk,s,x);

得到查询结果τ,客户端通过调用完整性验证算法确认外包数据库未经修改,检查输出是否满足验证算法:

验证成功,则客户端更新算法调用向量承诺树中的承诺更新算法:

(c′,u)←vct.updatepp(c,vx,v′x,x),

输出新的公钥pk′=(pp,c′)和更新令牌t′x=(pk′,v′x,u);否则,客户端更新算法终止并输出错误⊥;

所述(5)中服务器更新算法具体包括:

hvdb.serverupdate(pk,s,x,t′x):客户端完成第x条记录的更新后,当数据库存储服务器收到更新令牌t′x时,开始更新存储的相关值:服务器首先分解更新令牌为(pk′,v′x,u),然后将第x条数据库记录替换为v′x,并向s中的aux添加更新信息u。

本发明的另一目的在于提供一种应用所述支持错误记录定位可验证数据库的检测方法的动态数据库系统。

综上所述,本发明的优点及积极效果为:本发明提出了向量承诺树的概念和方法,是原始向量承诺定义的递归方式扩展,将元素组合成固定大小的单元,这些单元共享一组密钥参数,以实现密钥参数总量的控制;另外,在向量承诺树中,不同单元可以对应不同的访问许可,不同单元中的元素相对独立,它们可以被分别同时处理,这使得分布式和分层验证变为可能。本发明还提出了一个新的数据库分层验证方法,其私钥和公钥数量由一个恒定参数决定,而不是由外包数据库的大小决定;不同于现有数据库验证方法,本发明的数据库分层验证方法根据用户权限允许数据用户验证外包数据库的一部分;另外,如果一条记录被篡改,本发明的数据库分层验证方法还可以给出错误记录索引所在的位置范围。

本发明实现的技术效果与现有技术的对比如表1所示。其中,m、e、i、p分别表示群中的乘法运算、指数运算、求逆运算和双线性对运算,群中的加法运算忽略不计,q和q分别表示整个数据库的大小和每个承诺单元的大小,

表1

附图说明

图1是本发明实施例提供的支持错误记录定位可验证数据库的检测方法流程图。

图2是本发明实施例提供的向量承诺树示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实现可验证数据库中的分层验证和错误记录定位,并控制密钥参数的大小,基于向量承诺设计了一种新的数据结构——向量承诺树。

如图1所示,本发明实施例提供的支持错误记录定位可验证数据库的检测方法包括以下步骤:

s101:配置阶段:由客户端对可验证数据库(vdb)进行初始化操作,定义公共参数,计算向量承诺,并将相关信息发送连同数据库一同上传给服务器,用于后续用户查询数据过程中对数据库完整性的验证;

s102:查询阶段:客户端提交查询请求,数据库定位客户端所查询数据,并根据公共参数计算验证凭据,然后连同数据一起发给客户端;

s103:验证阶段:客户端对服务器凭证进行验证,验证通过输出所查询数据;否则输出验证出错;

s104:客户端更新阶段:当客户端发生替换、删除和插入操作(更新操作)时,客户端更新公共参数并生成更新令牌交给服务器;

s105:服务器更新阶段:服务器根据公共参数和客户端提供的更新令牌对数据库进行更新。

本发明支持错误记录定位的数据库分层验证方法主要在现有技术的基础上实现以下目标:

高效性。对于任意的数据库db∈[q]×{0,1}*,其中q=poly(k),客户端、服务器和其他用户所花费的计算和存储资源不超过

支持错误记录定位。对于任意的数据库db∈[q]×{0,1}*,其中q=poly(k),当外包数据库未经数据拥有者认证而被修改时,验证者可发现异常并得到一些线索以找到错误记录的序号。

下面结合附图对本发明的应用原理作进一步的描述。

本发明主要包括两个部分的内容,首先是向量承诺树,另一个则是支持错误记录定位的数据库分层验证方法。

1、向量承诺树

1.1向量承诺树定义

向量承诺树(vct)是一个以递归方式对消息序列做承诺的q叉树,并支持打开特定位置的承诺;其叶子节点共有q个消息,最深非叶子节点是对其q个孩子消息所做的承诺,其他非叶子节点是对其q个孩子承诺所做的承诺;向量承诺树中的承诺单元是采用向量承诺方法做承诺的基本单位,承诺单元可以是消息子序列或承诺集合;向量承诺树的高度n、消息序列的大小q和承诺单元的大小q之间满足关系向量承诺树的示例如图2所示。

向量承诺树是包含以下多项式时间算法的非交互式密码学原语:

vct.keygen(1k,q,q):输入安全参数k、每个承诺单元的大小q和整个消息的大小q(q=poly(k)),密钥生成算法输出公共参数集pp和向量承诺树的高度n(从根到最深的非叶子节点);消息空间记为承诺空间记为

vct.compp(m1,…,mq,f):输入含有q个消息的序列和映射函数f:根据公共参数pp,承诺算法输出附加信息aux和承诺集合c,其中c中的每个值是对含有消息或承诺的承诺单元所做的向量承诺;

vct.openpp(m,i,aux,ac,f):输入数据库中索引为i的消息m、附加信息aux、访问控制参数和映射函数f:只有当ac满足访问控制规则时,打开算法才输出证据集合m是所有q个被承诺消息中的第i个;打开算法由原始承诺者或其他合法用户运行;

vct.verpp(c,m,i,λi,ac):输入承诺集合c、索引为i的消息m、证据集合λi和访问控制参数ac,验证函数输出或(⊥,ω);输出意味着ac不满足访问控制策略;否则,只有当λi是一个有效证据,证明c是对序列(m1,…,mq)生成的,其中m=mi,则验证函数才并输出否则,输出(⊥,ω),其中ω是被篡改记录所在范围;

vct.updatepp(c,mi,m′i,i,f):输入承诺集合c、第i个位置上的原消息mi和新消息m′i以及映射函数f:承诺更新算法输出新的承诺集合c′和更新信息集合u;承诺更新算法由生成c并拟将其中第i个消息mi更新为m′i的原始承诺者运行;

vct.proofupdatepp(c,λj,m′i,i,u,f):输入承诺集合c、证据集合λi、拟替换外包数据库中第i个记录的新消息m′i、更新信息u和映射函数f:证据更新算法输出新的证据集合λ′j;证据更新算法由任何拥有对应c中第j个消息的证据集合λj的用户运行,计算对新的承诺集合c′有效的证据集合λ′j。

1.2基于cdh假设的向量承诺树具体方案

本发明提出了基于双线性群中计算性diffie-hellman(cdh)假设的向量承诺树具体方案,采用基于cdh的向量承诺方案对承诺单元做承诺。根据上述向量承诺树框架的定义,本发明的向量承诺树具体构造如下:

vct.keygen(1k,q,q):q为每个承诺单元的大小,q为所有被承诺消息的总数;为了便于表示,令q=qn;密钥生成算法具体构造如下:令为两个素数p阶双线性群,满足双线性映射e:为一个随机生成元;在中随机选择z1,…,zq;对所有i=1,…,q,设置对所有i,j=1,…,q且i≠j,设置设置pp=(g,{hi}i∈[1,q],{hi,j}i,j∈[1,q],i≠j);消息空间为承诺空间为

vct.compp(m1,…,mq,f):令cx,y表示向量承诺树中第x层的第y个承诺值,承诺集合c是这些cx,y的集合;根节点表示为c0,1,最深节点表示为最深节点计算如下:

其中y=1,…,qn-1;采用一个抗碰撞哈希函数f:将双线性群中的元素映射为中的元素,则其它节点(cx,y,其中x=n-2,…,0且y=1,…,qx)计算如下:

然后,承诺算法输出承诺集合c={cx,y|x∈[0,n-1],y∈[1,qx]}和附加信息aux=(m1,…,mq);

vct.openpp(m,i,aux,ac,f):分解访问控制参数ac=(μ,ν),即只允许访问第μ层的第ν个元素,验证ac参数的有效性如下:若打开算法终止并输出⊥;否则,计算证据集合λi;首先,最深证据λi,n-1计算如下:

其中是两个分别用于确定第x层中第i个消息承诺单元序号和对应元素序号的函数;然后,对于x=n-2,…,ν,计算

其中θ(i,·)和δ(·)是上式中的函数相同;此外,还需计算一个与λi,x对应的mi,x:

mi,n-1=mθ(i,n-1)q+δ(i,n-1);

然后,对于x=n-2,…,ν:

mi,x=f(cx+1,θ(i,x)q+δ(i,x));

最后,打开算法输出λi={(λi,x,mi,x)|x∈[ν,n-1]};输入参数μ和ν用于控制可验证记录的规模;

vct.verpp(c,m,i,λi,ac):分解并验证访问控制参数ac=(μ,ν)如下:若验证算法终止并输出0和一个空集否则,设置rst=(α,β)=(-1,-1);对于x=n-1,…,ν,设置β=x,若设置α=1并继续;否则设置α=⊥并退出循环;在x的循环结束后,若α=1且β=ν,则验证通过,验证算法输出否则说明有未经认证被篡改的消息,验证失败,验证算法给出错误消息所在的范围;令φ(cx,y)表示以cx,y为承诺的消息集合,则错误的记录在ω=φ(cβ,θ(i,β)+1)-φ(cβ+1,θ(i,β+1)+1)范围内,验证算法输出(⊥,ω);

vct.updatepp(c,mi,m′i,i):承诺更新算法更新从叶子节点(第i个消息)到根节点路径上的所有承诺;首先,承诺更新算法更新第n-1层上的承诺:

然后,对于其他x=n-2,…,0,承诺更新如下:

其中cn,i=mi且c′n,i=m′i。最后,承诺更新算法输出c′和u,其中c′是新的承诺集合{c′x,y|x∈[0,n-1],y∈[1,qx]},u是更新信息(mi,m′i,i);

vct.proofupdatepp(c,λj,m′i,i,u):给定u,拥有位于j位置消息原始承诺集合c和证据集合λj的用户可以使用证据更新算法更新其证据集合和承诺集合,更新包括以下两个步骤:

更新承诺:与承诺更新算法vct.updatepp(·)相同;

更新证据:对于所有x=n-1,…,0,若δ(j,x)=δ(i,x),则λj,x保持不变;否则对于x=n-1,计算:

对于x=n-2,…,0,计算:

2、支持错误记录定位的数据库分层验证方法

2.1分层可验证数据库(hvdb)框架

本发明扩展了现有的可验证数据库框架,改进了初始化阶段的计算和存储效率,并提供了分层验证和定位错误记录的功能。本发明的支持错误记录定位的数据库分层验证方法包括以下多项式时间算法:

hvdb.setup(1k,q,db,q):输入安全参数k、承诺单元大小q和大小为q的数据库db,配置算法输出拟分发给客户端(数据库拥有者)并为其私有的密钥sk、拟分发给所有需要验证证据的用户的公钥pk以及拟上传至服务器的编码为s的数据库;配置算法由客户端运行;

hvdb.query(pk/sk,s,x,ac):输入公钥pk或私钥sk、编码后的数据库s、查询索引x和查询请求者(客户端或合法用户)的访问控制参数ac,查询算法首先检查访问控制参数ac是否有效,只有当ac满足访问控制策略时,才输出一个查询结果τ=(v,π);否则,输出一个错误结果⊥;查询算法由客户端或合法用户请求,由服务器执行;

hvdb.verify(pk,x,τ,ac):输入公钥pk、查询索引x、查询结果τ和验证者的访问控制参数ac,与查询算法类似,验证算法同样首先检查ac的有效性,当同时满足ac有效且τ正确验证x则输出一个值v和一个空集;否则,输出一个错误结果⊥和一个空集表示访问控制参数ac是无效的,或输出一个错误结果⊥和一个表示错误记录所在位置的非空范围ω;

hvdb.clientupdate(sk,x,v′):输入私钥sk、更新记录索引x和第x个记录新的值v′,若记录更新成功,则客户端更新算法输出一个更新令牌t′x和一个新的公钥pk′;否则,输出一个错误⊥;客户端更新算法由客户端运行,以将第x个数据库记录的值修改为v′;

hvdb.serverupdate(pk,s,x,t′x):输入公钥pk、编码后的数据库s、更新记录索引x和更新令牌t′x,服务器更新算法输出s中第x个记录新的值v′;服务器更新算法由服务器运行,以根据客户端提供的口令t′x来更新数据库s。

2.2基于向量承诺树的分层可验证数据库具体方案

基于向量承诺树的分层可验证数据库具体方案构造如下:

hvdb.setup(1k,q,db,q):假设输入的原始数据库是键-值对的形式,并将其表示为db={(i,vi)|i=1,…,q};首先,调用向量承诺树中的密钥生成算法获取公共参数集合pp:

pp←vct.keygen(1k,q,q);

其中的输入参数与本配置算法中的输入参数相对应;然后分解数据库db中的键-值对记录以建立一个含有q个值的数组(v1,…,vq),并使用公共参数集合pp调用向量承诺树中的承诺算法获取(c,aux):

(c,aux)←vct.compp(v1,…,vq);

最后,将这些中间参数组合成三个输出结果:

hvdb.query(pk,s,x,ac):令vx=db(x)表示数据库db中的第x条记录,分解访问控制参数为ac=(μ,ν),表示查询请求者可以访问第μ层中第ν个承诺所属的所有元素;调用向量承诺树中的打开算法,获取第x条记录的证据集合:

λx←vct.openpp(vx,x,aux,(μ,ν));

其中所有输入都从本查询算法中直接或间接得到;然后,输出结果τ由下式构成:

τ=(vx,λx);

hvdb.verify(pk,x,τ,ac):通过调用向量承诺树中的验证算法完成数据库查询结果验证:

(rstvalue,rstset)←vct.verpp(c,x,vx,λx);

然后处理临时结果(rstvalue,rstset)如下:

情况1:若rstvalue=0且验证算法输出表示验证者没有权限访问第i条记录;

情况2:若rstvalue=1且验证算法输出其中vx为从τ中分解得到的数据库第x条记录,这一输出结果表示数据库没有被修改;

情况3:若rstvalue=⊥且验证算法输出(⊥,ω),表示数据库中位置范围ω中有数据未经认证被篡改;符号⊥表示错误,区间ω表示错误记录所在位置范围;

本发明支持公开验证,因此验证算法以公钥pk为输入;

hvdb.clientupdate(sk,x,v′):通过调用向量承诺树中的承诺更新算法完成客户端更新;在执行更新之前,通过查询算法和验证算法确认当前数据库的完整性;更新过程如下:首先,客户端通过调用查询算法获取数据库的第x条记录:

τ←hvdb.query(pk,s,x);

得到查询结果τ,客户端通过调用完整性验证算法确认外包数据库未经修改,检查输出是否满足验证算法中的情况2:

若验证成功,则客户端更新算法调用向量承诺树中的承诺更新算法:

(c′,u)←vct.updatepp(c,vx,v′x,x);

输出新的公钥pk′=(pp,c′)和更新令牌t′x=(pk′,v′x,u);否则,客户端更新算法终止并输出错误⊥;

hvdb.serverupdate(pk,s,x,t′x):客户端完成第x条记录的更新后,当数据库存储服务器收到更新令牌t′x时,开始更新存储的相关值:服务器首先分解更新令牌为(pk′,v′x,u),然后将第x条数据库记录替换为v′x,并向s中的aux添加更新信息u。

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

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