区块链上基于属性的具有前向和后向隐私的可搜索加密方法及系统与流程

文档序号:32394890发布日期:2022-11-30 09:53阅读:376来源:国知局
区块链上基于属性的具有前向和后向隐私的可搜索加密方法及系统与流程

1.本发明属于信息检索和密码学的技术领域,具体涉及一种区块链上基于属性的具有前向和后向隐私的可搜索加密方法及系统。


背景技术:

2.随着互联网技术的迅速发展、云计算技术的流行以及用户数据量的指数增长,越来越多的企业用户和个人选择将他们的数据存储到云中,这减轻了其自身管理和存储数据的开销。用户可以随时随地地检索云中的数据,且可以轻松分享给获得许可的人。然而,云计算给我们提供便利的同时也存在着严重的安全隐患。当数据以明文的形式外包给云服务器时,可能会遭受到云服务提供商或黑客的非法访问。通常的解决方法是对数据进行加密处理后以密文的形式存储在云服务器上,但也导致传统的明文检索技术无法应用在密文上。
3.为了使得用户能在密文数据上进行关键字搜索,可搜索加密(searchable encryption,简称se)技术作为一种解决方案而被提出。根据加密方法不同,可搜索加密可分为可搜索对称加密(symmetrically searchable encryption,简称sse)和公钥可搜索加密(public key encryption with keyword search,简称peks)。基于公钥的可搜索加密中,数据拥有者将数据上传到云服务器之前使用指定用户的公钥加密数据,之后这些用户可以使用其私钥对数据进行搜索和解密。
4.但这两类可搜索加密方案在私钥生成分配方面大多依赖于可信机构,这一方面使得可信机构成为大多数黑客的攻击目标;另一方面可信机构的“可信任”这一前提一旦消失,用户数据的安全便荡然无存。因此,研究者尝试将具有去中心化等特性的区块链技术应用于可搜索加密领域,并提出了许多方案。这些主要通过将数据与索引分离存储,数据存储在服务器中,索引存储在区块链上,利用区块链来进行加密检索。数据拥有者将数据加密上传到服务器,当用户要查询关键字时,将生成的检索陷门发送到区块链来查询,根据返回的结果从服务器处获得相应的数据。基于区块链的可搜索加密实现了检索过程的去中心化,确保返回的结果的合法性,并且减轻了云服务器的存储空间和搜索代价。
5.尽管现有的工作为基于区块链的搜索提供了解决方案,但目前没有一个方案能同时解决检索的去中心化、对用户的细粒度访问控制、数据的前向隐私和后向隐私等三个问题。
6.检索的去中心化可以排除单点故障问题从而提高系统的稳定性,现有的大多数工作都通过单一服务器进行检索操作;对用户的细粒度访问控制对于确保数据拥有者的数据安全具有非常重要的作用且其多用户的模式有许多应用场景,已存在的一些区块链上的方法并不支持该特性;数据的前向隐私保证用户使用以往生成的检索陷门无法检索到该陷门生成之后所更新的数据,而数据的后向隐私则保证用户使用检索陷门无法检索得到之前添加但现在已经被删除的数据,现有的大多数工作没有考虑到这一问题,而具备该安全考虑
的方案没有对用户访问权限进行细化。
7.综上所述,即便有些工作针对以上三个问题中的部分问题提出了优秀的解决方法,但仍不可避免地在其他方面做出了妥协,不能同时解决这三个方面的问题。因此,如何在大数据和云存储背景下针对以上三个问题设计一个完备的区块链上基于属性的具有前向和后向隐私的可搜索加密方案方法成为急需解决的关键问题。


技术实现要素:

