一种数据持有证明方法、装置及可读存储介质与流程

文档序号:15685141发布日期:2018-10-16 20:58阅读:158来源:国知局

本发明涉及互联网技术领域,尤其涉及一种数据持有证明方法、装置及可读存储介质。



背景技术:

信息化时代,数据存储至关重要。目前,数据存储方式主要分为本地存储和云存储。云存储是一个中心化服务,服务方掌控规则和主导权,一旦服务方停止服务,存储的数据即不可获得。另外,云存储服务都是通过构建专业的数据中心提供服务,成本极其高昂,在商业领域,公司大数据光存储费用就是一笔不小的开支。基于此,有研究人员提出了一种基于区块链技术的共享存储网络。区块链以及共享经济都是当下的热点和引领未来的趋势。随着信息量的增加,越来越多的用户具有数据存储需求,而也有很多用户具有闲置的存储空间。利于区块链的技术构建好激励机制,就可以将这些闲置存储空间共享出去,为具有存储需求的用户提供存储服务,从而获取对应的收益。这样既可以满足迅速增长的数据存储需求,又能发挥目前闲置存储空间的价值。

但是,由于区块链系统中的节点大多是不可信的个人矿工,这些个人矿工作为存储节点为用户存储数据,为了能更多地获取收益,可能会存在工作量作弊问题。



技术实现要素:

鉴于上述问题,本发明提出了一种数据持有证明方法、装置及可读存储介质,以解决区块链系统中的存储节点可能会存在工作量作弊的问题。

第一方面,本发明实施例提供了一种数据持有证明方法,所述方法包括:第一节点接收第二节点发送的对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,所述第二节点中预先保存有所述目标文件对应的校验值;所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片;所述第一节点根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据;所述第一节点将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

进一步地,所述目标文件的校验值为所述目标文件的根哈希值,所述根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据,包括:基于所述预设的单向函数构建所述目标文件的默克尔树;获取所述目标分片对应的默克尔树路径;基于所述目标分片以及所述默克尔树路径,得到所述证明数据。

进一步地,所述基于所述目标分片以及所述默克尔树路径,得到所述证明数据包括:将所述目标分片以及所述目标分片的默克尔树路径,作为所述证明数据。

进一步地,所述单向函数为同态哈希函数,所述基于所述目标分片以及所述默克尔树路径,得到所述证明数据,包括:生成第二随机数,根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据;通过所述同态哈希函数获取所述第二随机数的哈希值;将所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述特征数据,作为所述证明数据。

进一步地,所述同态哈希函数为基于椭圆曲线的同态哈希函数,所述根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据包括:将所述第二随机数与所述目标分片相加,得到所述不同于所述目标分片的特征数据。

进一步地,所述基于所述目标分片以及所述默克尔树路径,得到所述证明数据包括:根据所述目标分片以及预设的zk-snarks算法,生成所述目标分片的零知识证明;将所述目标分片的默克尔树路径以及所述目标分片的零知识证明,作为所述证明数据。

进一步地,所述根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片包括:根据所述特征值查找对应的目标文件;根据所述第一随机数从所查找到的目标文件中查找对应的分片,将该分片作为目标分片。

进一步地,上述数据持有证明方法应用于区块链系统,所述第一节点和所述第二节点均为所述区块链系统中的节点。

第二方面,本发明实施例还提供了一种数据持有证明方法,所述方法包括:第二节点向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述第二节点;所述第二节点根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片和所述目标分片对应的默克尔树路径。所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:通过所述单向函数得到所述证明数据中的目标分片的哈希值,验证所得到的哈希值与所述目标分片对应的默克尔树路径中该目标分片的哈希值是否一致;当验证结果为一致时,根据所述目标分片对应的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件对应的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述目标分片的特征数据。所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:通过所述单向函数计算证明数据中所包括的特征数据的哈希值;根据与所述单向函数对应的预设规则,判断所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值是否匹配;若匹配,则根据证明数据中包括的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径以及所述目标分片的零知识证明。所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:验证所述证明数据中的所述零知识证明;当验证通过时,根据证明数据中的所述默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

第三方面,本发明实施例提供了一种数据持有证明装置,应用于第一节点,所述第一节点中分片存储有所述目标文件。所述装置包括:接收模块,用于接收第二节点发送的对应于所述目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第二节点中预先保存有所述目标文件对应的校验值;查找模块,用于根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片;证明数据获取模块,用于根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据;第一发送模块,用于将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

进一步地,所述目标文件的校验值为所述目标文件的根哈希值,所述证明数据获取模块包括:构建子模块,用于基于所述预设的单向函数构建所述目标文件的默克尔树;第一获取子模块,用于获取所述目标分片对应的默克尔树路径;第二获取子模块,用于基于所述目标分片以及所述默克尔树路径,得到所述证明数据。

进一步地,所述第二获取子模块具体用于:将所述目标分片以及所述目标分片的默克尔树路径,作为所述证明数据。

进一步地,所述单向函数为同态哈希函数,所述第二获取子模块具体用于:生成第二随机数,根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据;通过所述同态哈希函数获取所述第二随机数的哈希值;将所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述特征数据,作为所述证明数据。

进一步地,所述同态哈希函数为基于椭圆曲线的同态哈希函数,所述第二获取子模块具体用于:将所述第二随机数与所述目标分片相加,得到所述不同于所述目标分片的特征数据。

