【技术实现步骤摘要】
基于区块链存储的可验证的可搜索对称加密方法
[0001]本专利技术属于信息检索和密码学
,更具体地,涉及一种基于区块链存储的可验证的可搜索对称加密方法。
技术介绍
[0002]可搜索对称加密(Searchable Symmetric Encryption,缩写SSE)是近年来应用密码学领域的研究热点之一,其旨在保护外包数据隐私性的同时,使得对密文数据的检索成为可能。2000年,Song等人首次提出可搜索对称加密方案;随后,Goh以及Chang等人分别提出两个基于正向索引的可搜索对称加密方案;2006年,Curtmola等人研究了基于倒排索引的可搜索对称加密,并第一次对SSE的安全性做出正式定义。此后,许多SSE方案被相继提出,就SSE的功能和安全性方面做出了扩展。可验证的可搜索对称加密(Verifiable SSE,缩写VSSE)是该领域的一个研究分支,其使用消息认证码等工具,使得数据用户能够校验服务器返回结果的正确性,从而抵御了不诚实的服务器返回不正确或不完整结果的问题。
[0003]然而,现有的大多数工作都聚焦单一服务器的场景,因此可能会导致以下问题:第一,单一服务器场景容易发生单点故障,即一旦服务器发生了故障,则索引数据有可能会丢失且不可挽回;第二,不诚实的服务器可能会返回不正确的结果,但由于只有一台服务器,数据用户不能通过切换服务器来寻求正确的结果;第三,在不清楚数据是否有效、服务器是否可靠的情况下,数据用户将索引数据迁移到其他云服务器上是困难的。近年来学术界有多个工作聚焦于基于区块链存储的可搜
【技术保护点】
【技术特征摘要】
1.一种基于区块链存储的可验证的可搜索对称加密方法,其特征在于,包括:S1.密钥生成算法:运行于数据用户端,数据用户输入安全参数λ,密钥生成算法使用随机数生成算法产生密钥K,K
′←
{0,1}
λ
,之后,数据用户将密钥K,K
′
妥善保存在本地存储中;S2.初始化算法:运行于数据用户端,用户输入密钥K,K
′
,以及数据库DB,初始化算法为数据库DB生成加密数据库EDB=(LT1,LT2),并写入到仅追加块存储ABS模型中;其中,LT1存储了加密数据库,用于加密搜索;而LT2存储了每个关键字对应的证据,用于结果验证;S3.令牌生成算法:运行于数据用户端,用户输入待搜索关键字w,以及密钥K1,K2,令牌生成算法生成一个与待搜索关键字w相关联的搜索令牌τ=(K1,K2,label),并将搜索令牌τ发送至服务提供者端;S4.搜索算法:运行于服务提供者端,当服务提供者收到数据用户发来的搜索令牌τ后,对保存在ABS模型的加密数据库EDB=(LT1,LT2)进行检索,调用搜索算法从LT1中得到相匹配的文件标识符集合并从LT2提取出相应的证据prf,最后将和prf发送至数据用户端;S5.验证算法:运行于数据用户端,当数据用户收到服务提供者返回的结果后,输入上述结果、密钥K
′
以及令牌生成阶段输出的label,验证算法校验服务提供者返回的结果是否正确,如果结果正确,则读取结果集合的文件标识符进行后续的操作;否则,数据用户选择继续和其他服务提供者沟通,重新执行搜索算法和验证算法以获取可靠的结果。2.根据权利要求1所述的基于区块链存储的可验证的可搜索对称加密方法,其特征在于,所述的仅追加块存储ABS模型用于对区块链存储进行高层次的功能抽象,以屏蔽区块链的运作细节,以便基于区块链存储的可搜索对称加密方法的设计与分析;ABS模型使用数据块的结构组织数据,不能修改或删除已写入的块,只能将新的块写入到存储中;当一个块被写入后,ABS模型会返回指向该块的地址;ABS模型的数据块长度是固定的,由公共参数γ指定;当待写入数据的长度大于γ时,ABS模型终止写入而不会切分数据;如果待写入数据的长度小于块的长度,ABS模型在写入前使用足够多个0填充数据,直至数据长度等于块的长度。3.根据权利要求2所述的基于区块链存储的可验证的可搜索对称加密方法,其特征在于,所述的ABS模型包括:ABS
←
Init(γ):初始化ABS算法,其接受一个公开参数γ作为输入,并输出一个仅追加块存储ABS,其中γ指定块的长度;v/
⊥←
Get(ABS,addr):获取块数据算法,其输入一个仅追加块存储ABS和一个块地址addr,如果addr指定的块存在,它返回该块所有的内容v;否则,它返回空指示符
⊥
;(ABS
′
,addr)
←
Put(ABS,v):写入块数据算法,其输入一个仅追加块存储ABS和一个要写入的数据v,如果v的长度大于块长度y,算法就会终止;否则,算法输出更新后的仅追加块存储ABS
′
以及该数据所在的块地址addr。4.根据权利要求3所述的基于区块链存储的可验证的可搜索对称加密方法,其特征在于,还包括基于区块链存储的静态查找表数据结构的实现方法,用于在区块链存储中实现较高效的键
‑
值存储和读取效率,包括:(LT,ABS
′
)
←
LTInit({(l1,v1),...,(l
n
,v
n
)},ABS):初始化算法LTInit,其接受一组键
‑
值对{(l
i
,v
i
)}
1≤i≤n
和仅追加块存储ABS作为输入,然后输出更新后的块存储ABS
′
,以及存储在ABS
′
中的查找表LT;
v/
⊥←
LTGet(l,LT,ABS):查找表检索算法LTGet,其接受一个键l、查找表LT以及仅追加块存储ABS作为输入,如果查找表LT中存在键为l的项,则输出对应的值v;否则,输出空指示符
⊥
。5.根据权利要求4所述的基于区块链存储的可验证的可搜索对称加密方法,其特征在于,基于二叉搜索树的思想,给出具体的基于区块链存储的静态查找表数据结构的实现方法,即BinST;给定n个键
‑
值对{(l1,v1),...,(l
n
,v
n
)},M阶BinST的初始化算法LTInit包括:若n=0,返回空树,其中根节点地址表示为空指示符
⊥
;否则,对{(l1,v1),...,(l
n
,v
n
)}按键的非降序进行排序,结果为{(l
′1,v
′1),...,(l
′
n
,v
′
n
)};将有序的键
‑
值对{(l
′1,v
′1),...,(l
′
n
,v
′
n
)}切分为个子集合为简化表示,使用符号B
i
来表示第i个子集合;对于子集合列表调用以下子例程自底向上地构造BinST:读取子例程的输入,即子集合列表B={B1,B2,...,B
m
};若列表B为空,输出空树,其中根节点地址表示为空指示符
⊥
;否则,从列表B中选择中间元素构造BinST结点x,将中的键
‑
值对按序写入到结点x的相应数据成员中;对于位于左边的子列表递归调用该子例程生成左子树b
l
,将b
l
的根结点作为x的左孩子;同理,对于位于右边的子列表递归调用该子例程生成右子树b
r
,将b
r
的根结点作为x的右孩子;通过调用方法(ABS,addr
x
)
←
Put(ABS,x),将节点x写入到块存储ABS中,输出以结点x为根的BinST子树b,其中b的根节点地址为addr
x
;在BinSTb(其中b的根节点表示为b.root,而根节点地址表示为addr
...
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。