8.本发明的主要目的在于克服现有技术的缺点与不足,提供一种区块链上基于属性的具有前向和后向隐私的可搜索加密方法及系统,利用密文策略基于属性加密(ciphertext policy attribute-based encryption简称cp-abe),支持对用户的细粒度访问控制,能有效对用户的访问权限进行设置;同时实现数据的前向隐私和后向隐私;并利用区块链,实现检索的去中心化,能有效避免单点故障。
9.为了达到上述目的,本发明采用以下技术方案:
10.本发明一方面提供了一种区块链上基于属性的具有前向和后向隐私的可搜索加密方法,包括下述步骤:
11.s1、数据拥有者do根据安全参数λ,生成系统参数spp并将spp公布,接着根据spp生成私钥dk1和dk2,并利用公共参数spp、私钥dk2和数据使用者即用户的属性集su,为用户生成私钥ku,并通过安全的通道发送给用户du;
12.s2、数据拥有者do使用其私钥dk1、数据集合db={op,ind,w,t}、公开参数spp以及一个映射∑,为文档生成索引密文集edb和已更新的映射∑,并把edb部署到区块链上,其中op表示对数据的操作方式即添加或者删除,ind表示文件索引集,w表示关键字集合,t表示关键字的访问树集合;
13.s3、数据用户du进行检索操作时,数据用户使用其私钥ku对关键字q进行加密,得到检索陷门tra并发送给区块链网络;
14.s4、区块链网络bp收到数据用户du发来的检索陷门tra之后,bp先根据edb[t
ind
]获取得到相应的访问树t;接着利用陷门中的tq以及用户的属性集在访问树上进行计算得到c,根据edb[h2(c)]判断用户是否具有相应的访问权限;权限检查通过后,根据edb[h2(c)]得到相应的状态值,从该状态开始,向前回溯,将这之前每次更新的与关键字q相关的加密索引添加到结果集mei中,最终将mei返回给数据用户;
[0015]
s5、数据用户接收到结果集mei后,使用私钥ku,恢复出对应的明文内容。
[0016]
作为优选的技术方案,步骤s1中,所述数据拥有者do生成系统参数spp、私钥dk1和私钥dk2后,将系统参数spp公开发布在区块链网络中或广播给所有用户,所有用户均有访问系统公开参数spp的权限;私钥dk1和私钥dk2保存于数据拥有者do中,只有数据拥有者do具有访问私钥dk1和私钥dk2的权限。
[0017]
作为优选的技术方案,步骤s1具体为:
[0018]
s11、数据拥有者do用群生成器执行生成(g1,g2,e,g,q),其中,q为素数,g1和g2为关于q的乘法群,g是g1的生成元,e∶g1×
g1→
g2是一个双线性映射;
[0019]
s12、数据拥有者do随机选择多个安全hash函数,并选择一个伪随机序列生成函数f、f-1
,f:{0,1}
λ
*{0,1}
λ

{0,1}
λ
,f-1
是其逆置换;将以上安全hash函数、伪随机序列生成函
数和步骤s11中的参数组合成公开参数spp=(g1,g2,e,g,q,h0,h1,h2,h3h4,h1,h2,h3,h4,f,f-1
),将spp发布在区块链网络中或广播给系统中所有用户,其中h0,h1,h2,h3,h4,h1h,2,h3,h4均表示安全hash函数;
[0020]
s13、数据拥有者do初始化一个空的映射∑,即∑[key]=value,该映射由数据拥有者do来维护,用于存储关键字的状态;
[0021]
s14、数据拥有者do定义拉格朗日系数:其中s表示一个集合,i,j∈z
q*

[0022]
s15、数据拥有者随机选择α,β∈z
q*
,计算g
α
,g
β
和e(g,g)
α
,得到dk1=(e(g,g)
α
,g
β
),dk2=(β,g
α
);
[0023]
s16、数据拥有者随机选择r∈z
q*
,计算和k3=gr,对于用户的属性集su中的每个属性ai,都进行以下计算:随机选择然后计算和最终用户的私钥并通过安全的通道发送给用户du。
[0024]
作为优选的技术方案,步骤s2中,所述索引密文集edb是指数据拥有者通过对关键字进行加密后的数据,在搜索阶段时,通过用户提交的访问树索引t
ind
找到相应的访问树找到相应的访问树是对于关键字wi的访问权限描述,服务器利用访问树和用户发送的检索令牌计算得到结果,利用该结果判断是否有相应的加密索引,从而继续检索。
[0025]
作为优选的技术方案,步骤s2具体为:
[0026]
s21、数据拥有者do随机选择版本号v∈z
q*
,计算并公开版本信息ev=gv;
[0027]
s22、数据拥有者对数据集db中的每个关键字wi进行以下计算,利用映射∑判断关键字是否存在,不存在则对其状态值进行初始化,接着利用状态值计算得到键再将存储在相应的值中,其中是db(wi)的大小,db(wi)是wi对应的文件索引的集合;
[0028]
s23、对于db(wi)中的每个索引进行以下计算,首先对索引进行加密,公式如下:
[0029][0030]
然后利用状态值计算另一个键将加密索引存储在相应的值中,其中,
[0031][0032][0033]
s24、接着数据拥有者随机选择秘密数s∈z
q*
,并计算s作为属性访问树的
根的秘密值;令t为的根节点,对中的每个节点x做以下计算,如果x是t则随机选择d
t
=k
t-1次的多项式q
t
,并设置q
t
(0)=s,随机设置d
t
个多项式q
t
的系数来完成q
t
的定义;否则随机选择d
x
=k
x-1次的多项式q
x
,并设置q
x
(0)=q
parent(x)
(index(x));
[0034]
s25、令x为所有叶子节点的集合,对每个叶子节点x做以下计算,
[0035][0036][0037]
最终得到相应的访问树
[0038]
s26、最后计算与用户陷门进行匹配的值以及访问树的索引t
ind
[0039][0040][0041]
并计算用其hash值作为键将其另一个hash值与状态值异或的结果作为值其中,
[0042][0043][0044]
s27、数据拥有者将以上键值对s27、数据拥有者将以上键值对s27、数据拥有者将以上键值对插入到智能合约中。
[0045]
作为优选的技术方案,步骤s3具体为:
[0046]
s31、数据用户的私钥为利用k2和q计算得到temp,
[0047][0048]
s32、接着利用k1和temp计算得到tq,
[0049][0050]
s33、最后利用版本号ev,计算得到具有版本信息的访问树索引t
ind