进一步地,所述第二获取子模块具体用于:根据所述目标分片以及预设的zk-snarks算法,生成所述目标分片的零知识证明;将所述目标分片的默克尔树路径以及所述目标分片的零知识证明,作为所述证明数据。

进一步地,所述查找模块具体用于:根据所述特征值查找对应的目标文件;根据所述第一随机数从所查找到的目标文件中查找对应的分片,将该分片作为目标分片。

进一步地,上述数据持有证明装置应用于区块链系统,所述第一节点和所述第二节点均为所述区块链系统中的节点。

第四方面,本发明实施例还提供了一种数据持有证明装置,应用于第二节点。所述装置包括:第二发送模块,用于向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述第二节点;验证模块,用于根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片和所述目标分片对应的默克尔树路径,所述验证模块具体用于:通过所述单向函数得到所述证明数据中的目标分片的哈希值,验证所得到的哈希值与所述目标分片对应的默克尔树路径中该目标分片的哈希值是否一致;当验证结果为一致时,根据所述目标分片对应的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件对应的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述目标分片的特征数据,所述验证模块具体用于:通过所述单向函数计算证明数据中所包括的特征数据的哈希值;根据与所述单向函数对应的预设规则,判断所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值是否匹配;若匹配,则根据证明数据中包括的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径以及所述目标分片的零知识证明,所述验证模块具体用于:验证所述证明数据中的所述零知识证明;当验证通过时,根据证明数据中的所述默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

第五方面,本发明实施例还提供了一种数据持有证明装置,应用于第一节点,所述装置包括处理器和存储器,所述存储器耦接到所述处理器,所述存储器用于存储指令,并分片存储有目标文件。当所述指令由所述处理器执行时使所述装置执行以下操作:接收第二节点发送的对应于所述目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第二节点中预先保存有所述目标文件对应的校验值;根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片;根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据;将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

第六方面,本发明实施例还提供了一种数据持有证明装置,应用于第二节点,所述装置包括处理器和存储器,所述存储器耦接到所述处理器,所述存储器存储指令。当所述指令由所述处理器执行时使所述装置执行以下操作:向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述数据持有证明装置;根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

第七方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述第一方面提供的数据持有证明方法所述的步骤,或者,实现上述第二方面提供的数据持有证明方法所述的步骤。

本发明提供的技术方案中,第一节点中分片存储有目标文件,第二节点中预先保存有该目标文件对应的校验值,当有第二节点发起挑战时,第一节点接收第二节点发送的对应于该目标文件的挑战数据,该挑战数据包括该目标文件的特征值和满足预设条件的第一随机数,然后,根据特征值以及第一随机数查找该目标文件中对应的分片,将所查找到的分片作为目标分片,进而,根据目标分片以及预设的单向函数,得到与目标文件的校验值对应的证明数据,并将该证明数据发送给第二节点,以作为第一节点的工作量证明。这样第二节点就能够根据该证明数据以及目标文件的校验值,验证第一节点是否持有目标文件,从而防止区块链系统中的存储节点存在工作量作弊的问题。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了本发明第一实施例提供的一种数据持有证明方法的流程图;

图2示出了本发明第一实施例提供的一种默克尔树的示意图;

图3示出了本发明第二实施例提供的一种数据持有证明方法的流程图;

图4示出了本发明第三实施例提供的一种数据持有证明装置的功能模块框图;

图5示出了本发明第四实施例提供的一种数据持有证明装置的功能模块框图;

图6示出了本发明实施例提供的一种终端设备的模块框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

在基于区块链技术的分布式存储系统中,例如,在基于联盟链的分布式存储系统中,一些节点具有闲置的存储空间,可以利用这些闲置的存储空间为其他具有存储需求的用户提供存储服务,即成为存储节点,从而获得一定的利益。例如,某用户发布一个文件存储需求,通过区块链全网广播,具有闲置存储空间的节点监听到后就可以接受这个存储任务,存储用户的文件,并通过上报工作量领取相应的收益。但是,区块链系统中的节点大多为不可信的个人矿工,将具有闲置存储空间的个人矿工作为存储节点,为了获取更多的收益,可能会存在存储节点工作量作弊的问题。鉴于此,本发明实施例提供了一种数据持有证明方法,以验证存储节点确实保存了用户所存储的数据,即证明存储节点的工作量,从而避免存储节点为了获得更多的收益出现作弊行为。

需要说明的是,本发明实施例提供了一种数据持有证明方法不仅可以应用于区块链系统中,也可以应用于其他不可信的存储服务提供者向用户或其他挑战者证明自己确实持有用户所存储的文件。在本文的以下实施例中,主要以区块链系统作为应用场景进行说明。也就是说,以下实施例中的第一节点和第二节点均为区块链系统中的节点。其中,区块链系统中具有存储需求的节点可以称为用户节点,而第一节点为区块链系统中能够给用户节点提供存储服务的节点,可以称为存储节点,而第二节点为区块链系统中用于验证第一节点持有即保存有用户所存储数据的节点,可以称为挑战节点。具体的,挑战节点可以是存储节点上所存储的目标文件的所有者,即该目标文件对应的用户节点,或者,也可以是该区块链系统中除当前存储节点以及该目标文件对应的用户节点以外的其他节点,又或者,也可以是该区块链系统中受存储节点和用户节点信任的服务器。

另外,本实施例中所述的第一节点、第二节点以及用户节点均是终端设备。

