基于区块链的关键字可搜索加密方法转让专利

申请号 : CN202011368814.2

文献号 : CN112328606B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 禹继国刘希茹王英龙董安明

申请人 : 齐鲁工业大学

摘要 :

本发明公开了一种基于区块链的关键字可搜索加密方法,属于关键字密文搜索技术领域,要解决的技术问题为如何基于区块链实现可搜索对称加密。包括如下步骤:数据所有者生成密钥数组,将密钥数组中一部分密钥作为第一密钥组共享至数据用户,将密钥数组中剩余部分密钥作为第二密钥组共享至数据搜索者;数据所有者基于第一密钥组对每个明文对称加密生成密文,以交易的形式将密文上传区块链;数据所有者通过完全二叉树的叶节点表示交易标识符,得到完全二叉树形式的索引,并将索引上传区块链;数据用户基于搜索关键字生成陷门,并将陷门上传区块链,数据搜索者基于第二密钥组和陷门检索密文;数据用户对于验证通过的密文进行解密,得到明文。

权利要求 :

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'与 是否一致验证密文的正确性;

验证通过后,执行如下操作解密密文

其中, 表示密文 解密得到的明文。

说明书 :

基于区块链的关键字可搜索加密方法

技术领域

[0001] 本发明涉及关键字密文搜索技术领域,具体地说是一种基于区块链的关键字可搜索加密方法。

背景技术

[0002] 区块链技术是近几年来兴起的重要领域,特别是作为特殊区块链的以太坊更是在学术界和商业界产生了极其重要的影响。实际上,区块链是将许多区块链接起来的链,它就像一个公开的账本,账本的每一页是一个区块,账本就是区块链。如果将数据上传到区块链,只要是合法用户,都可以访问区块链中的数据,这对医学、银行、物流等领域都具有潜在的重要应用价值。区块链具有去中心化和不可篡改两个重要特征,其中去中心化保证了数据不会泄露给好奇的管理员,而不可篡改性和数据的加密上传保证了数据的隐私性和私密性。
[0003] 将数据上传到区块链的目的是方便数据的使用,也就是数据的搜索,但是在上传数据的时候,为了保护数据的安全,需要将数据加密之后再上传到区块链。如果用户想使用数据,将面对的是区块链上的密文,为了解决这一问题,可搜索对称加密应运而生,在可搜索对称加密中,可以在密文上进行搜索,它有效的保护了用户的隐私。
[0004] 目前大多数可搜索对称加密方案都不是基于区块链技术的,但是随着区块链技术的发展,区块链已经是一种非常方便的存储数据的结构,因此,使用可搜索对称加密方案在区块链上进行搜索显得尤为重要。而且将数据上传到区块链对各个领域都具有潜在的价值,所以,无论是机构还是个人都可以将数据上传到区块链,显然,区块链上的数据会变得越来越多,当人们想要搜索数据时,会变得非常困难。因此,单纯的使用可搜索对称加密方案保护用户的隐私而不提高搜索效率是不符合实际的。因此,迫切需要一个能够提高搜索效率的区块链搜索方案。
[0005] 基于上述,如何基于区块链实现可搜索对称加密,是需要解决的技术问题。

发明内容