[0051][0052]
s34、数据用户du根据以上变量组合得到检索陷门:
[0053]
tra=<t
ind
,tq,su》
[0054]
其中,
[0055][0056]
[0057][0058]
s35、数据用户du将所述检索陷门tra发送至区块链网络。
[0059]
作为优选的技术方案,步骤s4具体为:
[0060]
s41、区块链网络从陷门中获取到访问树的索引t
ind
,从而得到访问树t=edb[t
ind
];
[0061]
s42、令x表示t的节点,对t中的每个叶子节点x做以下计算:令a表示该叶子节点x相应的属性即a=attr(x),如果a∈su,则计算f
x

[0062][0063]
否则f
x


;对t中的每个非叶子节点x做以下计算:令s
x
表示k
x
大小的属于x的孩子节点z的集合,如果s
x
不存在,则f
x


,否则使用lagrange interpolation计算f
x

[0064][0065]
其中,
[0066]
i=index(z),
[0067]
是lagrange coefficient
[0068]
令t表示t的根节点:如果f
t


,则返回0,否则计算c,
[0069][0070]
其中,
[0071][0072]
s43、接着根据c计算得到键如果则说明用户没有相应的访问权限;否则获取相应的值
[0073][0074]
并根据计算得到状态值
[0075][0076]
s44、接着进入循环loop,对通过状态值获取键
[0077]
[0078]
如果不为空,则得到相应的值否则结束循环,返回结果集mei
[0079][0080]
利用获取到该状态下,包含当前关键字的索引集长度
[0081][0082]
令j从1到先利用状态值和j获取到键
[0083][0084]
从而获取到值
[0085][0086]
进而计算得到加密索引并将之添加到结果集mei中,
[0087][0088]
最后当时,回溯上一个状态值
[0089][0090]
并将之赋值到继续循环loop。
[0091]
作为优选的技术方案,步骤s5具体为:
[0092]
s51、数据用户对mei中的每个做以下计算,先计算得到temp,
[0093][0094]
接着解密得到文件索引
[0095][0096]
s52、利用文件索引在云存储服务器上获取文件,即可得到相应文档。
[0097]
本发明另一方面提供了一种区块链上基于属性的具有前向和后向隐私的可搜索加密系统,应用于所述的区块链上基于属性的具有前向和后向隐私的可搜索加密方法,该可搜索加密系统包括:运行于云服务器上的云存储子系统、运行于数据拥有者端的初始化及加密子系统、运行于数据用户端的检索陷门生成及解密子系统、以及运行于区块链网络上的检索子系统;
[0098]
所述云存储子系统用于存储文件密文,并根据相应的文件索引返回文件密文,将其发送至数据用户;
[0099]
所述初始化及加密子系统包括初始化模块、私钥存储模块和加密模块;其中,所述初始化模块用于生成系统公开参数、私钥和用户私钥,并将系统公开参数公开发布于区块链网络,将两个私钥保存至私钥存储模块,以及将用户私钥发送至数据用户;所述主私钥存储模块用于存储主私钥,只允许数据拥有者访问;所述加密模块负责将文件加密后存储在
云存储子系统中,并利用私钥对每一个关键字所对应的索引集合和访问树进行加密,得到索引密文,将索引密文发送至区块链网络;
[0100]
所述检索陷门生成及解密子系统包括用户陷门生成模块和数据解密模块;其中,所述用户陷门生成模块负责利用用户的私钥和检索关键字计算得到合法的检索陷门并发送检索陷门给区块链网络;所述数据解密模块利用用户私钥,对检索得到的加密索引集,恢复出明文索引,并明文索引发送给云服务器,获取得到相应的文件;
[0101]
所述检索子系统包括加密数据集存储模块和检索模块;其中,所述加密数据集存储模块从数据拥有者处取得加密索引、访问树以及相关键值对,并将其存储在区块链网络中;所述检索模块负责处理数据用户发送来的检索陷门,并根据检索陷门判断用户是否有访问权限,进而将包含检索关键字的加密索引集返回给用户。
[0102]
本发明又一方面提供了一种计算机可读存储介质,存储有程序,所述程序被处理器执行时,实现所述的区块链上基于属性的具有前向和后向隐私的可搜索加密方法。
[0103]
本发明与现有技术相比,具有如下优点和有益效果:
[0104]
1.保证前向隐私和后向隐私;本发明允许检索系统对每次更新和检索陷门都加上特定的状态值,以此来控制陷门的检索时间跨度,使得使用以往生成的检索陷门无法检索得到之后更新的数据内容即前向隐私;每次更新时无论是添加或删除都是利用操作符op来体现,这使得敌手在没有用户私钥的情况下无法在索引上得到有用的信息,从而实现后向隐私。
[0105]
2.细粒度访问控制;本发明支持对用户的属性进行细分,对于每个关键词的访问都使用访问树进行控制,只有用户的属性满足访问树,用户才能检索得到相应的结果。
[0106]
3.去中心化的检索;本发明同时支持使用部署在区块链上的智能合约来进行检索操作,它为数据用户在加密数据的搜索上带来了更好的系统稳定性和检索的可信性,降低的单点故障的可能性,并且可以保证检索结果的正确性。
[0107]
4.实用性和安全性;本发明采用素数阶群、双线性映射以及密文策略属性可搜索加密方案(cp-abse)进行构造,兼具访问控制、访问策略的灵活表达性的特性,有较强的安全性,且权衡了数据检索的前向隐私、后向隐私、检索的去中心化等问题,具有较好的实用性。
附图说明
[0108]
为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0109]
图1是本发明使用的细粒度访问控制树示例图;
[0110]
图2是本发明区块链上基于属性的具有前向和后向隐私的可搜索加密方案方法流程图;
[0111]
图3是本发明区块链上基于属性的具有前向和后向隐私的可搜索加密方案方法及系统结构框图。
具体实施方式
[0112]
为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
[0113]
在本技术中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本技术所描述的实施例可以与其它实施例相结合。
[0114]
在介绍本发明的技术方案之前,对本发明相关的数学基础和定义做如下说明。
[0115]
(1)双线性对映射:
[0116]
设g1和g2表示两个具有相同顺序q的循环乘法群,将g1和g2上的映射定义为e:g1*g1→
g2;如果映射e满足以下(1.1)-(1.3)的性质,则e是双线性对映射。
[0117]
(1.1)双线性:对于所有以及x,y∈g1,有e(xa,yb)=e(x,y)
ab
;对于所有x1,x2,y∈g1,有e(x1x2,y)=e(x1,y)e(x2,y);对于所有x,y1,y2∈g1,e(x,y1y2)=e(x,y1)e(x,y2)。
[0118]
(1.2)可计算性:对于任何x,y∈g1,存在一个多项式时间算法来有效地计算e(x,y)∈g2。
[0119]
(1.3)非退化性:如果g是g1的生成元,那么e(g,g)是g2的生成元。
[0120]
(2)访问结构和访问树:
[0121]
(2.1)访问结构:令p={p1,p2,

,pn}表示一组参与方;对于一个单调集合}表示一组参与方;对于一个单调集合当且仅当集合时,若b∈a,则有c∈a。即a是参与者集的幂集的子集,是一个集合的集合,b,c是参与者集的子集,当b包含于a时,即是a中一个元素时,若同时b是c的子集,则使得c也包含于a,即c也是a的一个元素,则a是单调的。
[0122]
(2.2)访问树:使t表示一个访问控制策略的树;在t中,每个非叶节点代表一个阈值门,由其子节点和阈值描述,每个叶节点代表一个属性,用num
x
和k
x
表示节点x的子节点的数量和其阈值,此处对于一个非叶子节点,其阈值k
x
有三种情况:k
x
=1表示节点x是一个或门;k
x
=num
x
表示节点x是一个与门;1<k
x
<num
x
表示节点x是一个阈值门。并且我们定义k
x
=1时,表示节点x是叶子节点。
[0123]
关于访问树的几个符号定义如下:(x)表示x的父节点;对于叶节点x,使用attr(x)表示与叶节点关联的属性;index(x)表示x的标签;给定一个包含c个子节点的节点y,其子节点的编号从1到c。
[0124]
判断是否满足访问树:设t
x
为以节点x为根节点的t的子树;如果一组属性s满足t
x
,则将其表示为t
x
(s)=1。其中t
x
(s)的计算如下,如果x是非叶节点,则为节点x的所有子节点x