图1示出了本发明第一实施例提供的一种数据持有证明方法的方法流程图。如图1所示,本发明第一实施例提供的数据持有证明方法应用于第一节点,该方法可以包括:

步骤s101,第一节点接收第二节点发送的对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,所述第二节点中预先保存有所述目标文件对应的校验值;

本实施例中,目标文件为用户存储在第一节点中的文件。可以理解的是,在执行步骤s101之前,还包括数据存储步骤。该数据存储步骤具体包括:第一节点接收用户节点发送的目标文件,并对该目标文件进行分片存储。分片存储是指将完整的目标文件划分为多个分片,分别存储这些分片。其中,分片的具体数量可以根据需要预先设置。

用户将目标文件发送给第一节点存储后,就可以从本地终端即用户节点中删除目标文件,以节约存储空间。但在向第一节点发送待存储的目标文件之前,用户节点需要先获取该目标文件的特征值。作为一种实施方式,用户节点获取目标文件的特征值方式可以为:对目标文件进行分片处理;基于预设的哈希(hash)函数构建该目标文件的默克尔树,得到该目标文件的根哈希值(tophash,也即hashroot)将该根哈希值作为该目标文件的特征值。

当目标文件的特征值为该目标文件的根哈希值时,该特征值即为用于验证第一节点完整性的校验值。此时,当第二节点即挑战节点为区块链系统中除作为目标文件持有者的用户节点以外的其他节点时,用户节点需要将目标文件的特征值以及存储该目标文件的第一节点的身份标识发送给第二节点保存。本实施例中,第一节点的身份标识可以为第一节点的设备id。

另外,在本发明的其他实施例中,用户节点所获取的特征值也可以是目标文件的唯一身份标识,例如,可以是由发送该目标文件的用户节点的设备id、该目标文件的文件名称以及创建时间组成的标识。此时,用户节点在向第一节点发送待存储的目标文件时,需要将该特征值一并发送给第一节点,以便于第一节点能够根据该特征值查找到相应地目标文件。或者,用户节点所获取的特征值还可以是通过预设的hash函数直接得到的目标文件的hash值。此时,除了获取特征值以外,此时,用户节点还需要获取能够用于验证目标文件完整性的校验值。例如,可以对目标文件进行分片处理,通过预设的hash函数获取每个分片的hash值,作为各分片对应的校验值。

此时,当第二节点即挑战节点为区块链系统中除作为目标文件持有者的用户节点以外的其他节点时,用户节点需要将目标文件的特征值、各分片的校验值以及存储该目标文件的第一节点的身份标识均发送给第二节点保存。

还需要说明的是,本发明实施例中,当用户节点也需要对待存储的目标文件进行分片处理时,所采用的分片规则与第一节点对目标文件进行分片存储时的分片规则是相同的。其中,分片规则包括分片数量以及每个分片的数据量。

在第一节点存储目标文件期间,第二节点可以向第一节点发起挑战。第二节点发起挑战的步骤包括:第二节点生成满足预设条件的第一随机数;将第一随机数和目标文件的特征值作为挑战数据发送给第一节点。可以理解的是,由于第二节点中保存有存储目标文件的第一节点的身份标识,可以根据该身份标识发送挑战数据到对应的第一节点。

作为第一种实施方式,第一随机数可以是第二节点基于预设的第一随机数产生函数随机产生的正整数。

作为第二种实施方式,第一随机数也可以是第二节点基于预设的第二随机数产生函数随机产生预设数值范围内的正整数。其中,预设数值范围可以根据第一节点存储目标文件时,目标文件的分片数量决定。例如,目标文件为1g的文件,第一节点中存储的目标文件的每个分片大小为1k,此时分片数量为1048576个,此时,预设数值范围可以为1到1048576。

作为第三种实施方式,第一随机数还可以是第二节点根据预设的哈希函数计算的当前时间点前n个区块的哈希值,其中,n为正整数。当前时间点前n个区块是指区块链中与当前时间点最接近的n个区块。n可以根据具体需要设置。例如,n为1000时,第一随机数则为当前时间点的前1000个区块的哈希值,n为1时,第一随机数则为在当前时间点的前一个区块的哈希值。

还需要说明的是,本实施例中,第一随机数可以是一个,或者,也可以是两个以上,例如,2个、3个等,具体可以根据需要设置。当第一随机数为两个以上时,需要对每个第一随机数均执行以下步骤s102。

步骤s102,所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片;

具体的,根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片包括:根据所述特征值查找对应的目标文件;根据所述第一随机数从所查找到的目标文件中查找对应的分片。当然,所查找到的目标分片数量与第一随机数的数量相同。

可以理解的是,第一节点中可能存储有多个文件,因此需要根据特征值查找对应的目标文件。当特征值为目标文件的根哈希值时,第一节点将该特征值与所存储的各文件的根哈希值进行比较,找到根哈希值与该特征值一致的文件,即为目标文件。由于目标文件是分片存储的,基于第一随机数即可以找到目标文件的各分片中与该第一随机数对应的分片,该分片即为本次挑战的目标分片。具体的,第一随机数与目标文件的各分片的对应规则可以根据需要设置。例如,目标文件为1g的文件,第一节点中存储的目标文件的每个分片大小为1k,此时分片数量为1048576个,当第一随机数为200时,则对应的分片为目标文件的第200个分片。

步骤s103,所述第一节点根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据;

步骤s104,所述第一节点将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