[0006] 本发明的技术任务是针对以上不足,提供基于区块链的关键字可搜索加密方法,来解决如何基于区块链实现可搜索对称加密的问题。
[0007] 本发明提供一种基于区块链的关键字可搜索加密方法,应用于包括区块链以及加入区块链的数据所有者、数据用户和数据搜索者的系统,所述方法包括如下步骤:
[0008] 数据所有者生成密钥数组,将密钥数组中一部分密钥作为第一密钥组共享至数据用户,将密钥数组中剩余部分密钥作为第二密钥组共享至数据搜索者;
[0009] 数据所有者基于第一密钥组对每个明文对称加密生成密文,以交易的形式将密文上传区块链,记录并向区块链广播每个密文对应的交易标识符;
[0010] 数据所有者基于所有明文提取关键字组成关键字集,通过完全二叉树的叶节点表示交易标识符,基于第二密钥以及每个明文中包含的关键字在关键字集中的位置进行加密计算,得到完全二叉树形式的索引,并将索引上传区块链;
[0011] 数据用户基于搜索关键字生成陷门,并将陷门上传区块链,数据搜索者基于第二密钥组和陷门检索密文,并将密文返回数据用户;
[0012] 数据用户基于搜索关键字在关键字集中的位置验证所述密文的正确性,对于验证通过的密文进行解密,得到明文。
[0013] 作为优选,所述数据用户能够作为数据搜索者。
[0014] 作为优选,区块链通过矿工收集每条交易并记录到对应区块中,所述区块中存储有对应的时间戳。
[0015] 作为优选,数据所有者通过第一密钥组K1和对称加密算法ω=(ω.Enc,ω.Dec)对称加密每个明文生成密文,密文表达式为:
[0016] Ci=ω.Enc(K1,Di)(1≤i≤n)
[0017] 其中,Ci表示第i个密文,Di表示第i个明文,n表示数据所有者拥有的明文个数。
[0018] 作为优选,数据所有者通过完全二叉树的叶节点表示交易标识符,通过加密函数以及哈希函数对完全二叉树、关键字集以及第二密钥进行计算得到索引,包括如下步骤:
[0019] 构建具有n个叶节点的完全二叉树I,所述完全二叉树的叶节点用于表示交易标识符 所述完全二叉树的内部节点通过1,2,......,n‑1;
[0020] 对于完全二叉树的叶节点,构建向量vetoru,vetoru=(u1,u2,......,uj,......,um),当且仅当明文Di中包含关键字wj时, m表示关键字集中关键字的个数,uj∈{0,1}(1≤j≤m),H表示哈希函数;
[0021] 对于完全二叉树的内部节点,计算向量vetoru,计算公式为:
[0022] vetoru=vetork∨vetorrc
[0023] 将关键字集中的所有关键字直接连接计算得到w',对于每个关键字wj,以w'和第二密钥组K2为输入,通过伪随机函数F计算gw',并以gw'和vetoru为输入,通过加密函数Enc计算ti,上述计算公式为:
[0024] gw'=F(K2,w')
[0025] ti=ω.Enc(gw',vetoru)(1≤i≤2n‑1),
[0026] 通过哈希函数H'计算用于验证的 计算公式为:
[0027]
[0028]
[0029] 其中Cjα表示包含关键字wj的密文;
[0030] 数据所有者以交易的形式将上述索引I上传区块链。
[0031] 作为优选,数据用户基于搜索关键字生成陷门,包括如下步骤:
[0032] 数据用户计算搜索关键字w在向量vetoru中的位置,计算公式为:
[0033]
[0034] gw'=F(K2,w')
[0035] 数据用户将上述陷门上传区块链。
[0036] 作为优选,数据用户将陷门上传区块链后,指定数据搜索者O,O={O1,O2,......,Ol}。
[0037] 作为优选,对于单个数据搜索者,数据搜索者基于第二密钥组和陷门检索密文,包括如下步骤:
[0038] 数据搜索者初始化一个结果集result;
[0039] 数据搜索者从完全二叉树的根节点开始搜索,将根节点存放的 取出,并存放至结果集result;
[0040] 计算如下公式:
[0041] vetoru=ω.Dec(gw',ti)
[0042] 如果vetour[s]=0,放弃所述对应节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字wj;
[0043] 如果vetoru[s]=1,继续搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字wj,将所述节点对应的交易标识符存放至结果集result;
[0044] 所述完全二叉树搜索结束后,基于结果集result中的交易标识符得到对应的密文将密文 返回数据用户。
[0045] 作为优选,对于多个数据搜索者,数据搜索者基于第二密钥组和陷门检索密文,包括如下步骤:
[0046] (1)数据搜索者O1初始化一个结果集result;
[0047] (2)数据搜索者O1从完全二叉树的根节点开始搜索,将根节点存放的 取出,并存放至结果集result;
[0048] (3)数据搜索者O1计算如下公式:
[0049] vetoru=ω.Dec(gw',ti)
[0050] i=1
[0051] 如果vetour[s]=0,放弃搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字wj;
[0052] 如果vetoru[s]=1,将数据搜索者O1作为当前数据搜索者,执行循环步骤L继续搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文包含关键字wj,将所述节点对应的交易标识符存放至结果集result;
[0053] 所述循环步骤L包括:
[0054] 由当前数据搜索者Oi搜索左子树,由当前数据搜索者Oi相关的其他数据搜索者{Oi+1,Oi+2,......,Ol}搜索右子树;
[0055] 每个数据搜索者Oi搜索时,执行如下步骤:
[0056] 计算如下公式:
[0057] vetoru=ω.Dec(gw',ti)
[0058] 如果vetour[s]=0,放弃搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字wj;
[0059] 如果vetoru[s]=1,基于循环步骤L继续搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文包含关键字wj,将所述节点对应的交易标识符存放至结果集result;
[0060] (4)执行步骤(3)对完全二叉树搜索结束后,基于结果集result中的交易标识符得到对应的密文 将密文 返回数据用户。
[0061] 作为优选,数据用户接收密文后,通过验证gw'与 是否一致验证密文的正确性;
[0062] 验证通过后,执行如下操作解密密文
[0063]
[0064] 其中, 表示密文 解密得到的明文。
[0065] 本发明的基于区块链的关键字可搜索加密方法具有以下优点:
[0066] 1、引入完全二叉树,基于完全二叉树构建索引,改进了区块链中的数据搜索的效率;
[0067] 2、数据用户可以指定数据搜索者的数目,可以单个数据搜索者或者多个数据搜索者进行搜索,改进了搜索效率;
[0068] 3、在构建索引时,引入了用于验证的 存放在根结点中,数据用户接受到搜索结果后基于 验证搜索结果的正确性,确保了搜索的准确性。

附图说明

[0069] 为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0070] 下面结合附图对本发明进一步说明。
[0071] 图1为实施例1基于区块链的关键字可搜索加密方法的流程框图。

具体实施方式

[0072] 下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
[0073] 本发明实施例提供基于区块链的关键字可搜索加密方法,用于解决如何基于区块链实现可搜索对称加密的技术问题。
[0074] 实施例:
[0075] 本发明的基于区块链的关键字可搜索加密方法,应用于包括区块链以及加入区块链的数据所有者、数据用户和数据搜索者的系统。
[0076] 该方法包括如下步骤:
[0077] S100、数据所有者生成密钥数组,将密钥数组中一部分密钥作为第一密钥组共享至数据用户,将密钥数组中剩余部分密钥作为第二密钥组共享至数据搜索者;
[0078] S200、数据所有者基于第一密钥组对每个明文对称加密生成密文,以交易的形式将密文上传区块链,记录并向区块链广播每个密文对应的交易标识符;
[0079] S300、数据所有者基于所有明文提取关键字组成关键字集,通过完全二叉树的叶节点表示交易标识符,基于第二密钥以及每个明文中包含的关键字在关键字集中的位置进行加密计算,得到完全二叉树形式的索引,并将索引上传区块链;
[0080] S400、数据用户基于搜索关键字生成陷门,并将陷门上传区块链,数据搜索者基于第二密钥组和陷门检索密文,并将密文返回数据用户;
[0081] S500、数据用户基于搜索关键字在关键字集中的位置验证所述密文的正确性,对于验证通过的密文进行解密,得到明文。
[0082] 本实施例中,数据所有者利用密钥生成算法Gen,生成一个密钥数组K,将密钥数组中一部分密钥作为第一密钥组K1共享至数据用户,将密钥数组中剩余部分密钥作为第二密钥组K2共享至数据搜索者,K=(K1,K2)。
[0083] 数据所有者利用对称加密算法ω=(ω.Enc,ω.Dec)和第一密钥组K1将明文加密呈密文,密文Ci的表达式为:
[0084] Ci=ω.Enc(K1,Di)(1≤i≤n)
[0085] 其中,其中,Ci表示第i个密文,Di表示第i个明文,n表示数据所有者拥有的明文个数。
[0086] 数据所有者将计算得到的密文Ci以交易的形式上传区块链中,区块链中矿工收集交易,如果矿工发现新的区块,将每条交易记录到对应的区块中,区块中存储有对应的时间戳。数据所有者记录相应的交易标识符 并将交易标识符 广播至区块链中。每个密文对应一条交易,每个交易对应一个交易标识符。
[0087] 对明文加密后,数据所有者基于上述交易标识符构建完全二叉树式的索引。具体步骤为:
[0088] (1)构建具有n个叶节点的完全二叉树I,上述完全二叉树的叶节点用于表示交易标识符 上述完全二叉树的内部节点通过1,2,......,n‑1;
[0089] (2)对于完全二叉树的叶节点,构建向量vetoru,vetoru=(u1,u2,......,uj,......,um),
[0090] 当且仅当明文Di中包含关键字wj时, m表示关键字集中关键字的个数,uj∈{0,1}(1≤j≤m),H表示哈希函数;
[0091] (3)对于完全二叉树的内部节点,计算向量vetoru,计算公式为:
[0092] vetoru=vetork∨vetorrc
[0093] (4)将关键字集中的所有关键字直接连接计算得到w',对于每个关键字wj,以w'和第二密钥组K2为输入,通过伪随机函数F计算gw',并以gw'和vetoru为输入,通过加密函数Enc计算ti,上述计算公式为:
[0094] gw'=F(K2,w')
[0095] ti=ω.Enc(gw',vetoru)(1≤i≤2n‑1),
[0096] (5)通过哈希函数H'计算用于验证的 计算公式为:
[0097]
[0098]
[0099] 其中Cjα表示包含关键字wj的密文;
[0100] (6)数据所有者以交易的形式将上述索引I上传区块链。
[0101] 数据所有者将密文和索引上传区块链后,数据用户基于其搜索关键字生成陷门,将陷门上传区块链进行搜索。具体步骤为:
[0102] (1)数据用户计算搜索关键字w在向量vetoru中的位置,计算公式为:
[0103]
[0104] gw'=F(K2,w')
[0105] (2)数据用户将上述陷门上传区块链。
[0106] 数据用户可指定数据搜索者的个数,具体的指定数据搜索者O,O={O1,O2,......,Ol}。
[0107] 当只有一个搜索者,即l=1时,搜索过程如下:
[0108] (1)数据搜索者初始化一个结果集result;
[0109] (2)数据搜索者从完全二叉树的根节点开始搜索,将根节点存放的 取出,并存放至结果集result;
[0110] (3)计算如下公式:
[0111] vetoru=ω.Dec(gw',ti)
[0112] 如果vetour[s]=0,放弃所述对应节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字w;
[0113] 如果vetoru[s]=1,继续搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字w,将所述节点对应的交易标识符存放至结果集result;
[0114] (4)完全二叉树搜索结束后,基于结果集result中的交易标识符得到对应的密文将密文 返回数据用户。
[0115] 当有多个数据搜索者,即O={O1,O2,......,Ol}时,如果有多个数据搜索者,多数据搜索者的情况明显会加快搜索效率,各个数据搜索者之间通过交易进行通信。具体搜索流程为:
[0116] (1)数据搜索者O1初始化一个结果集result;
[0117] (2)数据搜索者O1从完全二叉树的根节点开始搜索,将根节点存放的 取出,并存放至结果集result;
[0118] (3)数据搜索者O1计算如下公式:
[0119] vetoru=ω.Dec(gw',ti)
[0120] i=1
[0121] 如果vetour[s]=0,放弃搜索所述节点的左右子树,如果所述节点为叶节点,表示所述节点代表的明文不包含关键字w;
[0122] 如果vetoru[s]=1,将数据搜索者O1作为当前数据搜索者,执行循环步骤L继续搜索上述节点的左右子树,如果上述节点为叶节点,表示上述节点代表的明文包含关键字w,将上述节点对应的交易标识符存放至结果集result;
[0123] 上述循环步骤L包括:
[0124] 由当前数据搜索者Oi搜索左子树,由当前数据搜索者Oi相关的其他数据搜索者{Oi+1,Oi+2,......,Ol}搜索右子树;
[0125] 每个数据搜索者Oi搜索时,执行如下步骤:
[0126] 计算如下公式:
[0127] vetoru=ω.Dec(gw',ti)
[0128] 如果vetour[s]=0,放弃搜索上述节点的左右子树,如果上述节点为叶节点,表示上述节点代表的明文不包含关键字w;
[0129] 如果vetoru[s]=1,基于循环步骤L继续搜索所述节点的左右子树,如果上述节点为叶节点,表示上述节点代表的明文包含关键字w,将所述节点对应的交易标识符存放至结果集result;
[0130] (4)执行步骤(3)对完全二叉树搜索结束后,基于结果集result中的交易标识符得到对应的密文 将密文 返回数据用户。
[0131] 数据用户得到密文 后,通过判断gw'与 是否一致验证密文的正确性,验证通过后,执行 如下操作解密密文
[0132] 其中, 表示密文 解密得到的明文。
[0133] 本实施例中随机选取使用伪随机置换模拟真实随机。
[0134] 上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。