计算t
x

(s),当且仅当至少k
x
个子节点返回1时,t
x
(s)返回1.如果x是叶节点,则当且仅当attr(x)∈s时,t
x
(s)返回1。因此,根据以上递归计算,若集合s满足t,则tr(s)=1,其中r是t的根节点。
[0125]
访问树结构如附图1,从根节点开始,其门限值为2,孩子节点有3个,随机生成一个多项式,其最高次数为门限值少1,故根节点的最高次数为1,然后将常数项设置为秘密数
(秘密数为需要秘密保存的数);如此根节点随机的多项式为f(x)=5+3x,秘密数为5。此外,将根节点的孩子节点从左至右依次标记为1,2,3

,将节点标记值代入f(x)函数中,所得值传给该标记的孩子节点秘密保存;故“3/3”节点(左边第一个节点)标记为1,传给“3/3”节点的秘密值f(1)=5+3*1=8,中间“教师”节点(中间节点)标记为2,传给“教师”节点的秘密值f(2)=5+3*2=11,“1/2”节点(右边节点)标记为3,传给“1/2”节点的秘密值为f(3)=5+3*3=14。
[0126]
解密此访问树加密的源数据,数据访问者需满足的属性有三种:用户属性是(“计算机学院”且“硕士”且“研二”)和“教师”;用户属性是“教师”和(“网络实验室”或“云实验室”);用户属性是(“计算机学院”且“硕士”且“研二”)和(“网络实验室”或“云实验室”),否则无法访问。
[0127]
(2.3)伪随机置换函数,实现了一种无法与随机排列区分开来的功能,当映射f:{0,1}
l
*{0,1}
λ

