[0001]
本发明属于数据加密领域,具体为一种前后向安全且具有可恢复关键字屏蔽的加密方法。
背景技术:[0002]
如果更新查询不会泄漏正在更新的关键字/文档对中涉及哪些之前存储的关键字,则称动态可搜索对称加密方案是前向安全的(或称为前向隐私)。特别是,云服务器无法知道更新的文档是否与之前查询的关键字匹配。如果每当关键字/文档对(w,ind)被添加到数据库中之后删除时,w上的后续搜索查询不会显示该ind,则dsse方案就是后向安全的(或称为后向隐私)。现有的前后向隐私保护技术会占用过多本地存储空间,并且不支持可恢复性关键字屏蔽,这样一旦被支持后向安全的动态可搜索加密方案删除,即无法恢复。
技术实现要素:[0003]
本发明针对现有技术中前后向隐私保护技术占用过多本地存储空间且不支持可恢复性关键字屏蔽的问题,提供一种前后向安全且具有可恢复关键字屏蔽的加密方法,减少本地存储空间的占用,利用穿刺技术实现后向安全,利用陷门置换实现前向安全和可恢复关键字屏蔽。
[0004]
为了实现上述目的,本发明的加密方法有如下的技术方案:
[0005]
通过单向陷门置换实现前向安全和可恢复关键字屏蔽:利用单向陷门置换在数据拥有者端生成更新的搜索令牌st
c+1
,在搜索过程中,云服务器能够根据陷门排列的公钥和st
c+1
将搜索令牌从st0推导出到st
c
,但在没有密钥的情况下,无法根据st
c
计算st
c+1
;
[0006]
通过可穿刺加密实现后向安全:使用伪随机函数为每个索引生成一个标签,并使用可穿刺加密对带有标签的索引进行再次加密;当关键字/文件对被删除时,数据拥有者会穿刺公钥加密的密钥,云服务器修改相应的标签,因此,云服务器无法解密关键字/文件对。
[0007]
在本发明前后向安全且具有可恢复关键字屏蔽的加密方法的一种优选实施例当中:
[0008]
如果数据拥有者只是想暂时屏蔽一个关键字,那么不通过可穿刺加密实现后向安全,而是,数据拥有者使用单向陷门置换来加密云服务器上的关键字,使数据使用者不能发出有效的搜索查询;当数据拥有者想解除对关键字的屏蔽时,在云服务器上解密该关键字即可。
[0009]
在本发明前后向安全且具有可恢复关键字屏蔽的加密方法的一种优选实施例当中:
[0010]
设置阶段操作如下:将文件分割成词序列,将每个文件转换成基于词序列的数据流,在输入安全参数λ时,生成伪随机函数f的密钥k、陷门置换的公共密钥对(pk,sk),以及用于存储密钥、计数器信息和关键字对应搜索令牌的空表w,输出伪随机函数f
tag
的密钥k
tag
。
[0011]
在本发明前后向安全且具有可恢复关键字屏蔽的加密方法的一种优选实施例当中:
[0012]
搜索阶段操作如下:根据要查询的关键字w和伪随机函数的密钥k计算k
w
;再在表w中找到与关键字w对应的标签并检查状态是否可搜索;如果是,检查最新的搜索令牌st
c
和计数器c;如果结果为空则表示关键字w不在表w中,反之则表示在表w中;如果表w中存在关键字w,将标签数值乘以2的序列分配给p,然后把(k
w
,st
c
,c,p)寄给云服务器;云服务器接收到(k
w
,st
c
,c,p)后,先根据p的位置定位关键字w所在的叶节点,并在叶节点中获得一个存储相关文件id的列表;根据计数器c和陷门排列的公钥pk的值,计算所有的搜索令牌st
c
;获得的搜索令牌st
c
数量与列表中文件id的数量相同;最后使用存储在云服务器上的被刺穿的密钥psk解密列表的内容;使用散列函数h,根据计算的搜索令牌和收到的k
w
获得所有文件id。
[0013]
在本发明前后向安全且具有可恢复关键字屏蔽的加密方法的一种优选实施例当中:
[0014]
更新阶段的操作如下:首先,数据拥有者需要确定是执行添加还是删除操作;
[0015]
如果添加关键字/文件id对w/ind,首先根据关键字w和伪随机函数的密钥k计算k
w
,并根据w/ind和密钥k
tag
计算标签t;之后在关键字表w中查找与关键字w对应的标签、最新的搜索令牌st
c
和计数器c;如果结果为空,则表示关键字w不在关键字表w中;然后向关键字表w添加一个项,并将关键字w的标签设置为m,将计数器c设置为1;当计算关键字w的搜索令牌st1时,生成一个穿刺的公钥和密钥对(psk0,ppk);如果关键字表w中存在关键字w,则根据陷门置换的密钥将搜索令牌st
c
更新为st
c+1
;之后使用哈希函数h计算文件id并加密为e’;然后用ppk对e’进行加密以获得e,输出与标签t关联的密文ct;最后,向云服务器发送(e,p,sk0,m
c
),其中p=seq*2,m
c
是最新的关键字数;云服务器收到元组(e,p,sk0,m
c
),将发送的最新关键字m
c
与云服务器中现有的关键字数目m
s
进行比较;如果m
c
>m
s
,则表示需要在系统中添加新的关键字,更新关键字的树结构和psk;然后云服务器根据p的位置定位叶节点,得到叶节点中相关文件id的列表,并将加密的文件id值e添加到末尾;
[0016]
如果删除关键字/文件id对w/ind;首先根据w/ind和密钥k
tag
计算标签t,然后在关键字表w中找到与关键字对应的条目;使用标签t执行增量刺穿来更新sk0,得到sk0’
,计算sk’,并将(e,p,sk0,sk’)发送到云服务器,其中p=seq*2,e是要删除的w/ind对的加密结果;云服务器接收(e,p,sk0,sk’)后,定位关键字对应于p位置的叶节点,获取存储在叶节点中的相关文件id的列表,更新被刺穿的加密密钥sk;最后云服务器删除关键字/文件id对w/ind。
[0017]
在本发明前后向安全且具有可恢复关键字屏蔽的加密方法的一种优选实施例当中:
[0018]
屏蔽阶段的操作如下:首先,数据拥有者初始化屏蔽计数器sc为0,并在进行关键字屏蔽或关键字取消屏蔽时将计数器增加1,在计数器sc mod 2=1时执行关键字屏蔽,从而生成新的屏蔽搜索令牌sst;数据拥有者只存储最新的屏蔽搜索令牌和屏蔽计数器sc;密钥k
s
计算为k
sw
;然后,在关键字表w中找到与关键字对应的标签、最新的sst
c
和计数器sc;由于关键字标签和索引二叉树中节点位置之间的关系,标签乘以2的序列被分配给p;最后,数据拥有者将(k
sw
,sst
w
,p)作为覆盖值发送到云服务器;云服务器收到(k
sw
,sst
w
,p)后,根据p
的位置定位叶节点;然后,云服务器使用陷门置换的计数器c和公钥pk来计算所有屏蔽搜索令牌sst;使用散列函数h、st和k
sw
,数据拥有者能够取消对关键字的屏蔽。
[0019]
相较于现有技术,本发明具有如下的有益效果:
[0020]
利用单向陷门置换将所有搜索令牌集成到最后一个搜索令牌上,大大的减少了本地存储空间。穿刺性加密方案中有一个问题,即随着穿刺次数的增加,被穿刺的私钥占用空间会变得非常大,将完整的私钥保存在本地中非常不切实际。因此本发明采用可以称为增量穿刺的附加功能。观察穿刺性加密方案中私钥的穿刺过程,可以发现,从sk
i-1
更新到sk
i
时,私钥sk
i-1
=(sk0,sk1,
…
sk
i-1
)中只有sk0部分做了更新,并新增sk
i
。因此设计增量加密,incpuncture(sk0,t)=(sk0′
,sk
i
)。因此本地只需要保存私钥的sk0部分,其余部分可以存储在云服务器中。利用穿刺性加密,明文会被附加一个标签之后再进行加密。当对私钥做关于该标签的穿刺后,该私钥就不能够解密附加了该标签的密文消息,由此确保后向安全。
附图说明
[0021]
图1本发明实施例针对应用的系统模型示意图;
[0022]
图2本发明所采用的陷门置换方法原理示意图;
[0023]
图3倒排索引结构示意图;
[0024]
图4树的更新操作过程示意图;
[0025]
图5本发明的整体操作方法流程图。
具体实施方式
[0026]
下面结合附图以及实施例对本发明做进一步的详细说明。
[0027]
本发明涉及单向陷门置换实现前向安全性和关键词屏蔽。例如,对于某个关键字w0,包含w0的文件是ind0,ind1。当添加关键字/文件对w/ind2时,为每个关键字/文件对生成搜索令牌的简单方法可以保证前向安全性,但会产生较高的通信开销。例如,当添加w/ind2时,需要生成三个不同的搜索令牌st0、st1和st2,但是这种方法也会导致存储空间的浪费,因为数据拥有者需要存储所有生成的搜索令牌。为了解决上述两个问题,利用单向陷门置换在数据拥有者端生成更新的搜索令牌st
c+1
,从而降低了存储和计算成本。在搜索过程中,云服务器可以根据陷门排列的公钥和st
c+1
将搜索令牌从st0推导出到st
c
,但在没有密钥的情况下,它无法根据st
c
计算st
c+1
。因此,fb-aks系统的前向安全性得到了保证。
[0028]
本发明加密方法的后向安全是通过使用可穿刺加密来实现的。对于每个关键字/文件对,fb-aks使用伪随机函数为每个索引生成一个标签,并使用可穿刺加密对带有标签的索引进行再次加密。当关键字/文件对被删除时,数据拥有者会穿刺公钥加密的密钥,云服务器修改相应的标签。因此,云服务器无法解密关键字/文件对。如果数据拥有者只是想暂时屏蔽一个关键字,那么不需要在这里使用可穿刺加密。可以就像前向安全的方式一样,数据拥有者使用陷门置换来加密云服务器上的关键字,这样数据使用者就不能发出有效的搜索查询。每当数据拥有者想解除对关键字的屏蔽时,就在云服务器上解密该关键字。
[0029]
参见图1,以基于物联网的医疗可穿戴设备云为例,系统由三个实体构成:可信的数据拥有者与数据使用者,半可信的云服务器。数据拥有者对云服务器增删密文索引,屏蔽(恢复)关键字,对数据使用者分派密钥。数据使用者对数据拥有者申请密钥,对云服务器发
出查询请求。云服务器返回搜索结果给数据使用者。
[0030]
数据拥有者既是病人又是健康监护系统的监督者。佩戴物联网传感器来收集人体生理参数,并将其发送给云服务器。生成公钥和私钥对健康信息进行本地加密,生成与加密的健康信息相关联的令牌,然后将密文和令牌添加到云服务器或随意删除。另外,数据拥有者可以屏蔽一个关键字,这样数据使用者就无法访问它,然后取消对该关键字的屏蔽。数据用户。数据使用者是那些要求获取体表生理参数的医生。数据使用者向数据拥有者请求秘密密钥,为查询到的关键字生成陷门,并将陷门发送给云服务器,对云服务器返回的加密健康信息进行解密。这些健康信息由数据使用者进行汇总和分析。云服务器具有无限的计算和存储资源,负责存储加密的健康信息和相应的索引。当云服务器接收到查询令牌时,云服务器将查询令牌与索引进行匹配,并将匹配的搜索结果返回给数据使用者。
[0031]
参见图5,本发明的具体实现步骤如下:
[0032]
步骤一,系统初始化;
[0033]
采集患者身体生理参数数据集,该数据集包含多条记录d,每条数据d={v1,
…
,vj
…
,vn}由n维构成,v
j
表示数据d中第j维的值,l≤j≤n,比如医疗记录包括血压,心率,体温,血氧饱和度;数据拥有者为数据集d生成对称密钥:
[0034]
k,k
tag
=keygen(λ)
[0035]
步骤2,数据加密和索引建立;
[0036]
(i,c)=encrypt(k,d)
[0037]
数据拥有者利用对称密钥采用传统加密算法aes对数据集d进行加密,得到密文集c和索引i;数据拥有者采用传统树形结构为数据集d建立明文索引结构,传统树形结构包括b+树,b树和二叉树,本实例采用但不限于倒排二叉树树结构建立明文索引结构,并将其加密成加密索引i;数据拥有者保存明文索引结构并将密文索引结构i和密文集c发送给云服务器。
[0038]
步骤3,密钥申请;
[0039]
合法的数据使用者向数据拥有者申请密钥sk;
[0040]
数据拥有者确认身份后给与密钥sk于数据使用者;
[0041]
步骤4,密文查询;
[0042]
合法的数据使用者给定查询请求q
[0043]
st=(k,q)
[0044]
合法的数据使用者利用密钥sk并利用传统加密算法对查询请求q进行加密,得到陷门st;
[0045]
数据使用者将陷门值st,数据表位置lq发送给云服务器;
[0046]
云服务器根据数据表位置lq得到密文数据表;判断该密文是否在云服务器上,如果有匹配,返回结果给数据使用者,如果没有匹配,则返回空;
[0047]
步骤五,解密;
[0048]
用户使用密钥sk解密返回的密文文件c
i
,得到相应的明文文件d
i
。算法由用户执行。
[0049]
d(w)=decrypt(sk,c)
[0050]
步骤六:首先,数据拥有者需要确定是执行添加还是删除操作。
[0051]
添加关键字/文件id对w/ind见图。首先,数据拥有者根据关键字w和伪随机函数的密钥k计算k
w
,并根据w/ind和密钥k
tag
计算标签t。之后,数据拥有者在关键字表w中查找与关键字对应的标签、最新的st
c
和计数器c。如果结果为空,则表示关键字w不在关键字表中。然后,数据拥有者需要向关键字表w添加一个项,并将关键字的标签设置为m,将计数器c设置为1。当计算关键字w的搜索令牌st1时,数据拥有者执行密钥生成算法来生成一个穿刺的公钥和密钥对(psk0,ppk)。如果关键字表中存在w,数据拥有者根据陷门置换的密钥将st
c
更新为st
c+1
。之后,文件id被哈希函数h计算并加密为e’。然后数据拥有者用ppk对e’进行加密以获得e(输出与标签t关联的密文ct)。最后数据拥有者向云服务器发送(e,p,sk0,m
c
),其中p=seq*2,m
c
是最新的关键字数。收到元组(e,p,sk0,m
c
),云服务器将数据拥有者发送的最新关键字m
c
与云服务器中现有的关键字数目m
s
进行比较。如果m
c
>m
s
,则表示需要在系统中添加新的关键字,关键字的树结构和psk也需要更新。然后云服务器根据p的位置定位叶节点,得到叶节点中相关文件id的列表,并将加密的文件id值e添加到链表的末尾。
[0052]
删除关键字/文件id对w/ind。首先,数据拥有者根据w/ind和密钥k
tag
计算标签t,然后,在关键字表w中找到与关键字对应的条目。现在数据拥有者使用标签t执行增量刺穿来更新sk0,这样就可以得到sk0’
,计算sk’,并将(e,p,sk0,sk’)发送到云服务器,其中p=seq*2。
[0053]
e是要删除的w/ind对的加密结果。在接收(e,p,sk0,sk’)后,云服务器定位关键字对应于p位置的叶节点,获取存储在叶节点中的相关文件id的列表,更新存储在链表中的被刺穿的加密密钥sk。最后,云服务器删除关键字w和文件id对。
[0054]
屏蔽阶段:给出了搜索阶段的形式化描述。这个阶段需要数据拥有者、数据使用者和云服务器一起参与。首先,数据拥有者初始化屏蔽计数器sc为0,并在进行关键字屏蔽或关键字取消屏蔽时将计数器增加1。数据拥有者可以在计数器sc mod 2=1时执行关键字屏蔽,从而生成新的屏蔽搜索令牌(sst)。数据拥有者只存储最新的屏蔽搜索令牌和屏蔽计数器sc。密钥k
s
计算为k
sw
。然后,数据拥有者在屏蔽关键字表sw中找到与关键字对应的标签、最新的sst
c
和计数器sc。由于关键字标签和索引二叉树中节点位置之间的关系,标签乘以2的序列被分配给p。最后,数据拥有者将元组(k
sw
,sst
w
,p)作为覆盖值发送到云服务器。收到(k
sw
,sst
w
,p)后,云服务器根据p的位置定位叶节点。然后,云服务器使用陷门置换的计数器c和公钥pk来计算所有sst。使用散列函数h、st和k
sw
,数据拥有者可以取消对关键字的屏蔽。
[0055]
参见图2,陷门置换π是集合d上的单向置换。使用公钥pk,π可以很容易地计算,但是如果没有密钥sk,则无法计算其逆π-1
。参见图3,倒排索引结构当中,每一个树叶节点代表一个关键字,每一个ind代表含有该关键字的文件。
[0056]
参见图4,树的更新操作过程如下:假设现在有一个新增的关键字m,则需要对树做更新操作。此时根据树中节点的情况分为三种情况:
[0057]
1、树为一棵空树。则新建一个节点,将此节点设置为树的根节点,并把该节点的值赋为0。
[0058]
2、树中存在虚节点。也就等于此时树中叶子节点的个数多于关键字的个数,则只需要将最左边的虚节点改为实节点即可。
[0059]
3、若此时树中全部的叶子节点都为实节点,也就是树中叶子节点的个数刚好等于关键字的个数,则在新增关键字时,需要新建一棵树。复制旧的完美二叉树,得到新的同样
的完美二叉树;根据系统中存储的计数器cn的值,将其加2后,对新得到的完美二叉树执行treeassign赋值操作;新建一个节点作为新的根节点,将该节点的值赋为cn+1;将旧的二叉树作为该节点的左子树,复制后的二叉树该节点的右子树。从而得到了一棵新的赋值后完美二叉树。该完美二叉树的右子树部分只有一个实的叶子节点,其余叶子节点为虚节点。
[0060]
表1
[0061][0062]
在表1中w代表关键字;数字代表关键字标号;
[0063]
st代表搜索令牌;c代表计数器;ppk穿刺公钥;sk代表私钥;sst屏蔽用搜索令牌;
[0064]
sc代表屏蔽用计数器;spk代表屏蔽用穿刺公钥;ssk代表屏蔽用私钥。
[0065]
以上所述的仅仅是本发明的较佳实施例,并不用以对本发明的技术方案进行任何限制,本领域技术人员应当理解的是,在不脱离本发明精神和原则的前提下,该技术方案还可以进行若干简单的修改和替换,这些修改和替换也均属于权利要求书所涵盖的保护范围之内。