基于ADS的外包数据库SQL查询完整性验证系统及方法与流程

文档序号:13137105阅读:425来源:国知局
本发明属于外包数据库完整性验证领域,具体涉及一种基于ads(认证数据结构)的外包数据库sql查询完整性验证系统及方法。
背景技术
::随着互联网应用的迅速发展,数据量和用户数快速增长。这既使得企业和组织对自身数据的存储、管理与维护变得更具挑战性,又对设备的计算能力提出了更高要求。此时,对数据库服务的需求除了数据库的内容服务之外,还需要安全可靠地管理、维护数据库的服务,这种服务称为外包数据库(outsourceddatabases,odb)。外包数据库,指的是数据拥有者把数据库外包给第三方管理,通常称第三方为数据库服务提供商(databaseserviceprovider,dsp),由dsp进行数据库的存储、维护、管理等任务。这样,企业或者机构可以取消自己本地的数据中心,从复杂的数据管理和维护中解放出来,进而专注于提升自身的核心竞争力。然而,odb在为企业和个人提供数据的存储、管理、计算等服务的同时,它所带来的安全隐患也不容忽视。对于关系数据库而言,sql查询结果的完整性是数据库安全中的一个重要方面。dsp的服务器可能本身是恶意的或遭受了外部攻击,甚至服务器自身有漏洞,用户委托dsp对数据进行管理,因此用户不能保证存储在dsp的数据不被破坏,但如果有一套安全机制可以保证用户得到的查询结果是完整的,这也可以达到用户安全地使用外包数据库查询数据的目的。因此,研究外包数据库sql查询结果的完整性验证方法具有十分重要的意义。目前,针对验证外包数据库服务完整性的问题,国内外的学者做了大量的研究工作,相关的研究主要有3类。第一类是基于数字签名的方法,将数字签名技术应用到完整性验证领域;第二类是基于认证数据结构的方法,主要是通过设计一种认证数据结构(如merkle树)来提高验证数据完整性的效率;第三类是基于可验证计算的方法,主要是研究通用的可验证计算方案,验证服务器计算结果的正确性和完备性,正确性和完备性即为数据完整性的两个方面,正确性是指数据未被篡改,完备性是指数据未被恶意删除。然而这些关于外包数据库sql查询完整性验证的大多数方案中,很少有支持关系数据库的多种sql查询的完整性验证的方案,而且能够应用到实际系统中的方案很少。此外,多数方案效率低下,距离实际应用还有一定的差距。技术实现要素:发明目的:针对现有技术存在的不足,本发明提出了一种基于认证数据结构的外包数据库sql查询完整性验证系统及方法,其目的是能够支持多种数据库查询操作,高效且能够对数据查询进行完整性验证。技术方案:本发明提出了一种基于认证数据结构的外包数据库sql查询完整性验证系统,该系统包括:初始化模块,包括密钥生成模块,由数据拥有者执行,用于生成私钥和公钥;系统初始化模块,由数据拥有者执行,生成认证数据结构和摘要;证据生成模块,用于客户端向服务器发送查询请求时,根据服务器接收客户端发送的查询请求,计算查询结果及证据,返回给客户端;完整性验证模块,由客户端执行,利用查询结果及证据验证查询结果的完整性。进一步地,所述基于认证数据结构的外包数据库sql查询完整性验证系统,包括:初始化模块,包括密钥生成模块,由数据拥有者执行,用于生成私钥和公钥;系统初始化模块,由数据拥有者执行,对数据库中的每个表构建认证跳表(authenticatedskiplist,asl),生成认证数据结构和摘要,把数据库信息和认证信息发送给服务器,把认证数据结构根节点的摘要值发送给询验证的客户端;证据生成模块,用于当客户端向服务器发送查询请求时,服务器根据接收客户端发送的查询请求,查询认证数据结构并返回满足条件的关键节点和证据,服务器把数据库查询的结果和证据一起发送给客户端;完整性验证模块,用于利用查询结果及证据验证查询结果的完整性;客户端收到服务器返回的查询结果和证据后,使用证据验证查询结果是否正确。上述基于认证数据结构的外包数据库sql查询完整性验证方法,步骤如下:(1)密钥生成,由数据拥有者执行,生成私钥和公钥;(2)初始化,由数据拥有者执行,生成认证数据结构和摘要;(3)客户端发送查询请求;(4)服务器接收客户端发送的查询请求,计算查询结果及证据,返回给客户端;(5)验证,由客户端执行,利用查询结果及证据验证查询结果的完整性。进一步地,上述基于认证数据结构的外包数据库sql查询完整性验证方法,步骤如下:密钥生成,由数据拥有者执行,生成私钥和公钥;数据拥有者选择安全参数,计算出公私钥,私钥自己存储,将公钥发送给服务器端以及需要查询验证的客户端;系统初始化,由数据拥有者执行,对数据库中的每个表构建认证跳表(authenticatedskiplist,asl),生成认证数据结构和摘要,把数据库信息和认证信息发送给服务器,把认证数据结构根节点的摘要值发送给查询验证的客户端;证据生成,客户端向服务器发送查询请求,服务器接收客户端发送的查询请求,查询认证数据结构并返回满足条件的关键节点和证据,服务器把数据库查询的结果和证据一起发送给客户端;完整性验证,利用查询结果及证据验证查询结果的完整性;客户端收到服务器返回的查询结果和证据后,使用证据验证查询结果是否正确。所述密钥生成是数据拥有者选择安全参数,计算出公私钥,私钥自己存储,将公钥发送给服务器端以及需要查询验证的客户端;步骤如下:步骤1:初始化椭圆曲线及双线性映射的安全参数,构造群及生成元;步骤2:生成双线性映射累加器的私钥和公钥;随机数作为私钥,令作为公钥,q为任意指定集合中元素个数的上限;步骤3:生成aes密钥。所述系统初始化过程由数据拥有者执行,对数据库中的每个表构建认证跳表(authenticatedskiplist,asl),把数据库信息和认证信息发送给服务器,把认证数据结构根节点的摘要值发送给其他查询验证的客户端;认证跳表是由多层链表s连接起来的一种数据结构,每层链表中包含了有序集合以及节点的哈希值,其中:s={x0,x1,...,xn}表示有序集合;链表si(0≤i≤l)表示跳表的第i层,用于存储集合s={x0,x1,...,xn}中的元素;其中,链表s0存储集合s的所有元素,以及-∞和+∞两个哨兵节点;集合s中元素的层次随机生成,在si-1中而不在si中的元素称为si-1的平节点,将同时存在于链表si-1和si中的元素称为si-1的凸节点;最高层sl中的-∞节点为跳表搜索的起始节点;si中的每个节点v存储v.elem,v.down和v.right;v.elem表示该节点内存储的元素,v.down表示下面si-1中对应的节点,v.right表示v后面的直接相连的节点;当i=0时有v.down=null;当v为哨兵节点+∞,有v.right=null;使用asl交换哈希函数h对内部节点计算哈希值h(v);令r=v.right,d=v.down,若v.right=null,则h(v)=0;节点hash值的计算规则如下:当v为底层叶子节点时(d=null):若r是凸节点,则h(v)=h(v.elem,r.elem);若r是平节点,则h(v)=h(v.elem,f(r));当v为内部节点时(d≠null):若r是凸节点,则h(v)=f(d);若r是平节点,则h(v)=h(f(d),f(r));数据拥有者对数据库中的表table计算认证信息,表table有m行n列,key和value分别取表中第k列和第v列的元素,依次向s[k][v]中插入m个键值对,最终s[n][n]这n*n个认证跳表组成了表table的认证信息;摘要为n*n个认证跳表根节点的key,value和哈希值;将数据库信息、认证数据结构s[n][n]发送给服务器,将n个根节点的(key,value)及其哈希值作为摘要发送给客户端。所述认证跳表asl可以支持查找查询和范围查询两种类型的查询,也可以支持插入和删除两种类型的更新操作。查找查询(search)的方式如下:待查找的元素为x,从起始节点开始搜索,令v表示当前节点,比较x与v.elem的大小;若x>v.elem,向右搜索,即v=v.right;若x≤v.elem,向下搜索,即v=v.down;向右搜索时,若v为右侧哨兵节点,搜索结束,查找失败;向下搜索时,若v.down=null,搜索结束,若x=v.elem,找到了元素x,否则查找失败;范围查询(rangecover)的方式如下:给出xl,xr(xl≤xr),查询所有满足元素x在xl≤x≤xr范围内的叶子节点;令n表示满足条件的叶子节点集合,这个查询返回该范围最小覆盖集合n的所有节点;插入操作(insert)的方式如下:首先通过查找操作找到小于插入元素x中最接近插入元素的位置,记录下搜索路径;找到最底层的位置后,新建节点,连入底层跳表;随机生成元素的最高层,向上在每一层新建节点,通过搜索路径做相应的连接操作;删除操作(delete)的方式如下:删除元素x时,从起始节点开始搜索,找到x的前一个位置的节点v,则v.right即为x所在位置,记录搜索路径;沿路径向上依次删除含有元素x的节点。所述证据生成过程为:计算单维范围查询及证据、计算集合交集及证据、计算多维范围查询及证据、计算连接查询及证据、或计算函数查询及证据;计算单维范围查询及证据步骤如下:步骤1:读取客户端的单维范围查询语句,连接数据库,接受客户端的查询请求;步骤2:对认证跳表asl调用rangecover,得到对应的结果result1;步骤3:返回对应的的根节点值,根节点值中包含acc(ci),得到结果对应的证据proof1为acc(ci);acc(ci)为累加值,随机选取陷门累加器对中的元素进行累加,输出属于群的元素;令为集合,中的元素均在中,用表示的累加值,其定义如下:步骤4:将查询的到的结果result1、证据proof1返回给客户端;计算集合交集及证据步骤如下:步骤1:首先若集合a为空,则交集查询结果i为空,计算出证据digesti,w1,w2,q1,q2;步骤2:集合a不为空,计算出a和b的交集i,计算集合a和交集i的差集a_i,计算集合b和交集i的差集b_i;步骤3:使用公钥pubs_g1计算集合a的累加值acca,计算集合b的累加值accb;步骤4:对于集合a_i中的元素,计算得到每个元素的逆元,调用ntl库中的buildfromroots函数,得到逆元形成的多项式系数polya;步骤5:使用公钥pubs_g2和polya计算出集合a_i的累加值w1;步骤6:同步骤4,计算关于集合b_i的多项式系数polyb;步骤7:同步骤5,计算关于集合b_i的累加值w2;步骤8:使用ntl库中的xgcd函数,计算polya和polyb的最大公约数polyd,得到polys和polyt,满足polya*polys+polyb*polyt=polyd;步骤9:根据公钥pubs_g1和polys计算出证据q1,q1是使用生成元,计算的累加值;步骤10:同步骤9,根据公钥pubs_g1和polyt计算出证据q2;步骤11:调用compute_digest_pub函数,使用公钥pubs_g1计算集合i累加值digesti,再用公钥pubas_g1计算集合i的累加值w_extra;步骤12:最终,返回结果为i,返回证据有acca,accb,w1,w2,q1,q2,digesti和w_extra;计算多维范围查询及证据步骤如下:步骤1:读取客户端的多维范围查询请求,连接服务器,接受客户端的查询请求,将其拆分为多个单维范围查询;步骤2:对认证跳表asl调用rangecover,如果rangecover查询返回节点的集合为nw={n1,...},得到每一个单维范围查询对应的结果rw和rz,则:步骤3:计算证据和步骤4:对多个结果进行集合交集运算步骤5:将结果r*、证据proof2、proof3返回给客户端;计算连接查询及证据步骤如下:步骤1:读取客户端的连接查询请求,连接数据库,接受客户端的查询请求;步骤2:对认证跳表asl调用rangecover,得到每一个数据库中的数据表对应的结果ci和cj;步骤3:返回对应的的根节点值,根节点值中包含acc(ci),得到结果对应的证据proof4为acc(ci);返回对应的的根节点值,根节点值中包含acc(cj),得到结果对应的证据proof5为acc(cj);步骤4:对多个结果进行集合交集运算c*=ci∩cj;步骤5:找到包含结果中元素的每一行数据;步骤6:将结果c*、证据proof4、proof5返回给客户端。计算函数查询及证据步骤如下:函数查询为func={sum,count,avg,max,min},其中计数查询可转化为2个求和查询相减,平均值查询可转化为求和查询与计数查询相除,最大值最小值查询可转化为单维范围查询。计算求和查询及证据:步骤1:读取客户端的求和查询请求,连接数据库,接受客户端的查询请求,查询集合s={x1,...,xn}中所有元素的和,集合中元素的累加值为:步骤2:计算多项式系数以及步骤3:计算集合s中的元素的和为步骤4:根据pk中的来计算证据w1,w2,其中计算计数查询及证据:步骤1:读取客户端的计数查询请求,连接数据库,接受客户端的查询请求,原始表格中需要计数的是第j列;步骤2:在第j列之后增加一列j',然后将第j列每一行(i)的元素加1并赋值给第j'列,即xij'=xij+1;步骤3:分别对第j和j'列求和,分别表示为sum(j)和sum(j'),以及证据a0、a1、a′0、a′1;步骤4:计算第j列上的计数查询,即count(j)=sum(j')-sum(j)。计算平均值查询及证据:步骤1:读取客户端的平均值查询请求,连接数据库,接受客户端的查询请求,需要查询第j列的平均值;步骤2:在第j列之后增加一列j',然后将第j列每一行(i)的元素加1并赋值给第j'列,即xij'=xij+1;步骤3:分别对第j和j'列求和,分别表示为sum(j)和sum(j'),以及证据a0、a1、a′0、a′1;步骤4:计算第j列上的计数查询,即count(j)=sum(j')-sum(j);步骤5:通过求和查询的结果除以计数查询的结果可以得到第j列的平均值,即avg(j)=sum(j)/count(j)。计算最大值查询及证据步骤1:向服务器查询第j列的最大值jmax;步骤2:服务器将最大值查询转换为单维范围查询,求第j列中所有大于等于jmax的值即为最大值的结果result2;步骤3:服务器计算出单维范围查询的证据proof6为acc(cj)。计算最小值查询及证据步骤1:向服务器查询第j列的最大值jmin;步骤2:服务器将最大值查询转换为单维范围查询,求第j列中所有大于等于jmin的值即为最大值的结果result3;步骤3:服务器计算出单维范围查询的证据proof7为acc(cj)。所述完整性验证过程为:验证单维范围查询结果、验证集合交集结果、验证多维范围查询结果、验证连接查询结果、验证函数查询结果、或验证嵌套查询结果。验证单维范围查询结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof1的合法性;步骤2:使用proof1验证查询结果result1的完整性;验证集合交集结果步骤如下:步骤1:声明群中的元素;计算w1与digesti的双线性映射e1,计算生成元g1与acca的双线性映射e2;同理,计算w2和digesti的双线性映射e3,计算生成元g2与accb的双线性映射e4;若e1等于e2同时e3等于e4,则说明满足交集查询的子集包含条件;步骤2:计算双线性映射e5(w1,q1)和e6(w2,q2),以及e7(g2,g1),若满足e5*e6=e7,则说明满足交集查询的完备性条件;步骤3:计算e8(pubas_g2,digesti)和e9(g2,w_extra),若满足e8=e9,则说明集合i的累加值digesti是正确的;验证多维范围查询结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof2和proof3合法性;步骤2:使用proof2和proof3验证查询结果r*的完整性;验证连接查询结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof4和proof5合法性;步骤2:使用proof4和proof5验证查询结果c*的完整性;验证函数查询结果步骤如下:验证求和结果步骤如下:步骤1:验证a0:步骤2:验证a1:验证计数结果步骤如下:步骤1:根据第j列的求和结果,验证a0、a1;步骤2:根据第j'列的求和结果,验证a′0、a′1;验证平均值结果步骤如下:步骤1:根据第j列的求和结果,验证a0、a1;步骤2:根据第j'列的求和结果,验证a′0、a′1;验证最大值查询及证据结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof6的合法性;步骤2:使用proof6验证查询结果result2的完整性;验证最小值查询及证据结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof7的合法性;步骤2:使用proof7验证查询结果result3的完整性。优点及效果:本发明所述的基于认证数据结构的外包数据库sql查询完整性验证系统及方法,具有以下优点及有益效果:(1)能够支持关系数据库的多种sql查询的完整性验证,同时支持多维范围查询、连接查询、多种函数查询和嵌套查询。(2)能够很好地支持数据的更新,对数据进行插入、删除和修改。(3)系统具有较高的性能,能够应用到实际场景中。附图说明图1为本发明基于认证数据结构的外包数据库sql查询完整性验证方法流程图。图2为本发明基于认证数据结构的外包数据库sql查询完整性验证系统架构图。图3为本发明基于认证数据结构的外包数据库sql查询完整性验证系统功能模块图。图4为密钥生成流程图。图5为跳表的结构图。图6为系统初始化流程图。图7为单维范围查询流程图。图8为集合交集计算流程图。图9为集合交集验证流程图。图10为多维范围查询流程图。图11为连接查询流程图。具体实施方式下述非限制性实施例可以使本领域的普通技术人员更全面地理解本发明,但不以任何方式限制本发明。本发明所述基于认证数据结构的外包数据库sql查询完整性验证系统,如图2所示,包括数据拥有者、客户端和服务器;其中,数据拥有者:初始化密钥并运行系统初始化算法,将摘要发送给客户端,发送数据和认证信息ads给服务器。客户端:客户端发出标准的sql查询请求,首先判定该查询是否支持,若支持,向服务器发出完整性查询请求(如果不支持,返回错误提示);然后,当客户端收到服务器返回的查询结果和证据后,验证结果的完整性;若通过验证,将结接受结果,否则拒绝结果。服务器:服务器的职责是使用所需算法处理相应的密码学计算(因此提供可验证性),计算出查询结果的证据;同时支持在服务器的数据库中查询一条或多条sql语句。(服务器包含了存储数据的数据库,具有查询、运算结果证据等功能)本发明提出的基于认证数据结构的外包数据库sql查询完整性验证系统,如图1和图3所示,包括:初始化模块,包括密钥生成模块,由数据拥有者执行,用于生成私钥和公钥;系统初始化模块,由数据拥有者执行,生成认证数据结构和摘要;证据生成模块,用于客户端向服务器发送查询请求时,根据服务器接收客户端发送的查询请求,计算查询结果及证据,返回给客户端;完整性验证模块,由客户端执行,利用查询结果及证据验证查询结果的完整性。进一步地,所述基于认证数据结构的外包数据库sql查询完整性验证系统,包括:初始化模块,包括密钥生成模块,由数据拥有者执行,用于生成私钥和公钥;系统初始化模块,由数据拥有者执行,对数据库中的每个表构建认证跳表(authenticatedskiplist,asl),生成认证数据结构和摘要,把数据库信息和认证信息发送给服务器,把认证数据结构根节点的摘要值发送给询验证的客户端;证据生成模块,用于当客户端向服务器发送查询请求时,服务器根据接收客户端发送的查询请求,查询认证数据结构并返回满足条件的关键节点和证据,服务器把数据库查询的结果和证据一起发送给客户端;完整性验证模块,用于利用查询结果及证据验证查询结果的完整性;客户端收到服务器返回的查询结果和证据后,使用证据验证查询结果是否正确。完整性验证模块与证据生成模块共同保证了方案的完整性验证。基于认证数据结构的外包数据库sql查询完整性验证方法的步骤如下:(1)密钥生成,由数据拥有者执行,生成私钥和公钥;(2)初始化,由数据拥有者执行,生成认证数据结构和摘要;(3)客户端发送查询请求;(4)服务器接收客户端发送的查询请求,计算查询结果及证据,返回给客户端;(5)验证,由客户端执行,利用查询结果及证据验证查询结果的完整性。进一步地,所述基于认证数据结构的外包数据库sql查询完整性验证方法,步骤如下:密钥生成,由数据拥有者执行,生成私钥和公钥;数据拥有者选择安全参数,计算出公私钥,私钥自己存储,将公钥发送给服务器端以及需要查询验证的客户端;系统初始化,由数据拥有者执行,对数据库中的每个表构建认证跳表(authenticatedskiplist,asl),生成认证数据结构和摘要,把数据库信息和认证信息发送给服务器,把认证数据结构根节点的摘要值发送给查询验证的客户端;证据生成,客户端向服务器发送查询请求,服务器接收客户端发送的查询请求,查询认证数据结构并返回满足条件的关键节点和证据,服务器把数据库查询的结果和证据一起发送给客户端;完整性验证,利用查询结果及证据验证查询结果的完整性;客户端收到服务器返回的查询结果和证据后,使用证据验证查询结果是否正确。所述密钥生成的流程图如图4所示,该过程是外包数据库查询验证的初始化过程,是数据拥有者选择安全参数,计算出公私钥,私钥自己存储,将公钥发送给服务器端以及需要查询验证的客户端;步骤如下:步骤1:初始化椭圆曲线及双线性映射的安全参数,构造群及生成元;步骤2:生成双线性映射累加器的私钥和公钥;随机数作为私钥,令作为公钥,q为任意指定集合中元素个数的上限;步骤3:生成aes(高级加密标准(advancedencryptionstandard))密钥,即调用aes_init(aes初始化算法)初始化aes密钥:aes_init(key_data,key_data_len,(unsignedchar*)&salt,&en,&de)。本发明采用了双线性映射累加器,双线性映射累加器是处理集合求和以及交集并集中使用的,可以返回证据,有效保证计算的正确性。所述系统初始化该过程由数据拥有者执行,对服务器中的数据库中的每个表构建认证跳表(authenticatedskiplist,asl),把数据库信息和认证信息发送给服务器,把认证数据结构根节点的摘要值发送给其他查询验证的客户端。认证数据结构有merkle哈希树和asl认证跳表,本发明采用的是跳表,实现起来更复杂,但是也更加准确。所述认证跳表(authenticatedskiplist,asl)是以跳表结构为基础为支持认证字典操作而构建的,其结构图如图5所示,认证跳表是由多层链表s连接起来的一种数据结构,每层链表中包含了有序集合以及节点的哈希值,其中:s={x0,x1,...,xn}表示有序集合;链表si(0≤i≤l)表示跳表的第i层,用于存储集合s={x0,x1,...,xn}中的元素;其中,链表s0存储集合s的所有元素,以及-∞和+∞两个哨兵节点;集合s中元素的层次随机生成,在si-1中而不在si中的元素称为si-1的平节点,将同时存在于链表si-1和si中的元素称为si-1的凸节点;最高层sl中的-∞节点为跳表搜索的起始节点;si中的每个节点v存储v.elem,v.down和v.right;v.elem表示该节点内存储的元素,v.down表示下面si-1中对应的节点,v.right表示v后面的直接相连的节点;当i=0时有v.down=null;当v为哨兵节点+∞,有v.right=null。使用asl可交换哈希函数h对内部节点计算哈希值h(v);令r=v.right,d=v.down,若v.right=null,则h(v)=0;节点hash值的计算规则如下:当v为底层叶子节点时(d=null):若r是凸节点,则h(v)=h(v.elem,r.elem);若r是平节点,则h(v)=h(v.elem,f(r));当v为内部节点时(d≠null):若r是凸节点,则h(v)=f(d);若r是平节点,则h(v)=h(f(d),f(r))。数据拥有者对数据库中的表table计算认证信息,表table有m行n列,key和value分别取表中第k列和第v列的元素,依次向s[k][v]中插入m个键值对,最终s[n][n]这n*n个认证跳表组成了表table的认证信息;摘要为n*n个认证跳表根节点的key,value和哈希值。系统初始化流程图如图6所示,将数据库信息、认证数据结构s[n][n]发送给服务器,将n个根节点的(key,value)及其哈希值作为摘要发送给客户端。所述认证跳表asl支持查找查询和范围查询两种类型的查询,支持插入和删除两种类型的更新操作。查找查询(search)的方式如下:待查找的元素为x,从起始节点开始搜索,令v表示当前节点,比较x与v.elem的大小;若x>v.elem,向右搜索,即v=v.right;若x≤v.elem,向下搜索,即v=v.down;向右搜索时,若v为右侧哨兵节点,搜索结束,查找失败;向下搜索时,若v.down=null,搜索结束,若x=v.elem,找到了元素x,否则查找失败。范围查询(rangecover)的方式如下:给出xl,xr(xl≤xr),查询所有满足元素x在xl≤x≤xr范围内的叶子节点;令n表示满足条件的叶子节点集合,这个查询返回该范围最小覆盖集合n的所有节点。插入操作(insert)的方式如下:首先通过查找操作找到小于插入元素x中最接近插入元素的位置,记录下搜索路径;找到最底层的位置后,新建节点,连入底层跳表;随机生成元素的最高层,向上在每一层新建节点,通过搜索路径做相应的连接操作。删除操作(delete)的方式如下:删除元素x时,从起始节点开始搜索,找到x的前一个位置的节点v,则v.right即为x所在位置,记录搜索路径;沿路径向上依次删除含有元素x的节点。所述证据生成过程为:计算单维范围查询及证据、计算集合交集及证据、计算多维范围查询及证据、计算连接查询及证据、或计算函数查询及证据。所述完整性验证过程为:验证单维范围查询结果、验证集合交集结果、验证多维范围查询结果、验证连接查询结果、验证函数查询结果、或验证嵌套查询结果。本发明可以支持多种sql查询语句,更加丰富全面,也就是说支持全操作。连接查询、多维范围查询用到了集合交集,求和运算,计数查询等用到了集合求和,本发明的方案也是基于双线性映射累加器的,有效保证计算的正确性。下面对证据生成和完整性验证的过程进行详细的说明:图7为单维范围查询流程图,如图7所示,计算单维范围查询及证据步骤如下:步骤1:读取客户端的单维范围查询语句,连接服务器,接受客户端的查询请求;步骤2:对认证跳表asl调用rangecover,得到对应的结果result1;步骤3:返回对应的的根节点值,根节点值中包含acc(ci),得到结果对应的证据proof1为acc(ci);acc(ci)为累加值,随机选取陷门累加器对中的元素进行累加,输出属于群的元素;令为集合,中的元素均在中,用表示的累加值,其定义如下:步骤4:将查询的到的结果result1、证据proof1返回给客户端。验证单维范围查询结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof1的合法性;步骤2:使用proof1验证查询结果result1的完整性。图8为集合交集计算流程图,如图8所示,计算集合交集及证据步骤如下:步骤1:首先若集合a为空,则交集查询结果i为空,计算出证据digesti,w1,w2,q1,q2;步骤2:集合a不为空,计算出a和b的交集i,计算集合a和交集i的差集a_i,计算集合b和交集i的差集b_i;步骤3:使用公钥pubs_g1计算集合a的累加值acca,计算集合b的累加值accb;步骤4:对于集合a_i中的元素,计算得到每个元素的逆元,调用ntl库中的buildfromroots函数,得到逆元形成的多项式系数polya;步骤5:使用公钥pubs_g2和polya计算出集合a_i的累加值w1;步骤6:同步骤4,计算关于集合b_i的多项式系数polyb;步骤7:同步骤5,计算关于集合b_i的累加值w2;步骤8:使用ntl库中的xgcd函数,计算polya和polyb的最大公约数polyd,得到polys和polyt,满足polya*polys+polyb*polyt=polyd;步骤9:根据公钥pubs_g1和polys计算出证据q1,q1是使用生成元,计算的累加值;步骤10:同步骤9,根据公钥pubs_g1和polyt计算出证据q2;步骤11:调用compute_digest_pub函数,使用公钥pubs_g1计算集合i累加值digesti,再用公钥pubas_g1计算集合i的累加值w_extra;步骤12:最终,返回结果为i,返回证据有acca,accb,w1,w2,q1,q2,digesti和w_extra。图9为集合交集验证流程图,如图9所示,验证集合交集结果步骤如下:步骤1:声明群(fp12)中的元素;计算w1与digesti的双线性映射e1,计算生成元g1与acca的双线性映射e2;同理,计算w2和digesti的双线性映射e3,计算生成元g2与accb的双线性映射e4;若e1等于e2同时e3等于e4,则说明满足交集查询的子集包含条件;步骤2:计算双线性映射e5(w1,q1)和e6(w2,q2),以及e7(g2,g1),若满足e5*e6=e7,则说明满足交集查询的完备性条件;步骤3:计算e8(pubas_g2,digesti)和e9(g2,w_extra),若满足e8=e9,则说明集合i的累加值digesti是正确的。图10为多维范围查询流程图,如图10所示,计算多维范围查询及证据步骤如下:步骤1:读取客户端的多维范围查询请求,连接服务器,接受客户端的查询请求,将其拆分为多个单维范围查询;步骤2:对认证跳表asl调用rangecover,如果rangecover查询返回节点的集合为nw={n1,...},得到每一个单维范围查询对应的结果rw和rz,则:步骤3:计算证据和步骤4:对多个结果进行集合交集运算步骤5:将结果r*、证据proof2、proof3返回给客户端。验证多维范围查询结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof2和proof3合法性;步骤2:使用proof2和proof3验证查询结果r*的完整性。图11为连接查询流程图,如图11所示,计算连接查询及证据步骤如下:步骤1:读取客户端的连接查询请求,连接数据库,接受客户端的查询请求;步骤2:对认证跳表asl调用rangecover,得到每一个数据库中的数据表对应的结果ci和cj;步骤3:返回对应的的根节点值,根节点值中包含acc(ci),得到结果对应的证据proof4为acc(ci);返回对应的的根节点值,根节点值中包含acc(cj),得到结果对应的证据proof5为acc(cj);步骤4:对多个结果进行集合交集运算c*=ci∩cj;步骤5:找到包含结果中元素的每一行数据;步骤6:将结果c*、证据proof4、proof5返回给客户端。验证连接查询结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof4和proof5合法性;步骤2:使用proof4和proof5验证查询结果c*的完整性。本发明还可以计算函数查询及证据,验证函数查询结果,计算函数查询及证据和验证函数查询结果步骤如下:函数查询为func={sum,count,avg,max,min},其中计数查询可转化为2个求和查询相减,平均值查询可转化为求和查询与计数查询相除,最大值最小值查询可转化为单维范围查询;计算求和查询及证据:步骤1:读取客户端的求和查询请求,连接数据库,接受客户端的查询请求,查询集合s={x1,...,xn}中所有元素的和,集合中元素的累加值为:步骤2:计算多项式系数以及步骤3:计算集合s中的元素的和为步骤4:根据pk中的来计算证据w1,w2,其中验证求和查询结果步骤如下:步骤1:验证a0:步骤2:验证a1:计算计数查询及证据:步骤1:读取客户端的计数查询请求,连接数据库,接受客户端的查询请求,原始表格中需要计数的是第j列;步骤2:在第j列之后增加一列j',然后将第j列每一行(i)的元素加1并赋值给第j'列,即xij'=xij+1;步骤3:分别对第j和j'列求和,分别表示为sum(j)和sum(j'),以及证据a0、a1、a′0、a′1;步骤4:计算第j列上的计数查询,即count(j)=sum(j')-sum(j)。验证计数查询结果步骤如下:步骤1:根据第j列的求和结果,验证a0、a1;步骤2:根据第j'列的求和结果,验证a′0、a′1。计算平均值查询及证据:步骤1:读取客户端的平均值查询请求,连接数据库,接受客户端的查询请求,需要查询第j列的平均值;步骤2:在第j列之后增加一列j',然后将第j列每一行(i)的元素加1并赋值给第j'列,即xij'=xij+1;步骤3:分别对第j和j'列求和,分别表示为sum(j)和sum(j'),以及证据a0、a1、a′0、a′1;步骤4:计算第j列上的计数查询,即count(j)=sum(j')-sum(j);步骤5:通过求和查询的结果除以计数查询的结果可以得到第j列的平均值,即avg(j)=sum(j)/count(j)。验证平均值查询结果步骤如下:步骤1:根据第j列的求和结果,验证a0、a1;步骤2:根据第j'列的求和结果,验证a′0、a′1。计算最大值查询及证据步骤1:向服务器查询第j列的最大值jmax;步骤2:服务器将最大值查询转换为单维范围查询,求第j列中所有大于等于jmax的值即为最大值的结果result2;步骤3:服务器计算出单维范围查询的证据proof6为acc(cj)。验证最大值查询及证据结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof6的合法性;步骤2:使用proof6验证查询结果result2的完整性。计算最小值查询及证据步骤1:向服务器查询第j列的最大值jmin;步骤2:服务器将最大值查询转换为单维范围查询,求第j列中所有大于等于jmin的值即为最大值的结果result3;步骤3:服务器计算出单维范围查询的证据proof7为acc(cj)。验证最小值查询及证据结果步骤如下:步骤1:根据双线性配对,使用公钥验证证据proof7的合法性;步骤2:使用proof7验证查询结果result3的完整性。本实施方式所述基于认证数据结构的外包数据库sql查询完整性验证系统及方法的开发平台及工具:硬件环境:处理器为pentium(r)dual-corecpue5800@3.20ghz3.19ghz,安装内存为4gb。软件环境:64位ubuntu14.04系统,mysql数据库,编程语言c++。本发明所述的基于认证数据结构的外包数据库sql查询完整性验证系统及方法,能够支持关系数据库的多种sql查询的完整性验证,同时支持多维范围查询、连接查询、多种函数查询。还能够很好地支持数据的更新,对数据进行插入、删除和修改。具有较高的性能,能够应用到实际场景中。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1