{0,1}
l
是伪随机置换函数时,其满足以下性质:对于任何k

{0,1}
λ
,映射f是从{0,1}
l
到{0,1}
l
的双射;对于任何概率多项式时间敌手的双射;对于任何概率多项式时间敌手的双射;对于任何概率多项式时间敌手其中k

{0,1}
λ
,f是一个l位字符串上的随机置换函数,ε是可忽略的;对于任何k

{0,1}
λ
和x

{0,1}
l
,存在一个高效率的算法计算fk(x)。
[0128]
如图2所示,本实施例区块链上基于属性的具有前向和后向隐私的可搜索加密方法的执行流程为:首先数据拥有者do初始化系统公共参数spp,然后将系统公共参数公开发布在区块链网络上或广播发送给系统所有用户,系统中的所有用户都有访问系统公共参数的权限。接着do根据spp生成私钥dk1和dk2,并利用公共参数spp,私钥dk2和用户的属性集su,为用户生成用户私钥ku,最后通过安全的通道将用户私钥发送给用户du。上传文件时,数据拥有者先将加密文件上传至云存储服务器,得到云存储服务器返回的文件索引后,使用私钥dk1、数据集合db={op,ind,w,t}、系统公开参数spp以及一个映射∑,为文档生成索引密文集edb和已更新的映射∑,并把密文集edb部署到区块链上。数据用户du进行检索操作时,数据用户使用其私钥ku对关键字q进行加密,得到检索陷门tra并发送给区块链网络。
[0129]
区块链网络bp收到数据用户du发来的检索陷门tra之后,bp先根据edb[t
ind
]获取得到相应的访问树t;接着利用陷门中的tq以及用户的属性集在访问树上进行一系列计算得到c,根据edb[h2(c)]可以判断用户是否具有相应的访问权限;权限检查通过后,便根据edb[h2(c)]得到相应的状态值,从该状态开始,向前回溯,将这之前每次更新的与关键字q相关的加密索引添加到结果集mei中,最终将mei返回给数据用户。数据用户接收到结果集mei后,使用私钥ku,恢复出对应的明文索引并向云存储服务器获取相应文件。
[0130]
进一步的,本实施例基于属性的具有前向和后向隐私的可搜索加密方法的步骤具体为:
[0131]
s1、系统初始化步骤:数据拥有者do根据安全参数λ,生成系统参数spp并将之公布,接着根据spp生成私钥dk1和dk2,然后利用公共参数spp,私钥dk2和数据使用者即用户的属性集su,为用户生成私钥ku,并通过安全的通道发送给用户du。
[0132]
可以理解的是,上述数据拥有者do可以是一个拥有许多数据的医疗机构,其负责生成系统参数spp,以及用于文件索引加密的私钥dk1和用于生成用户私钥的私钥dk2,其中系统公开参数spp是一系列参数的集合,私钥dk1和私钥dk2均是一个大小为2的一维数组。
[0133]
数据拥有者do生成系统参数spp、私钥dk1和私钥dk2后,将系统公开参数spp公开发布在区块链网络中或广播给系统中所有用户,系统中的所有用户均有访问系统公开参数spp的权限;私钥dk1和私钥dk2妥善保存于数据拥有者do中,只有数据拥有者do具有访问私钥dk1和私钥dk2的权限。
[0134]
进一步的,所述步骤s1具体包括下述内容:
[0135]
s11、数据拥有者do用群生成器执行生成(g1,g2,e,g,q)。其中,q为素数,g1和g2为关于q的乘法群,g是g1的生成元,e∶g1×
g1→
g2是一个双线性映射。
[0136]
s12、数据拥有者do随机选择九个安全hash函数,h0:{0,1}
*
→zq*
,h1:g1*0,1}
*

