1.基于区块链的关键字可搜索加密方法,其特征在于应用于包括区块链以及加入区块链的数据所有者、数据用户和数据搜索者的系统,所述方法包括如下步骤:数据所有者生成密钥数组,将密钥数组中一部分密钥作为第一密钥组共享至数据用户,将密钥数组中剩余部分密钥作为第二密钥组共享至数据搜索者;
数据所有者基于第一密钥组对每个明文对称加密生成密文,以交易的形式将密文上传区块链,记录并向区块链广播每个密文对应的交易标识符;
数据所有者基于所有明文提取关键字组成关键字集,通过完全二叉树的叶节点表示交易标识符,基于第二密钥以及每个明文中包含的关键字在关键字集中的位置进行加密计算,得到完全二叉树形式的索引,并将索引上传区块链;
数据用户基于搜索关键字生成陷门,并将陷门上传区块链,数据搜索者基于第二密钥组和陷门检索密文,并将密文返回数据用户;
数据用户基于搜索关键字在关键字集中的位置验证所述密文的正确性,对于验证通过的密文进行解密,得到明文。
2.根据权利要求1所述的基于区块链的关键字可搜索加密方法,其特征在于所述数据用户能够作为数据搜索者。
3.根据权利要求1所述的基于区块链的关键字可搜索加密方法,其特征在于区块链通过矿工收集每条交易并记录到对应区块中,所述区块中存储有对应的时间戳。
4.根据权利要求1、2或3所述的基于区块链的关键字可搜索加密方法,其特征在于数据所有者通过第一密钥组K1和对称加密算法ω=(ω.Enc,ω.Dec)对称加密每个明文生成密文,密文表达式为:Ci=ω.Enc(K1,Di)(1≤i≤n)
其中,Ci表示第i个密文,Di表示第i个明文,n表示数据所有者拥有的明文个数。
5.根据权利要求4所述的基于区块链的关键字可搜索加密方法,其特征在于数据所有者通过完全二叉树的叶节点表示交易标识符,通过加密函数以及哈希函数对完全二叉树、关键字集以及第二密钥进行计算得到索引,包括如下步骤:构建具有n个叶节点的完全二叉树I,所述完全二叉树的叶节点用于表示交易标识符所述完全二叉树的内部节点通过1,2,......,n‑1;
对于完全二叉树的叶节点,构建向量vetoru,vetoru=(u1,u2,......,uj,......,um),当且仅当明文Di中包含关键字wj时, m表示关键字集中关键字的个数,uj∈{0,1}(1≤j≤m),H表示哈希函数;
对于完全二叉树的内部节点,计算向量vetoru,计算公式为:vetoru=vetork∨vetorrc
将关键字集中的所有关键字直接连接计算得到w',对于每个关键字wj,以w'和第二密钥组K2为输入,通过伪随机函数F计算gw',并以gw'和vetoru为输入,通过加密函数Enc计算ti,上述计算公式为:gw'=F(K2,w')
ti=ω.Enc(gw',vetoru)(1≤i≤2n‑1),通过哈希函数H'计算用于验证的 计算公式为:
其中Cjα表示包含关键字wj的密文;
数据所有者以交易的形式将上述索引I上传区块链。
6.根据权利要求5所述的基于区块链的关键字可搜索加密方法,其特征在于数据用户基于搜索关键字生成陷门,包括如下步骤:数据用户计算搜索关键字w在向量vetoru中的位置,计算公式为:gw'=F(K2,w')
数据用户将上述陷门上传区块链。
7.根据权利要求6所述的基于区块链的关键字可搜索加密方法,其特征在于数据用户将陷门上传区块链后,指定数据搜索者O,O={O1,O2,......,Ol}。
8.根据权利要求7所述的基于区块链的关键字可搜索加密方法,其特征在于对于单个数据搜索者,数据搜索者基于第二密钥组和陷门检索密文,包括如下步骤:数据搜索者初始化一个结果集result;
数据搜索者从完全二叉树的根节点开始搜索,将根节点存放的 取出,并存放至结果集result;
计算如下公式:
vetoru=ω.Dec(gw',ti)
如果vetour[s]=0,放弃所述对应节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字wj;
如果vetoru[s]=1,继续搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字wj,将所述节点对应的交易标识符存放至结果集result;
所述完全二叉树搜索结束后,基于结果集result中的交易标识符得到对应的密文将密文 返回数据用户。
9.根据权利要求7所述的基于区块链的关键字可搜索加密方法,其特征在于对于多个数据搜索者,数据搜索者基于第二密钥组和陷门检索密文,包括如下步骤:(1)数据搜索者O1初始化一个结果集result;
(2)数据搜索者O1从完全二叉树的根节点开始搜索,将根节点存放的 取出,并存放至结果集result;
(3)数据搜索者O1计算如下公式:
vetoru=ω.Dec(gw',ti)
i=1
如果vetour[s]=0,放弃搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字wj;
如果vetoru[s]=1,将数据搜索者O1作为当前数据搜索者,执行循环步骤L继续搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文包含关键字wj,将所述节点对应的交易标识符存放至结果集result;
所述循环步骤L包括:
由当前数据搜索者Oi搜索左子树,由当前数据搜索者Oi相关的其他数据搜索者{Oi+1,Oi+2,......,Ol}搜索右子树;
每个数据搜索者Oi搜索时,执行如下步骤:
计算如下公式:
vetoru=ω.Dec(gw',ti)
如果vetour[s]=0,放弃搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字wj;
如果vetoru[s]=1,基于循环步骤L继续搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文包含关键字wj,将所述节点对应的交易标识符存放至结果集result;
(4)执行步骤(3)对完全二叉树搜索结束后,基于结果集result中的交易标识符得到对应的密文 将密文 返回数据用户。
10.根据权利要求6所述的基于区块链的关键字可搜索加密方法,其特征在于数据用户接收密文后,通过验证gw'与 是否一致验证密文的正确性;
验证通过后,执行如下操作解密密文
其中, 表示密文 解密得到的明文。