首页 / 专利库 / 人工智能 / 共指链 / 数据存储方法、数据查询方法、装置及设备

数据存储方法、数据查询方法、装置及设备

阅读:810发布:2020-05-08

专利汇可以提供数据存储方法、数据查询方法、装置及设备专利检索,专利查询,专利分析的服务。并且本 申请 提供一种数据存储方法、数据查询方法、装置及设备,该数据存储方法包括:根据 区 块 链 系统中的记账 节点 的总数量n和 阈值 k,确定待存储数据的n份分存数据,其中,阈值k为恢复待存储数据时,n份分存数据中需要通过完整性验证的分存数据的最少份数,n为正整数,k为正整数,2≤k≤n;向区块链系统发送n份分存数据,任一份分存数据存储在区块链系统的一个记账节点中,任二份分存数据存储在区块链系统的不同记账节点中;确定n份分存数据的 摘要 ,向区块链系统发送n份分存数据的摘要,n份分存数据的摘要存储在区块链系统的每个记账节点中,分存数据的摘要用于在恢复待存储数据时对分存数据进行完整性验证。,下面是数据存储方法、数据查询方法、装置及设备专利的具体信息内容。

1.一种数据存储方法,其特征在于,包括:
根据链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据,其中,所述阈值k为恢复所述待存储数据时,所述n份分存数据中需要通过完整性验证的分存数据的最少份数,所述n为正整数,所述k为正整数,2≤k≤n;
向所述区块链系统发送所述n份分存数据,任一份分存数据存储在所述区块链系统的一个记账节点中,任二份分存数据存储在所述区块链系统的不同记账节点中;
确定所述n份分存数据的摘要,向所述区块链系统发送所述n份分存数据的摘要,所述n份分存数据的摘要存储在所述区块链系统的每个记账节点中,所述分存数据的摘要用于在恢复所述待存储数据时对所述分存数据进行完整性验证。
2.根据权利要求1所述的方法,其特征在于,所述根据区块链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据,包括:
根据所述n和所述阈值k,通过预设算法对所述待存储数据进行处理,得到所述n份分存数据,所述预设算法用于使得,根据小于k份通过完整性校验的分存数据无法恢复得到所述待存储数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到所述待存储数据。
3.根据权利要求2所述的方法,其特征在于,所述预设算法为拉格朗日差值算法;所述根据所述n和所述阈值k,通过预设算法对所述待存储数据进行处理,得到所述n份分存数据,包括:
根据所述阈值k,确定k-1阶多项式F(x)=ak-1xk-1+…+a2x+a1x+S;其中,所述a1,所述a2,…,所述ak-1为随机生成的参数,所述S为待存储数据;
确定所述n份分存数据为:(1,F(1)),(2,F(2)),…,(n,F(n))。
4.根据权利要求1-3任一项所述的方法,其特征在于,向所述区块链系统发送所述n份分存数据,包括:
向所述区块链系统发送每份分存数据对应的键值对,其中,一份分存数据对应的键值对中的键包括所述待存储数据的查询条件,一份分存数据对应的键值对中的值包括该分存数据。
5.根据权利要求4所述的方法,其特征在于,所述查询条件包括所述待存储数据对应的对象的标识或所述待存储数据的生成时间中的至少一种。
6.根据权利要求1-5任一项所述的方法,其特征在于,所述确定所述n份分存数据的摘要,包括:
通过数据摘要算法,分别确定所述n份分存数据的摘要。
7.根据权利要求6所述的方法,其特征在于,所述数据摘要算法包括哈希摘要算法。
8.根据权利要求1-7任一项所述的方法,其特征在于,所述向所述区块链系统发送所述n份分存数据的摘要,包括:
确定所述n份分存数据的摘要的组合摘要,所述组合摘要包括所述n份分存数据的摘要;
向所述区块链系统发送所述组合摘要。
9.根据权利要求1-8任一项所述的方法,其特征在于,
所述向所述区块链系统发送所述n份分存数据,包括:
向所述区块链系统中的共识节点发送所述n份分存数据,所述共识节点用于在所述记账节点存储所述n份分存数据;
所述向所述区块链系统发送所述n份分存数据的摘要,包括:
向所述区块链系统中的共识节点发送所述n份分存数据的摘要,所述共识节点用于在每个记账节点存储所述n份分存数据的摘要。
10.根据权利要求1-9任一项所述的方法,其特征在于,所述向所述区块链系统发送所述n份分存数据的摘要之后,还包括:
在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要;
根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据。
11.根据权利要求10所述的方法,其特征在于,所述根据所述至少k份分存数据和n份摘要,确定所述待查询数据,包括:
根据第i份摘要对第i份分存数据进行完整性验证操作,所述i依次为1,2……n,所述第i份摘要为根据所述第i份分存数据生成的摘要;
重复所述完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定所述待查询数据。
12.一种数据查询方法,其特征在于,包括:
在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要,所述k为恢复所述待查询数据至少需要的通过完整性验证的分存数据的份数,所述n为正整数,所述k为正整数,2≤k≤n;
根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据。
13.根据权利要求12所述的方法,其特征在于,所述根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据,包括:
根据第i份摘要对第i份分存数据进行完整性验证操作,所述i依次为1,2……n,所述第i份摘要为根据所述第i份分存数据生成的摘要;
重复所述完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定所述待查询数据。
14.根据权利要求13所述的方法,其特征在于,所述根据通过完整性验证的k份分存数据确定所述待查询数据,包括:
根据所述k,通过预设算法对所述通过完整性验证的k份分存数据进行处理,得到所述待查询数据,所述预设算法用于使得,根据小于k份通过完整性验证的分存数据无法恢复得到所述待查询数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到所述待查询数据。
15.根据权利要求14所述的方法,其特征在于,所述预设算法为拉格朗日差值算法;所述根据所述k,通过预设算法对所述通过完整性验证的k份分存数据进行处理,得到所述待查询数据,包括:
根据所述通过完整性验证的k份分存数据,确定k-1阶多项式:
其中,所述i为0至所述k之间的整数,所述通过完整性验证的k份分存数
据分别为(x0,y0),(x1,y1),…,(xk,yk);
确定所述待查询数据为F(0)。
16.根据权利要求12-15任一项所述的方法,其特征在于,所述在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要,包括:
向所述区块链系统发送数据获取请求,所述数据获取请求包括所述待查询数据的查询条件;
接收所述区块链系统发送的所述查询条件对应的所述至少k份分存数据,和所述查询条件对应的所述n份摘要。
17.根据权利要求16所述的方法,其特征在于,所述查询条件包括所述待查询数据对应的对象的标识或所述待查询数据的生成时间中的至少一个。
18.根据权利要求12-17任一项所述的方法,其特征在于,所述在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要之前,还包括:
根据区块链系统中的记账节点的总数量n和所述k,确定待存储数据的n份分存数据;
向所述区块链系统发送所述n份分存数据,任一份分存数据存储在所述区块链系统的一个记账节点中,任二份分存数据存储在所述区块链系统的不同记账节点中;
确定所述n份分存数据的摘要,向所述区块链系统发送所述n份分存数据的摘要,所述n份分存数据的摘要存储在所述区块链系统的每个记账节点中,所述分存数据的摘要用于在恢复所述待存储数据时对所述分存数据进行完整性验证。
19.一种数据存储装置,其特征在于,包括第一确定模块、发送模块和第二确定模块,其中,
所述第一确定模块用于,根据区块链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据,其中,所述阈值k为恢复所述待存储数据时,所述n份分存数据中需要通过完整性验证的分存数据的最少份数,所述n为正整数,所述k为正整数,2≤k≤n;
所述发送模块用于,向所述区块链系统发送所述n份分存数据,任一份分存数据存储在所述区块链系统的一个记账节点中,任二份分存数据存储在所述区块链系统的不同记账节点中;
所述第二确定模块用于,确定所述n份分存数据的摘要;
所述发送模块还用于,向所述区块链系统发送所述n份分存数据的摘要,所述n份分存数据的摘要存储在所述区块链系统的每个记账节点中,所述分存数据的摘要用于在恢复所述待存储数据时对所述分存数据进行完整性验证。
20.根据权利要求19所述的装置,其特征在于,所述第一确定模块具体用于:
根据所述n和所述阈值k,通过预设算法对所述待存储数据进行处理,得到所述n份分存数据,所述预设算法用于使得,根据小于k份通过完整性校验的分存数据无法恢复得到所述待存储数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到所述待存储数据。
21.根据权利要求20所述的装置,其特征在于,所述预设算法为拉格朗日差值算法;所述第一确定模块具体用于:
k-1
根据所述阈值k,确定k-1阶多项式F(x)=ak-1x +…+a2x+a1x+S;其中,所述a1,所述a2,…,所述ak-1为随机生成的参数,所述S为待存储数据;
确定所述n份分存数据为:(1,F(1)),(2,F(2)),…,(n,F(n))。
22.根据权利要求19-21任一项所述的装置,其特征在于,所述发送模块具体用于:
向所述区块链系统发送每份分存数据对应的键值对,其中,一份分存数据对应的键值对中的键包括所述待存储数据的查询条件,一份分存数据对应的键值对中的值包括该分存数据。
23.根据权利要求22所述的装置,其特征在于,所述查询条件包括所述待存储数据对应的对象的标识或所述待存储数据的生成时间中的至少一种。
24.根据权利要求19-23任一项所述的装置,其特征在于,所述第二确定模块具体用于:
通过数据摘要算法,分别确定所述n份分存数据的摘要。
25.根据权利要求24所述的装置,其特征在于,所述数据摘要算法包括哈希摘要算法。
26.根据权利要求19-25任一项所述的装置,其特征在于,
所述第二确定模块还用于,确定所述n份分存数据的摘要的组合摘要,所述组合摘要包括所述n份分存数据的摘要;
所述发送模块具体用于,向所述区块链系统发送所述组合摘要。
27.根据权利要求19-27任一项所述的装置,其特征在于,
所述发送模块具体用于,向所述区块链系统中的共识节点发送所述n份分存数据,所述共识节点用于在所述记账节点存储所述n份分存数据;
所述发送模块具体用于,向所述区块链系统中的共识节点发送所述n份分存数据的摘要,所述共识节点用于在每个记账节点存储所述n份分存数据的摘要。
28.根据权利要求19-27任一项所述的装置,其特征在于,所述装置还包括获取模块和第三确定模块,其中,
所述获取模块用于,在所述发送模块向所述区块链系统发送所述n份分存数据的摘要之后,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要;
所述第三确定模块用于,根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据。
29.根据权利要求28所述的装置,其特征在于,所述第三确定模块具体用于:
根据第i份摘要对第i份分存数据进行完整性验证操作,所述i依次为1,2……n,所述第i份摘要为根据所述第i份分存数据生成的摘要;
重复所述完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定所述待查询数据。
30.一种数据查询装置,其特征在于,包括获取模块和第一确定模块,其中,所述获取模块用于,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要,所述k为恢复所述待查询数据至少需要的通过完整性验证的分存数据的份数,所述n为正整数,所述k为正整数,2≤k≤n;
所述第一确定模块用于,根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据。
31.根据权利要求30所述的装置,其特征在于,所述第一确定模块具体用于:
根据第i份摘要对第i份分存数据进行完整性验证操作,所述i依次为1,2……n,所述第i份摘要为根据所述第i份分存数据生成的摘要;
重复所述完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定所述待查询数据。
32.根据权利要求31所述的装置,其特征在于,所述第一确定模块具体用于:
根据所述k,通过预设算法对所述通过完整性验证的k份分存数据进行处理,得到所述待查询数据,所述预设算法用于使得,根据小于k份通过完整性验证的分存数据无法恢复得到所述待查询数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到所述待查询数据。
33.根据权利要求32所述的装置,其特征在于,所述预设算法为拉格朗日差值算法;所述第一确定模块具体用于:
根据所述通过完整性验证的k份分存数据,确定k-1阶多项式:
其中,所述i为0至所述k之间的整数,所述通过完整性验证的k份分存数
据分别为(x0,y0),(x1,y1),…,(xk,yk);
确定所述待查询数据为F(0)。
34.根据权利要求30-33任一项所述的装置,其特征在于,所述装置还包括发送模块和接收模块,其中,
所述发送模块用于,向所述区块链系统发送数据获取请求,所述数据获取请求包括待查询数据的查询条件;
所述接收模块用于,接收所述区块链系统发送的所述查询条件对应的所述至少k份分存数据,和所述查询条件对应的所述n份摘要。
35.根据权利要求34所述的装置,其特征在于,所述查询条件包括所述待查询数据对应的对象的标识或所述待查询数据的生成时间中的至少一个。
36.根据权利要求34或35所述的装置,其特征在于,所述装置还包括第二确定模块和第三确定模块,其中,
所述第二确定模块用于,在所述获取模块在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要之前,根据区块链系统中的记账节点的总数量n和所述k,确定待存储数据的n份分存数据;
所述发送模块还用于,向所述区块链系统发送所述n份分存数据,任一份分存数据存储在所述区块链系统的一个记账节点中,任二份分存数据存储在所述区块链系统的不同记账节点中;
所述第三确定模块用于,确定所述n份分存数据的摘要,向所述区块链系统发送所述n份分存数据的摘要,所述n份分存数据的摘要存储在所述区块链系统的每个记账节点中,所述分存数据的摘要用于在恢复所述待存储数据时对所述分存数据进行完整性验证。
37.一种数据存储装置,其特征在于,包括:存储器、处理器和通信接口,所述存储器用于存储程序指令,所述处理器用于调用存储器中的程序指令执行如权利要求1-11任一项所述的数据存储方法。
38.一种数据查询装置,其特征在于,包括:存储器、处理器和通信接口,所述存储器用于存储程序指令,所述处理器用于调用存储器中的程序指令执行如权利要求12-18任一项所述的数据查询方法。
39.一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序;所述计算机程序用于实现如权利要求1-11任一项所述的数据存储方法。
40.一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序;所述计算机程序用于实现如权利要求12-18任一项所述的数据查询方法。

