基于区块链的数据完整性验证方法、设备和存储介质与流程

文档序号:18526698发布日期:2019-08-24 10:19阅读:210来源:国知局
基于区块链的数据完整性验证方法、设备和存储介质与流程
本发明涉及数据处理,更为具体而言,涉及一种基于区块链的数据完整性验证方法、设备和存储介质。
背景技术
:伴随着信息通信和处理技术的高速发展,进入了云计算时代。网络会计、办公自动化、电子支付系统平台等使数字资产的应用愈加广泛。数字资产是具有开创性的、依托磁性介质而存在的一连串“0”和“1”的代码。它们虽是数字化商品,却体现出资产的性质,因此称为数字资产。数字资产的出现,颠覆了传统资产的观念,使得企业结构和个人能够方便快捷地通过网络享受到数字化时代的服务,极大地减少了资产所占用的空间,节约了大量人力物力。数字资产在带给人们便捷的同时也带来了一些安全问题。原来局限在自己统辖范围内的财产现在暴露在互联网上,并且这些资源和数据放到了第三方云存储提供商所在的共享公共网络上,不再被本地用户拥有。用户通过网络支配自己的财产,有可能在存储和通信过程中遭到未授权的第三方篡改。怎样让用户确信他们的数据完整的存放在云端以及保证拒绝第三方访问是数字资产保护必须要解决的一个问题。技术实现要素:本申请提供了一种基于区块链的数据完整性验证方法、设备和存储介质,基于编号寻径的merkle树数据完整性检测算法来求解节点的数据完整性证明信息,能够提高认证路径求解的效率,降低求解的运算量;目前用户缺乏行之有效的存储私钥的方法,将用户的数字签名存储到云端区块链上,实现了对用户私钥的无信任保护。本申请实施方式的第一方面,提供一种基于区块链的数据完整性验证方法,包括:用户终端对数字资产文件进行加密,将当前时间保存到加密后的数字资产文件的预定位置,然后将修改后的数字资产文件进行对称加密,得到密文,将所述数字资产文件的预定位置的时间信息和所述数字资产文件的文件名称作为所述数字资产文件的标签保存;将所述密文分割为九个加密文件块,将所述九个加密文件块根据预定算法生成merkle树的叶子节点,生成叶子节点的认证路径,将merkle树的根节点root的哈希值发送到服务器端作为数据段值保存到所述服务器端的区块链单元;将修改后的数字资产文件发送到所述服务器端,以便所述服务器端读取所述修改后的数字资产文件的所述预定位置中的时间信息,以从所述预定位置中获取的时间信息和所述修改后的数字资产文件的文件名称作为标签存储到所述服务器端的数据库;将本地保存的所述merkle树的叶子节点中的第一叶子节点信息和所述数字资产文件的标签发送到所述服务器端,以便所述服务器端根据所述标签检索所述数据库得到对应的数字资产文件,将检索得到的数字资产文件根据所述预定算法生成merkle树的叶子节点,并根据所述第一叶子节点信息在所述服务器端生成的merkle树的叶子节点中确定对应的叶子节点的认证路径;接收所述服务器端返回的对应的叶子节点的认证路径,根据所述对应的叶子节点的认证路径与从所述区块链单元检索的数据段值确定所述数字资产文件的完整性。在一些实施方式中,所述将所述九个加密文件块根据预定算法生成merkle树的叶子节点,生成叶子节点的认证路径包括:a,记录merkle树叶子节点的总数目和要求解认证路径的叶子节点的编号;b,初始化叶子节点编号k,令k等于要求解认证路径的叶子节点的编号;初始化记录merkle树中每一层的开始的编号startindex,令startindex=0;初始化节点总数count,令其等于merkle树中所有叶子节点的数目;初始化存储叶子节点认证路径的数组certifypath,令为空;c,判断节点总数count是否为1,若是,结束寻径,保存叶子节点认证路径的数组certifypath;d,判断节点编号k是否为奇数,若是,进一步判断节点编号k是否等于节点总数count,若是,返回步骤c,否则将编号startindex+k+1存储到叶子节点认证路径的数组certifypath中,令k=k/2+1;startindex=startindex+count;count=count/2+(count)mod2,返回步骤c;e,如果k不是奇数,将编号startindex+k-1存储到叶子节点认证路径的数组certifypath中,令k=k/2;startindex=startindex+count;count=count/2+(count)mod2,返回步骤c。在一些实施方式中,所述根据所述对应的叶子节点的认证路径与从所述区块链单元检索的数据段值确定所述数字资产文件的完整性包括:将用户终端本地保存的所述数字资产文件的第一叶子节点与所述对应的叶子节点的认证路径进行哈希运算得到数字签名;确定所述数字签名与从所述区块链单元检索的数据段值是否相等,若相等,则确定从所述服务器端获取的数字资产文件完整,否则,确定从所述服务器获取的数字资产文件不完整。在一些实施方式中,所述服务器端的数据库所在的网络地址与所述区块链单元所在的网络地址不同。在一些实施方式中,所述用户终端对数字资产文件进行加密包括:采用高级加密标准aes算法对数字资产文件进行加密,保存所述aes算法的密钥。在一些实施方式中,所述方法还包括:记录各叶子节点的哈希值。在一些实施方式中,所述将用户终端本地保存的所述数字资产文件的第一叶子节点与所述对应的叶子节点的认证路径进行哈希运算得到数字签名包括:将本地保存的所述数字资产文件的第一叶子节点与所述对应的叶子节点的认证路径进行哈希运算hash(hash(hash(hash(n||h)||i)||e)||c)得到数字签名,其中,n为第一叶子节点的编号,h,i,e,c为所述对应的叶子节点的哈希值。在一些实施方式中,所述数字资产文件包括mhtml文件。本申请实施方式的第二方面,提供一种终端设备,包括存储器和处理器,其中,所述存储器,存储有计算机指令;所述处理器,配置为运行所述计算机指令以使所述终端设备执行上述第一方面所述的方法。本申请实施方式的第三方面,提供一种机器可读的非易失性存储介质,所述存储介质存储有计算机指令,所述计算机指令被处理器执行时实现上述第一方面所述的方法。附图说明图1示出了根据本发明实施方式的基于区块链的数据完整性验证方法的流程示意图。图2示出了根据本发明实施方式的merkle树的架构示意图。图3示出了根据本发明实施方式的终端设备的架构示意图。具体实施方式以下结合附图和具体实施方式对本发明的各个方面进行详细阐述。其中,众所周知的模块、单元及其相互之间的连接、链接、通信或操作没有示出或未作详细说明。并且,所描述的特征、架构或功能可在一个或一个以上实施方式中以任何方式组合。本领域技术人员应当理解,下述的各种实施方式只用于举例说明,而非用于限制本发明的保护范围。还可以容易理解,本文所述和附图所示的各实施方式中的模块或单元或处理方式可以按各种不同配置进行组合和设计。参见图1,图1示出了根据本发明实施方式的基于区块链的数据完整性验证方法的流程示意图,该方法可包括:步骤s101、步骤s102、步骤s103、步骤s104和步骤s105。下面结合具体的实施例对上述步骤进行说明。步骤s101,用户终端对数字资产文件进行加密,将当前时间保存到加密后的数字资产文件的预定位置,然后将修改后的数字资产文件进行对称加密,得到密文,将所述数字资产文件的预定位置的时间信息和所述数字资产文件的文件名称作为所述数字资产文件的标签保存。本申请的实施方式中,用户终端可包括诸如电脑、手机、平板电脑等之类的终端设备。这些终端设备配备有处理器和存储器,能够对各种类型和格式的数据进行各种处理,例如,加密、修改、查询等。除此之外,这些终端设备还配置有数据库,可以将数据存储到数据库,按照数据的标签检索数据库,查找到对应的数据。在一些实施方式中,数字资产文件可以是mhtml(mimeencapsulationofaggregatehtmldocuments),又称单一档案网页或网页封存档案。在其他实施方式中,数字资产文件可以是其他格式的文件,本申请实施方式对此不做限定。为了确保数据传输的安全性,用户终端可以采用高级加密标准aes(advancedencryptionstandard)对数字资产文件进行加密,在用户终端保存aes算法的密钥。在对数字资产文件进行aes加密之后,对加密后的数字资产文件加盖时间戳。在一种具体的实施方式中,将用户终端的当前时间保存到加密后的数字资产文件的预定位置,例如,可以放在数字资产文件的第一行。在其他实施方式中,时间信息可以保存在数字资产文件的其他位置。保存到预定位置的时间信息可以作为该数字资产文件的时间戳。在一些实施方式中,覆盖后时间戳修改后的数字资产文件可以进行加密,例如,可以采用对称加密算法,得到密文。需要说明的是,本领域技术人员可以采用已知的任何一种对称加密算法,本申请实施方式对此不在限定。在用户终端上,数字资产文件的预定位置的时间信息和该数字资产文件的文件名称可以作为该数字资产文件的标签保存,例如,可以保存到该终端的数据库。通过该标签可以在数据库中查询到该数字资产文件。步骤s102,将所述密文分割为九个加密文件块,将所述九个加密文件块根据预定算法生成merkle树的叶子节点,生成叶子节点的认证路径,将merkle树的根root值发送到服务器端作为数据段值保存到所述服务器端的区块链单元。在本申请的实施方式中,将对称加密后的密文分割为9个加密文件块,这些加密文件块的大小相同。这些加密文件块根据预定算法生成merkle树的叶子节点,生成叶子节点的认证路径。生成merkle树的预定算法可以是本领域技术人员已知的任何一种merkle树的生成算法,本申请实施方式对此不做限定。merkle树(又叫哈希树)是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。在一种具体的实施例中,merkle树的结构如图2所示。在一些实施方式中,本申请提供了一种采用编号寻径法生成认证路径。在对编号寻径法进行描述之前,对该方法中涉及的概念进行简要描述。求解认证路径的叶子节点编号:用k来表示要求解的叶子节点的编号,其中,k为整数;merkle树中每一层开始的编号:用startindex来表示merkle树中每一层中第一个节点的编号;节点总数:用count来表示整个merkle树中节点的总数目;遍历路径:用数据结构为数组的变量certifypath来保存认证路径上的节点编号。在终端设备的采用计算机程序实现时,编号寻径法确定叶子节点的认证路径的方法可包括:a,记录merkle树叶子节点的总数目和要求解认证路径的叶子节点的编号,在本实施方式中,叶子节点的总数目为9个,叶子节点的编号可以为1到9。b,初始化叶子节点编号k,令k等于要求解认证路径的叶子节点的编号;初始化记录merkle树中每一层的开始的编号startindex,令startindex=0;初始化节点总数count,令其等于merkle树中所有叶子节点的数目,在本实施例中,叶子节点的数目为9;初始化存储叶子节点认证路径的数组certifypath,令为空;c,判断节点总数count是否为1,若是,结束寻径,保存叶子节点认证路径的数组certifypath;d,判断节点编号k是否为奇数,若是,进一步判断节点编号k是否等于节点总数count,若是,返回步骤c,否则将编号startindex+k+1存储到叶子节点认证路径的数组certifypath中,令k=k/2+1;startindex=startindex+count;count=count/2+(count)mod2,返回步骤c;e,如果k不是奇数,将编号startindex+k-1存储到叶子节点认证路径的数组certifypath中,令k=k/2;startindex=startindex+count;count=count/2+(count)mod2,返回步骤c。在一种具体的实施例中,编号寻径法的方法可包括:第一步,记录merkle树叶子节点的总数目和要求解认证路径的叶子节点的编号;第二步,初始化叶子节点编号k,令k等于要求解认证路径的叶子节点的编号;初始化记录merkle树中每一层的开始的编号startindex,令startindex=0;初始化节点总数count,令其等于merkle树中所有叶子节点的数目;初始化存储叶子节点认证路径的数组certifypath,令为空;第三步,如果count=1,结束寻径,保存certifypath;第四步,如果k是奇数,若k=count,返回第三步,否则将编号startindex+k+1存储到certifypath中,令k=k/2+1;startindex=startindex+count;count=count/2+(count)mod2;返回第三步;第五步,如果k是偶数,将编号startindex+k-1存储到certifypath中,令k=k/2;startindex=startindex+count;count=count/2+(count)mod2;返回第三步。在一种具体的实施例中,merkle树的9个叶子节点和对应的叶子节点的认证路径上的节点编号,如表1所示。表1的左侧一栏为叶子节点的编号,表1的右侧一栏为叶子节点的认证路径上的节点编号,即叶子节点哈希值,上述的数组certifypath中存储的编号值。在用户终端上,记录各个叶子节点的哈希值,与对应的叶子节点编号关联保存在终端的数据库。表1各叶子节点编号认证路径上节点编号12,11,16,1921,11,16,1934,10,16,1943,10,16,1956,13,15,1965,13,15,1978,12,15,1987,12,15,19918需要说明的是,上述的编号寻径法可以适用于满二叉树或类满二叉树(缺一个叶子节点)。本发明实施方式提供的编号寻径方法的算法复杂度为o(log2n),与其他的认证路径求解方式相比,具有较低的算法复杂度,因而能够具有较高的运算效率。在本申请的另外一些实施方式中,可以采用双栈寻径方法,该方法可以适用于非完全二叉树。下面对双栈寻径法中涉及的一些用语进行简要说明。遍历路径:在树的遍历过程中利用栈的性质保存访问过的节点,用stacknode表示;认证路径:在树的遍历过程中可以利用栈或者数组来保存认证路径上的节点,用变量stackauth表示;树的节点:树中用n_(h,j)表示纵向从下到上第h层横向从左向右第j的节点。节点键值:节点利用键值使二叉哈希树变成一颗有序二叉哈希树,即所有叶节点按键值大小从左向右排序。中间节点的键值则取自它左右孩子键值的中间值。节点状态:表示二叉哈希树节点的当前状态用flag表示,状态为0,表示该节点未被访问,否则状态为1。节点层数:二叉哈希树节点的当前层数。第一个叶节点的遍历路径节点和认证节点会相应的压到对应栈中即stacknode和stackauth中。以下说明的是如何通过双栈存储的节点以及节点之间的关系求解其他叶节点的认证路径。首先,判断遍历栈stacknode栈顶节点是叶节点还是中间节点。如果是中间节点,再判断其标志位flag。如果flag,这意味它的孩子未被访问,其左右孩子应压入对应遍历栈stacknode和认证路径栈stackauth中。如果flag=1,意味它的孩子已经被访问并且其左右孩子己经压入对应的栈中,要做的操作是根据两栈栈顶节点之间的关系或者将两栈栈顶节点交换或者两栈栈顶均弹出。如果是叶子节点,认证路径栈中的节点全部输出,因为这些节点为当前叶节点的认证路径。之后需要继续判断该叶节点是否有右兄弟。如果当前叶节点的右兄弟是认证路径栈的栈顶节点,两栈栈顶节点交换,否则两栈栈顶节点均弹出。算法具体可包括如下步骤:如果遍历栈的栈顶节点是中间节点;如果遍历栈栈顶节点的flag==0,意味着遍历栈栈顶节点的孩子节点还未访问,应将其左右孩子压入对应的遍历栈和认证路径栈。之后将其节点的flag设置成1,标识该节点以被访问(情况1)。如果遍历栈栈顶节点的flag==1,则意味其孩子己经压入对应的栈中,此时需根据两栈的栈顶节点之间的关系进行具体操作.如果遍历栈栈顶节点的右兄弟是认证栈的栈顶节点,则两栈的栈顶节点交换(情况2)。如果遍历栈栈顶节点的右兄弟不是认证栈的栈顶节点,则两栈栈顶节点均弹出(情况3)。如果遍历栈的栈顶节点是叶子节点,认证栈中所有节点即为当前节点的认证路径,输出认证栈中所有节点即可。如果遍历栈的栈顶节点没有右兄弟,则两栈栈顶节点均弹出。其实是先序遍历中向上回退(情况4)。如果遍历栈栈顶节点的右兄弟是认证栈的栈顶节点,则两栈的栈顶节点交换(情况5)。在一些实施方式中,merkle树的根节点root的哈希值发送到服务器端,作为数据段值保存到服务器端的区块链单元。需要说明的是,本申请实施方式中的区块链单元的网络地址(例如,ip地址)与服务器端的数据库所在的网络地址不同。也就是说,将用户终端的merkle树的根节点的哈希值保存到云端的单独的区块链单元,不与数字资产文件一起存储,对用户私钥的实现无信任保护。目前用户终端一侧没有切实有效的私钥存储方法,将用户的哈希树的根节点的哈希值存储到云端区块链单元,实现了对用户私钥的无信任保护。步骤s103,将修改后的数字资产文件发送到所述服务器端,以便所述服务器端读取所述修改后的数字资产文件的所述预定位置中的时间信息,以从所述预定位置中获取的时间信息和所述修改后的数字资产文件的文件名称作为标签存储到所述服务器端的数据库。在本申请的实施方式中,用户终端一侧的数据拥有者(即数字资产文件的拥有者)修改后的数字资产文件发送到服务器端,服务器接收用户终端发送的修改后数字资产文件,并且读取该修改后数字资产文件预定位置的时间信息,即时间戳,并且将时间戳和文件名称作为标签存储到服务器端的数据库。步骤s104,将本地保存的所述merkle树的叶子节点中的第一叶子节点信息和所述数字资产文件的标签发送到所述服务器端,以便所述服务器端根据所述标签检索所述数据库得到对应的数字资产文件,将检索得到的数字资产文件根据所述预定算法生成merkle树的叶子节点,并根据所述第一叶子节点信息在所述服务器端生成的merkle树的叶子节点中确定对应的叶子节点的认证路径。在本申请的实施方式中,用户终端将本地保存的所述merkle树的叶子节点中的第一叶子节点信息(例如,编号信息)和所述数字资产文件的标签发送到所述服务器端,其中,第一叶子节点可以是指本地生成的merkle树的任意一个需要验证的叶子节点。本文中使用第一叶子节点仅是为了描述方便。在一些实施方式中,实施步骤s104的用户终端可以是与上述步骤中描述的拥有数字资产文件的用户终端是同一用户终端。在另外一些实施方式中,发出验证的用户终端和拥有数字资产文件的用户终端不是同一用户终端,而是数据拥有者之外的另外的需要验证数字资产文件的用户终端。服务器端收到用户终端发送的叶子节点信息和数字资产文件的标签,该标签包括数字资产文件的时间戳和文件名称,根据该标签在数据库中检索,得到对应的数字资产文件。然后,将检索得到的数字资产文件根据与用户终端一侧相同的算法生成merkle树的叶子节点。根据上面描述的用户终端一侧的merkle树生成算法可知,生成9个叶子节点。如果服务器端或云端存储的数字资产文件没有被篡改,那么在服务器端生成的9个叶子节点,与用户终端一侧生成的9个叶子节点是相同的。在服务器端生成的9个叶子节点中,查找与第一叶子节点信息(例如,编号)对应的叶子节点,例如,第一叶子节点为编号为1的叶子节点,那么在服务器端生成的叶子节点中查找编号为1的叶子节点。将在服务器端查到到的对应的叶子节点的认证路径返回给用户终端。步骤s105,接收所述服务器端返回的对应的叶子节点的认证路径,根据所述对应的叶子节点的认证路径与从所述区块链单元检索的数据段值确定所述数字资产文件的完整性。在一些实施方式中,发出验证请求的用户终端接收服务器端返回的对应的叶子节点的认证路径,然后将用户终端保存的该数字资产文件的第一叶子节点和服务器端返回的对应的叶子节点的认证路径进行哈希运算得到数字签名。在一种具体的实施例中,将用户终端本地保存的所述数字资产文件的第一叶子节点与所述对应的叶子节点的认证路径进行哈希运算得到数字签名包括:将本地保存的所述数字资产文件的叶子节点与所述对应的叶子节点的认证路径进行hash(hash(hash(hash(1||2)||11)||16)||19)哈希运算得到数字签名,其中,1为叶子节点的编号,2、11、16和19为叶子节点的哈希值。然后,向区块链单元发送请求,检索区块链的数据段区域,获取在先存储的merkle树的根节点的哈希值。确定所得到的数字签名与从所述区块链单元检索的某一数据段值是否相等,若相等,则确定从所述服务器端获取的数字资产文件完整,也就是说,服务器端的数字资产文件没有被篡改。否则,确定从所述服务器获取的数字资产文件不完整,服务器端的数字资产文件可能被篡改。在一种具体的实施例中,用户终端一侧对数字资产文件的验证可包括下述步骤:第一步,用户终端将本地的merkle树的叶子节点编号以及资产信息文件的标签值发送到云端,并记录进行验证的叶子节点,准备接收来自云端返回的认证路径,例如用户终端发送的是merkle树中编号为1的叶子节点;第二步,云端服务器接收到来自用户终端的叶子节点和标签值,以标签值为索引在数据库中检索资产信息,得到对应的数字资产文件;将对应的数字资产文件按固定大小分割后生成merkle树,并保存各叶子节点的认证路径;以来自客户端的叶子节点(编号为1)为索引,检索认证路径,将检索到的编号为1的叶子节点的认证路径发送到用户终端;第三步、用户终端收到来自云端的反馈,即服务器端一侧的编号为1的叶子节点的认证路径,将本地保存的叶子节点的编号与来自服务器端的认证路径信息进行类似hash(hash(hash(hash(1||2)||11)||16)||19)的运算得到数字签名;第四步、检索云端区块链单元各区块的数据段区域,如果数字签名与某数据段存储的值相等,则得到可靠结果,云端数据库中存储的数据完整且未被篡改;若数字签名与所有区块数据段存储的信息均不匹配,则说明云端存储数据不完整或已被篡改。本申请实施方式还提供一种终端设备,其可以是个人电脑、智能手机或者具有数据处理功能的其他终端设备。如图3所示,终端设备300可包括存储器301和处理器302,其中,所述存储器301,存储有计算机指令;所述处理器302,配置为运行所述计算机指令以使所述终端设备执行上述第一方面所述的方法。本申请实施方式还提供一种系统,该系统可包括服务器端和用户终端,其中,服务器端可包括云服务提供单元和云端区块链单元,云服务器提供单元提供上述的服务器端的相关的数据处理,例如,数字资产文件的存储和检索等,接收用户终端发起的验证请求,向用户终端返回对应叶子节点的认证路径,具体请参见上面的相关描述,在此不再赘述。区块链单元提供用户终端的私钥的存储操作等,例如,接收用户终端的数字签名检索请求,向用户终端返回数字签名,即根节点的哈希值,以便对服务器端的数字资产文件进行验证,具体请参见上面的相关描述,在此不再赘述。本申请实施方式的第三方面,提供一种机器可读的非易失性存储介质,所述存储介质存储有计算机指令,所述计算机指令被处理器执行时实现上述用户终端一侧所述的方法,以及实现上述的服务器端一侧所述的方法,以及区块链单元一侧所述的方法。通过以上实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件结合硬件平台的方式来实现。基于这样的理解,本发明的技术方案对
背景技术
做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,智能手机或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。本发明说明书中使用的术语和措辞仅仅为了举例说明,并不意味构成限定。本领域技术人员应当理解,在不脱离所公开的实施方式的基本原理的前提下,对上述实施方式中的各细节可进行各种变化。因此,本发明的范围只由权利要求确定,在权利要求中,除非另有说明,所有的术语应按最宽泛合理的意思进行理解。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1