{0,1}
λ+1
,h2,h3:g2→
{0,1}

,h4:{0,1}
*

g1,h1:{0,1}
λ

{0,1}

,h2::h3:h4:其中n
max
是指包含关键字的最大索引数。选择一个伪随机序列生成函数f/f-1
,f:{0,1}
λ
*{0,1}
λ

{0,1}
λ
,f-1
是其逆置换。将以上安全函数、伪随机序列生成函数和第一步中的参数组合成系统公开参数spp=(g1,g2,e,g,q,h0,h1,h2,h3,h4,h1,h2,h3,h4,f,f-1
),将之发布在区块链网络中或广播给系统中所有用户。
[0137]
s13、数据拥有者do初始化一个空的映射∑,即∑[key]=value,该映射由数据拥有者do来维护,用于存储关键字的状态。
[0138]
s14、数据拥有者do定义lagrange coefficients:其中s表示一个集合,i,j∈z
q*

[0139]
s15、数据拥有者随机选择α,β∈z
q*
,计算g
α
,g
β
和e(g,g)
α
,得到dk1=(e(g,g)
α
,g
β
),dk2=(β,g
α
)。
[0140]
s16、数据拥有者随机选择r∈z
q*
,计算和k3=gr,对于用户的属性集su中的每个属性ai,都进行以下计算:随机选择然后计算和最终用户的私钥并通过安全的通道发送给用户du。
[0141]
s2、加密步骤:数据拥有者使用其私钥dk1、数据集合db={op,ind,w,t}、系统公开参数spp以及一个映射∑,为文档生成索引密文集edb和已更新的映射∑,并把edb部署到区块链上。其中,op={addition,deletion},ind={ind1,ind2,

},w={w1,w2…
wd},
[0142]
其中,索引密文集edb是指数据拥有者通过对关键字进行加密后的数据。在搜索阶段时,通过用户提交的访问树索引t
ind
找到相应的访问树找到相应的访问树是对于关键字wi的访问权限描述,服务器利用访问树和用户发送的检索令牌计算得到结果,利用该结果判断是否有相应的加密索引,从而继续检索。
[0143]
进一步的,所述步骤s2的具体内容为:
[0144]
s21、数据拥有者do随机选择版本号v∈z
q*
,计算并公开版本信息ev=gv。
[0145]
s22、数据拥有者对数据集db中的每个关键字wi进行以下计算,利用映射∑判断关
键字是否存在,不存在则对其状态值进行初始化,接着利用状态值计算得到键再将存储在相应的值中,其中是db(wi)的大小,db(wi)是wi对应的文件索引的集合。
[0146]
s23、对于db(wi)中的每个索引进行以下计算,首先对索引进行加密,公式如下:
[0147][0148]
然后利用状态值计算另一个键将加密索引存储在相应的值中。其中,
[0149][0150][0151]
s24、接着数据拥有者随机选择秘密数s∈z
q*
,并计算s作为属性访问树的根的秘密值。令t为的根节点,对中的每个节点x做以下计算,如果x是t则随机选择d
t
=k
t-1次的多项式q
t
,并设置q
t
(0)=s,随机设置d
t
个多项式q
t
的系数来完成q
t
的定义;否则随机选择d
x
=k
x-1次的多项式q
x
,并设置q
x
(0)=
parent(x)
(index(x))。
[0152]
s25、令x为所有叶子节点的集合,对每个叶子节点x做以下计算,
[0153][0154][0155]
最终得到相应的访问树
[0156]
s26、最后计算与用户陷门进行匹配的值以及访问树的索引t
ind
[0157][0158][0159]
并计算用其hash值作为键将其另一个hash值与状态值异或的结果作为值其中,
[0160][0161][0162]
s27、数据拥有者将以上键值对s27、数据拥有者将以上键值对s27、数据拥有者将以上键值对插入到智能合约中。
[0163]
s3、检索陷门生成步骤:数据用户du进行检索操作时,数据用户使用其私钥ku对关键字q进行加密,得到检索陷门tra并发送给区块链网络。
[0164]
进一步的,所述步骤s3具体为:
[0165]
s31、数据用户的私钥为利用k2和q计算得到temp,
[0166][0167]
s32、接着利用k1和temp计算得到tq,
[0168][0169]
s33、最后利用版本号ev,计算得到具有版本信息的访问树索引t
ind