可以理解的是,步骤s103中,得到与目标文件的校验值对应的证明数据是指第一节点生成的证明数据应当与目标文件的校验值类型相关,确保第二节点能够通过比较证明数据与目标文件的校验值验证第一节点是否持有目标文件。于本发明的一实施例中,当目标文件的校验值为目标文件的根哈希值时,上述步骤s103中,根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据,可以包括:基于预设的单向函数构建所述目标文件的默克尔树;获取所述目标分片对应的默克尔树路径;基于所述目标分片以及所述默克尔树路径,得到所述证明数据。其中,默克尔树路径为从默克尔树中所述目标分片对应的叶子节点到根节点即merkleroot的路径,包括从默克尔树中所述目标分片对应的叶子节点到根节点即merkleroot之间的所有节点的值。

此后,第一节点就可以将所得到的证明数据发送给发起挑战的第二节点,作为工作量证明。

本实施例中,上述的基于所述目标分片以及所述默克尔树路径,得到所述证明数据的实施方式可以有多种。本实施例中,主要列出以下几种进行详细说明。

第一种,上述基于所述目标分片以及所述默克尔树路径,得到与目标文件的校验值对应的证明数据的步骤,可以包括:将所述目标分片以及所述目标分片的默克尔树路径,作为所述证明数据。

例如,在一种具体应用场景中,某目标文件被划分为4个分片存储,分别是l1,l2,l3和l4。第一节点构建目标文件的默克尔树,如图2所示。

假设本次挑战中,第二节点发送的第一随机数r对应的分片为l1。则第一节点将分片l1以及默克尔树中,分片l1对应的默克尔树路径作为证明数据,返回给发起本次挑战的第二节点。其中,默克尔树路径包括从默克尔树中分片l1的对应的叶子节点到根节点即merkleroot之间的所有节点(图2中的用虚线框标记的节点)的值。如图2所示,若目标文件包括4个分片,所构建的默克尔树一共有2+1层,此时目标分片对应的默克尔树路径包括2*2+1个hash值。若第一节点中存储的目标文件包括1024个分片,则所构建的默克尔树一共有10+1层,此时目标分片对应的默克尔树路径包括10*2+1个hash值。

此时,当第二节点中预先保存的目标文件的校验值为目标文件的根哈希值时,第二节点接收到第一节点返回的证明数据后,根据该证明数据以及目标文件对应的校验值,验证所述第一节点是否持有所述目标文件的步骤,可以包括:通过预设的单向函数计算接收到的证明数据中的目标分片的哈希值,验证所得到的哈希值与所述目标分片对应的默克尔树路径中该目标分片的哈希值是否一致;当验证结果为一致时,根据所述目标分片对应的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件对应的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。需要说明的是,在上述验证过程中,第二节点采用的单向函数与第一节点中用于构建默克尔树的hash函数相同,且任意一个验证结果为不一致,则表示当次挑战失败。

由于上述的第一种实施方式发送给第二节点的证明数据中包括了目标分片,当第二节点为不可信节点时,容易泄露目标文件。当然,若第二节点为目标文件的所有者对应的用户节点或者是受第一节点和用户节点信任的服务器时,则不用担心第一节点在进行数据持有证明的过程中泄露目标文件。

第二种,当上述的单向函数可以为同态哈希函数时,上述基于所述目标分片以及所述默克尔树路径,得到对应于所述目标分片的证明数据,可以包括:生成第二随机数,根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据;通过所述同态哈希函数获取所述第二随机数的哈希值;将所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述特征数据,作为所述对应于所述目标分片的证明数据。

在代数中,同态是两个代数结构(例如群、环)同态是抽象代数中2个代数结构、域或向量空间)之间的保持结构不变的映射。即存在映射φ:x→y,满足:其中,“·”是x上的运算,是y上的运算。通常公钥密码算法具有同态性,如rsa加密算法是一个对乘法具有同态性的密码算法。当然,也有些算法对加法具有同态性,如paillier。假设某加密算法为e(·)。若该加密算法对乘法具有同态性,则该加密算法对数据x和y加密具有特性:e(x×y)=e(x)×e(y)。若该加密算法对加法具有同态性,则该加密算法对数据x和y加密具有特性:e(x+y)=e(x)+e(y)。

与上述的第一种实施方式相比,第二种实施方式中,第一节点在构建目标文件的默克尔树时,不用普通的hash算法(例如sha256),而是用一种同态hash算法。基于同态hash算法所具有的同态特性,生成相应的特征数据。

例如,采用基于椭圆曲线的bls(boneh–lynn–shacham)hash算法时,目标文件对应的默克尔树则根据该hash算法构建,且该hash算法具有如下特性:bls_hash(a+b)=bls_hash(a)^bls_hash(b)。此时,上述的根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据的步骤,具体包括:将所述第二随机数与所述目标分片相加,得到所述不同于所述目标分片的特征数据。

以图2示出的包括4个分片的目标文件为例,假设第二随机数r对应的目标分片为l1。此时第一节点将第二随机数r与目标分片l1相加,得到特征数据l1+r。将l1+r、bls_hash(r)以及目标分片l1对应的默克尔树路径作为对应于该目标分片的证明数据,返回给第二节点。

当然,除了采用基于椭圆曲线的blshash算法,也可以采用其他的同态hash算法,可以采用对加法具有同态性的hash算法,也可以采用对乘法具有同态性的hash算法。当采用对乘法具有同态性的hash算法时,上述的根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据的步骤,则可以具体包括:将所述第二随机数与所述目标分片相乘,得到所述不同于所述目标分片的特征数据。

