本发明属于数据库技术领域,尤其涉及一种支持全更新操作的数据库验证系统及方法。
背景技术:
随着通信网络、云计算技术的快速发展,受到资源约束的企业和个人将其大型数据库外包到云存储服务器中。数据的存储、组织、管理以及可靠性、可用性保证均由云服务提供商负责,使得用户不必构建自己的数据中心,降低了用户的成本。然而云存储技术给人们带来极大存储便利的同时,也带来了巨大的安全挑战。由于数据的位置和组织方式对用户是透明的,在云平台和云服务提供商不完全可信的云存储环境中,存放在云端服务器上的数据极有可能被恶意攻击者删除、篡改、污染,或者由于云存储服务器的损坏、崩溃造成存储数据的丢失。
目前针对云存储数据的完整性验证和恢复已经有较多成果,merkle哈希树(cn201310185462.0,cn201310246856.0)、动态por(proofsofretrievability)(cn201410350589.8)等方法进行验证,但对于云端数据库整体仍缺乏有效的验证方法。为了实现云端数据库的完整性验证,benabbas,gennaro和vahlis首次引入了可验证数据库(简称vdb)的概念,使得资源受限的客户端能够在有限资源环境下验证云端所存储的一个非常大的数据库,为以后高效地检索和更新数据库记录提供便利(backesm,fiored,reischukrm.verifiabledelegationofcomputationonoutsourceddata[c].proceedingsofthe2013acmsigsacconferenceoncomputer&communicationssecurity.acm,2013:863-874.)。如果服务器试图篡改数据库,它将被用户检测到。同时,客户端在vdb方案中使用的计算和存储资源不取决于数据库的大小。第一个实用的vdb方案是通过使用多项式的可验证委托的原语构造的。然而,该方案不具有公开可验证的属性。也就是说,只有数据库的所有者可以验证数据的正确性,不支持第三方仲裁验证。为此,catalano和fiore提出了一个基于原始向量承诺构建可公开验证的vdb方案(d.catalanoandd.fiore,vectorcommitmentsandtheirapplications,pkc2013,lncs7778,springer-verlag,pp.55-72,2013.)。在该方案基础上,chen指出catalano-fiore的vdb框架的安全弱点,然后利用承诺约束的想法提出一个新的可公开验证的vdb方案。其中,所有计算结构都基于双线性组中的标准大小假设,因此对于真实世界应用是高效的(x.chen,j.li,x.huang,j.ma,andw.lou,newpubliclyverifiabledatabaseswithefficientupdates,ieeetransactionsondependableandsecurecomputing,inpress,2015)。
然而,现有vdb方案都仅支持替代这种更新操作,主要原因是外包数据库的数据记录条数必须是固定的,当数据库发生插入操作时,则无法对新加入的数据进行验证,需要重新计算和生成公共参数及承诺向量,复杂度为o(q)的幂级(其中q表示数据库的大小),这将给客户端的配置阶段带来巨大的额外开销。2016年,miao提出了层次化基于承诺向量vdb方法来支持全更新操作(插入、删除、替换)(m.miao,j.wang,j.ma,andw.susilo,publiclyverifiabledatabaseswithefficientinsertion/deletionoperations,journalofcomputerandsystemsciences)。然而,当客户端在数据库的相同位置连续插入数据记录时,层次式承诺中的级别数量线性增加。因此,云服务器(而不是客户端)的计算和存储过载也将线性增加,并且这降低了vdb方案的效率。
为了保证数据在存储过程中不会被非法用户、非可信第三方、非可信云服务器进行修改,因此需要对数据库的完整性进行验证。传统的数据库验证方案可支持替换的更新操作,但仅限于固定大小的数据库,且当发生插入更新操作时,需要重新计算向量承诺,带来巨大的额外开销。然而,现在越来越多的应用需求是用户对存储在云上的数据进行频繁插入、替换、删除等操作,同时在数据进行动态更新时,要求数据动态更新带来的开销尽可能小。因此,在动态云数据库的存储环境下不能直接运用现有的数据库验证方法。
综上所述,现有技术存在的问题是:由于重新生成验证所需的公共参数及向量承诺开销比较大,受固定大小限制的传统数据库验证方案仅支持替换操作,无法支持插入和删除操作。而在如今信息化高速发展的今天,数据库固定大小必将无法满足日益增长的数据存储需求。为此,如何在保证客户端性能要求下实现对动态数据库全更新操作的支持(插入、删除及替换)是本发明的主要贡献点。
技术实现要素:
针对现有技术存在的问题,本发明提供了一种支持全更新操作的数据库验证系统及方法。
本发明是这样实现的,为了消除由于插入操作导致数据库中公共参数及向量承诺重新计算的额外开销,本发明基于布隆过滤器设计了新的数据索引结构—递增式带承诺的可逆布隆过滤器。在此,本发明首先给出了一种带承诺的可逆布隆过滤器,所述带承诺的可逆布隆过滤器定义如下:
令
“count”字段,初始值为0:计数器字段,其中存储单元b[i]中的所有元素的数量1≤i≤q;b[i]中元素x的插入或删除等于b[i].count加1或减1;
“idhash”字段,具有初始值χ(0):承诺值字段,其存储b[i]中所有有序元素的散列值χ(·);
定义b[q+1].count和b[q+1].idhash字段分别代表数据库前q项数据的f(count)和idhash的向量承诺,即b[q+1].count=vc(f(b[0].count),...,f(b[q].count)),b[q+1].idhash=vc(χ(b[0].count),...,χ(b[q].count))。在以上定义的基础上,本发明的另一目的在于设计了一种递增式带承诺的可逆布隆过滤器,所述递增式带承诺的可逆布隆过滤器具体扩展定义如下:
定义
1)对于查询索引
2)服务器将bx-1和bx的信息以及对应的验证凭据交给客户端;
3)若验证凭据合法,则客户端确定索引
本发明的另一目的在于提供一种利用所述递增式带承诺的可逆布隆过滤器的数据库验证方法,所述数据库验证方法包括:
(1)配置阶段:由客户端对可验证数据库进行初始化操作setup(1k,db),定义公共参数pp,计算向量承诺cc,生成验证参数(公钥pk、数据库编码s及私钥sk),并将相关信息连同数据库一同上传给服务器,用于后续用户查询数据过程中对数据库完整性的验证;配置函数setup(1k,db)中k表示安全参数,db表示所操作数据库,即db=(x,vx),1≤x≤q;
(2)查询阶段:客户端提交查询请求
(3)验证阶段:客户端对服务器凭证进行验证
(4)更新阶段:当客户端发生替换、删除和插入操作时,服务器端数据库进行更新,同时由客户端协同服务器修正验证参数。
进一步,所述(1)具体配置过程如下:
1)定义公共参数pp
令
从素数空间
生成公共参数
2)计算向量承诺cc,生成后续验证参数
根据公共参数pp,计算计数字段(1,2,...,q)的向量承诺
客户端随机选择1个元素
若h0合法,服务器将(h0,cc,cr,t)信息添加到辅助信息aux中;
计算完成后,配置以下验证参数:公钥pk=(pp,y,cc,cr),数据库编码s=(pp,aux,db),私钥sk=y。
进一步,所述(2)具体过程如下:
当前计数字段数为(b1,b2,...,bq),其中
给定查询索引
然后服务器计算
服务器将验证凭证与数据一同返回给客户端。
进一步,所述(3)具体过程如下:客户端根据服务器凭证中的信息,分别计算e(h0,g)和
1)e(h0,g)等于
2)
3)
当以上三个条件同时满足时,表明数据库未被篡改,验证通过;客户端根据
进一步,所述(4)中替换操作包括:
客户端首先从服务器获取当前记录
然后,更新t=t+1,
若tx′合法,服务器使用
进一步,所述(4)中删除操作的更新过程是替换操作中vx′=φ的情况。
进一步,所述(4)中插入操作包括:
当客户端在数据单元x中的
然后,更新t=t+1;同时,客户端计算
若tx′合法,服务器使用
本发明的另一目的在于提供一种应用所述带承诺的可逆布隆过滤器的动态数据库系统。
本发明的优点及积极效果为:提出了带承诺的可逆布隆过滤器和递增式带承诺的可逆布隆过滤器,解决了在有限范围内的数据逆向索引问题;并在此基础上,将布隆过滤器与承诺向量计算方法相结合,提出了支持全更新操作(插入、替换、删除)的vdb方法,避免了传统验证系统及方法中数据库固定大小导致公共参数及向量承诺重新计算的额外开销,提高了vdb系统及方法的效率,且支持vdb系统大小的动态变化,更加适用于现今网络所使用的大部分的动态数据库系统。为动态云数据库的安全验证提供技术支撑,保证云端数据库的完整性。
附图说明
图1是本发明实施例提供的支持全更新操作的数据库验证方法流程图。
图2是本发明实施例提供的cibf的插入和删除操作示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
下面结合附图对本发明的应用原理作详细的描述。
如图1所示,本发明实施例提供的支持全更新操作的数据库验证方法包括以下步骤:
s101:配置阶段:由客户端对可验证数据库(vdb)进行初始化操作:定义公共参数,计算向量承诺,生成验证参数,并将相关信息连同数据库一起上传给服务器,用于后续用户查询数据过程中对数据库完整性的验证;
s102:查询阶段:客户端提交查询请求,数据库定位客户端所查询数据,并根据验证参数计算验证凭据,然后连同数据一起发给客户端;
s103:验证阶段:客户端对服务器凭证进行验证,验证合法输出所查询数据;否则输出验证出错;
s104:更新阶段:当客户端发生替换、删除和插入操作(更新操作)时,服务器端数据库进行更新,同时由客户端协同服务器修正验证参数。
下面结合附图对本发明的应用原理作进一步的描述。
为了对固定大小的数据库验证方法进行扩展,本发明主要包括两个部分的内容,首先是带承诺的可逆布隆过滤器,另一个则是支持全操作的数据库验证方法。
1.带承诺的可逆布隆过滤器
(1)带承诺的可逆布隆过滤器定义
带承诺的可逆布隆过滤器(cibf)是一种对布隆过滤器进行扩展后的数据结构,同时具有元素查询和向量承诺功能,用于对存在插入及删除操作的大数据集合s中的元素查询。具体定义如下:
令
“count”字段(初始值为0):计数器字段,其中存储单元b[i]中的所有元素的数量1≤i≤q。注意,b[i]中元素x的插入(或删除)等于b[i].count加1(或减1)。
“idhash”字段(具有初始值χ(0)):承诺值字段,其存储b[i]中所有有序元素的散列值χ(·)。
定义b[q+1].count和b[q+1].idhash字段分别代表数据库前q项数据的f(count)和idhash的向量承诺,即b[q+1].count=vc(f(b[0].count),...,f(b[q].count)),b[q+1].idhash=vc(χ(b[0].count),...,χ(b[q].count))。
cibf的插入和删除操作示例如图2所示。
注意,插入/删除是一个有序操作。一个cibf单元(cell)中的数据记录(x,y)与(y,x)是不同的。在这里,记录(x,y)表示把y插入到x的后面。另外,在该结构下,允许不断地执行相同的操作插入操作(例如,在同一单元中多次插入x)。相比ibf模型,当x已经是集合中的元素的话,则无法再做插入操作。另一方面,如果我们要从一个cibf单元中的删除记录y,那么y必须是这个单元的元素。同样对于ibf模型,不能删除集合中不存在的元素y。
当数据库db上执行一些更新(删除/插入/替换)操作后,cibf的表示如表1所示的形式。
表1
其中,ai≥0,1≤i≤q表示在一个确定单元中数据记录的个数;
(2)递增式带承诺的可逆布隆过滤器
在带承诺的可逆布隆过滤器的支持下,实现了大型数据库的高效安全更新。为了保证验证过程中数据记录的正确索引,设计了递增式带承诺的可逆布隆过滤器(increasingcibf),即对于单元中的b[i].count是一个递增的序列。具体扩展定义如下:
对于如图2所示的一般cibf数据结构,定义
对于采用递增式带承诺的可逆布隆过滤器所描述的数据库来讲,数据的索引过程如下:
表2
1)对于查询索引
2)服务器将bx-1和bx的信息以及对应的验证凭据交给客户端。
3)若验证凭据合法,则客户端可以确定索引
2.支持全更新操作的数据库验证过程
增量式cibf结构实现了数据库数据的有效索引,然而直接更新计数器字段上的向量承诺是非常低效的。如在单元x中执行插入操作,则对于所有的x≤j≤q,需要更新其计数器和散列值字段。其中,计数器字段做bj←bj+1更新操作,而散列值字段则需要由客户端执行
在此,使用分裂散列(hashsplitting)来解决这个问题。在此令计数器字段上的承诺操作(即vc(f(b1),...,f(b2),...,f(bq)))为:
现在考虑更新计数器字段的一般情况。注意,db的原始计数器字段是(1,1,...,1),因此递增式的布隆过滤器表示为(1,2,...,q)。假设更新后的计数器字段(b1,b2,...,bq),我们可以递归式计算承诺值
支持全更新操作的数据库验证过程包含以下4个阶段:
(1)配置阶段:由客户端对可验证数据库(vdb)进行初始化操作setup(1k,db),定义公共参数pp,计算向量承诺cc和cr,生成验证参数(公钥pk、数据库编码s及私钥sk),并将相关信息连同数据库一同上传给服务器,用于后续用户查询数据过程中对数据库完整性的验证。该阶段主要由用户端计算完成。其中,配置函数setup(1k,db)中k表示安全参数,db表示所操作数据库,即db=(x,vx),1≤x≤q。具体配置过程如下:
1)定义公共参数pp
令
从素数空间
生成公共参数
2)计算向量承诺cc,生成后续验证参数
根据公共参数pp,计算计数字段(1,2,...,q)的向量承诺
客户端随机选择1个元素
若h0合法,服务器将(h0,cc,cr,t)信息添加到辅助信息aux中。
计算完成后,配置以下验证参数:令公钥pk=(pp,y,cc,cr),数据库编码s=(pp,aux,db),私钥sk=y。
至此,数据库验证配置完成,客户端可以在后续的查询过程中对数据库的完整性进行验证。
(2)查询阶段:客户端提交查询请求
假设当前计数字段数为(b1,b2,...,bq),其中
给定查询索引
然后服务器计算
服务器将验证凭证与数据一同返回给客户端。
(3)验证阶段:客户端对服务器凭证进行验证
客户端根据服务器凭证中的信息,分别计算e(h0,g)和
1)e(h0,g)等于
2)
3)
当以上三个条件同时满足时,表明数据库未被篡改,验证通过。客户端根据
(4)更新阶段:当客户端发生替换、删除和插入操作(更新操作)时,服务器端数据库进行更新,同时由客户端协同服务器修正验证参数。
1)替换操作
为了替换索引
然后,更新t=t+1,
若tx′合法,服务器使用
至此,替换操作数据及验证参数更新完成,新的验证参数将在后续的数据访问中被使用。
2)删除操作
删除操作的更新过程与替换基本一致,是替换操作中vx′=φ的情况。
3)插入操作
当客户端在数据单元x中的
然后,更新t=t+1;同时,客户端计算
若tx′合法,服务器使用
至此,插入操作数据及验证参数更新完成,新的验证参数将在后续的数据访问中被使用。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。