[0170][0171]
s34、数据用户du根据以上变量组合得到检索陷门:
[0172]
tra=《t
ind
,tq,su》
[0173]
其中,
[0174][0175][0176][0177]
s35、数据用户du将所述检索陷门tra发送至区块链网络。
[0178]
s4、密文搜索步骤:区块链网络bp收到数据用户du发来的检索陷门tra之后,bp先根据edb[t
ind
]获取得到相应的访问树t;接着利用陷门中的tq以及用户的属性集在访问树上进行一系列计算得到c,根据edb[h2(c)]可以判断用户是否具有相应的访问权限;权限检查通过后,便根据edb[h2(c)]得到相应的状态值,从该状态开始,向前回溯,将这之前每次更新的与关键字q相关的加密索引添加到结果集mei中,最终将mei返回给数据用户。
[0179]
进一步的,所述步骤s4具体内容为:
[0180]
s41、区块链网络从陷门中获取到访问树的索引t
ind
,从而得到访问树t=edb[t
ind
]。
[0181]
s42、令x表示t的节点,对t中的每个叶子节点x做以下计算:令a表示该叶子节点x相应的属性即a=attr(x),如果a∈su,则计算f
x

[0182][0183]
否则f
x


;对t中的每个非叶子节点x做以下计算:令s
x
表示k
x
大小的属于x的孩子节点z的集合,如果s
x
不存在,则f
x


,否则使用lagrange interpolation计算f
x

[0184]
[0185][0186]
其中,
[0187]
i=index(z),
[0188]
是lagrange coefficient
[0189]
令t表示t的根节点:如果f
t