此时,当第二节点中预先保存的目标文件的校验值为目标文件的根哈希值时,第二节点接收到第一节点返回的证明数据后,根据该证明数据以及目标文件对应的校验值,验证所述第一节点是否持有所述目标文件的步骤,可以包括:通过预设的单向函数计算证明数据中所包括的特征数据的哈希值;根据与所述单向函数对应的预设规则,判断所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值是否匹配,若匹配,则根据证明数据中包括的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

具体的,当采用基于椭圆曲线的blshash算法时,根据与所述单向函数对应的预设规则判断所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值是否匹配,包括:判断bls_hash(l+r)是否等于bls_hash(l)^bls_hash(r),若相等,则判定所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值匹配,反之,则判定所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值不匹配。其中,l+r表示特征数据,l表示目标分片,r表示由第一节点生成的第二随机数。

需要说明的是,在上述验证过程中,第二节点采用的单向函数与第一节点中用于构建默克尔树的hash函数相同,且当所计算的特征数据的哈希值、证明数据中包括的目标分片的哈希值以及第二随机数的哈希值不匹配时,或者是所计算的根哈希值与目标文件的根哈希值是不一致时,均表示当次挑战失败。

此时,由于第二节点拿不到目标分片,只能拿到由目标分片以及第二随机数得到的不同于目标分片的特征数据。且由于哈希函数为单向函数,第二节点无法通过第二随机数的哈希值反推出第二随机数,因此,第二节点得不到目标文件的任何源码。因此,当第二节点为区块链系统中除目标文件的所有者以及存储该目标文件的第一节点以外的任意节点时,这种方法能够有效地避免第一节点在进行数据持有证明即工作量证明过程中泄露目标文件。

第三种,上述基于所述目标分片以及所述默克尔树路径,得到与目标文件的校验值对应的证明数据的步骤,可以包括:根据目标分片以及预设的zk-snarks(zero-knowledgesuccinctnon-interactiveargumentofknowledge)算法,生成该目标分片的零知识证明,将该目标分片的默克尔树路径以及该目标分片的零知识证明作为所述证明数据。

可以理解的是,零知识证明可以在不揭露其它信息的情况下,使验证者相信某个论断是正确的。也就是说,通过预设的zk-snarks所生成的目标分片的零知识证明,能够使得第二节点在没有获取到目标分片的情况下验证第一节点是否持有目标分片,且目标分片的哈希值为第一节点发送的证明数据中包括的默克尔树路径对应的叶子节点的值。

此时,当第二节点中预先保存的目标文件的校验值为目标文件的根哈希值时,第二节点接收到第一节点返回的证明数据后,根据该证明数据以及目标文件对应的校验值,验证所述第一节点是否持有所述目标文件的步骤,可以包括:验证所述证明数据中的零知识证明;验证通过后,根据所述证明数据中的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

具体的,上述第二节点根据挑战结果判定所述第一节点是否持有目标文件的实施方式可以为:若当次挑战成功,则判定所述第一节点持有目标文件。反之,若当次挑战失败,则表示第一节点没有完整无误地保存目标文件,即第一节点存在作弊行为。

由于在上述过程中,第一节点并没有将目标文件的源数据公开给第二节点,第二节点拿不到目标分片,只能拿到目标分片的默克尔树路径以及零知识证明。因此,当第二节点为区块链系统中除目标文件的所有者以及存储该目标文件的第一节点以外的任意节点时,第二节点得不到目标文件的任何源码。这样能够有效地避免第一节点在进行数据持有证明即工作量证明过程中泄露目标文件。

需要说明的是,为了提高验证结果的准确性,第二节点可以向第一节点发起两次以上的挑战,或者,第二节点可以包括区块链系统中,除目标文件的所有者以及存储该目标文件的第一节点以外的两个以上节点,这些节点均向第一节点发起挑战。每发起一次挑战,第一节点均需要执行上述步骤s101至步骤s104。当挑战成功的次数超过预设阈值时,则判定所述第一节点持有目标文件,反之,则判定第一节点存在作弊行为。具体的挑战次数和预设阈值可以根据实际需要设置。

综上所述,本发明实施例提供的数据持有证明方法中,第一节点中分片存储有目标文件,第二节点中预先保存有该目标文件对应的校验值,当有第二节点发起挑战时,第一节点接收第二节点发送的对应于该目标文件的挑战数据,该挑战数据包括该目标文件的特征值和满足预设条件的第一随机数,然后,根据特征值以及第一随机数查找该目标文件中对应的分片,将所查找到的分片作为目标分片,进而,根据目标分片以及预设的单向函数,得到与目标文件的校验值对应的证明数据,并将该证明数据发送给第二节点,以作为第一节点的工作量证明。这样第二节点就能够根据该证明数据以及目标文件的校验值,验证第一节点是否持有目标文件,从而防止区块链系统中的存储节点可能存在工作量作弊的问题。

图3示出了本发明第二实施例提供的一种数据持有证明方法的方法流程图。如图3所示,本发明第二实施例提供的数据持有证明方法应用于第二节点,该方法可以包括:

步骤s201,第二节点向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述第二节点;

