发明内容
本申请提供了基于双层链的本地节点区块数据完整性检测方法及系统,可用于解决现有的本地区块数据完整性检测方法效率过低的技术问题。
第一方面,本申请提供基于双层链的本地节点区块数据完整性检测方法,应用于检测装置,所述检测装置用于检测待测节点中存储的待测业务链中任一待测区块的数据是否被篡改,其中,所述待测业务链的数据还存储于多个候选节点中,所述检测方法包括:
获取所述待测区块的当前区块哈希值;
根据所述当前区块哈希值,从预先搭建的数据库中获取所述待测区块的检测路径,所述检测路径从预先构建的所述待测区块对应的标准安全点中的标准默克尔树中生成并预存至所述数据库中,所述标准默克尔树是根据各个候选节点中存储的目标区块组中各个区块的区块哈希值构建的,所述标准安全点是根据所述待测业务链、所述目标区块组和所述标准默克尔树构建的,所述目标区块组为对所述待测业务链中所有区块进行分组后得到的包含所述待测区块的区块组,所述标准默克尔树的根哈希值为标准根哈希值;
在预先确定的检测链上部署检测智能合约,所述检测智能合约为根据所述当前区块哈希值和所述检测路径,生成所述待测区块对应的当前根哈希值,以及,生成所述当前根哈希值与所述标准根哈希值的比较结果,所述检测链用于锚定数据未被篡改过的多个标准安全点;
根据所述待测业务链构造检测交易,所述检测交易包括检测智能合约驱动指令,所述检测智能合约驱动指令用于驱动所述检测链执行所述检测智能合约;
将所述检测交易发送至所述检测链,以使所述检测链执行所述检测智能合约;
获取所述检测链生成的所述当前根哈希值与标准根哈希值的比较结果;
根据所述比较结果,生成本地区块数据完整性检测结果,所述本地区块数据完整性检测结果用于指示所述待测区块的数据是否被篡改。
在第一方面的一种可实现方式中,所述标准默克尔树通过以下方式构建:
任一候选节点对存储的目标区块组中的所有区块进行区块数据校验;
获取目标区块组中的所有区块的区块哈希值;
对目标区块组中的所有区块进行分组,所述分组为两两分组,获得多个区块对,如果最后剩余一个区块,则将最后一个区块作为区块对;
针对任一组区块对,对两个区块哈希值进行哈希处理,得到所述区块对的子哈希值;
将所有子哈希值对应的所有区块确定为目标区块组,并重复步骤对目标区块组中的所有区块进行分组,直至生成根哈希值,所述根哈希值为最后一个子哈希值;
将所有的区块哈希值和所有的子哈希值形成的树状关系确定为默克尔树;
判断各个候选节点生成的默克尔树的根哈希值是否相同;
如果所有根哈希值相同,则保留一个所述默克尔树作为所述标准默克尔树;
如果存在不相同的所述根哈希值,则将在所有所述根哈希值中的数量占比大于或等于三分之二的所述根哈希值确定为所述标准根哈希值,将所述标准根哈希值对应的所述默克尔树确定为所述标准默克尔树。
在第一方面的一种可实现方式中,所述标准默克尔树还通过以下方式构建:
如果任一区块未通过校验,则同步任一其他候选节点存储的所述目标区块组,并对同步后的所述目标区块组重新进行所述区块数据校验。
在第一方面的一种可实现方式中,所述候选节点对所述目标区块组中的所有区块进行所述区块数据校验,包括:
校验所述区块的交易签名是否可以验签通过;
校验所述区块的区块哈希值是否等于区块头中的哈希值;
校验所述区块的区块哈希值是否等于下一个区块的前序哈希值。
在第一方面的一种可实现方式中,所述目标区块组中的任一待测区块的检测路径通过以下方式,从预先构建的所述待测区块对应的标准安全点中的标准默克尔树中生成并预存至所述数据库中:
所述标准默克尔树构建完成后,从所述标准默克尔树中,获取从所述待测区块的区块哈希值开始,直至生成所述根哈希值需要的子哈希值集合和区块哈希值;
将所述子哈希值集合和所述区块哈希值确定为所述待测区块的所述检测路径。
在第一方面的一种可实现方式中,所述检测方法还包括:
如果所述数据库中任一待测区块的所述检测路径丢失,则查找所述检测链,获取所述待测区块对应的标准安全点,扫描所述标准安全点中的标准默克尔树,重新获取丢失的所述检测路径。
在第一方面的一种可实现方式中,所述标准安全点根据所述待测业务链、所述目标区块组和所述标准默克尔树,根据以下数据范式构建:
将所述目标区块组所在的业务链名称确定为业务链唯一标识;
生成所述目标区块组的ID,将所述ID确定为安全点唯一标识;
将所述目标区块组内第一个区块的高度值确定为安全点起点区块高度;
将所述目标区块组内最后一个区块的高度值确定为安全点终点区块高度;
将所述标准默克尔树确定为存在性凭证;
将所述业务链唯一标识、所述安全点唯一标识、所述安全点起点区块高度、所述安全点终点区块高度和所述存在性凭证共同确定为所述标准安全点。
在第一方面的一种可实现方式中,所述根据所述当前区块哈希值和所述检测路径,生成所述待测区块对应的当前根哈希值,包括:
按照构建所述标准默克尔树时,所述待测区块的区块哈希值和所述检测路径生成所述标准根哈希值的顺序,利用所述当前区块哈希值和所述检测路径生成所述当前根哈希值。
在第一方面的一种可实现方式中,所述根据所述比较结果,生成本地区块数据完整性检测结果,包括:
如果所述比较结果为相同,则生成所述待测区块的数据未被篡改的检测结果;
如果所述比较结果为不相同,则生成所述待测区块的数据已被篡改的检测结果。
第二方面,本申请提供基于双层链的本地节点区块数据完整性检测系统,所述检测系统用于执行第一方面及各种可实现方式中的基于双层链的本地节点区块数据完整性检测方法,所述检测系统包括:
当前区块哈希值获取模块,用于获取所述待测区块的当前区块哈希值;
检测路径获取模块,用于从预先搭建的数据库中获取所述待测区块的检测路径,所述检测路径从预先构建的所述待测区块对应的标准安全点中的标准默克尔树中生成并预存至所述数据库中,所述标准默克尔树是根据各个候选节点中存储的目标区块组中各个区块的区块哈希值构建的,所述标准安全点是根据所述待测业务链、所述目标区块组和所述标准默克尔树构建的,所述目标区块组为对所述待测业务链中所有区块进行分组后得到的包含所述待测区块的区块组,所述标准默克尔树的根哈希值为标准根哈希值;
检测智能合约部署模块,用于在预先确定的检测链上部署检测智能合约,所述检测智能合约为根据所述当前区块哈希值和所述检测路径,生成所述待测区块对应的当前根哈希值,以及,生成所述当前根哈希值与所述标准根哈希值的比较结果,所述检测链用于锚定数据未被篡改过的多个标准安全点;
检测交易构造模块,用于根据所述待测业务链构造检测交易,所述检测交易包括检测智能合约驱动指令,所述检测智能合约驱动指令用于驱动所述检测链执行所述检测智能合约;
检测智能合约驱动模块,用于将所述检测交易发送至所述检测链,以使所述检测链执行所述检测智能合约;
比较结果获取模块,用于获取所述检测链生成的所述当前根哈希值与标准根哈希值的比较结果;
检测结果生成模块,用于根据所述比较结果,生成本地区块数据完整性检测结果,所述本地区块数据完整性检测结果用于指示所述待测区块的数据是否被篡改。
本申请提供基于双层链的本地节点区块数据完整性检测方法及系统,检测方法应用于检测装置,检测装置用于检测待测节点中存储的待测业务链中任一待测区块的数据是否被篡改,其中,待测业务链的数据还存储于多个候选节点中,检测方法包括:获取待测区块的当前区块哈希值;从预先搭建的数据库中获取所述待测区块的检测路径;在预先确定的检测链上部署检测智能合约;根据待测业务链构造检测交易;将检测交易发送至检测链,以使检测链执行检测智能合约;智能合约读取检测链上的标准根哈希值并与经过检测路径计算出来的检测根哈希值进行比较;根据比较结果,指示待测区块数据是否被篡改。如此,仅通过获取待测区块的当前区块哈希值和检测路径就可以完成待测区块的数据完整性检测,提高了本地区块数据完整性检测的检测效率。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
下面首先介绍本申请中使用的业务链和检测链。
在区块链网络中,由于数据隔离的需要,相关业务参与方可以根据不同业务需要创建不同的链,并且在该链上实现数据的共享,而在不同的链之间数据是隔离的。这些由于业务需要所创建的链统称为业务链。
在本申请中,为了实现业务链数据的快速校验,引入了检测链,检测链通常选择信任度比较强的链来充当,一般的,检测链的节点规模应该比较大,或者检测链中需要高信任度的第三方机构参与。业务链通过本发明中提出的安全点模型将本链的数据锚定在检测链上,一方面实现了信任度的传递,即检测链的强信任度传递至业务链,增加了业务链的可信性。另一方面,通过在检测链部署检测智能合约之后,可以根据相关的安全点返回业务链相关区块的完整性校验结果。
本申请第一实施例公开了基于双层链的本地节点区块数据完整性检测方法,应用于本地待检测节点的任意目标待检测业务链上的待检测区块,所述待检测节点存储了该节点所加入的多条业务链数据,所述业务链由多个待检测区块组成,下面结合附图对本申请第一实施例进行具体说明。
图1为本申请第一方面提供的基于双层链的本地节点区块数据完整性检测方法的流程示意图,图2为本申请第一方面提供的基于双层链的本地节点区块数据完整性检测方法的检测示意图,如图1和图2所示,本申请第一实施例提供的检测方法包括:
步骤101,获取所述待测区块的当前区块哈希值。
步骤102,根据所述当前区块哈希值,从预先搭建的数据库中获取所述待测区块的检测路径,所述检测路径从预先构建的所述待测区块对应的标准安全点中的标准默克尔树中生成并预存至所述数据库中。
其中,所述数据库可以为level DB,所述标准默克尔树是根据各个候选节点中存储的目标区块组中各个区块的区块哈希值构建的,所述标准安全点是根据所述待测业务链、所述目标区块组和所述标准默克尔树构建的,所述目标区块组为对所述待测业务链中所有区块进行分组后得到的包含所述待测区块的区块组,所述标准默克尔树的根哈希值为标准根哈希值。
具体地,图3为本申请第一方面提供的标准安全点和标准默克尔树的结构示意图,图4为本申请第一方面提供的标准安全点和标准默克尔树的生成示意图,参见图3和图4,所述标准默克尔树是根据各个候选节点中存储的目标区块组中各个区块的哈希值,通过以下方式构建:
步骤201,任一候选节点对存储的目标区块组中的所有区块进行区块数据校验。
具体地,校验所述区块的交易签名是否可以验签通过;校验所述区块的区块哈希值是否等于区块头中的哈希值;校验所述区块的区块哈希值是否等于下一个区块的前序哈希值。
如果任一区块未通过校验,则同步任一其他候选节点存储的所述目标区块组,并对同步后的所述目标区块组重新进行所述区块数据校验。
具体地,执行步骤同步任一其他候选节点存储的所述目标区块组时,对任一其他候选节点的选择,可以按照节点间的通信速度,优先选择速度最快的一个其他候选节点;或者按照其他候选节点的可靠性,优先选择可靠性较高的一个其他候选节点,或者其他合理的选择方法,具体根据检测的实际情况而定。
步骤202,获取目标区块组中的所有区块的区块哈希值。
步骤203,对目标区块组中的所有区块进行分组,所述分组为两两分组,获得多个区块对,如果最后剩余一个区块,则将最后一个区块作为区块对。
具体地,所述两两分组为从所述目标区块中的第一个区块开始,依次将每两个区块确定为一个区块对。如果所述目标区块组中的区块数量为双数,则刚好可以两两分组完毕,如果所述区块数量为单数,最后会剩余一个区块,则剩余的一个区块自行成对。
步骤204,针对任一组区块对,对两个区块哈希值进行哈希处理,得到所述区块对的子哈希值。
具体地,所述哈希处理为将一个区块对中,两个区块的两个区块哈希值合并为一个字符串后,计算所述字符串的哈希值;对只有一个区块的区块对,则直接对一个区块哈希值进行哈希运算获得所述哈希值的子哈希值。
步骤205,将所有子哈希值对应的所有区块确定为目标区块组,并重复步骤对目标区块组中的所有区块进行分组,直至生成根哈希值,所述根哈希值为最后一个子哈希值。
步骤206,将所有的哈希值和所有的子哈希值形成的树状关系确定为默克尔树。
步骤207,判断各个候选节点生成的默克尔树的根哈希值是否相同。
步骤208,如果所有根哈希值相同,则保留一个所述默克尔树作为所述标准默克尔树。
步骤209,如果存在不相同的所述根哈希值,则将在所有所述根哈希值中的数量占比大于或等于三分之二的所述根哈希值确定为所述标准根哈希值,将所述标准根哈希值对应的所述默克尔树确定为所述标准默克尔树。
具体地,由于区块链中默认允许三分之一的节点作恶,因此,如果存在不相同的所述根哈希值,则将在所有所述根哈希值中的数量占比大于或等于三分之二的所述所述根哈希值确定为所述标准根哈希值。
进一步地,所述目标区块组中的任一待测区块的检测路径通过以下方式,从预先构建的所述待测区块对应的标准安全点中的标准默克尔树中生成并预存至所述数据库中:
步骤301,所述标准默克尔树构建完成后,从所述标准默克尔树中,获取从所述待测区块的区块哈希值开始,直至生成所述根哈希值需要的子哈希值集合和区块哈希值。
具体地,在图3中,如果待测区块为block n,则需要获取block n-1的哈希值H(n-1)和子哈希值,此时子哈希值包括子哈希值H(D)、子哈希值H(C)和子哈希值H(E),所述哈希值H(n-1)为所述步骤202中获取的区块block n-1的哈希值,存储在block n-1中。
步骤302,将所述子哈希值集合和区块哈希值确定为所述待测区块的所述检测路径。
具体地,在图3中,待测区块block n的检测路径为(H(n-1),H(D),H(C),H(E))。
进一步地,如果所述数据库中任一待测区块的所述检测路径丢失,则查找所述检测链,获取所述待测区块对应的标准安全点,扫描所述标准安全点中的标准默克尔树,重新获取丢失的所述检测路径。
具体地,本申请中之所以将检测路径和默克尔树分开存储,是为了在进行检测的时候,至需要从所述数据库中拿到需要的检测路径,而不用每次都对树结构进行搜索,进一步提高了数据完整性检测的效率。
表1为标准安全点范式:
表1 标准安全点范式
进一步地,所述标准安全点根据所述待测业务链、所述目标区块组和所述标准默克尔树,根据表1的数据范式构建:
将所述目标区块组所在的业务链名称确定为业务链唯一标识;
生成所述目标区块组的ID,将所述ID确定为安全点唯一标识;所述ID可以通过雪花算法生成;
将所述目标区块组内第一个区块的高度值确定为安全点起点区块高度;
将所述目标区块组内最后一个区块的高度值确定为安全点终点区块高度;
将所述标准默克尔树确定为存在性凭证;
将所述业务链唯一标识、所述安全点唯一标识、所述安全点起点区块高度、所述安全点终点区块高度和所述存在性凭证共同确定为所述标准安全点。
具体地,如图3和表1所示,safeNode为所述标准安全点,nodeId为所述业务链唯一标识,channelId为所述安全点唯一标识,existProof为所述存在性凭证,fromHeigh为所述安全点起点区块高度,toHeight为所述安全点终点区块高度。
步骤103,在预先确定的检测链上部署检测智能合约,所述检测智能合约为根据所述当前区块哈希值和所述检测路径,生成所述待测区块对应的当前根哈希值,以及,生成所述当前根哈希值与所述标准根哈希值的比较结果,所述检测链用于锚定数据未被篡改过的多个标准安全点。所述检测链锚定多个标准安全点为检测之前的准备工作,一般情况下针对一条业务链只会进行一次。
具体地,所述根据所述当前区块哈希值和所述检测路径,生成所述待测区块对应的当前根哈希值,包括:
按照构建所述标准默克尔树时,所述待测区块的区块哈希值和所述检测路径生成所述标准根哈希值的顺序,利用所述当前区块哈希值和所述检测路径生成所述当前根哈希值。
步骤104,根据所述待测业务链构造检测交易,所述检测交易包括检测智能合约驱动指令,所述检测智能合约驱动指令用于驱动所述检测链执行所述检测智能合约;
步骤105,将所述检测交易发送至所述检测链,以使所述检测链执行所述检测智能合约,并获取所述检测交易的交易哈希值;
步骤106,根据所述交易哈希值,获取所述检测链生成的所述当前根哈希值与标准根哈希值的比较结果;
步骤107,根据所述比较结果,生成本地区块数据完整性检测结果,所述本地区块数据完整性检测结果用于指示所述待测区块的数据是否被篡改。
具体地,所述根据所述比较结果,生成本地区块数据完整性检测结果,包括:
如果所述比较结果为相同,则生成所述待测区块的数据未被篡改的检测结果;
如果所述比较结果为不相同,则生成所述待测区块的数据已被篡改的检测结果。
所述所述待测区块的检测结果可以按自定义数据结构输出。
为执行本申请第一实施例提供的基于双层链的本地节点区块数据完整性检测方法,本申请第二实施例提供了基于双层链的本地节点区块数据完整性检测系统所述检测系统包括:
当前区块哈希值获取模块,用于获取所述待测区块的当前区块哈希值;
检测路径获取模块,用于根据所述当前区块哈希值,从预先搭建的数据库中获取所述待测区块的检测路径,所述检测路径从预先构建的所述待测区块对应的标准安全点中的标准默克尔树中生成并预存至所述数据库中,所述标准默克尔树是根据各个候选节点中存储的目标区块组中各个区块的区块哈希值构建的,所述标准安全点是根据所述待测业务链、所述目标区块组和所述标准默克尔树构建的,所述目标区块组为对所述待测业务链中所有区块进行分组后得到的包含所述待测区块的区块组,所述标准默克尔树的根哈希值为标准根哈希值;
检测智能合约部署模块,用于在预先确定的检测链上部署检测智能合约,所述检测智能合约为根据所述当前区块哈希值和所述检测路径,生成所述待测区块对应的当前根哈希值,以及,生成所述当前根哈希值与所述标准根哈希值的比较结果,所述检测链用于锚定数据未被篡改过的多个标准安全点;
检测交易构造模块,用于根据所述待测业务链构造检测交易,所述检测交易包括检测智能合约驱动指令,所述检测智能合约驱动指令用于驱动所述检测链执行所述检测智能合约;
检测智能合约驱动模块,用于将所述检测交易发送至所述检测链,以使所述检测链执行所述检测智能合约,并获取所述检测交易的交易哈希值;
比较结果获取模块,用于根据所述交易哈希值,获取所述检测链生成的所述当前根哈希值与标准根哈希值的比较结果;
检测结果生成模块,用于根据所述比较结果,生成本地区块数据完整性检测结果,所述本地区块数据完整性检测结果用于指示所述待测区块的数据是否被篡改。
本申请提供基于双层链的本地节点区块数据完整性检测方法及系统,检测方法应用于检测装置,检测装置用于检测待测节点中存储的待测业务链中任一待测区块的数据是否被篡改,其中,待测业务链的数据还存储于多个候选节点中,检测方法包括:获取待测区块的当前区块哈希值;从预先搭建的数据库中获取所述待测区块的检测路径;在预先确定的检测链上部署检测智能合约;根据待测业务链构造检测交易;将检测交易发送至检测链,以使检测链执行检测智能合约;智能合约读取检测链上的标准根哈希值并与经过检测路径计算出来的检测根哈希值进行比较;根据比较结果,指示待测区块数据是否被篡改。如此,仅通过获取待测区块的当前区块哈希值和检测路径就可以完成待测区块的数据完整性检测,提高了本地区块数据完整性检测的检测效率。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段;说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变;本发明的范围仅由所附的权利要求来限制。