,则返回0,否则计算c,
[0190][0191]
其中,
[0192][0193]
s43、接着根据c计算得到键如果则说明用户没有相应的访问权限;否则获取相应的值
[0194][0195]
并根据计算得到状态值
[0196][0197]
s44、接着进入循环loop,对通过状态值获取键
[0198][0199]
如果不为空,则得到相应的值否则结束循环,返回结果集mei
[0200][0201]
利用获取到该状态下,包含当前关键字的索引集长度
[0202][0203]
令j从1到先利用状态值和j获取到键
[0204][0205]
从而获取到值
[0206][0207]
进而计算得到加密索引并将之添加到结果集mei中,
[0208][0209]
最后当时,回溯上一个状态值
[0210][0211]
并将之赋值到继续循环loop。
[0212]
s5、解密步骤:数据用户接收到结果集mei后,使用私钥ku,恢复出对应的明文内容。
[0213]
进一步的,所述步骤s5的具体内容为:
[0214]
s51、数据用户对mei中的每个做以下计算,先计算得到temp,
[0215][0216]
接着解密得到文件索引
[0217][0218]
s52、利用文件索引在云存储服务器上获取文件,即可得到相应文档。
[0219]
需要说明的是,对于前述的各方法实施例,为了简便描述,将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。
[0220]
如图3所示,在本技术的另一个实施例中还提供了一种区块链上基于属性的具有前向和后向隐私的可搜索加密系统,包括运行于云服务器上的云存储子系统、运行于数据拥有者端的初始化及加密子系统、运行于数据用户端的检索陷门生成及解密子系统、以及运行于区块链网络上的检索子系统;
[0221]
所述云存储子系统用于存储文件密文,并根据相应的文件索引返回文件密文,将其发送至数据用户;
[0222]
所述初始化及加密子系统包括初始化模块、私钥存储模块和加密模块;其中,所述初始化模块用于生成系统公开参数、私钥和用户私钥,并将系统公开参数公开发布于区块链网络,将两个私钥保存至私钥存储模块,以及将用户私钥发送至数据用户;所述主私钥存储模块用于存储主私钥,只允许数据拥有者访问;所述加密模块负责将文件加密后存储在云存储子系统中,并利用私钥对每一个关键字所对应的索引集合和访问树进行加密,得到索引密文,将索引密文发送至区块链网络;
[0223]
所述检索陷门生成及解密子系统包括用户陷门生成模块和数据解密模块;其中,所述用户陷门生成模块负责利用用户的私钥和检索关键字计算得到合法的检索陷门并发送检索陷门给区块链网络;所述数据解密模块利用用户私钥,对检索得到的加密索引集,恢复出明文索引,并明文索引发送给云服务器,获取得到相应的文件;
[0224]
所述检索子系统包括加密数据集存储模块和检索模块;其中,所述加密数据集存储模块从数据拥有者处取得加密索引、访问树以及相关键值对,并将其存储在区块链网络中;所述检索模块负责处理数据用户发送来的检索陷门,并根据检索陷门判断用户是否有访问权限,进而将包含检索关键字的加密索引集返回给用户。
[0225]
为了便于说明,区块链上基于属性的具有前向和后向隐私的可搜索加密系统实施例的结构示意图中,仅仅示出了与本发明实施例相关的部分,本领域技术人员可以理解,图示结构并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0226]
此外,上述实施例的区块链上基于属性的具有前向和后向隐私的可搜索加密系统的实施方式中,各程序模块的逻辑划分仅是举例说明,实际应用中可以根据需要,例如出于相应硬件的配置要求或者软件的实现的便利考虑,将上述功能分配由不同的程序模块完成,即将所述基于同态加密和可信硬件的多方隐私保护机器学习系统的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分功能。
[0227]
在另一个实施例中,提供了一种计算机可读存储介质,存储有程序,所述程序被处理器执行时,实现所述的区块链上基于属性的具有前向和后向隐私的可搜索加密方法,具体为:
[0228]
s1、数据拥有者do根据安全参数λ,生成系统参数spp并将spp公布,接着根据spp生成私钥dk1和dk2,并利用公共参数spp、私钥dk2和数据使用者即用户的属性集su,为用户生成私钥ku,并通过安全的通道发送给用户du;
[0229]
s2、数据拥有者do使用其私钥dk1、数据集合db={op,ind,w,t}、公开参数spp以及一个映射∑,为文档生成索引密文集edb和已更新的映射∑,并把edb部署到区块链上,其中op表示对数据的操作方式即添加或者删除,ind表示文件索引集,w表示关键字集合,t表示关键字的访问树集合;
[0230]
s3、数据用户du进行检索操作时,数据用户使用其私钥ku对关键字q进行加密,得到检索陷门tra并发送给区块链网络;
[0231]
s4、区块链网络bp收到数据用户du发来的检索陷门tra之后,bp先根据edb[t
ind
]获取得到相应的访问树t;接着利用陷门中的tq以及用户的属性集在访问树上进行计算得到c,根据edb[h2(c)]判断用户是否具有相应的访问权限;权限检查通过后,便根据edb[h2(c)]得到相应的状态值,从该状态开始,向前回溯,将这之前每次更新的与关键字q相关的加密索引添加到结果集mei中,最终将mei返回给数据用户;
[0232]
s5、数据用户接收到结果集mei后,使用私钥ku,恢复出对应的明文内容。
[0233]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0234]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛
盾,都应当认为是本说明书记载的范围。
[0235]
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1