说明书全文

数据存储方法、数据查询方法、装置及设备

技术领域

[0001] 本申请涉及链存储技术领域,尤其涉及一种数据存储方法、数据查询方法、装置及设备。

背景技术

[0002] 区块链系统中包括多个记账节点,其中,每个记账节点可以为计算机、部署在计算机上的虚拟机、部署在计算机上的容器等。区块链系统中的每个记账节点均用于数据存储。
[0003] 在现有技术中,当需要在区块链系统中存储数据时,客户端先通过预先存储的私钥对数据进行加密,并将加密后的数据存储至区块链系统中的每个记账节点中。然而,当客户端存储的私钥丢失,或者区块链系统中的任意一个记账节点破解得到私钥后,均可能导致数据被泄露,进而导致区块链系统的安全性较低。发明内容
[0004] 本申请提供一种数据存储方法、数据查询方法、装置及设备,提高了区块链系统的安全性。
[0005] 第一方面,本申请提供一种数据存储方法,当需要在区块链系统中存储待存储数据时,根据区块链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据、以及n份分存数据的摘要,并向区块链系统发送n份分存数据和n份分存数据的摘要。其中,阈值k为恢复待存储数据时,n份分存数据中需要通过完整性验证的分存数据的最少份数,n为正整数,k为正整数,2≤k≤n;任一份分存数据存储在区块链系统的一个记账节点中,任二份分存数据存储在区块链系统的不同记账节点中;n份分存数据的摘要存储在区块链系统的每个记账节点中,分存数据的摘要用于在恢复待存储数据时对分存数据进行完整性验证。
[0006] 在上述过程中,区块链系统在一个记账节点中存储待存储数据的一份分存数据和所有分存数据的摘要,即,不同的分存数据存储在不同的记账节点中,所有分存数据的摘要存储在区块链系统的每个记账节点中。由于恢复待存储数据所需的通过完整性验证的分存数据的份数至少为k,因此,只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待存储数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还可以根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0007] 在一种可能的实施方式中,可以通过如下可行的实现方式根据区块链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据:根据n和阈值k,通过预设算法对待存储数据进行处理,得到n份分存数据。
[0008] 其中,预设算法用于使得,根据小于k份通过完整性校验的分存数据无法恢复得到待存储数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到待存储数据。因此,只有当区块链系统中的n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待存储数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。
[0009] 可选的,预设算法可以为拉格朗日差值算法;相应的,可以通过如下可行的实现方式获取得到n份分存数据:根据阈值k,确定k-1阶多项式F(x)=ak-1xk-1+…+a2x+a1x+S;其中,a1,a2,…,ak-1为随机生成的参数,S为待存储数据;确定n份分存数据为:(1,F(1)),(2,F(2)),…,(n,F(n))。
[0010] 在另一种可能的实施方式中,向区块链系统发送n份分存数据,包括:向区块链系统发送每份分存数据对应的键值对,其中,一份分存数据对应的键值对中的键包括待存储数据的查询条件,一份分存数据对应的键值对中的值包括该分存数据。
[0011] 通过键值对的形式在区块链系统中存储分存数据,提高了数据的存储效率。进一步的,键值对中还包括查询条件,使得可以根据查询条件查询得到分存数据,方便了数据查询。
[0012] 可选的,查询条件包括待存储数据对应的对象的标识或待存储数据的生成时间中的至少一种。
[0013] 在另一种可能的实施方式中,可以通过数据摘要算法,分别确定n份分存数据的摘要。
[0014] 可选的,数据摘要算法可以包括哈希摘要算法。
[0015] 通过数据摘要算法得到的摘要是无法被解密的,使得根据分存数据的摘要无法破解得到分存数据,这样,即使n份分存数据的摘要均存储在一个记账节点,也不会导致分存数据被破解得到。
[0016] 在另一种可能的实施方式中,向区块链系统发送n份分存数据的摘要,包括:确定n份分存数据的摘要的组合摘要,组合摘要包括n份分存数据的摘要;向区块链系统发送组合摘要。
[0017] 以组合摘要的形式在区块链系统中存储n份分存数据的摘要,这样,在获取n份分存数据的摘要时,可以通过一个数据查询请求获取得到该n份分存数据的摘要,使得获取n份分存数据的摘要的效率较高。
[0018] 在另一种可能的实施方式中,向区块链系统发送n份分存数据,包括:向区块链系统中的共识节点发送n份分存数据,共识节点用于在记账节点存储n份分存数据。向区块链系统发送n份分存数据的摘要,包括:向区块链系统中的共识节点发送n份分存数据的摘要,共识节点用于在每个记账节点存储n份分存数据的摘要。
[0019] 在另一种可能的实施方式中,在向区块链系统发送n份分存数据的摘要之后,还可以在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要,根据至少k份分存数据和n份摘要,确定待查询数据。
[0020] 在上述过程中,根据至少k份分存数据和n份摘要,可以确定待查询数据,这样,只要区块链系统中k个记账节点正常,即可根据该k个记账节点中的分存数据恢复得到关键数据(上述待查询数据),即,即使n-k个记账节点故障,依然可以恢复得到关键数据,使得区块链系统具有较高的容错性。且只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待查询数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0021] 在另一种可能的实施方式中,根据至少k份分存数据和n份摘要,确定待查询数据,包括:根据第i份摘要对第i份分存数据进行完整性验证操作,i依次为1,2……n,第i份摘要为根据第i份分存数据生成的摘要;重复完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定待查询数据。
[0022] 第二方面,本申请提供一种数据查询方法,当需要在区块链系统中查询待查询数据时,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要,根据至少k份分存数据和n份摘要,确定待查询数据。其中,k为恢复待查询数据至少需要的通过完整性验证的分存数据的份数,n为正整数,k为正整数,2≤k≤n。
[0023] 在上述过程中,根据至少k份分存数据和n份摘要,可以确定待查询数据,这样,只要区块链系统中k个记账节点正常,即可根据该k个记账节点中的分存数据恢复得到关键数据(上述待查询数据),即,即使n-k个记账节点故障,依然可以恢复得到关键数据,使得区块链系统具有较高的容错性。且只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待查询数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0024] 在一种可能的实施方式中,根据至少k份分存数据和n份摘要,确定待查询数据,包括:根据第i份摘要对第i份分存数据进行完整性验证操作,i依次为1,2……n,第i份摘要为根据第i份分存数据生成的摘要;重复完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定待查询数据。
[0025] 在另一种可能的实施方式中,可以通过如下可行的实现方式根据通过完整性验证的k份分存数据确定待查询数据:根据k,通过预设算法对通过完整性验证的k份分存数据进行处理,得到待查询数据。
[0026] 其中,预设算法用于使得,根据小于k份通过完整性验证的分存数据无法恢复得到待查询数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到待查询数据。因此,只有当区块链系统中的n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待查询数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。
[0027] 可选的,预设算法可以为拉格朗日差值算法;相应的,可以通过如下可行的实现方式获取得到待查询数据:根据通过完整性验证的k份分存数据,确定k-1阶多项式:其中,i为0至k之间的整数,通过完整性验证的k份分
存数据分别为(x0,y0),(x1,y1),…,(xk,yk);确定待查询数据为F(0)。
[0028] 在另一种可能的实施方式中,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要,包括:向区块链系统发送数据获取请求,数据获取请求包括待查询数据的查询条件;接收区块链系统发送的查询条件对应的至少k份分存数据,和查询条件对应的n份摘要。
[0029] 每份分存数据和每份分存数据的摘要的查询条件均为待查询数据的查询条件,因此,根据待查询数据的查询条件可以方便的在区块链系统中查询得到至少k份分存数据和n份摘要。
[0030] 可选的,查询条件包括待查询数据对应的对象的标识或待查询数据的生成时间中的至少一个。
[0031] 在另一种可能的实施方式中,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要之前,还可以根据区块链系统中的记账节点的总数量n和k,确定待存储数据的n份分存数据;向区块链系统发送n份分存数据,任一份分存数据存储在区块链系统的一个记账节点中,任二份分存数据存储在区块链系统的不同记账节点中;确定n份分存数据的摘要,向区块链系统发送n份分存数据的摘要,n份分存数据的摘要存储在区块链系统的每个记账节点中,分存数据的摘要用于在恢复待存储数据时对分存数据进行完整性验证。
[0032] 由于区块链系统在一个记账节点中存储待存储数据的一份分存数据和所有分存数据的摘要,即,不同的分存数据存储在不同的记账节点中,所有分存数据的摘要存储在区块链系统的每个记账节点中。由于恢复待存储数据所需的通过完整性验证的分存数据的份数至少为k,因此,只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待存储数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还可以根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0033] 第三方面,本申请提供一种数据存储装置,包括第一确定模块、发送模块和第二确定模块,其中,
[0034] 所述第一确定模块用于,根据区块链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据,其中,所述阈值k为恢复所述待存储数据时,所述n份分存数据中需要通过完整性验证的分存数据的最少份数,所述n为正整数,所述k为正整数,2≤k≤n;
[0035] 所述发送模块用于,向所述区块链系统发送所述n份分存数据,任一份分存数据存储在所述区块链系统的一个记账节点中,任二份分存数据存储在所述区块链系统的不同记账节点中;
[0036] 所述第二确定模块用于,确定所述n份分存数据的摘要;
[0037] 所述发送模块还用于,向所述区块链系统发送所述n份分存数据的摘要,所述n份分存数据的摘要存储在所述区块链系统的每个记账节点中,所述分存数据的摘要用于在恢复所述待存储数据时对所述分存数据进行完整性验证。
[0038] 在一种可能的实施方式中,所述第一确定模块具体用于:
[0039] 根据所述n和所述阈值k,通过预设算法对所述待存储数据进行处理,得到所述n份分存数据,所述预设算法用于使得,根据小于k份通过完整性校验的分存数据无法恢复得到所述待存储数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到所述待存储数据。
[0040] 在另一种可能的实施方式中,所述预设算法为拉格朗日差值算法;所述第一确定模块具体用于:
[0041] 根据所述阈值k,确定k-1阶多项式F(x)=ak-1xk-1+…+a2x+a1x+S;其中,所述a1,所述a2,…,所述ak-1为随机生成的参数,所述S为待存储数据;
[0042] 确定所述n份分存数据为:(1,F(1)),(2,F(2)),…,(n,F(n))。
[0043] 在另一种可能的实施方式中,所述发送模块具体用于:
[0044] 向所述区块链系统发送每份分存数据对应的键值对,其中,一份分存数据对应的键值对中的键包括所述待存储数据的查询条件,一份分存数据对应的键值对中的值包括该分存数据。
[0045] 在另一种可能的实施方式中,所述查询条件包括所述待存储数据对应的对象的标识或所述待存储数据的生成时间中的至少一种。
[0046] 在另一种可能的实施方式中,所述第二确定模块具体用于:
[0047] 通过数据摘要算法,分别确定所述n份分存数据的摘要。
[0048] 在另一种可能的实施方式中,所述数据摘要算法包括哈希摘要算法。
[0049] 在另一种可能的实施方式中,所述第二确定模块还用于,确定所述n份分存数据的摘要的组合摘要,所述组合摘要包括所述n份分存数据的摘要;
[0050] 所述发送模块具体用于,向所述区块链系统发送所述组合摘要。
[0051] 在另一种可能的实施方式中,所述发送模块具体用于,向所述区块链系统中的共识节点发送所述n份分存数据,所述共识节点用于在所述记账节点存储所述n份分存数据;
[0052] 所述发送模块具体用于,向所述区块链系统中的共识节点发送所述n份分存数据的摘要,所述共识节点用于在每个记账节点存储所述n份分存数据的摘要。
[0053] 在另一种可能的实施方式中,所述装置还包括获取模块和第三确定模块,其中,[0054] 所述获取模块用于,在所述发送模块向所述区块链系统发送所述n份分存数据的摘要之后,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要;
[0055] 所述第三确定模块用于,根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据。
[0056] 在另一种可能的实施方式中,,所述第三确定模块具体用于:
[0057] 根据第i份摘要对第i份分存数据进行完整性验证操作,所述i依次为1,2……n,所述第i份摘要为根据所述第i份分存数据生成的摘要;
[0058] 重复所述完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定所述待查询数据。
[0059] 第四方面,本申请提供一种数据查询装置,包括获取模块和第一确定模块,其中,[0060] 所述获取模块用于,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要,所述k为恢复所述待查询数据至少需要的通过完整性验证的分存数据的份数,所述n为正整数,所述k为正整数,2≤k≤n;
[0061] 所述第一确定模块用于,根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据。
[0062] 在一种可能的实施方式中,所述第一确定模块具体用于:
[0063] 根据第i份摘要对第i份分存数据进行完整性验证操作,所述i依次为1,2……n,所述第i份摘要为根据所述第i份分存数据生成的摘要;
[0064] 重复所述完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定所述待查询数据。
[0065] 在另一种可能的实施方式中,所述第一确定模块具体用于:
[0066] 根据所述k,通过预设算法对所述通过完整性验证的k份分存数据进行处理,得到所述待查询数据,所述预设算法用于使得,根据小于k份通过完整性验证的分存数据无法恢复得到所述待查询数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到所述待查询数据。
[0067] 在另一种可能的实施方式中,所述预设算法为拉格朗日差值算法;所述第一确定模块具体用于:
[0068] 根据所述通过完整性验证的k份分存数据,确定k-1阶多项式:其中,所述i为0至所述k之间的整数,所述通过
完整性验证的k份分存数据分别为(x0,y0),(x1,y1),…,(xk,yk);
[0069] 确定所述待查询数据为F(0)。
[0070] 在另一种可能的实施方式中,所述装置还包括发送模块和接收模块,其中,[0071] 所述发送模块用于,向所述区块链系统发送数据获取请求,所述数据获取请求包括待查询数据的查询条件;
[0072] 所述接收模块用于,接收所述区块链系统发送的所述查询条件对应的所述至少k份分存数据,和所述查询条件对应的所述n份摘要。
[0073] 在另一种可能的实施方式中,所述查询条件包括所述待查询数据对应的对象的标识或所述待查询数据的生成时间中的至少一个。
[0074] 在另一种可能的实施方式中,所述装置还包括第二确定模块和第三确定模块,其中,
[0075] 所述第二确定模块用于,在所述获取模块在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要之前,根据区块链系统中的记账节点的总数量n和所述k,确定待存储数据的n份分存数据;
[0076] 所述发送模块还用于,向所述区块链系统发送所述n份分存数据,任一份分存数据存储在所述区块链系统的一个记账节点中,任二份分存数据存储在所述区块链系统的不同记账节点中;
[0077] 所述第三确定模块用于,确定所述n份分存数据的摘要,向所述区块链系统发送所述n份分存数据的摘要,所述n份分存数据的摘要存储在所述区块链系统的每个记账节点中,所述分存数据的摘要用于在恢复所述待存储数据时对所述分存数据进行完整性验证。
[0078] 第五方面,本申请提供一种数据存储装置,包括:存储器、处理器和通信接口,所述存储器用于存储程序指令,所述处理器用于调用存储器中的程序指令执行如上述第一方面任一项所述的数据存储方法。
[0079] 第六方面,本申请提供一种数据查询装置,其特征在于,包括:存储器、处理器和通信接口,所述存储器用于存储程序指令,所述处理器用于调用存储器中的程序指令执行如上述第二方面任一项所述的数据查询方法。
[0080] 第七方面,本申请提供一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序;所述计算机程序用于实现如上述第一方面任一项所述的数据存储方法。
[0081] 第八方面,本申请提供一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序;所述计算机程序用于实现如上述第二方面任一项所述的数据查询方法。
[0082] 本申请提供的数据存储方法、数据查询方法、装置及设备,当需要向区块链系统中存储待存储数据时,先根据区块链系统中的记账节点的数量n和阈值k,确定待存储数据的n份分存数据、以及每份分存数据的摘要,并向区块链系统发送该n份分存数据和该n份分存数据的摘要,以使区块链系统在一个记账节点中存储待存储数据的一份分存数据和所有分存数据的摘要,即,不同的分存数据存储在不同的记账节点中,所有分存数据的摘要存储在区块链系统的每个记账节点中。在上述过程中,由于恢复待存储数据所需的通过完整性验证的分存数据的份数至少为k,因此,只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待存储数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还可以根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。附图说明
[0083] 图1为本申请提供的应用系统架构图;
[0084] 图2A为本申请提供的车联网系统架构示意图;
[0085] 图2B为本申请提供的医疗系统架构示意图;
[0086] 图3为本申请提供的数据存储方法的流程示意图;
[0087] 图4为本申请提供的多项式的函数示意图;
[0088] 图5为本申请提供的另一种数据存储方法的流程示意图;
[0089] 图6为本申请提供的一种数据查询方法的流程示意图;
[0090] 图7为本申请提供的另一种数据查询方法的流程示意图;
[0091] 图8为本申请提供的一种数据存储装置的结构示意图;
[0092] 图9为本申请提供的另一种数据存储装置的结构示意图;
[0093] 图10为本申请提供的一种数据查询装置的结构示意图;
[0094] 图11为本申请提供的另一种数据查询装置的结构示意图;
[0095] 图12为本申请提供的数据存储装置的硬件结构示意图;
[0096] 图13为本申请提供的数据查询装置的硬件结构示意图。