步骤s202,所述第二节点根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片和所述目标分片对应的默克尔树路径。所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:通过所述单向函数得到所述证明数据中的目标分片的哈希值,验证所得到的哈希值与所述目标分片对应的默克尔树路径中该目标分片的哈希值是否一致;当验证结果为一致时,根据所述目标分片对应的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件对应的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述目标分片的特征数据。所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:通过所述单向函数计算证明数据中所包括的特征数据的哈希值;根据与所述单向函数对应的预设规则,判断所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值是否匹配;若匹配,则根据证明数据中包括的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

进一步地,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径以及所述目标分片的零知识证明。所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:验证所述证明数据中的所述零知识证明;当验证通过时,根据证明数据中的所述默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

需要说明的是,本发明第二实施例中,上述每个步骤的具体实现在上述第一实施例中均有详细描述,为简要描述,本实施例未提及之处可参考前述第一实施例中的相应内容。

另外,本发明第三实施例还提供了一种数据持有证明装置,运行于第一节点,所述第一节点中分片存储有目标文件。如图4所示,该数据持有证明装置400包括:接收模块401、查找模块402、证明数据获取模块403和第一发送模块404。

其中,接收模块401,用于接收第二节点发送的对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第二节点中预先保存有所述目标文件对应的校验值。

查找模块402,用于根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片。

证明数据获取模块403,用于根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据。

第一发送模块404,用于将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

作为一种可选的实施例,所述目标文件的校验值为所述目标文件的根哈希值,所述证明数据获取模块403包括:构建子模块,用于基于所述预设的单向函数构建所述目标文件的默克尔树;第一获取子模块,用于获取所述目标分片对应的默克尔树路径;第二获取子模块,用于基于所述目标分片以及所述默克尔树路径,得到所述证明数据。

作为一种可选的实施例,所述第二获取子模块具体用于:将所述目标分片以及所述目标分片的默克尔树路径,作为所述证明数据。

作为一种可选的实施例,所述单向函数为同态哈希函数,所述第二获取子模块具体用于:生成第二随机数,根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据;通过所述同态哈希函数获取所述第二随机数的哈希值;将所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述特征数据,作为所述证明数据。

作为一种可选的实施例,所述同态哈希函数为基于椭圆曲线的同态哈希函数,所述第二获取子模块具体用于:将所述第二随机数与所述目标分片相加,得到所述不同于所述目标分片的特征数据。

作为一种可选的实施例,所述第二获取子模块具体用于:根据所述目标分片以及预设的zk-snarks算法,生成所述目标分片的零知识证明;将所述目标分片的默克尔树路径以及所述目标分片的零知识证明,作为所述证明数据。

作为一种可选的实施例,所述查找模块402具体用于:根据所述特征值查找对应的目标文件;根据所述第一随机数从所查找到的目标文件中查找对应的分片,将该分片作为目标分片。

作为一种可选的实施例,本实施例提供的数据持有证明装置应用于区块链系统,所述第一节点和所述第二节点均为所述区块链系统中的节点。

需要说明的是,本发明实施例所提供的数据持有证明装置400,其具体实现及产生的技术效果和前述第一实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述第一实施例中相应内容。

另外,本发明第四实施例还提供了一种数据持有证明装置,运行于第二节点。如图5所示,该数据持有证明装置500包括:第二发送模块501和验证模块502。

其中,第二发送模块501,用于向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述第二节点。

验证模块502,用于根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

作为一种可选的实施例,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片和所述目标分片对应的默克尔树路径,所述验证模块502具体用于:通过所述单向函数得到所述证明数据中的目标分片的哈希值,验证所得到的哈希值与所述目标分片对应的默克尔树路径中该目标分片的哈希值是否一致;当验证结果为一致时,根据所述目标分片对应的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件对应的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

作为一种可选的实施例,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述目标分片的特征数据,所述验证模块502具体用于:通过所述单向函数计算证明数据中所包括的特征数据的哈希值;根据与所述单向函数对应的预设规则,判断所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值是否匹配;若匹配,则根据证明数据中包括的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

作为一种可选的实施例,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径以及所述目标分片的零知识证明,所述验证模块502具体用于:验证所述证明数据中的所述零知识证明;当验证通过时,根据证明数据中的所述默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;根据挑战结果判定所述第一节点是否持有目标文件。

需要说明的是,本发明实施例所提供的数据持有证明装置500,其具体实现及产生的技术效果和前述第二实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述第二实施例中相应内容。

另外,本发明第五实施例还提供了一种数据持有证明装置,应用于第一节点,所述装置包括处理器和存储器,所述存储器耦接到所述处理器,所述存储器用于存储指令,并分片存储有目标文件。当所述指令由所述处理器执行时使所述装置执行以下操作:

接收第二节点发送的对应于所述目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第二节点中预先保存有所述目标文件对应的校验值;

根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片;

根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据;

将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

需要说明的是,本发明实施例所提供的数据持有证明装置中,上述每个步骤的具体实现及产生的技术效果和前述第一实施例相同,为简要描述,本实施例未提及之处可参考前述第一实施例中相应内容。

另外,本发明第六实施例还提供了一种数据持有证明装置,应用于第二节点,所述装置包括处理器和存储器,所述存储器耦接到所述处理器,所述存储器存储指令。当所述指令由所述处理器执行时使所述装置执行以下操作:

向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述数据持有证明装置;

根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

需要说明的是,本发明实施例所提供的数据持有证明装置中,上述每个步骤的具体实现及产生的技术效果和前述第二实施例相同,为简要描述,本实施例未提及之处可参考前述第二实施例中相应内容。

