一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于区块链的多客户端可搜索加密方法

2022-08-17 09:16:20 来源:中国专利 TAG:


1.本发明属于可搜索加密领域,具体为一种基于区块链的多客户端可搜索加密方法。


背景技术:

2.随着云计算和大数据的发展,越来越多的个人和组织将数据外包给云服务提供商进行存储和共享。这种外包给第三方的行为可以有效降低本地的计算和存储开销,但也有可能造成敏感数据泄露或者第三方滥用数据的问题。为了解决这些问题,可以将数据加密后存储到云端,但加密后的数据就会失去原有的灵活性和可操作性,比如无法通过常规的关键字检索方法获取预期的数据。
3.可搜索加密是一种支持用户在密文上进行关键字查找的密码学原语,它能够为用户节省大量的网络和计算开销,并充分利用云端服务器庞大的计算资源进行密文上的关键字查找。区块链是一个分布式的共享账本和数据库,具有去中心化、不可篡改、可追溯等特点。因此,利用区块链实现去中心化的可搜索加密方案具有重要的研究意义。
4.在实际应用场景中,数据拥有者还希望根据用户的角色授予不同的访问能力。此外,数据是不断产生的,其他客户端也有搜索密文的需求。因此,一个成熟的可搜索加密方案还要具备细粒度访问控制、数据动态添加及支持多客户端搜索等特性。


技术实现要素:

5.本发明的目的在于针对背景技术里提到的问题,提出一种基于区块链的多客户端可搜索加密方法,该方法可应用于各种数据搜索和共享场景。
6.实现本发明目的的具体技术方案是:
7.一种基于区块链的多客户端可搜索加密方法,包括如下步骤:
8.步骤1:系统初始化
9.(1.1)初始时,数据拥有者输入安全参数λ,选择一个对称加密方案se、一个属性基加密方案abe、一个伪随机函数f和一个密码学哈希函数h;
10.(1.2)数据拥有者随机选择一个密钥k和两个大素数p、q;令n=pq,并选择一个元素最后,公布公钥pk,并保密系统主密钥sk;
11.(1.3)数据拥有者选择一个大正整数clen,并初始化智能合约的全局参数ctr=clen,将智能合约部署到区块链中;其中,智能合约中初始化了一个空的哈希表结构edb用于存储索引;
12.步骤2:数据动态添加操作
13.一次动态添加操作针对的是文档集;
14.(2.1)对于文档集doc,数据拥有者依次为每个文档doc
ind
选择一个对称密钥k
ind
,运行对称加密算法se.enc()进行加密;最后,将加密数据上传到云服务器;
15.(2.2)依次对文档集doc按文档提取关键字,并构建索引;具体实现如下:
16.(2.2a)对文档doc
ind
∈doc提取出文档标识符-关键字集(ind,w
ind
),其中是文档doc
ind
拥有的关键字集合;
17.(2.2b)对于文档doc
ind
中提取出的关键字w∈w
ind
,计算关键字令牌ktw=f(k,g
1/w
),进而计算搜索令牌stw=h
ctr
(ktw);
18.(2.2c)选择一个访问策略和步骤(2.1)中文档doc
ind
的对称密钥k
ind
,令m
ind
=(ind||k
ind
||op),运行算法得到密文c
ind
,其中op为1表示数据添加操作;
19.(2.2d)对于密文c
ind
,计算key=h(stw||0),得到value

map[key],其中map为本次添加操作中存储数据的哈希表;如果value为空,那么计算并将{key,value}添加到map中;如果value不空,那么先从map中移除{key,value},然后选择一个随机令牌rt

{0,1}
λ
,最后向map中插入和
[0020]
(2.3)调用智能合约,将本次添加操作形成的索引数据上传到edb中,并更新智能合约的公开参数ctr

