可验证完整性和完备性的多用户云加密关键字搜索方法
技术领域
本发明涉及公钥密码体制下的可搜索加密技术研究领域,特别涉及一种可验证完整性和完备性的多用户云加密关键字搜索方法,该方法在云环境下可验证查询结果完备性和外包数据完整性,并对多用户权限进行设定。
背景技术
随着计算机网络技术的蓬勃发展和社会对信息资源需求的扩大,越来越多的企业和个人希望通过云存储降低本地的基础设施成本,并获得更高的服务质量。然而,云存储在带来方便、易用和低成本服务的同时,也带来了许多新的安全问题。如今数据存储在第三方云平台上,数据拥有者失去了对自己数据的控制,而云服务提供商并不是完全可信的,使得云端数据面临着泄露的风险。
数据加密是保护云端数据的基本手段,用户在上传敏感数据之前首先将数据进行加密,这样攻击者和云服务提供商即使获得了加密的数据也无法获得其内容,从而保证了数据在云端存储的安全。然而,问题是如何在加密数据中搜索出用户所需的内容呢?2000年,Song在他的论文《A.Practical techniques for searches on encrypted data》中首次提出了可搜索加密的概念,并提出了第一个基于对称加密的关键字搜索方案,实现对加密的数据进行查询搜索,引发科研人员对可搜索加密技术的研究。2004年,Boneh在文献《Public key encryption with keyword search》中提出基于离散对数通过线性配对实现了第一个公钥加密关键字搜索的方案,把可搜索加密技术应用在目前通用的公钥密码体制之中。随着可搜索加密技术的发展,为了更贴近实际应用需求,陆续有科研学者提出加密范围搜索方案、加密连接关键字搜索方案和加密模糊关键字搜索方案等研究方向。近些年,由于云计算和云存储的兴起,对加密数据库的访问控制、完整性验证和加密检索成为新的研究热点。
应用在云平台的可搜索加密技术的研究不仅仅需要实现加密的数据请求和加密的文件索引的搜索匹配,还需要针对云平台多授权用户和大数据量存储的特点,实现多用户动态访问控制和巨大量数据中快速检索的功能。
已有的大多数可搜索加密方案都着重于如何在加密数据中查询到所需的内容,而没有充分考虑外包数据的完整性和查询结果的完备性。然而,在云存储模式下,由于第三方服务提供者并非完全可信。用户担心云端数据是否已经被攻击者或云服务提供者替换或损坏。因此,用户需要对查询结果进行完整性和完备性的验证,从而保证用户得到查询结果是符合用户查询要求的所有数据,而且没有被替换或损坏。
目前已有大多数加密可搜索方案都只能实现单用户查询。然而,在云存储环境下,数据拥有者希望与多个用户分享数据。因此,需要设计面向多用户的查询管理机制,实现多用户查询权限的授予与撤销。另外,已有大部分可搜索加密方案在搜索过程中,都是采用线性匹配的方法,将加密的查询请求逐一与加密的索引项进行匹配,而在存储巨大量数据的云平台,查询效率不足以满足云应用的需求。
因此,寻求一种能够在云环境下验证查询结果完备性和外包数据完整性,并对多用户权限进行设定的加密关键字搜索方法具有重要的研究价值。
发明内容
本发明的主要目的在于克服现有技术的缺点与不足,提供一种可验证完整性和完备性的多用户云加密关键字搜索方法,该方法能够在云环境下验证查询结果完备性和外包数据完整性,同时还支持多用户查询,查询效率高。
本发明的目的通过以下的技术方案实现:可验证完整性和完备性的多用户云加密关键字搜索方法,包括步骤:
(1)数据拥有者对数据文件进行加密,同时从上传的数据文件中提取多个关键字进行加密以形成用于查询的关键字索引;同时对提取的每一个关键字,利用同态哈希函数生成关键字摘要,在本地建立一张关键字摘要表;数据拥有者生成用于对数据签名的签名公钥和签名私钥,在外包数据之前,用其签名私钥对每个关键字摘要进行签名,最后将加密的数据文件、关键字索引和签名发送给云端服务器;
(2)云端服务器为上述加密的数据文件和关键字索引分配存储空间,同时云端服务器以每一个关键字索引作为查询项,建立查询索引表,保存索引信息和签名信息,并建立链表保存与每一个关键字索引关联的所有文件的地址,通过查询索引表的指针项连接链表和查询索引表;
(3)数据拥有者通过安全通道为多个授权用户分配查询加密的数据文件所需的私钥,同时数据拥有者还生成对应授权用户的重加密密钥,并将所有重加密密钥组合形成的重加密密钥表发送给云端服务器,在查询过程中,授权用户用自己的私钥形成查询门限发送给云端服务器;
(4)云端服务器根据查询索引表对查询门限进行查询,找出符合授权用户查询的文件组和签名信息,并返回给授权用户;
(5)授权用户接收到关键字的签名信息和文件组后,用数据拥有者的签名公钥和同态哈希函数解出签名中的摘要,然后从加密文件组中解出文件,然后验证此解出文件和查询的关键字是否与摘要一致,如果一致,则表示文件组文件完整且查询结果完备,否则表示文件不完整,查询结果不完备;所述文件组文件完整表示数据文件没有被修改或替换,所述查询结果完备表示查询结果包括了所有索引含该关键字的数据文件。
具体的,所述步骤(1)中,对每个数据文件M,数据拥有者使用对称密钥k进行加密,加密文件表示为Ek(M),其中Ek(·)是用于加密文件的对称加密算法;
对于第i个关键字Wi,关键字索引为INDEX(Wi)=H2(t),其中设G1、G2都是阶为素数p的乘法群,其中g是乘法群G1的生成元,定义双线性映射e:G1×G1→G2,e(g,g)是乘法群G2的生成元,设H1(·):{0,1}*→G1,H2(·):G2→{0,1}logp,为数据拥有者为加密关键字索引采用的私钥,为云端服务器的公钥,为云端服务器的私钥。
具体的,所述步骤(1)中,对于第i个关键字Wi,利用同态哈希函数生成关键字摘要的公式是:
HMAC(Wi)=Hr(Z(M1)×f(Wi)+Z(M2)×f(Wi)+……+Z(Mi)×f(Wi));
其中f(·):{0,1}*→{0,1}n是安全的单向哈希函数,Hr(·)是同态哈希函数,Z(·)是用于压缩的哈希函数,M1,M2,…Mi为数据文件。
具体的,所述数据拥有者生成用于对数据签名的签名公钥PK′DO和签名私钥SK′DO,在外包数据之前,数据拥有者用其签名私钥SK′DO对每个关键字摘要HMAC(Wi)进行签名,即得到E′sk(·)是用于签名的公钥加密算法。
优选的,所述步骤(3)中,数据拥有者选择作为其加密关键字索引的私钥,并计算公钥然后随机选择将SKUi分配给授权用户Ui作为其生成加密关键字查询门限的私钥,Ui为授权用户的身份号,生成该授权用户的重加密密钥最后将各个授权用户身份号与其重加密密钥一一对应的重加密密钥表发送到云端服务器。
具体的,所述步骤(3)中,在查询过程中,授权用户用自己的私钥形成查询门限发送给云端服务器的步骤如下:授权用户Ui使用其密钥SKUi和要查询的关键字生成加密关键字查询门限其中Ui为该授权用户的身份号,授权用户把查询门限TW发送给云端服务器。
具体的,所述步骤(4)中,云端服务器在接收到授权用户的查询门限 后,通过查询重加密密钥表,查找到该授权用户Ui的重加密密钥进行代理重加密转换如下:
云端服务器根据查询索引表定位到与门限T′W对应的关键字索引INDEX(Wi),并通过遍历该表中指针项指向的文件地址链表,得到与该关键字关联的所有文件地址,取出符合查询要求的文件组,云端服务器把该文件组和该关键字的签名信息作为查询结果,返回给当前查询的授权用户Ui。
优选的,所述步骤(5)中,授权用户接收到关键字的签名信息和加密文件组后,首先授权用户先用数据拥有者签名公钥PK′DO解出签名中的摘要,然后从加密文件组中解出文件M1,M2,…Mi,用生成摘要的同态哈希函数Hr(·)、压缩函数Z(·)和安全单向哈希函数f(·):{0,1}*→{0,1}n验证摘要,验证公式为:
HMAC(W1)=Hr(Z(M1)×f(W1)+Z(M2)×f(W1)+……+Z(Mi)×f(W1));
若表达式成立,则M1,M2,…Mi文件是完整的,即没有被修改或替换,否则就表示文件不完整。签名建立了关键字和文件的关联,验证签名正确性,即验证了查询结果的完备性。
优选的,所述可验证完整性和完备性的多用户云加密关键字搜索方法还包括步骤:(6)对云外包数据进行更新,更新操作分为以下两种情况:
(6-1)如要添加数据文件Ek(ML),该文件的索引包含多个关键字Wi和Wj,则更新步骤如下:
(6-1-1)首先数据拥有者生成关键字Wi和Wj的索引和然后再更新关键字Wi和Wj对应的摘要HMAC(Wi)和HMAC(Wj),数据拥有者先在本地关键字摘要表中取出关键字Wi和Wj对应的摘要HMAC(Wi)和HMAC(Wj),利用同态哈希函数的同态性质完成更新操作:
HMAC(Wi)′=HMAC(Wi)×Hr(Z(ML)·f(Wi));
HMAC(Wj)′=HMAC(Wj)×Hr(Z(ML)·f(Wj));
数据拥有者再把更新后的摘要回写到本地关键字摘要表,进行更新;
(6-1-2)更新本地关键字摘要表后,数据拥有者利用签名私钥SK′DO对关键字摘要进行签名:
(6-1-3)在更新加密关键字索引和生成签名后,数据拥有者把加密的数据文件、关键字索引和签名发送给云端服务器进行数据更新;
(6-1-4)云端服务器接收到数据后,更新查询索引表,通过哈希查询定位到关键字索引INDEX(Wi)和INDEX(Wj)所在的表项,更新签名σ(Wi)、σ(Wj),并在对应的文件地址链表中***保存文件Ek(ML)地址的结点;
(6-2)如要在文件索引中添加关键字索引WL,并存入包含WL关键字的多个数据文件Ek(Mi)、Ek(Mj),则更新步骤如下:
(6-2-1)数据拥有者生成关键字WL的索引并对文件Mi、Mj进行加密;
(6-2-2)生成摘要:HMAC(WL)=Hr(Z(Mi)·f(WL))×Hr(Z(Mj)·f(WL)),并把摘要保存在本地关键字摘要表中,并用数据拥有者签名私钥SK′DO对摘要进行签名:
(6-2-3)数据拥有者把索引INDEX(WL)、文件Ek(Mi)、Ek(Mj)和签名σ(WL)发送给云端服务器进行数据外包;
(6-2-4)云端服务器接收到数据后,更新查询索引表,云端服务器计算关键字索引的哈希值hash2(INDEX(WL))定位表项位置,分配该空间给关键字索引INDEX(WL),如果存在哈希冲突,采用闭散列方式规避冲突,再把签名σ(WL)存入索引表中,并建立文件地址链表保存文件Ek(Mi)、Ek(Mj)的地址信息。
优选的,所述可验证完整性和完备性的多用户云加密关键字搜索方法还包括步骤:
(7)数据拥有者若需要撤销授权用户UD的查询权限,则发送该用户的身份号UD和撤销指令给云端服务器,云端服务器通过哈希查询定位到用户UD在重加密密钥表的表项,删除该表项,使被撤销权限的用户无法在查询时完成合法的门限重加密,无法合法的执行查询操作。
本发明与现有技术相比,具有如下优点和有益效果:
(1)本发明支持隐查询。数据拥有者在建立关键字索引时,使用了其私钥对关键字索引进行加密。由于云端服务器和攻击者无法得到数据拥有者的私钥,所以,云端服务器和攻击者也无法从加密关键字索引中获取任何有关关键字的信息。当授权用户向云端服务器提出查询请求时,用户使用自己的私钥对关键字门限进行加密,云服务器和攻击者无法从加密的关键字门限中获知有关的关键字的任何信息。此外,生成关键字门限的哈希函数H1()是被集成在客户端的加密程序中,云服务器和攻击者也无法进行关键字猜测攻击。因此,云端服务器只能提供搜索服务,无法得知关于关键字的任何信息。
(2)本发明提供指定的查询。数据拥有者在生成加密关键字索引时,引入了云端服务器的公钥,提供了对查询服务器的认证功能。在查询过程中,只有云端服务器用自己的私钥才可进行查询操作。因为攻击者不知道云端服务器的私钥,即使攻击者获取加密关键字门限,也无法完成查询操作。
(3)本发明提供受控查询。在本发明中,需要被授权用户使用自己的私钥才能生成合法的关键字查询门限。由于不知道被授权用户的私钥,攻击者和云端服务器无法伪造出合法的关键字查询门限。因此,在没有被授权用户许可情况下,攻击者和云端服务器无法进行任何搜索。
(4)本发明提供多用户查询。本发明使用代理重加密来实现多用户查询的功能。每一个被授权的用户都有一个查询密钥,并使用该查询密钥生成加密关键字查询门限。如果某用户的查询密钥泄露了,云端服务器能废除该查询密钥,再为泄露密钥的用户重新生成新的查询密钥,此过程不影响其他合法用户使用其密钥进行查询。
(5)本发明提供了查询结果的完备性和外包数据完整性的验证,本发明的签名涵盖了与关键字索引相关联的所有文件,可以验证该数据文件是否在外包的过程中被替换、修改,即可验证数据完整性。使用签名把关键字索引和其所属的所有文件关联起来,可以验证是否所有符合要求的文件都成功返回,即可验证查询结果的完备性。数据拥有者使用其私钥SK′DO进行签名,被授权用户需要使用数据拥有者公钥PK′DO进行验证,可验证数据源为数据拥有者。
(6)本发明优化索引和查询方式提升查询效率,本发明对传统的可搜索加密索引结构进行了优化,在关键字查询环节引入哈希查询。在查询过程中,通过用户的查询,计算查询哈希值,然后定位关键字索引存储位置。在不考虑哈希冲突的条件下,平均查找长度ASL=1,查询的时间复杂度近似O(1),在查询过程中,引入哈希查询机制,显著提高了***的查询效率,实现对云端数据的快速查找。
附图说明
图1是本发明方法的流程示意图。
图2是重加密密钥表的结构图。
图3是查询索引表的示意图。
图4是云端服务器进行加密查询的示例图。
图5是添加数据文件后,对云外包数据的更新过程示意图。
图6是在文件索引中添加关键字索引后,对云外包数据的更新过程示意图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
实施例1
本发明主要研究公钥密码体制下的可搜索加密技术,提出了一种可验证完整性和完备性的多用户云加密关键字搜索方法,该方法实现了对加密数据的查询检索功能,并保护了用户的查询隐私性。在实现基本加密搜索的基础上,本发明针对云环境下多用户访问和大数据量存储的特点,提出多用户查询设定,并优化加密文件的索引结构和查询机制,实现动态用户权限控制和快速检索加密数据的功能。本发明还设计了查询结果完备性和外包数据完整性的验证机制,使用同态哈希函数和签名绑定关键字索引和其关联加密文件提供验证功能。
下面结合图1对上述可验证完整性和完备性的多用户云加密关键字搜索方法的具体过程进行详细说明。
(1)***模型
数据拥有者对数据文件和文件对应的索引关键字进行加密。并把加密数据存储到云端服务器。云端服务器为数据拥有者的文件组分配存储空间,并建立关键字索引结构实现查询功能。多个授权用户可以根据自己的私钥生成带加密关键字的查询门限,并发送给云端服务器进行查询。云端服务器对用户查询门限进行查询,找出符合用户查询的文件和验证信息,并返回给查询用户。用户可以根据查询结果和验证信息,验证查询结果的完备性和完整性。
(2)公共参数和密钥生成
公共参数生成:设G1、G2都是阶为素数p的乘法群,其中g是乘法群G1的生成元。定义双线性映射e:G1×G1→G2,e(g,g)是乘法群G2的生成元。设H1(·):{0,1}*→G1,H2(·):G2→{0,1}logp,f(·):{0,1}*→{0,1}n是安全的单向哈希函数,Hr(·)是同态哈希函数,Z(·)是用于压缩的哈希函数。设EK(·)是用于加密文件的对称加密算法,INDEX(·)是公钥加密的关键字索引,HMAC(·)是生成关键字摘要的算法,E′sk(·)是用于签名的公钥加密算法。
密钥生成:数据拥有者选择作为其加密关键字索引的私钥,并计算公钥数据拥有者选择对称密钥k,用于加密数据文件。此外,数据拥有者还需要生成用于对数据签名的公私钥对(SK′DO,PK′DO)。云端服务器选择作为其私钥,并计算公钥数据拥有者随机选择并分配给用户Ui,作为其生成加密关键字查询门限的私钥。并生成该用户的重加密密钥传送给云端服务器。云端服务器存储重加密密钥表,表结构如图2所示。
(3)数据拥有者生成关键字索引、加密文件和数字签名
生成关键字索引和加密数据文件:对于每个关键字Wi,数据拥有者计算并计算关键字索引INDEX(Wi)=H2(t)。对每个数据文件M数据拥有者使用对称密钥k进行加密,加密文件表示为Ek(M)。
生成签名:假设文件M1,M2,M3的索引都包含关键字W1,则索引模式如表1所示:
表1 关键字索引结构
数据拥有者计算关键字W1的摘要:
HMAC(W1)=Hr(Z(M1)×f(W1)+Z(M2)×f(W1)+Z(M3)×f(W1)),并存储在本地维护的关键字摘要表中,关键字摘要表结构如表2所示。
表2 关键字摘要表结构
关键字 |
摘要 |
W1 |
HMAC(W1) |
W2 |
HMAC(W2) |
... |
... |
Wi |
HMAC(Wi) |
... |
... |
在外包数据之前,数据拥有者用其签名私钥SK′DO对每个关键字摘要HMAC(Wi)进行签名,即数据拥有者把文件、关键字索引和签名发送给云端服务器进行数据外包存储。
(4)云端服务器存储数据及查询数据
索引结构:云端服务器接收到数据拥有者外包的关键字索引、文件和签名后,为数据拥有者的文件组分配存储空间,并建立用于查询的关键字索引结构。
本实施例在查询过程中引入哈希查询机制,从而提高了查询效率。同时,本实施例引入签名,从而保证了查询结果的完备性和完整性。本实施例建立的查询索引表的结构如图3所示。图中ad(Ek(Mj))表示加密文件Ek(Mj)在云储存中的地址。
云端服务器以每一个关键字索引做为查询项,建立查询索引表,保存索引信息和签名信息。并建立链表保存与关键字索引关联的所有文件的地址,通过查询索引表的指针项连接链表和索引表。在搜索过程中,使用哈希查询改进关键字搜索机制。云端服务器通过计算关键字索引的哈希值,定位关键字索引的存储位置,再遍历其指针项指向的文件地址链表,可以查询到与该关键字索引关联的所有加密文件的地址。
查询过程:
用户生成加密关键字查询门限:授权用户Ui使用其密钥SKUi和查询关键字生成加密关键字查询门限其中Ui为该授权用户的身份号。授权用户把查询门限TW发送给云端服务器。
云端服务器进行加密搜索:云端服务器在接收到授权用户的查询门限 后,通过计算Hash1(Ui)查找到用户Ui的代理重加密密钥进行代理重加密转换如下:
云端服务器计算Hash2(T′W),定位到与门限T′W对应的关键字索引INDEX(Wi),并通过遍历该表项指针指向的文件地址链表,得到与该关键字关联的所有文件地址,取出符合查询要求的文件组。云端服务器把该文件组和该关键字的签名作为查询结果,返回给查询用户。
例:在图4中,设查询门限为云端服务器通过Hash2(T′W)定位到INDEX(W1)所对应的表项,取出签名σ(W1),并遍历引出的文件地址链表可以得到W1对应的文件组(Ek(M1),Ek(M2),Ek(M3))。
云端服务器把签名σ(W1)和索引含有W1的加密文件组(Ek(M1),Ek(M2),Ek(M3))作为查询结果返回给查询用户Ui。
(5)用户验证数据
用户接收到签名σ(W1)和加密文件组(Ek(M1),Ek(M2),Ek(M3))后,首先用户先用数据拥有者签名公钥PK′DO解出σ(W1)中的摘要HMAC(W1)。然后从加密文件组(Ek(M1),Ek(M2),Ek(M3))中解出文件M1,M2,M3,用生成摘要的同态哈希函数Hr()、压缩函数Z()和安全单向哈希函数f()函数验证摘要:
HMAC(W1)=Hr(Z(M1)×f(W1)+Z(M2)×f(W1)+Z(M3)×f(W1));
若表达式成立,则M1,M2,M3文件是完整的,即没有被修改或替换。签名建立了关键字和文件的关联,验证签名正确性,即验证了查询结果的完备性。
(6)外包数据更新
外包数据更新:本方案考虑到数据拥有者对云外包数据的更新需求,更新操作分为以下两种情况:
<1>添加数据文件Ek(ML),文件的索引包含多个关键字Wi和Wj。
首先数据拥有者按照上面步骤(3)的方法生成关键字Wi和Wj的索引和
再更新关键字Wi和Wj对应的摘要HMAC(Wi)和HMAC(Wj)。数据拥有者先在本地摘要表中取出关键字Wi和Wj对应的摘要HMAC(Wi)和HMAC(Wj),利用同态哈希函数的同态性质完成更新操作:
HMAC(Wi)′=HMAC(Wi)×Hr(Z(ML)·f(Wi));
HMAC(Wj)′=HMAC(Wj)×Hr(Z(ML)·f(Wj));
数据拥有者还需要把更新后的摘要回写到本地摘要表,进行更新。
更新本地摘要表后,数据拥有者利用签名私钥SK′DO对摘要进行签名:
在更新加密关键字索引和生成签名后,数据拥有者把文件Ek(ML)、关键字索引INDEX(Wi)、INDEX(Wj)和签名σ(Wi)和σ(Wj)发送给云端服务器进行数据更新。
云端服务器接收到数据后,需要更新关键字索引结构,通过哈希查询可以定位到关键字索引INDEX(Wi)和INDEX(Wj)所在的表项,更新签名σ(Wi)、σ(Wj),并在对应的文件地址链表中***保存文件Ek(ML)地址的结点,完整操作如图5所示。
<2>在文件索引中添加关键字索引WL,并存入包含WL关键字的多个数据文件Ek(Mi)、Ek(Mj)。
首先数据拥有者按照上面步骤(3)的方法生成关键字WL的索引并对文件Mi、Mj进行加密。
再生成摘要:HMAC(WL)=Hr(Z(Mi)·f(WL))×Hr(Z(Mj)·f(WL))并把摘要保存在本地摘要表中。并用数据拥有者签名私钥SK′DO对摘要进行签名:
数据拥有者把索引INDEX(WL)、文件Ek(Mi)、Ek(Mj)和签名σ(WL)发送给云端服务器进行数据外包。
云端服务器接收到数据后,需要更新索引结构。云端服务器计算关键字索引的哈希值hash2(INDEX(WL))定位表项位置,分配该空间给关键字索引INDEX(WL),如果存在哈希冲突,采用闭散列方式规避冲突。再把签名σ(WL)存入索引表中,并建立文件地址链表保存文件Ek(Mi)、Ek(Mj)的地址信息。更新过程如图6所示。
(7)用户授权与撤销权限
<1>用户授权:
在用户进行加密搜索之前,数据拥有者首先需要对用户进行授权。对于用户UL,数据拥有者随机选择分配给用户UL作为其查询密钥,并生成该用户的重加密密钥把用户身份号UL和重加密密钥RKUL→DO以秘密信道传送给云端服务器S。
授权用户UL通过查询密钥SKUL生成合法的查询门限,并通过云服务器使用重加密密钥RKUL→DO对查询门限进行重加密转换,可以正确的执行查询操作。
<2>撤销用户权限权:
数据拥有者若需要撤销用户UD的查询权限,需要发送该用户的身份号UD和撤销指令给云端服务器,云端服务器通过哈希查询定位到用户UD在重加密密钥表的表项,删除该表项,使被撤销权限的用户无法在查询时完成合法的门限重加密,无法合法的执行查询操作。
为解决加密关键字搜索的完备性和数据完整性的验证问题,本实施例利用同态哈希函数,为每个查询关键字索引设计可更新的信息摘要,并用数据拥有者私钥对摘要进行签名,以实现验证的功能。同时,使用索引关键字和包含该关键字的多个数据文件构建信息摘要,使查询用户可以验证与查询关键字相关的所有文件是否全部返回(查询结果的完备性)。且由于摘要包含了查询关键字相关的所有文件的信息,因此,验证摘要的过程本身也包含了对每个数据文件的完整性的验证,即可以验证是否查询的文件未被修改替换。在生成信息摘要后,数据拥有者用其私钥,对信息摘要进行签名,保证用于验证的签名来源于数据拥有者。为了实现信息摘要的动态更新,本实施例还使用同态哈希函数生成信息摘要,当外包数据库的索引结构改变了,利用同态哈希函数的同态性质,可实现对信息摘要的动态更新。
下面给出一个具体的应用场景来说明本实施例的使用过程。
云服务提供商向企业(数据拥有者)开放云存储平台,企业在使用该平台实现公司内部资料的共享,从而减少公司的数据管理成本。公司高层将公司内部数据加密后上传云存储中心,为便于搜索,将上传的文件提取多个关键字加密形成便于检索的索引。为了保证公司的数据在云服务中心不被丢失和篡改,公司高层将计算从文件中提取出的关键字的摘要,在本地维护一张关键字摘要表,以便之后对数据的完整性进行检查。
加密的公司内部数据和索引上传到云服务商分配的存储空间中,云服务商云端服务器以每一个关键字索引作为查询项,建立查询索引表,保存索引信息和签名信息。并建立链表保存与关键字索引关联的所有文件的地址,通过查询索引表的指针项连接链表和索引表。
当公司低层员工希望进行公司内部材料的查询时,高层管理者通过安全通道为底层员工分配查询公司内部资料的密钥,并将低层员工的密钥逐一加密形成重加密密钥表发送给云服务提供商。在搜索过程中,员工用自己的私钥形成搜索门限发送给云服务提供商,云服务提供商使用哈希查询改进关键字搜索机制,因为提高了查询效率,从而能更快速的为底层员工返回检索结果。
当低层员工得到返回的数据后,验证签名正确性,由于在本方案中签名建立了关键字和文件的关联,从而一旦验证了签名的正确性,即验证了查询结果的完备性。签名验证正确,表示数据未被没有被修改或替换,加密数据可进行解密。
当公司员工有新招入的人员和离职人员时,公司高层可以对分配出去的公司内部资料查询权限进行授予或者回收。
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。