本发明实施例中,第一节点和第二节点均为终端设备。图6示出了一种示例性终端设备600的模块框图。如图6所示,终端设备600包括存储器602、存储控制器604,一个或多个(图中仅示出一个)处理器606、外设接口608、网络模块610、输入输出模块612、显示模块614等。这些组件通过一条或多条通讯总线/信号线616相互通讯。

存储器602可用于存储软件程序以及模块,如本发明实施例中的数据持有证明方法以及装置对应的程序指令/模块,处理器606通过运行存储在存储器602内的软件程序以及模块,从而执行各种功能应用以及数据处理,如本发明实施例提供的数据持有证明方法。需要说明的是,当终端设备600作为第一节点时,存储器602还用于分片存储目标文件,即帮助其他用户节点存储数据。

存储器602可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。处理器606以及其他可能的组件对存储器602的访问可在存储控制器604的控制下进行。

外设接口608将各种输入/输出装置耦合至处理器606以及存储器602。在一些实施例中,外设接口608,处理器606以及存储控制器604可以在单个芯片中实现。在其他一些实例中,他们可以分别由独立的芯片实现。

网络模块610用于接收以及发送网络信号。上述网络信号可包括无线信号或者有线信号。

输入输出模块612用于提供给用户输入数据实现用户与用户终端的交互。所述输入输出模块612可以是,但不限于,鼠标、键盘和触控屏幕等。

显示模块614在终端设备600与用户之间提供一个交互界面(例如用户操作界面)或用于显示图像数据给用户参考。在本实施例中,所述显示模块614可以是液晶显示器或触控显示器。若为触控显示器,其可为支持单点和多点触控操作的电容式触控屏或电阻式触控屏等。支持单点和多点触控操作是指触控显示器能感应到来自该触控显示器上一个或多个位置处同时产生的触控操作,并将该感应到的触控操作交由处理器进行计算和处理。

可以理解,图6所示的结构仅为示意,终端设备600还可包括比图6中所示更多或者更少的组件,或者具有与图6所示不同的配置。图6中所示的各组件可以采用硬件、软件或其组合实现。

另外,本发明实施例还提供了一种计算机存储介质,本发明第三实施例中的数据持有证明装置或第四实施例中的数据持有证明装置集成的功能模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述第一实施例提供的数据持有证明方法中的全部或部分流程,或者,实现上述第一实施例提供的数据持有证明方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的网关、代理服务器、系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了a1、一种数据持有证明方法,所述方法包括:

第一节点接收第二节点发送的对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,所述第二节点中预先保存有所述目标文件对应的校验值;

所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片;

所述第一节点根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据;

所述第一节点将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

a2、根据a1所述的方法,所述目标文件的校验值为所述目标文件的根哈希值,所述根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据,包括:

基于所述预设的单向函数构建所述目标文件的默克尔树;

获取所述目标分片对应的默克尔树路径;

基于所述目标分片以及所述默克尔树路径,得到所述证明数据。

a3、根据a2所述的方法,所述基于所述目标分片以及所述默克尔树路径,得到所述证明数据包括:

将所述目标分片以及所述目标分片的默克尔树路径,作为所述证明数据。

a4、根据a2所述的方法,所述单向函数为同态哈希函数,所述基于所述目标分片以及所述默克尔树路径,得到所述证明数据,包括:

生成第二随机数,根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据;

通过所述同态哈希函数获取所述第二随机数的哈希值;

将所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述特征数据,作为所述证明数据。

a5、根据a4所述的方法,所述同态哈希函数为基于椭圆曲线的同态哈希函数,所述根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据包括:

将所述第二随机数与所述目标分片相加,得到所述不同于所述目标分片的特征数据。

a6、根据a2所述的方法,所述基于所述目标分片以及所述默克尔树路径,得到所述证明数据包括:

根据所述目标分片以及预设的zk-snarks算法,生成所述目标分片的零知识证明;

将所述目标分片的默克尔树路径以及所述目标分片的零知识证明,作为所述证明数据。

a7、根据a1所述的方法,所述根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片包括:

根据所述特征值查找对应的目标文件;

根据所述第一随机数从所查找到的目标文件中查找对应的分片,将该分片作为目标分片。

a8、根据a1-a7中任一项所述的方法,应用于区块链系统,所述第一节点和所述第二节点均为所述区块链系统中的节点。

本发明公开了b9、一种数据持有证明方法,所述方法包括:

第二节点向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述第二节点;

所述第二节点根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

b10、根据b9所述的方法,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片和所述目标分片对应的默克尔树路径,所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:

通过所述单向函数得到所述证明数据中的目标分片的哈希值,验证所得到的哈希值与所述目标分片对应的默克尔树路径中该目标分片的哈希值是否一致;

当验证结果为一致时,根据所述目标分片对应的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件对应的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;

根据挑战结果判定所述第一节点是否持有目标文件。

b11、根据b9所述的方法,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述目标分片的特征数据,所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:

通过所述单向函数计算证明数据中所包括的特征数据的哈希值;

根据与所述单向函数对应的预设规则,判断所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值是否匹配;

若匹配,则根据证明数据中包括的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;

根据挑战结果判定所述第一节点是否持有目标文件。

b12、根据b9所述的方法,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径以及所述目标分片的零知识证明,所述根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件包括:

验证所述证明数据中的所述零知识证明;