ctr-1;
[0021]
步骤3数据动态删除操作
[0022]
(3.1)数据拥有者向云服务器发送需删除的数据的文档标识符集,然后云服务器返回加密文档集,并执行删除;
[0023]
(3.2)利用加密文档对应的对称密钥和对称解密算法se.dec(),对加密文档集进行解密,得到原文档集doc';
[0024]
(3.3)依次对原文档集doc'按文档提取关键字,并构建索引;具体实现如下:
[0025]
(3.3a)文档doc'
ind
∈doc'能够提取出文档标识符-关键字集(ind,w'
ind
),其中是文档doc'
ind
拥有的关键字集合;
[0026]
(3.3b)对于文档doc'
ind
中提取出的关键字w∈w'
ind
,计算关键字令牌ktw=f(k,g
1/w
),进而计算搜索令牌stw=h
ctr
(ktw);
[0027]
(3.3c)选择一个访问策略令m
ind
=(ind||op),运行算法得到密文c
ind
,其中op为0表示数据删除操作;
[0028]
(3.3d)对于密文c
ind
,计算key=h(stw||0),得到value

map[key],其中map为本次添加操作中存储数据的哈希表;如果value为空,那么计算并将{key,value}添加到map中;如果value不空,那么先从map中移除{key,value},然后选择一个随机令牌rt

{0,1}
λ
,最后向map中插入和
[0029]
(3.4)调用智能合约,将本次删除操作形成的索引数据上传到edb中,并更新智能合约的公开参数ctr

ctr-1;
[0030]
步骤4:数据拥有者向用户授权
[0031]
(4.1)数据拥有者运行abe.keygen()算法,输出某用户的属性密钥sks,最终通过安全信道分发给用户;
[0032]
(4.2)用户向数据拥有者申请对某些关键字的搜索能力;
[0033]
(4.2)数据拥有者根据用户的身份和属性,为用户选取能够授权的关键字集w;然后,数据拥有者计算授权关键字密钥skw,并将k、skw和授权关键字集w通过安全信道发送给用户;
[0034]
步骤5:用户发起关键字搜索请求
[0035]
(5.1)根据步骤1和步骤4,某用户此时持有密钥k、sks、skw和授权关键字集w;
[0036]
(5.2)对于任意的关键字w∈w,用户计算关键字令牌ktw,并送给智能合约执行对关键字w的搜索;
[0037]
步骤6:智能合约进行搜索
[0038]
(6.1)智能合约根据参数ctr、clen以及用户的关键字令牌ktw,循环计算新的搜索令牌stw,执行搜索;具体实现如下:
[0039]
获取公开参数ctr,令j=ctr,循环执行如下步骤,直至j》clen:
[0040]
(6.1a)计算搜索令牌stw=hj(ktw);
[0041]
(6.1b)根据搜索令牌stw,计算key=h(stw||0),得到value

edb[key];如果value不空,得到一个索引密文和一个随机令牌
[0042]
(6.1c)当rt不空时,计算value'

edb[h(rt||0)]和得到一个索引密文和一个新的随机令牌rt;当rt不空时,循环执行本步;
[0043]
(6.1d)执行j