具体实施方式

[0097] 图1为本申请提供的应用系统架构图。请参见图1,包括客户端101-1、客户端101-2、代理服务器102和区块链系统103。
[0098] 可选的,客户端101-1可以包括车辆、车辆交易平台、医疗设备、智能家居设备等。客户端101-1可以生成数据,并将客户端101-1生成的数据存储至区块链系统103。客户端
101-2可以包括第三方平台,例如车辆保险平台等。客户端101-2可以从区块链系统103查询数据。需要说明的是,客户端101-1和客户端101-2可以是相同的设备,也可以是不同的设备,本申请对此不作具体限定。
[0099] 可选的,代理服务器102可以为物联网(Internet of Thing,简称IoT)平台等。一个代理服务器102可以为至少一个客户端101-1和客户端101-2提供服务,例如,代理服务器102可以为一个区域内的客户端101-1和客户端101-2提供服务。可选的,代理服务器102包括分存模块和重构模块。
[0100] 在客户端101-1向区块链系统103中存储数据时,分存模块可以确定待存储数据对应的多份分存数据和每份分存数据的摘要,并向区块链系统103发送多份分存数据和每份分存数据的摘要。例如,当客户端101-1为车辆时,客户端101-1向区块链系统103存储的数据可以包括车辆的事故数据,如车辆发生故障时的行驶速度、地理位置等。当客户端101-1为车辆交易平台时,客户端101-1向区块链系统103存储的数据可以包括车辆的交易数据等,如车辆的购买时间、车辆的投保时间等。
[0101] 可选的,分存数据为通过预设算法对待存储数据进行处理得到的,每份分存数据均无法表达待存储数据中的任何有效信息。通过至少k份通过完整性验证的分存数据可以恢复得到待存储数据,通过小于k份通过完整性验证的分存数据无法恢复得到待存储数据中的任何有效信息,其中,k的大小通常与区块链系统相关。
[0102] 可选的,分存数据的摘要为根据预设摘要算法对分存数据进行加密运算得到的。摘要无法被解密,即,根据分存数据的摘要无法破解得到分存数据。分存数据的摘要用于在恢复待存储数据时对分存数据进行完整性验证。
[0103] 在客户端101-2向区块链系统103请求查询数据时,重构模块可以在区块链系统103中获取得到对应的分存数据和摘要,并根据分存数据和摘要,对分存数据进行重构,以得到待查询数据。例如,当客户端101-2为车辆保险平台时,向区块链系统103请求查询的数据可以包括车辆的事故数据、投保数据等。
[0104] 需要说明的是,代理服务器102中的分存模块还可以设置在客户端101-1中。代理服务器102中的重构模块还可以设置在客户端101-2中。当分存模块设置在客户端101-1中,重构模块设置在客户端101-2中时,则图1所示的应用系统架构中则无需代理服务器102。
[0105] 可选的,区块链系统103为去中心化的、分布式数据存储系统。区块链系统103包括至少一个共识节点和多个记账节点。可选的,共识节点和记账节点可以为计算机,也可以为部署在计算机中的虚拟机或容器等。多个记账节点分别记为记账节点1、记账节点2、……、记账节点n,n为大于1的正整数。共识节点可以接收分存数据和摘要,通过预设共识算法对分存数据和摘要进行共识处理,并向记账节点中存储分存数据和摘要,以使得各个记账节点记录的数据保持一致。可选的,预设共识算法可以包括拜占庭算法等。代理服务器可以从记账节点中获取分存数据和摘要。可选的,共识节点可以仅用于对分存数据和摘要进行共识处理,即,共识节点为独立于记账节点的节点,或者,共识节点可以既对分存数据和摘要进行共识处理,又进行数据存储,即,共识节点为记账节点中的部分节点。对于同一待存储数据的多份分存数据,一份分存数据存储在一个记账节点中,所有分存数据的摘要存储在每一个记账节点中。例如,区块链系统103中包括3个记账节点,分别记为记账节点1、记账节点2和记账节点3,可以确定得到待存储数据的3份分存数据和3份摘要,分别记为分存数据1、分存数据2、分存数据3、摘要1、摘要2和摘要3,则可以将分存数据1、以及摘要1-摘要3存储至记账节点1,将分存数据2、以及摘要1-摘要3存储至记账节点2,将分存数据3、以及摘要
1-摘要3存储至记账节点3。
[0106] 需要说明的是,图1只是以示例的形式示意一种应用系统架构图,并非对应用系统架构图的限定。在实际应用过程中,可以根据实际需要确定应用系统架构图,本申请对此不作具体限定。
[0107] 可选的,图1所示的应用系统架构可应用于车联网系统,在图1所示实施例基础上,下面,通过图2A所示的实施例,对车联网系统的架构进行介绍。
[0108] 图2A为本申请提供的车联网系统架构示意图。请参见图2A,包括车辆交易平台、车辆、保险公司平台、IoT平台和区块链系统。
[0109] 可选的,车辆交易平台和车辆可以为图1实施例中的客户端101-1,保险公司平台可以为图1实施例中的客户端101-2,IoT平台可以为图1实施例中的代理服务器102,区块链系统可以为图1实施例中的区块链系统103。
[0110] 在图2A中,车辆交易平台可以将车辆的交易数据发送至IoT平台,IoT平台将交易数据发送至区块链系统,由区块链系统存储车辆的交易数据。例如,车辆的交易数据可以包括车辆的购买时间、车辆的基本信息等。
[0111] 车辆可以将车辆的行驶数据发送至IoT平台,IoT平台将行驶数据发送给区块链系统,由区块链系统存储车辆的行驶数据。例如,车辆的行驶数据可以包括车辆出现事故时的速度、行驶方向等。
[0112] 保险公司平台为被授权可以查询交易数据和行驶数据的平台。保险公司平台可以通过IoT平台获取区块链系统中的数据,例如,保险公司平台获取得到的数据可以包括交易数据和/或行驶数据。由于车辆和车辆交易平台存储至区块链系统的数据无法被篡改,使得保险公司平台可以在区块链系统中获取得到准确的行驶数据和/或交易数据。这样,当车辆出现事故时,保险公司可以根据获取得到数据(行驶数据和/或交易数据)对事故进行准确的判断,以进行准确的赔付。
[0113] 可选的,图1所示的应用系统架构可应用于医疗系统,在图1所示实施例的基础上,下面,通过图2B所示的实施例,对医疗系统的架构进行介绍。
[0114] 图2B为本申请提供的医疗系统架构示意图。请参见图2B,包括就医平台、保险公司平台、司法平台、IoT平台和区块链系统。
[0115] 可选的,就医平台可以为图1实施例中的客户端101-1,保险公司平台和司法平台可以为图1实施例中的客户端101-2,IoT平台可以为图1实施例中的代理服务器102,区块链系统可以为图1实施例中的区块链系统103。
[0116] 在图2B中,就医平台可以将患者的就医数据发送至IoT平台,IoT平台将就医数据发送至区块链系统,由区块链系统存储就医数据。例如,就医数据可以包括病例、医疗费用等。
[0117] 保险公司平台和司法平台可以为被授权可以查询就医数据的平台。保险公司平台和司法平台可以通过IoT平台获取区块链系统中的数据。由于就医平台存储至区块链系统的数据无法被篡改,使得保险公司平台和司法平台可以在区块链系统中获取得到准确的就医数据。这样,保险公司可以根据获取得到的数据(就医数据)对患者进行准确的赔付,当出现医疗事故时,司法部可以根据获取得到的数据(就医数据)对医疗事故进行准确的判断。
[0118] 需要说明的是,图1所示的应用系统架构还可以应用于其它系统,例如,税务系统、智能家居系统等,本申请对此不作具体限定。
[0119] 在本申请中,区块链系统在一个记账节点中存储一份分存数据和所述分存数据的摘要,即,不同的分存数据存储在不同的记账节点中,所有分存数据的摘要存储在区块链系统的每个记账节点中。在上述过程中,由于恢复待存储数据所需的通过完整性验证的分存数据的份数至少为k,因此,只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待存储数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还可以根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0120] 下面,通过具体实施例对本申请所示的技术方案进行详细说明,需要说明的是,下面几个具体实施例可以相互结合,对于相同或相似的内容,在不同的实施例中不再进行重复说明。
[0121] 图3为本申请提供的数据存储方法的流程示意图。请参见图3,该方法可以包括:
[0122] S301、根据区块链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据。
[0123] 其中,阈值k为恢复所述待存储数据时,n份分存数据中所需需要的通过完整性验证的分存数据的最小份数,n为正整数,k为正整数,2≤k≤n。
[0124] 图3实施例的执行主体可以为终端设备,也可以为设置在终端设备中的数据存储装置。例如,终端设备可以为图1实施例中的客户端101-1。例如,数据存储装置可以为图1所示实施例中的分存模块。可选的,数据存储装置可以通过软件实现,也可以通过软件和硬件的结合实现。
[0125] 可选的,终端设备可以包括车辆、车辆交易平台、车辆保险平台、就医平台等。
[0126] 当然,在实际应用过程中,可以根据实际需要确定终端设备的类型,本申请对此不作具体限定。
[0127] 可选的,待存储数据的类型与终端设备的类型相关。例如,当终端设备为车辆时,待存储数据可以包括车辆的运行信息、事故信息等,车辆的运行信息可以包括车辆的历史行驶速度、历史行驶路线等,事故信息可以包括车辆在事故时的速度、行驶方向等。当终端设备为车辆交易平台时,则待存储数据可以包括车辆交易信息等,车辆交易信息可以包括车辆的购买时间、车辆的投保时间等。当终端设备为智能门时,则待存储数据可以包括智能门锁的打开时间和采集得到的打开智能门锁的用户图像。当终端设备为就医平台时,待存储的数据可以包括病历、医疗费用等。
[0128] 可选的,区块链系统中包括多个记账节点,各记账节点用于存储数据。
[0129] 可选的,记账节点可以为计算机,也可以为部署在计算机中的虚拟机或容器等。
[0130] 例如,一个记账节点可以为一台计算机,或者多台计算机构成的集群。计算机中可以部署一个或多个虚拟机或容器,记账节点也可以为部署在计算机中的一个或多个虚拟机或容器。
[0131] 可选的,阈值k通常与区块链系统相关,即,当区块链系统确定之后,则区块链系统的阈值k也为固定值。
[0132] 例如,阈值k可以与区块链系统中包括的记账节点的数量、区块链系统采用的共识算法中的至少一个相关。
[0133] 可选的,区块链系统中不可靠记账节点的最大数量为n-k,其中,区块链系统中不可靠记账节点的最大数量是指,区块链系统能够恢复得到待存储数据时最多允许存在的不可靠节点的数量。即,当区块链系统中的不可靠节点的数量大于n-k时,区块链系统根据记账节点中的分存数据无法恢复得到待存储数据;当区块链系统中的不可靠节点的数量小于或等于n-k时,区块链系统根据记账节点中的分存数据可恢复得到待存储数据。
[0134] 可选的,根据至少k份通过完整性验证分存数据可以恢复得到待存储数据,根据小于或等于k份通过完整性验证的分存数据无法获取得到待存储数据中的任何有效信息。
[0135] 可选的,通过完整性验证的分存数据为没有被篡改的分存数据。
[0136] 可选的,可以通过如下可行的实现方式判断分存数据是否通过完整性验证:获取分存数据和分存数据的摘要,将通过预设摘要算法对获取得到的分存数据进行加密处理,得到第一摘要,判断第一摘要和获取得到的摘要是否相同,若是,则确定该分存数据通过完整性验证,否则,确定该分存数据未通过完整性验证。
[0137] 可选的,可以通过如下可行的实现方式确定n份分存数据:根据n和阈值k,通过预设算法对待存储数据进行处理,得到n份分存数据。
[0138] 可选的,预设算法用于使得,根据小于k份通过完整性校验的分存数据无法恢复得到待存储数据中的任何有效信息,根据大于或等于k份通过完整性验证分存数据可以恢复得到待存储数据。
[0139] 例如,预设算法可以为拉格朗日插值算法,相应的,可以通过如下可行的实现方式获取得到n份分存数据:
[0140] 确定k-1阶多项式F(x)=ak-1xk-1+…+a2x+a1x+S其中,a1,a2,…,ak-1为随机生成的参数,S为待存储数据。
[0141] 确定n份分存数据为:(1,F(1)),(2,F(2)),…,(n,F(n))。
[0142] 需要说明的是,预设算法还可以为其它,本申请对此不作具体限定。
[0143] 下面,结合图4,通过具体示例对确定分存数据的过程进行详细说明。
[0144] 图4为本申请提供的多项式的函数示意图。假设n=3,k=2,S=1,a1=2,则可以构建的1阶多项式:F(x)=2x+1,其函数示意图如图4所示。根据构建的1阶多项式,可以确定3份分存数据,分别为:(1,3),(2,5)和(3,7)。
[0145] 请参见图4,构建得到的1阶多项式的函数示意图为一直线,确定得到的三份分存数据分别为该直线上的三个点。
[0146] 在实际应用过程中,若要获取得到S,则需要先确定得到该多项式。由于至少两个点才能确定一条直线,因此,要确定得到多项式F(x)=2x+1,至少需要两个点。即,至少需要两个正确的分存数据才能够确定得到多项式F(x)=2x+1,进而确定得到S。
[0147] S302、向区块链系统发送n份分存数据。
[0148] 其中,任一份分存数据存储在区块链系统的一个记账节点中,任二份分存数据存储在区块链系统的不同记账节点中。
[0149] 例如,n个记账节点分别记为记账节点1、记账节点2……、记账节点n,n份分存数据分别记为分存数据1、分存数据2、……、分存数据n,则可以将分存数据1存储至记账节点1中,将分存数据2存储至记账节点2中,……,将分存数据n存储至记账节点n中。
[0150] 可选的,可以向区块链系统中的共识节点发送n份分存数据,以使共识节点在分存系统的记账节点中存储n份分存数据。
[0151] 可选的,共识节点可以通过共识节点和每个记账节点之间的专有通道向记账节点发送对应的分存数据,以实现向记账节点中存储分存数据。
[0152] 可选的,共识节点和记账节点之间的专有通道可以为共识节点和记账节点之间的通信链路,该通信链路可以为无线通信链路,也可以为有线通信链路。
[0153] 例如,假设分存数据、记账节点以及专有通道的对应关系如表1所示:
[0154] 表1
[0155]分存数据 记账节点 专有通道
分存数据1 记账节点1 专有通道1
分存数据2 记账节点2 专有通道2
分存数据3 记账节点3 专有通道3
…… …… ……
分存数据n 记账节点n 专有通道n
[0156] 根据表1所示的对应关系,共识节点通过专有通道1向记账节点1发送分存数据1,共识节点通过专有通道2向记账节点2发送分存数据2,以此类推,共识节点通过专有通道n向记账节点n发送分存数据n。
[0157] 可选的,每个待存储数据有其对应的查询条件,查询条件用于在区块链系统中进行数据查询。
[0158] 可选的,查询条件可以包括待存储数据对应的对象的标识或待存储数据的生成时间中的至少一种。
[0159] 当然,查询条件还可以包括其它,本申请对此不作具体限定。
[0160] 例如,对象可以为车辆,相应的,对象的标识可以为车牌号,对象还可以为用户,相应的,对象的标识可以为用户的身份证号码。
[0161] 当然,在实际应用过程中,可以根据实际需要确定对象的种类,本申请对此不作具体限定。
[0162] 可选的,针对n份分存数据中的任意一份分存数据,在向区块链系统发送该分存数据时,还可以向区块链系统发送待存储数据对应的查询条件。通过该查询条件可以在区块链系统中查询得到该分存数据。
[0163] 可选的,可以以键值对的形式向区块链系统发送分存数据和查询条件,即,向区块链系统发送分存数据对应的键值对,其中,一份分存数据对应的键值对中的键包括查询条件,一份分存数据的键值对中的值包括该分存数据。
[0164] S303、确定n份分存数据的摘要。
[0165] 可选的,可以通过数据摘要算法,分别确定每份分存数据的摘要。
[0166] 可选的,数据摘要算法包括哈希摘要算法等。
[0167] 需要说明的是,数据摘要算法还可以包括其它,本申请对此不作具体限定。
[0168] 可选的,一份分存数据对应一份摘要,摘要用于在恢复待存储数据时对分存数据进行完整性验证。
[0169] 例如,若n份分存数据分别记为分存数据1、分存数据2、……、分存数据n,则可以确定分存数据1的摘要1、分存数据2的摘要2、……、分存数据n的摘要n。
[0170] S304、向区块链系统发送n份分存数据的摘要。
[0171] 其中,n份分存数据的摘要存储在区块链系统的每个记账节点中。
[0172] 例如,一份分存数据对应一份摘要,则n份分存数据对应n份摘要,该n份摘要存储至每个记账节点中。即,记账节点1中存储该n份摘要,记账节点2中存储该n份摘要,……,记账节点n中也存储该n份摘要。
[0173] 可选的,可以向区块链系统中的共识节点发送n份分存数据的摘要,以使共识节点在区块链系统的每个记账节点中存储该n份分存数据的摘要。
[0174] 可选的,共识节点可以通过共识节点与所有记账节点之间的共享通道向记账节点发送摘要,以实现向记账节点中存储摘要。
[0175] 可选的,共识节点和记账节点之间的共享通道可以为共识节点和记账节点之间的通信链路,该通信链路可以为无线通信链路,也可以为有线通信链路。
[0176] 例如,共识节点可以通过共享通道向所有记账节点发送n份摘要,以使所有记账节点存储该n份摘要。
[0177] 可选的,在向区块链系统发送摘要时,还可以向区块链系统发送摘要对应的查询条件,查询条件和摘要具有对应关系,根据查询条件可以在区块链系统中查询得到对应的摘要。
[0178] 可选的,针对任意一份分存数据的摘要,在向区块链系统发送该摘要时,还可以向区块链系统发送该摘要对应的查询条件。通过该查询条件可以在区块链系统中查询得到该摘要。
[0179] 可选的,可以以键值对的形式向区块链系统发送摘要和查询条件,即,向区块链系统发送摘要对应的键值对,其中,一份摘要对应的键值对中的键包括查询条件,一份摘要对应的键值对中的值包括该摘要。
[0180] 可选的,可以确定所有分存数据的摘要的组合摘要,向区块链系统发送组合摘要,其中,组合摘要包括所有分存数据的摘要。
[0181] 可选的,可以通过至少如下三种可行的实现方式确定所有分存数据的组合摘要:
[0182] 一种可行的实现方式:
[0183] 通过预设标识符对所有分存数据的摘要进行拼接,以得到组合摘要,不同分存数据的摘要之间以预设标识符分割。
[0184] 可选的,预设标识符可以为“|”、“/”、“||”等。
[0185] 当然,在实际应用过程中,可以根据实际需要设置该预设标识符,本申请对此不作具体限定。
[0186] 例如,假设分存数据1的摘要为1234,分存数据2的摘要为2345,分存数据3的摘要为3456,预设标识符为“|”则该三份摘要的组合摘要为:1234|2345|3456。
[0187] 需要说明的是,在该种可行的实现方式中,可以预先确定组合摘要中各摘要的次序与各份分存数据被存储至的记账节点之间的对应关系。
[0188] 可选的,摘要的次序是指摘要在组合摘要中的次序,即,摘要为组合摘要中的第几份摘要。例如,若一份摘要为组合摘要中的第三份摘要,则该摘要的次序为3。
[0189] 可选的,该对应关系可以为:组合摘要中第i份摘要对应记账节点i,其中,记账节点i中的存储的分存数据为第i份摘要对应的分存数据。
[0190] 例如,该对应关系可以如表2所示:
[0191] 表2
[0192]摘要在组合摘要中的次序 记账节点的标识
1 记账节点1
2 记账节点2
3 记账节点3
…… ……
n 记账节点n
[0193] 另一种可行的实现方式:
[0194] 在所有分存数据的摘要的长度相同时,对分存数据进行拼接。
[0195] 例如,假设分存数据1的摘要为1234,分存数据2的摘要为2345,分存数据3的摘要为3456,则该三份摘要的组合摘要为:123423453456。
[0196] 需要说明的是,在该种可行的实现方式中,可以预先确定组合摘要中各摘要的次序与各份分存数据被存储至的记账节点之间的对应关系。
[0197] 可选的,该对应关系与上一种可行的实现方式中的对应关系相同,此处不再进行赘述。
[0198] 再一种可行的实现方式:
[0199] 确定存储每份分存数据的记账节点的标识,并在分存数据的摘要中添加存储该分存数据的记账节点的标识,对添加了记账节点的标识的摘要进行拼接,以得到组合摘要。
[0200] 可选的,可以将记账节点的标识添加至摘要的前边,或者后边。
[0201] 例如,假设分存数据、存储分存数据的记账节点的标识、摘要的对应关系如表3所示:
[0202] 表3
[0203]分存数据 记账节点的标识 摘要
分存数据1 a 123
分存数据2 b 234
分存数据3 c 456
…… …… ……
分存数据n m 567
[0204] 假设将记账节点的标识添加至摘要的前边,则组合摘要为:a123b234c456…m567。
[0205] 可选的,还可以在不同的摘要之间添加预设标识符。例如,当预设标识符为“|”时,则组合摘要为a123|b234|c456|…|m567。
[0206] 需要说明的是,上述只是以示例的方式示意确定组合摘要的方法,还可以通过其它可行的实现方式确定组合摘要,本申请对此不作具体限定。
[0207] 需要说明的是,本申请对S301-S304的执行顺序不作具体限定。
[0208] 例如,可以先执行S301和S303,再执行S302和S304,即,先确定n份分存数据和每份分存数据的摘要,然后在向区块链系统发送该n份分存数据和所有分存数据的摘要。
[0209] 现有技术中需要依赖客户端中存储的私钥进行解密,只要客户端故障就会导致私钥的丢失,进而无法解密得到在区块链系统中存储的数据,使得现有技术中区块链系统的容错性较差。而在本申请中,只要k个记账节点正常,即可根据该k个记账节点中的分存数据恢复得到关键数据(上述待存储数据),即,即使n-k个记账节点故障,依然可以恢复得到关键数据,进而提高了区块链系统的容错性。
[0210] 本申请提供的数据存储方法,当需要向区块链系统中存储待存储数据时,先根据区块链系统中的记账节点的数量n和阈值k,确定待存储数据的n份分存数据、以及每份分存数据的摘要,并向区块链系统发送该n份分存数据和该n份分存数据的摘要,以使区块链系统在一个记账节点中存储待存储数据的一份分存数据和所有分存数据的摘要,即,不同的分存数据存储在不同的记账节点中,所有分存数据的摘要存储在区块链系统的每个记账节点中。在上述过程中,由于恢复待存储数据所需的通过完整性验证的分存数据的份数至少为k,因此,只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待存储数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还可以根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0211] 在图3所述实施例的基础上,下面,以代理服务器中的分存模块集成在终端设备中为例,对上述数据存储方法进行进一步详细说明。
[0212] 图5为本申请提供的另一种数据存储方法的流程示意图。请参见图5,该方法可以包括:
[0213] S501、终端设备根据区块链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据。
[0214] 需要说明的是,S501的执行过程可以参见S301的执行过程,此处不再进行赘述。
[0215] S502、终端设备确定n份分存数据的摘要。
[0216] 需要说明的是,S502的执行过程可以参见S303的执行过程,此处不再进行赘述。
[0217] S503、终端设备根据n份分存数据的摘要确定组合摘要,组合摘要中包括n份分存数据的摘要。
[0218] 需要说明的是,S503的执行过程可以参见S304中确定组合摘要的过程,此处不再进行赘述。
[0219] S504、终端设备向区块链系统中的共识节点发送n份分存数据和组合摘要。
[0220] 需要说明的是,S503的执行过程可以参见S302和S304的执行过程,此处不再进行赘述。
[0221] S505、共识节点确定每份分存数据对应的记账节点。
[0222] 其中,一份分存数据对应一个记账节点,不同分存数据对应的记账节点不同。
[0223] 可选的,针对任意一份分存数据,共识节点可以将还未存储待存储数据的其他分存数据的任意一个记账节点确定为该分存数据对应的记账节点。
[0224] 例如,针对分存数据X,若记账节点m-记账节点n中还未存储待存储数据的其它分存数据,则可以将记账节点m-记账节点n中的任意一个记账节点确定为分存数据X对应的记账节点。
[0225] S506、共识节点向分存数据对应的记账节点中存储分存数据。
[0226] 其中,任一份分存数据存储在区块链系统的一个记账节点中,任二份分存数据存储在区块链系统的不同记账节点中。
[0227] 需要说明的是,S506的执行过程可以参见S302的执行过程,此处不再进行赘述。
[0228] S507、共识节点向所有记账节点存储组合摘要。
[0229] 需要说明的是,S507的执行过程可以参见S304的执行过程,此处不再进行赘述。
[0230] 在图5所示的实施例中,一个记账节点中仅存储待存储数据的一份分存数据,只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待存储数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还可以根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0231] 需要说明的是,在执行完图3或图5所示的实施例之后,还可以在区块链系统中进行数据查询,下面,通过图4所示的实施例对数据查询方法进行详细说明。
[0232] 图6为本申请提供的一种数据查询方法的流程示意图。请参见图6,该方法可以包括:
[0233] S601、在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要。
[0234] 其中,k为恢复待查询数据至少需要的通过完整性验证的分存数据的份数,n为正整数,k为正整数,2≤k≤n。
[0235] 图6实施例的执行主体可以为终端设备,也可以为设置在终端设备中的数据查询装置。例如,终端设备可以为图1实施例中的客户端101-2。例如,数据查询装置可以为图1所示实施例中的重构模块。可选的,数据查询装置可以通过软件实现,也可以通过软件和硬件的结合实现。
[0236] 可选的,区块链系统中不可靠记账节点的最大数量为n-k,区块链系统中不可靠记账节点的最大数量是指,区块链系统能够恢复得到待存储数据时最多允许存在的不可靠节点的数量。即,当区块链系统中的不可靠节点的数量大于n-k时,区块链系统根据记账节点中的分存数据无法恢复得到待存储数据;当区块链系统中的不可靠节点的数量小于或等于n-k时,区块链系统根据记账节点中的分存数据可恢复得到待存储数据
[0237] 可选的,根据至少k份通过完整性验证分存数据可以恢复得到待存储数据,根据小于或等于k份通过完整性验证的分存数据无法获取得到待存储数据中的任何有效信息。
[0238] 可选的,通过完整性验证的分存数据为没有被篡改的分存数据。
[0239] 可选的,可以通过如下可行的实现方式判断分存数据是否通过完整性验证:获取分存数据和分存数据的摘要,将通过预设摘要算法对获取得到的分存数据进行加密处理,得到第一摘要,判断第一摘要和获取得到的摘要是否相同,若是,则确定该分存数据为通过完整性验证,否则,确定该分存数据未通过完整性验证。
[0240] 可选的,获取得到的至少k份分存数据中任两份分存数据均不相同。
[0241] 可选的,可以获取待查询数据的查询条件,并根据查询条件获取至少k份分存数据和n份摘要。
[0242] 可选的,查询条件包括待存储数据对应的对象的标识或待存储数据的生成时间中的至少一个。
[0243] 当然,查询条件还可以包括其它,本申请对此不作具体限定。
[0244] 例如,对象可以为车辆,相应的,对象的标识可以为车牌号。
[0245] 例如,对象可以为就医患者,相应的,对象的标识可以为身份证号码。
[0246] 例如,对象可以为智能门锁,相应的,对象的标识可以为房产证编号。
[0247] 当然,在实际应用过程中,可以根据实际需要确定对象的种类,本申请对此不作具体限定。
[0248] 可选的,可以向区块链系统发送数据获取请求,数据获取请求包括待查询数据的查询条件,并接收区块链系统发送的查询条件对应的至少k份分存数据,和查询条件对应的n份摘要。
[0249] 可选的,可以向区块链系统中的记账节点发送数据获取请求。
[0250] 可选的,由于每个记账节点中均包括n份摘要,因此,可以在任意一个或多个记账节点中获取n份摘要。
[0251] 可选的,n份摘要可能以组合摘要的形式存储在记账节点中,组合摘要中包括该n份摘要。相应的,可以在任意一个或多个记账节点中获取组合摘要。
[0252] 可选的,可以在区块链系统中的任意至少k个记账节点中获取至少k份分存数据。
[0253] 可选的,可以先在区块链系统中获取k份分存数据,若在S402中对该k份分存数据进行完整性验证通过,则不再继续获取分存数据,若对该k份分存数据中的M份分存数据未完整性验证通过,则继续在区块链系统中获取M份分存数据,重复该过程,直至获取得到k份能够通过完整性验证的分存数据。
[0254] 可选的,还可以在区块链系统中获取n份分存数据。
[0255] S602、根据至少k份分存数据和n份摘要,确定待查询数据。
[0256] 需要说明的是,在存储n份摘要时,可能以组合摘要的形式在记账节点中存储n份摘要。相应的,在S601中则获取到包括n份摘要的组合摘要。
[0257] 可选的,在获取得到组合摘要之后,可以先在组合摘要中获取得到n份摘要,可以通过至少如下两种可行的实现方式在组合摘要中获取得到n份摘要:
[0258] 一种可行的实现方式:
[0259] 组合摘要中各摘要之间包括预设标识符,则可以根据组合摘要中的预设标识符,对组合摘要进行分割,以得到n份摘要。
[0260] 例如,假设预设标识符为“|”,组合摘要为:1234|2345|3456,则确定该组合摘要中包括的摘要为:1234、2345和3456。
[0261] 另一种可行的实现方式:
[0262] 组合摘要中各摘要的长度相同,则可以根据摘要的长度,在组合摘要中确定n份摘要。
[0263] 例如,假设组合摘要为123423453456,且每份摘要的长度为3个字符,则可以确定该组合摘要中包括的摘要为:123、423、453、456。
[0264] 需要说明的是,若根据n份摘要确定组合摘要的方式不同,则在组合摘要中获取n份摘要的方式也不同。上述只是以示例的形式示意几种在组合摘要中确定n份摘要的方式,并非对在组合摘要中确定n份摘要的方式的限定。
[0265] 可选的,在获取得到至少k份分存数据和n份摘要之后,确定至少k份分存数据中、每份分存数据对应的摘要。
[0266] 可选的,可以通过至少如下三种可行的实现方式确定至少k份分存数据中、每份分存数据对应的摘要:
[0267] 一种可行的实现方式:
[0268] 根据组合摘要中各摘要的次序与各份分存数据被存储至的记账节点之间的对应关系,确定至少k份分存数据中、每份分存数据对应的摘要。
[0269] 可选的,摘要的次序是指摘要在组合摘要中的次序,即,摘要为组合摘要中的第几份摘要。例如,若一份摘要为组合摘要中的第三份摘要,则该摘要的次序为3。
[0270] 例如,假设该对应关系、以及每个记账节点中存储的分存数据如表4所示:
[0271] 表4
[0272]摘要在组合摘要中的次序 记账节点的标识 记账节点中存储的分存数据
1 记账节点1 分存数据1
2 记账节点2 分存数据2
3 记账节点3 分存数据3
…… …… ……
n 记账节点n 分存数据n
[0273] 由表4可知,组合摘要中的第一份摘要与记账节点1中的分存数据1对应,组合摘要中的第二份摘要与记账节点2中的分存数据2对应,……,组合摘要中的第n份摘要与记账节点n中的分存数据n对应。
[0274] 另一种可行的实现方式:
[0275] 根据每份摘要中的记账节点的标识,确定至少k份分存数据中、每份分存数据对应的摘要。
[0276] 可选的,若一份摘要中的记账节点的标识为a,则确定该摘要与记账节点a中的分存数据对应。
[0277] 例如,假设每份摘要中包括的记账节点标识、以及每个记账节点中存储的分存数据如表5所示:
[0278] 表5
[0279]摘要 摘要中包括的记账节点的标识 记账节点中存储的分存数据
摘要1 记账节点1 分存数据1
摘要2 记账节点2 分存数据2
摘要3 记账节点3 分存数据3
…… …… ……
摘要n 记账节点n 分存数据n
[0280] 由表5可知,摘要1与记账节点1中的分存数据1对应,摘要2与记账节点2中的分存数据2对应,……,摘要n与记账节点n中的分存数据n对应。
[0281] 需要说明的是,上述只是以示例的形式示意两种确定分存数据与摘要之间的对应关系,并非对确定分存数据与摘要之间的对应关系的方式的限定。
[0282] 可选的,在确定得到摘要与分存数据的对应关系之后,可以通过如下可行的实现方式确定待查询数据:假设第i份摘要与第i份分存数据对应(即,第i份摘要为根据第i份分存数据生成的摘要),则根据第i份摘要对第i份分存数据进行完整性验证操作,i依次为1,2……n,重复完整性验证操作,直至对k份分存数据完整性验证通过时,根据k份分存数据确定待查询数据。
[0283] 可选的,可以通过至少如下两种可行的实现方式重复完整性验证操作,直至对k份分存数据完整性验证通过:
[0284] 一种可能的实现方式:
[0285] 先获取得到k份分存数据,并确定该k份分存数据与摘要的对应关系,按照预设顺序对该k份分存数据进行完整性验证,或者并行对该k份分存数据进行完整性验证。若对该k份分存数据中的M份分存数据进行完整性验证失败,则再获取M份分存数据,并确定该M份分存数据与摘要的对应关系,并按照预设顺序对该M份分存数据进行完整性验证,或者并行对该M份分存数据进行完整性验证。若对该M份分存数据中的X份分存数据进行完整性验证失败,则重复上述过程,直至对k份分存数据进行完整性验证成功。
[0286] 可选的,按照预设顺序对多份分存数据进行完整性验证是指,先对第一份分存数据进行完整性验证,再对第一份分存数据进行完整性验证完成(验证成功或者验证失败)之后,再对第二份分存数据进行完整性验证,以此类推。即,在同一时刻仅对一份分存数据进行完整性验证。
[0287] 可选的,并行对多份分存数据进行完整性验证是指,同时对多份分存数据进行完整性验证。即,在同一时刻对多份分存数据进行完整性验证。
[0288] 另一种可能的实现方式:
[0289] 获取n份分存数据,并确定n份分存数据与摘要的对应关系,按照预设顺序对该n份分存数据进行完整性验证,直至对k份分存数据完整性验证通过,或者,并行对该n份分存数据进行完整性验证,直至对k份分存数据完整性验证通过时,暂停对其它未完成完整性验证的分存数据进行完整性验证。
[0290] 当然,还可以通过其它可行的实现方式重复完整性验证操作,直至对k份分存数据完整性验证通过。
[0291] 可选的,针对任意一份摘要和对应的分存数据,可以通过如下可行的实现方式通过摘要对该分存数据进行完整性验证:通过预设摘要算法对获取得到的分存数据进行运算,得到第一摘要,判断第一摘要和接收到的摘要是否相同,若是,则对分存数据进行完整性验证通过,若否,则对分存数据进行完整性验证失败。
[0292] 在对k份分存数据完整性验证通过时,可以通过如下可行的实现方式根据k份分存数据确定待查询数据:根据k,通过预设算法对通过完整性验证的k份分存数据进行处理,得到待查询数据,预设算法用于使得,根据小于k份通过完整性验证的分存数据无法恢复得到所述待查询数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到待查询数据。
[0293] 例如,预设算法可以为拉格朗日差值算法,相应的,可以通过如下可行的实现方式确定待查询数据:
[0294] 确定k-1阶多项式: 其中,i为0至k之间的整数,通过完整性验证的k份分存数据分别为(x0,y0),(x1,y1),…,(xk,yk)。确定待查询数据为F(0)。
[0295] 当然,预设算法还可以为其它,本申请对此不作具体限定。
[0296] 在图6所示的实施例中,待查询数据以分存数据和摘要的形式在区块链系统中存储,其中,待查询数据的每份分存数据存储在区块链系统的不同记账节点中,所有分存数据的摘要存储在区块链系统的每个记账节点中。当需要在区块链系统中获取待查询数据时,在区块链系统中获取至少k份分存数据和n份摘要,并根据该k份分存数据和n份摘要恢复得到待查询数据。在上述过程中,由于恢复待存储数据所需的通过完整性验证的分存数据的份数至少为k,因此,只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待查询数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0297] 在图6所示实施例的基础上,下面,以代理服务器中的重构模块集成在终端设备中为例,对上述数据查询方法进行进一步详细说明。
[0298] 图7为本申请提供的另一种数据查询方法的流程示意图。在图6所示实施例的基础上,请参见图7,该方法可以包括:
[0299] S701、终端设备向区块链系统中的n个记账节点发送数据查询请求,数据查询请求包括查询条件。
[0300] 需要说明的是,终端设备还可以向区块链系统中的部分记账节点发送数据查询请求,例如,终端设备向区块链系统中的k个记账节点发送数据查询请求。
[0301] S702、记账节点根据查询条件确定分存数据和组合摘要。
[0302] 可选的,n个记账节点分别根据查询条件确定分存数据和组合摘要。
[0303] 需要说明的是,S702的执行过程可以参见S601的执行过程,此处不再进行赘述。
[0304] S703、记账节点向终端设备发送分存数据和组合摘要。
[0305] 可选的,n个记账节点分别向终端设备发送分存数据和摘要。
[0306] S704、终端设备确定第i份分存数据对应第i份摘要,第i份摘要为根据第i份分存数据生成的摘要。
[0307] 其中,i依次为1,2……n。
[0308] 需要说明的是,S704的执行过程可以参见S602的执行过程,此处不再进行赘述。
[0309] S705、终端设备根据第i份摘要对第i份分存数据进行完整性验证。
[0310] 初始时,i=1。
[0311] S706、终端设备判断根据第i份摘要是否对第i份分存数据进行完整性验证通过。
[0312] 若是,则执行S707。
[0313] 若否,则执行S709。
[0314] 需要说明的是,S705-S706的执行过程可以参见S702的执行过程,此处不再进行赘述。
[0315] S707、终端设备将通过完整性验证的分存数据份数L加1。
[0316] 其中,初始时,L为0。
[0317] S708、终端设备判断L是否等于k。
[0318] 若是,则执行S710。
[0319] 若否,则执行S709。
[0320] S709、终端设备将i加1。
[0321] 在S709之后,执行S705。
[0322] S710、终端设备根据通过完整性验证的k份分存数据确定待查询数据。
[0323] 需要说明的是,S710的执行过程可以参见S702的执行过程,此处不再进行赘述。
[0324] 在图7所示的实施例中,一个记账节点中仅存储一份分存数据,由于恢复待存储数据所需的通过完整性验证的分存数据的份数至少为k,因此,只有当n个记账节点中至少k个记账节点中的分存数据泄露时,攻击者才可能恢复得到关键数据(上述待存储数据),提高了数据存储的安全性,进而提高了区块链系统的安全性。进一步的,在获取得到分存数据之后,还根据摘要对分存数据进行验证,以避免在获取分存数据的过程中分存数据被篡改而导致无法恢复关键数据的问题,进一步提高了区块链系统的安全性。
[0325] 需要说明的是,在图6或图7所示的实施例之前,还可以执行图3或图5所示的实施例,以实现向区块链系统中存储数据。
[0326] 图8为本申请提供的一种数据存储装置的结构示意图。请参见图8,该数据存储装置10包括第一确定模块11、发送模块12和第二确定模块13,其中,
[0327] 所述第一确定模块11用于,根据区块链系统中的记账节点的总数量n和阈值k,确定待存储数据的n份分存数据,其中,所述阈值k为恢复所述待存储数据时,所述n份分存数据中需要通过完整性验证的分存数据的最少份数,所述n为正整数,所述k为正整数,2≤k≤n;
[0328] 所述发送模块12用于,向所述区块链系统发送所述n份分存数据,任一份分存数据存储在所述区块链系统的一个记账节点中,任二份分存数据存储在所述区块链系统的不同记账节点中;
[0329] 所述第二确定模块13用于,确定所述n份分存数据的摘要;
[0330] 所述发送模块12还用于,向所述区块链系统发送所述n份分存数据的摘要,所述n份分存数据的摘要存储在所述区块链系统的每个记账节点中,所述分存数据的摘要用于在恢复所述待存储数据时对所述分存数据进行完整性验证。
[0331] 可选的,第一确定模块11可以执行图3实施例中的S301和图5实施例中的S501。
[0332] 可选的,发送模块12可以执行图3实施例中的S302和S304,以及图5实施例中的S504。
[0333] 可选的,第二确定模块13可以执行图3实施例中的S303,以及图5实施例中的S502-S503。
[0334] 需要说明的是,本申请提供的数据存储装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0335] 在一种可能的实施方式中,所述第一确定模块11具体用于:
[0336] 根据所述n和所述阈值k,通过预设算法对所述待存储数据进行处理,得到所述n份分存数据,所述预设算法用于使得,根据小于k份通过完整性校验的分存数据无法恢复得到所述待存储数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到所述待存储数据。
[0337] 在另一种可能的实施方式中,所述预设算法为拉格朗日差值算法;所述第一确定模块11具体用于:
[0338] 根据所述阈值k,确定k-1阶多项式F(x)=ak-1xk-1+…+a2x+a1x+S;其中,所述a1,所述a2,…,所述ak-1为随机生成的参数,所述S为待存储数据;
[0339] 确定所述n份分存数据为:(1,F(1)),(2,F(2)),…,(n,F(n))。
[0340] 在另一种可能的实施方式中,所述发送模块12具体用于:
[0341] 向所述区块链系统发送每份分存数据对应的键值对,其中,一份分存数据对应的键值对中的键包括所述待存储数据的查询条件,一份分存数据对应的键值对中的值包括该分存数据。
[0342] 在另一种可能的实施方式中,所述查询条件包括所述待存储数据对应的对象的标识或所述待存储数据的生成时间中的至少一种。
[0343] 在另一种可能的实施方式中,所述第二确定模块13具体用于:
[0344] 通过数据摘要算法,分别确定所述n份分存数据的摘要。
[0345] 在另一种可能的实施方式中,所述数据摘要算法包括哈希摘要算法。
[0346] 在另一种可能的实施方式中,所述第二确定模块13还用于,确定所述n份分存数据的摘要的组合摘要,所述组合摘要包括所述n份分存数据的摘要;
[0347] 所述发送模块12具体用于,向所述区块链系统发送所述组合摘要。
[0348] 在另一种可能的实施方式中,所述发送模块12具体用于,向所述区块链系统中的共识节点发送所述n份分存数据,所述共识节点用于在所述记账节点存储所述n份分存数据;
[0349] 所述发送模块12具体用于,向所述区块链系统中的共识节点发送所述n份分存数据的摘要,所述共识节点用于在每个记账节点存储所述n份分存数据的摘要。
[0350] 图9为本申请提供的另一种数据存储装置的结构示意图。在图8所示实施例的基础上,请参见图9,所述装置还包括获取模块14和第三确定模块15,其中,
[0351] 所述获取模块14用于,在所述发送模块12向所述区块链系统发送所述n份分存数据的摘要之后,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要;
[0352] 所述第三确定模块15用于,根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据。
[0353] 可选的,获取模块14可以执行图6实施例中的S601和图7实施例中的S703。
[0354] 可选的,第三确定模块15可以执行图6实施例中的S602和图7实施例中的S704-S710。
[0355] 在另一种可能的实施方式中,所述第三确定模块15具体用于:
[0356] 根据第i份摘要对第i份分存数据进行完整性验证操作,所述i依次为1,2……n,所述第i份摘要为根据所述第i份分存数据生成的摘要;
[0357] 重复所述完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定所述待查询数据。
[0358] 需要说明的是,本申请提供的数据存储装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0359] 图10为本申请提供的一种数据查询装置的结构示意图。请参见图10,该数据查询装置20可以包括获取模块21和第一确定模块22,其中,
[0360] 所述获取模块21用于,在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要,所述k为恢复所述待查询数据至少需要的通过完整性验证的分存数据的份数,所述n为正整数,所述k为正整数,2≤k≤n;
[0361] 所述第一确定模块22用于,根据所述至少k份分存数据和所述n份摘要,确定所述待查询数据。
[0362] 可选的,获取模块21可以执行图6实施例中的S601和图7实施例中的S703。
[0363] 可选的,第一确定模块22可以执行图6实施例中的S602和图7实施例中的S704-S710。
[0364] 本申请提供的数据查询装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0365] 在一种可能的实施方式中,所述第一确定模块22具体用于:
[0366] 根据第i份摘要对第i份分存数据进行完整性验证操作,所述i依次为1,2……n,所述第i份摘要为根据所述第i份分存数据生成的摘要;
[0367] 重复所述完整性验证操作,直至对k份分存数据完整性验证通过时,根据通过完整性验证的k份分存数据确定所述待查询数据。
[0368] 在另一种可能的实施方式中,所述第一确定模块22具体用于:
[0369] 根据所述k,通过预设算法对所述通过完整性验证的k份分存数据进行处理,得到所述待查询数据,所述预设算法用于使得,根据小于k份通过完整性验证的分存数据无法恢复得到所述待查询数据中的任何有效信息,根据大于或等于k份通过完整性验证的分存数据可以恢复得到所述待查询数据。
[0370] 在另一种可能的实施方式中,所述预设算法为拉格朗日差值算法;所述第一确定模块22具体用于:
[0371] 根据所述通过完整性验证的k份分存数据,确定k-1阶多项式:其中,所述i为0至所述k之间的整数,所述通过
完整性验证的k份分存数据分别为(x0,y0),(x1,y1),…,(xk,yk);
[0372] 确定所述待查询数据为F(0)。
[0373] 图11为本申请提供的另一种数据查询装置的结构示意图。在图10所示实施例的基础上,请参见图11,所述装置还包括发送模块23和接收模块24,其中,
[0374] 所述发送模块23用于,向所述区块链系统发送数据获取请求,所述数据获取请求包括待查询数据的查询条件;
[0375] 所述接收模块24用于,接收所述区块链系统发送的所述查询条件对应的所述至少k份分存数据,和所述查询条件对应的所述n份摘要。
[0376] 可选的,发送模块23可以执行图7实施例中的S701。
[0377] 可选的,接收模块24可以执行图7实施例中的S703。
[0378] 在另一种可能的实施方式中,所述查询条件包括所述待查询数据对应的对象的标识或所述待查询数据的生成时间中的至少一个。
[0379] 在另一种可能的实施方式中,所述装置还包括第二确定模块25和第三确定模块26,其中,
[0380] 所述第二确定模块25用于,在所述获取模块在区块链系统的n个记账节点中获取待查询数据对应的至少k份分存数据和n份摘要之前,根据区块链系统中的记账节点的总数量n和所述k,确定待存储数据的n份分存数据;
[0381] 所述发送模块23还用于,向所述区块链系统发送所述n份分存数据,任一份分存数据存储在所述区块链系统的一个记账节点中,任二份分存数据存储在所述区块链系统的不同记账节点中;
[0382] 所述第三确定模块26用于,确定所述n份分存数据的摘要,向所述区块链系统发送所述n份分存数据的摘要,所述n份分存数据的摘要存储在所述区块链系统的每个记账节点中,所述分存数据的摘要用于在恢复所述待存储数据时对所述分存数据进行完整性验证。
[0383] 可选的,第一确定模块25可以执行图3实施例中的S301和图5实施例中的S501。
[0384] 可选的,第二确定模块26可以执行图3实施例中的S303,以及图5实施例中的S502-S503。
[0385] 本申请提供的数据查询装置可以执行上述方法实施例所示的技术方案,其实现原理以及有益效果类似,此处不再进行赘述。
[0386] 图12为本申请提供的数据存储装置的硬件结构示意图。请参见图12,该数据存储装置30可以包括:处理器31、存储器32和通信接口33,其中,处理器31、存储器32和通信接口33可以通信;示例性的,处理器31、存储器32和通信接口33通过通信总线34通信,所述存储器32用于存储程序指令,所述处理器31用于调用存储器中的程序指令执行上述任意方法实施例所示的数据存储方法。
[0387] 可选的,通信接口33可以包括发送器和/或接收器。
[0388] 可选的,处理器31可以实现图8-图9所示实施例中第一确定模块11、第二确定模块13、获取模块14和第三确定模块15的功能。
[0389] 可选的,通信接口33可以实现图8-图9所示实施例中发送模块12的功能。可选的,该通信接口33可以为发送器。
[0390] 可选的,上述处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
[0391] 图13为本申请提供的数据查询装置的硬件结构示意图。请参见图13,该数据查询装置40可以包括:处理器41、存储器42和通信接口43,其中,处理器41、存储器42和通信接口43可以通信;示例性的,处理器41、存储器42和通信接口43通过通信总线44通信,所述存储器42用于存储程序指令,所述处理器41用于调用存储器中的程序指令执行上述任意方法实施例所示的数据查询方法。
[0392] 可选的,通信接口43可以包括发送器和/或接收器。
[0393] 可选的,处理器41可以实现图10-图11所示实施例中获取模块21、第一确定模块22、第二确定模块25和第三确定模块26的功能。
[0394] 可选的,通信接口43可以实现图10-图11所示实施例中发送模块23和接收模块24的功能。可选的,可以通信接口43包括发送器和接收器,发送器可以实现发送模块23的功能,接收器可以实现接收模块24的功能。
[0395] 可选的,上述处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
[0396] 本申请提供一种存储介质,所述可读存储介质上存储有计算机程序;所述计算机程序用于实现如上述任意实施例所述的数据存储方法。
[0397] 本申请提供一种可读存储介质,所述可读存储介质上存储有计算机程序;所述计算机程序用于实现如上述任意实施例所述的数据查询方法。
[0398] 实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一可读取存储器中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储器(存储介质)包括:只读存储器(英文:read-only memory,缩写:
ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetic tape)、软盘(英文:floppy disk)、光盘(英文:optical disc)及其任意组合。
[0399] 本申请实施例是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理单元以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理单元执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0400] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0401] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0402] 显然,本领域的技术人员可以对本申请实施例进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请实施例的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
[0403] 在本申请中,术语“包括”及其变形可以指非限制性的包括;术语“或”及其变形可以指“和/或”。本本申请中术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。本申请中,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