当验证通过时,根据证明数据中的所述默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;

根据挑战结果判定所述第一节点是否持有目标文件。

本发明公开了c13、一种数据持有证明装置,应用于第一节点,所述第一节点中分片存储有目标文件,所述装置包括:

接收模块,用于接收第二节点发送的对应于所述目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第二节点中预先保存有所述目标文件对应的校验值;

查找模块,用于根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片;

证明数据获取模块,用于根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据;

第一发送模块,用于将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

c14、根据c13所述的装置,所述目标文件的校验值为所述目标文件的根哈希值,所述证明数据获取模块包括:

构建子模块,用于基于所述预设的单向函数构建所述目标文件的默克尔树;

第一获取子模块,用于获取所述目标分片对应的默克尔树路径;

第二获取子模块,用于基于所述目标分片以及所述默克尔树路径,得到所述证明数据。

c15、根据c14所述的装置,所述第二获取子模块具体用于:将所述目标分片以及所述目标分片的默克尔树路径,作为所述证明数据。

c16、根据c14所述的装置,所述单向函数为同态哈希函数,所述第二获取子模块具体用于:生成第二随机数,根据所述第二随机数、所述目标分片以及与所述同态哈希函数对应的预设规则,得到不同于所述目标分片的特征数据;通过所述同态哈希函数获取所述第二随机数的哈希值;将所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述特征数据,作为所述证明数据。

c17、根据c16所述的装置,所述同态哈希函数为基于椭圆曲线的同态哈希函数,所述第二获取子模块具体用于:将所述第二随机数与所述目标分片相加,得到所述不同于所述目标分片的特征数据。

c18、根据c14所述的装置,所述第二获取子模块具体用于:根据所述目标分片以及预设的zk-snarks算法,生成所述目标分片的零知识证明;将所述目标分片的默克尔树路径以及所述目标分片的零知识证明,作为所述证明数据。

c19、根据c13所述的装置,所述查找模块具体用于:根据所述特征值查找对应的目标文件;根据所述第一随机数从所查找到的目标文件中查找对应的分片,将该分片作为目标分片。

c20、根据c13-c19中任一项所述的装置,应用于区块链系统,所述第一节点和所述第二节点均为所述区块链系统中的节点。

本发明公开了d21、一种数据持有证明装置,应用于第二节点,所述装置包括:

第二发送模块,用于向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述第二节点;

验证模块,用于根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

d22、根据d21所述的装置,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片和所述目标分片对应的默克尔树路径,所述验证模块具体用于:

通过所述单向函数得到所述证明数据中的目标分片的哈希值,验证所得到的哈希值与所述目标分片对应的默克尔树路径中该目标分片的哈希值是否一致;

当验证结果为一致时,根据所述目标分片对应的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件对应的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;

根据挑战结果判定所述第一节点是否持有目标文件。

d23、根据d21所述的装置,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径、所述第二随机数的哈希值以及所述目标分片的特征数据,所述验证模块具体用于:

通过所述单向函数计算证明数据中所包括的特征数据的哈希值;

根据与所述单向函数对应的预设规则,判断所计算的特征数据的哈希值、所述证明数据中包括的目标分片的哈希值以及第二随机数的哈希值是否匹配;

若匹配,则根据证明数据中包括的默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;

根据挑战结果判定所述第一节点是否持有目标文件。

d24、根据d21所述的装置,所述校验值为所述目标文件的根哈希值,所述证明数据包括:所述目标分片的默克尔树路径以及所述目标分片的零知识证明,所述验证模块具体用于:

验证所述证明数据中的所述零知识证明;

当验证通过时,根据证明数据中的所述默克尔树路径计算根哈希值,验证所述根哈希值与所述目标文件的根哈希值是否一致,当验证结果为一致时,判定当次挑战成功;

根据挑战结果判定所述第一节点是否持有目标文件。

本发明公开了e25、一种数据持有证明装置,应用于第一节点,所述装置包括处理器和存储器,所述存储器耦接到所述处理器,所述存储器用于存储指令,并分片存储有目标文件,当所述指令由所述处理器执行时使所述装置执行以下操作:

接收第二节点发送的对应于所述目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第二节点中预先保存有所述目标文件对应的校验值;

根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片;

根据所述目标分片以及预设的单向函数,得到与所述校验值对应的证明数据;

将所述证明数据发送给所述第二节点,以使所述第二节点根据所述证明数据以及所述校验值,验证所述第一节点是否持有所述目标文件。

本发明公开了f26、一种数据持有证明装置,应用于第二节点,所述装置包括处理器和存储器,所述存储器耦接到所述处理器,所述存储器存储指令,当所述指令由所述处理器执行时使所述装置执行以下操作:

向第一节点发送对应于目标文件的挑战数据,所述挑战数据包括所述目标文件的特征值和满足预设条件的第一随机数,其中,所述第一节点中分片存储有所述目标文件,以使所述第一节点根据所述特征值以及所述第一随机数查找所述目标文件中对应的分片,将所查找到的分片作为目标分片,根据所述目标分片以及预设的单向函数,得到与所述目标文件的校验值对应的证明数据,将所述证明数据返回给所述数据持有证明装置;

根据所述证明数据以及预先保存的对应于所述目标文件的校验值,验证所述第一节点是否持有所述目标文件。

本发明公开了g27、一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现a1-a8中任一项所述的步骤,或者,实现b9-b12中任一项所述的步骤。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1