j 1;
[0044]
(6.2)保存搜索过程中得到的结果res,返回给用户;
[0045]
步骤7:用户解析搜索结果
[0046]
(7.1)对于结果res中的每一个密文c,用户使用属性密钥sks,执行abe.dec()算法,得到明文m,其中m为(ind||k
ind
||op)或(ind||op);
[0047]
(7.2)用户筛选出op为1的文档标识符及其对应的对称密钥,请求云服务器返回加密文档;
[0048]
(7.3)对于返回的加密文档集,运行对称解密算法se.dec()得到原数据。
[0049]
本发明具有以下优点:
[0050]
1)支持数据动态添加和删除;
[0051]
2)数据拥有者只需要本地存储几个隐私参数,本地存储开销降低到了常数级;
[0052]
3)使用区块链代替中心化的服务器,实现了系统去中心化、数据防篡改、交易可验证可追溯等特性;
[0053]
4)支持多客户端。用户获取某些关键字的访问能力后,可以本地生成关键字令牌,减少了用户和数据拥有者的交互,降低了通信开销;
[0054]
5)实现了数据的细粒度访问控制。用户的能力受到关键字和属性的双重制约,用户只能搜索授权的关键字,用户属性用于控制解密的能力。
附图说明
[0055]
图1是实施本发明的系统模型图;
[0056]
图2是本发明初始化流程图;
[0057]
图3是本发明数据动态添加流程图;
[0058]
图4是本发明数据动态删除流程图;
[0059]
图5是本发明数据拥有者向用户授权流程图;
[0060]
图6是本发明用户发起关键字搜索请求流程图;
[0061]
图7是本发明智能合约执行搜索流程图;
[0062]
图8是本发明用户解析搜索结果流程图。
具体实施方式
[0063]
下面结合实施例和附图对本发明的技术方案作进一步详细说明,但本发明的实施方式不限于此。
[0064]
图1是实施本实施例的系统模型图,包括数据拥有者、用户、区块链、云服务器四个实体。数据拥有者主要负责系统初始化、分发属性密钥、授予用户关键字搜索能力、更新数据、建立索引和部署智能合约;用户即客户端,包括个人或组织等,可以访问授权数据。根据角色不同,客户端会被赋予不同的关键字搜索能力;区块链主要负责存储可搜索密文,并通过智能合约,执行搜索。云服务器主要负责存储加密数据,根据数据拥有者要求更新数据,为用户返回数据。系统初始化后,数据拥有者可以不断进行数据动态添加和删除操作来更新数据,用户可以不断发起搜索请求搜索数据。
[0065]
实施例
[0066]
下面是本实施例的具体实施步骤:
[0067]
步骤1:系统初始化
[0068]
图2是本实施例初始化流程图,主要包括以下步骤:
[0069]
(1.1)初始时,数据拥有者输入安全参数λ,选择一个对称加密方案se=(se.enc(),se.dec())、一个属性基加密方案abe=(abe.setup(),abe.keygen(),abe.enc(),abe.dec())、一个伪随机函数f:{0,1}
λ
×
{0,1}
*

{0,1}
λ
和一个密码学哈希函数h:{0,1}
*

{0,1}
*
。其中abe.setup()、abe.keygen()、abe.enc()和abe.dec()分别是属性基初始化、密钥生成、加密和解密算法,se.enc()和se.dec()分别是对称加密算法和对称解密算法。
[0070]
(1.2)数据拥有者随机选择一个密钥k∈{0,1}
λ
。然后,根据强rsa难题,选择两个大素数p和q。令n=pq,并选择一个元素然后,运行abe.setup(1
λ
)算法生成用于分发属性的属性公钥apk和属性主密钥ask。最后,公布公钥pk=(f,h,n,apk),并保密系统主密钥sk=(k1,p,q,g,ask)。
[0071]
(1.3)数据拥有者选择一个大正整数clen,并初始化智能合约的全局参数ctr=clen,将智能合约部署到区块链中。其中,智能合约中初始化了一个空的哈希表结构edb用于存储索引。
[0072]
步骤2:数据动态添加操作
[0073]
图3是本实施例的数据动态添加流程图。在本实施例中,一次动态添加操作针对的是文档集,主要包括以下步骤:
[0074]
(2.1)对于文档集doc,每个文档都有唯一的全局标识符ind。数据拥有者依次为每个文档doc
ind
∈doc选择一个对称密钥k
ind
,运行对称加密算法se.enc(k
ind
,doc
ind
)进行加密。最后,将加密数据上传到云服务器。
[0075]
(2.2)依次对文档集doc按文档提取关键字,并构建索引。详细步骤如下:
[0076]
对文档doc
ind
∈doc提取出文档标识符-关键字集(ind,w
ind
),其中是文档doc
ind
拥有的关键字集合。
[0077]
对于文档doc
ind
∈doc中提取出的关键字w∈w
ind
,计算关键字令牌ktw=f(k,g
1/w
),进而计算搜索令牌stw=h
ctr
(ktw)。
[0078]
选择一个访问策略和步骤(2.1)中文档的对称密钥k
ind
,令m
ind
=(ind||k
ind
||op),运行算法得到密文c
ind
,其中op为1表示数据添加操作。
[0079]
对于密文c
ind
,计算key=h(stw||0),得到value

map[key],其中map为本次添加操作中存储数据的哈希表。如果value为空,那么计算并将{key,value}添加到map中;如果value不空,那么先从map中移除{key,value},然后选择一个随机令牌rt

{0,1}
λ
,最后向map中插入和
[0080]
(2.3)调用智能合约,将map中的索引数据上传到edb中,并更新智能合约的公开参数ctr

ctr-1。
[0081]
步骤3数据动态删除操作
[0082]
图4是本实施例的数据动态删除流程图。在本实施例中,一次动态删除操作针对的是文档集,主要包括如下步骤:
[0083]
(3.1)数据拥有者向云服务器发送需删除的数据的文档标识符集,然后云服务器返回加密文档集,并执行删除。
[0084]
(3.2)利用加密文档对应的对称密钥和对称解密算法se.dec(),对加密文档集进行解密,得到原文档集doc'。
[0085]
(3.3)依次对文档集doc'按文档提取关键字,并构建索引。详细步骤如下:
[0086]
对文档doc'
ind
∈doc'提取出文档标识符-关键字集(ind,w'
ind
),其中是文档doc'
ind
拥有的关键字集合。
[0087]
对于文档doc'
ind
中提取出的关键字w∈w'
ind
,计算关键字令牌ktw=f(k,g
1/w
),进而计算搜索令牌stw=h
ctr
(ktw)。
[0088]
选择一个访问策略令m
ind
=(ind||op),运行算法得到密文c
ind
,其中op为0表示数据删除操作。
[0089]
对于密文c
ind
,计算key=h(stw||0),得到value

map[key],其中map为本次添加操作中存储数据的哈希表。如果value为空,那么计算并将{key,value}添加到map中;如果value不空,那么先从map中移除{key,value},然后选择一个随机令牌rt

{0,1}
λ
,最后向map中插入和
[0090]
(3.4)调用智能合约,将map中的索引数据上传到edb中,并更新智能合约的公开参数ctr

ctr-1。
[0091]
步骤4:数据拥有者向用户授权
[0092]
图5是本实施例的数据拥有者向用户授权流程图,主要包括如下步骤:
[0093]
(4.1)数据拥有者运行abe.keygen(ask,s)算法,输出某用户的属性密钥sks,最终通过安全信道分发给用户。其中ask为属性公钥,s为用户的属性。
[0094]
(4.2)用户向数据拥有者申请对某些关键字的搜索能力。
[0095]
(4.2)数据拥有者根据用户的身份和属性,为用户选取可以授权的关键字集w。然后,数据拥有者计算授权关键字密钥
[0096][0097]
并将k、skw和授权关键字集w通过安全信道发送给用户。
[0098]
步骤5:用户发起关键字搜索请求
[0099]
图6是本实施例的用户发起关键字搜索请求流程图,主要包括如下步骤:
[0100]
(5.1)根据步骤1和步骤4,某用户此时持有密钥k、sks、skw和授权关键字集w。
[0101]
(5.2)对于任意的关键字w∈w,用户计算关键字令牌
[0102][0103]
并送给智能合约执行对关键字w的搜索。
[0104]
步骤6:智能合约执行搜索
[0105]
图7是本实施例的智能合约执行搜索流程图,主要包括如下步骤:
[0106]
(6.1)获取公开参数ctr,令j=ctr,循环执行如下步骤,直至j》clen:
[0107]
计算搜索令牌stw=hj(ktw)。
[0108]
根据搜索令牌stw,计算key=h(stw||0),得到value

edb[key]。如果value不空,得到一个索引密文和一个随机令牌
[0109]
当rt不空时,计算value'

edb[h(rt||0)]和得到一个索引密文和一个新的随机令牌rt。当rt不空时,循环执行本步。
[0110]
执行j

j 1。
[0111]
(6.2)保存搜索过程中得到的所有索引密文,作为结果res返回给用户。
[0112]
步骤7:用户解析搜索结果
[0113]
图8是本实施例的用户解析搜索结果流程图,主要包括如下步骤:
[0114]
(7.1)对于结果res中的每一个密文c,如果用户的属性能够满足c的访问策略,那么执行abe.dec(sks,c)算法,得到m,其中m类型为(ind||k
ind
||op)或(ind||op);如果用户的属性不满足c的访问策略,则无法解密输出


[0115]
(7.2)用户剔除op为0(已删除)的文档标识符及其对应的对称密钥,并将op为1(仍存在)的文档标识符集发送给云服务器,请求响应的文档。
[0116]
(7.3)云服务器返回对应标识符的加密文档。针对每一个加密文档,用户利用加密该文档的对称密钥,运行对称解密算法se.dec()得到原文档。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献