基于区块链的数据存储证明方法、装置、设备和存储介质与流程

文档序号:26050995发布日期:2021-07-27 15:26阅读:106来源:国知局
基于区块链的数据存储证明方法、装置、设备和存储介质与流程

本申请涉及计算机技术领域、更涉及区块链技术领域,特别是涉及一种基于区块链的数据存储证明方法、装置、设备和存储介质。



背景技术:

区块链技术是当今社会非常重要的技术之一,其凭借较高的安全性,在各种场景下都得到广泛的应用,数据的安全存储是区块链非常重要的应用之一,把数据存储在区块链上,能够大大提高数据存储的安全性。在将数据存储至区块链时,会涉及到数据证明处理,以证明数据被准确存储至区块链上。零知识证明是数据存储证明的一种常用方式。

传统的零知识证明方法,需要使用cpu对进行复杂的计算,比如,将数据代入复杂的算法中进行繁复计算,不仅耗费大量系统资源,更会造成数据存储证明的整体效率比较低。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种能够提高效率的基于区块链的数据存储证明方法、装置、计算机设备和存储介质。

一种基于区块链的数据存储证明方法,其特征在于,所述方法包括:

响应于针对存储至区块链上的数据的证明任务,生成相应平凡证明结果;

将所述平凡证明结果作为用于生成电路约束结果的约束输入数据,并从所述约束输入数据中,识别出约束结果具有规律性的第一约束输入数据;

基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果;

基于第二约束输入数据进行约束计算,生成相应的电路约束结果;第二约束输入数据,是所述约束输入数据中除第一约束输入数据之外的约束输入数据;

基于得到的所述电路约束结果进行零知识证明处理,生成零知识证明结果。

在其中一个实施例中,所述第一约束输入数据为多个;所述基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果,包括:

针对每个第一约束输入数据,以所述第一约束输入数据作为键,从预设的约束结果查询表中查找与所述键对应的电路约束结果;

若查找到的电路约束结果为一个,则将查找到的所述电路约束结果,作为与所述第一约束输入数据对应的电路约束结果。

在其中一个实施例中,所述方法还包括:

若查找到的电路约束结果为多个,则从所述约束输入数据中识别与所述第一约束输入数据具有关联关系的关联约束输入数据;

对所述第一约束输入数据和所述关联约束输入数据进行约束关系分析;

根据约束分析结果从查找到的多个所述电路约束结果中,识别所述第一约束输入数据最终对应的电路约束结果。

在其中一个实施例中,所述基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果,包括:

对所述第一约束输入数据进行类别识别;

当所述第一约束输入数据属于唯一性结果类别时,则从预设的约束结果查询表中,查找与所述第一约束输入数据相对应的电路约束结果;

当所述第一约束输入数据属于非唯一性结果类别时,则

对所述第一约束输入数据和相应关联约束输入数据进行约束分析,并将约束分析结果作为键,从所述约束结果查询表中查找对应的电路约束结果。

在其中一个实施例中,所述基于得到的所述电路约束结果进行零知识证明处理,生成零知识证明结果,包括:

预测本次执行快速傅里叶变换任务所需的公共参数,并预先加载所述公共参数;

对所述电路约束结果进行有限域数据类型转换,得到类型转换结果;

调用预先加载的所述公共参数,对所述类型转换结果进行快速傅里叶变换,得到变换结果;

根据所述变换结果,生成零知识证明结果。

在其中一个实施例中,所述预测本次执行快速傅里叶变换任务所需的公共参数,包括:

分析历史变换任务或变换任务执行逻辑,得到需固定生成的公共参数;其中,历史变换任务是进行快速傅里叶变换的历史任务;

根据所述需固定生成的公共参数,确定本次执行快速傅里叶变换任务所需的公共参数。

在其中一个实施例中,所述根据所述变换结果,生成零知识证明结果,包括:

根据所述变换结果,得到有限域大数乘法的证明输入数据;

识别所述证明输入数据中证明结果具有规律性的第一证明输入数据;

基于预设的证明结果查询表,查找与第一证明输入数据相应的第一证明结果;

针对所述输入数据中除所述第一证明输入数据之外的第二证明输入数据,对所述第二证明输入数据进行有限域大数乘法计算,生成相应的第二证明结果;

合并所述第一证明结果和所述第二证明结果,生成零知识证明结果。

一种基于区块链的数据存储证明装置,所述装置包括:

生成模块,用于响应于针对存储至区块链上的数据的证明任务,生成相应平凡证明结果;

识别模块,用于将所述平凡证明结果作为用于生成电路约束结果的约束输入数据,并从所述约束输入数据中,识别出约束结果具有规律性的第一约束输入数据;

查找模块,用于基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果;

所述生成模块还用于基于第二约束输入数据进行约束计算,生成相应的电路约束结果;第二约束输入数据,是所述约束输入数据中除第一约束输入数据之外的约束输入数据;基于得到的所述电路约束结果进行零知识证明处理,生成零知识证明结果。

一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现本申请各实施例的基于区块链的数据存储证明方法中的步骤。

一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下实现本申请各实施例的基于区块链的数据存储证明方法中的步骤。

上述基于区块链的数据存储证明方法、装置、计算机设备和存储介质,响应于针对存储至区块链上的数据的证明任务,生成相应平凡证明结果;将所述平凡证明结果作为用于生成电路约束结果的约束输入数据,并从所述约束输入数据中,识别出约束结果具有规律性的第一约束输入数据;基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果;基于第二约束输入数据进行约束计算,生成相应的电路约束结果;第二约束输入数据,是所述约束输入数据中除第一约束输入数据之外的约束输入数据;基于得到的所述电路约束结果进行零知识证明处理,生成零知识证明结果。即,针对约束输入数据进行识别处理,对约束结果具有规律性的第一约束输入数据通过查表来获取相应电路约束结果,避免了针对这部分数据进行复杂约束计算,节省了系统资源,提高了效率。

附图说明

图1为一个实施例中基于区块链的数据存储证明方法的应用环境图;

图2为一个实施例中基于区块链的数据存储证明方法的流程示意图;

图3为一个实施例中平凡证明并行计算的原理示意图;

图4为一个实施例中快速傅里叶变换的流程简示图;

图5为一个实施例中有限域大数乘法的流程简示图;

图6为一个实施例中基于区块链的数据存储证明装置的结构框图;

图7为一个实施例中生成模块的结构框图;

图8为一个实施例中计算机设备的内部结构图;

图9为另一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

本申请提供的基于区块链的数据存储证明方法,可以应用于如图1所示的应用环境中。该应用场景中,由客户端110、以及多个区块链节点120通过网络通信的形式连接形成区块链系统。其中,区块链节点120可以是任意形式的计算设备,比如可以是终端或服务器。区块链节点120是用于将数据存储至区块链的存储机。本申请中的基于区块链的数据存储证明方法由区块链节点120执行。可以是由区块链节点120中的业务程序通过加载证明算法库中的程序,以执行本申请中的基于区块链的数据存储证明方法。

具体地,客户端110可以向区块链节点120发送针对存储至区块链上的数据的证明任务,由区块链节点120响应于该证明任务,生成相应平凡证明结果。区块链节点120可以将所述平凡证明结果作为用于生成电路约束的约束输入数据,并从所述约束输入数据中,识别出约束结果具有规律性的第一约束输入数据。区块链节点120可以基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果;基于第二约束输入数据进行约束计算,生成相应的电路约束结果;第二约束输入数据,是所述约束输入数据中除第一约束输入数据之外的约束输入数据。区块链节点120可以基于得到的所述电路约束结果进行零知识证明处理,生成零知识证明结果。区块链节点120可以将该零知识证明结果存储至区块链上。后续,若客户端110想要查询该数据是否正确存储时,区块链节点120就可以从区块链上获取该零知识证明结果,以证明该数据被正确存储至区块链上。

在一个实施例中,如图2所示,提供了一种基于区块链的数据存储证明方法,本实施例以该方法应用于图1中的区块链节点进行举例说明,该区块链节点可以是终端或服务器。可以理解的是,该方法还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:

步骤202,响应于针对存储至区块链上的数据的证明任务,生成相应平凡证明结果。

其中,证明任务,用于指示生成证明结果。证明结果,用于证明数据被正确存储至区块链上。可以理解,当数据被存储至区块链上、且存储位置正确时,说明数据被正确存储至区块链上。

平凡证明结果,是使用平凡证明算法生成的、用于证明数据被正确存储至区块链上的证明信息或者凭证。平凡证明是一种证明方法,在采用平凡证明来证明若p则q的时候,若能证明出q正确则可结束整个证明。即,平凡证明的思想是,如果后件永真,根本就不需要前件作为假设条件。

可以理解,存储至区块链上的数据,可以是对存储至区块链上的原始数据进行密封处理后,得到的密文数据。

具体地,客户端可以向区块链节点发送存储至区块链上的原始数据,以指示区块链节点将其存储至区块链上。可以理解,在指示区块链节点进行数据存储时,向区块链节点下发了数据密封任务和证明任务,区块链节点在接收到该原始数据后,可以对该原始数据进行密封处理,并将得到的密文数据存储至区块链上。然后,区块链节点可以执行证明任务,基于该密封处理后的密文数据进行平凡证明计算处理,生成平凡证明结果。

在一个实施例中,区块链节点在原平凡证明算法的基础上,添加了分布式计算机制,将之前集中在一台机器上做平凡证明计算的机制,改造成分布到区块链网络上多台机器上并行地做平凡证明计算。具体地,在响应于证明任务时,可以将该证明任务中所针对的数据进行拆分,然后将拆分后的数据发送至多个不同的机器上,并行地进行平凡证明计算,然后进行同步等待,待所有机器都执行完平凡证明计算后,将各个机器上所得到的子平凡证明结果汇总合并,得到最终的平凡证明结果。

为了便于理解,现举例说明。比如,要存100份数据,一个证明任务则需要指示生成100份平凡证明结果,那么,就可以将一份数据分别发送给一个远程机器进行平凡证明计算,这样就可以由100个机器并行地进行证明计算,最后将100份平凡证明结果合并,得到整体数据最终相应的平凡证明结果。

图3为一个实施例中平凡证明并行计算的原理示意图。从图3可知,将数据拆分,由不同的远程机器并行地进行计算,然后,合并平凡证明结果,得到最终的平凡证明结果。

步骤204,将平凡证明结果作为用于生成电路约束结果的约束输入数据,并从所述约束输入数据中,识别出约束结果具有规律性的第一约束输入数据。

其中,约束输入数据,是指用于生成电路约束的输入数据。可以理解,基于约束输入数据,进行电路约束生成计算,从而可以生成电路约束结果。

约束结果规律性识别,是指对基于约束输入数据得到的约束结果进行规律性识别。

可以理解,平凡证明结果即为用于生成电路约束结果的约束输入数据,所以,约束输入数据可以为多个,在这些约束输入数据中,有些相应的电路约束结果是有规律可循的,有些是没有规律可循而必须进行约束计算才能得到。因此,区块链节点可以从这些约束输入数据中,识别出约束结果具有规律性的第一约束输入数据。

在一个实施例中,区块链节点可以预先基于历史的约束生成数据进行大数据分析,识别出约束结果具有规律性的约束输入数据,并将这些约束输入数据进行记录。然后,可以将本次证明任务中生成的约束输入数据(即平凡证明结果),与预先记录的约束结果具有规律性的约束输入数据进行比对,从而识别本次证明任务中生成的约束输入数据中的、且约束结果具有规律性的第一约束输入数据。其中,历史的约束生成数据,是历史的进行电路约束生成计算过程中所使用到的数据。

需要说明的是,在电路约束生成计算的过程中,会使用sha256算法进行多次计算。其中,sha,是指securehashalgorithm,安全散列算法,是一个密码散列函数家族。sha256,是哈希值长度为256位的安全散列算法。在使用sha256的每次计算中,都会通过复杂的约束计算生成相应的约束。比如,a+b的计算,就会生成a的bit位的约束和b位的约束。通过对历史的约束生成数据分析,可以确定约束输入数据中大部分或全部都落在整数范围内,比如u64(即64位)范围内,而且,约束输入数据中存在大部分约束结果有规律性的数据,因而,可以通过预先建立约束结果查询表,将这些约束结果具有规律性的约束输入数据和相应的电路约束结果进行对应记录。

比如,在电路约束生成计算的过程中,约束输入数据大部分为0和1,而0和1作为约束输入数据进行约束计算得到的电路约束结果基本上是唯一值,很显然是有规律性的,因此,可以预先将0和1作为约束结果具有规律性的约束输入数据,与唯一对应的电路约束结果进行对应记录。然后,通过比对,可以将本次任务中生成的约束输入数据中的0和1作为第一约束输入数据。需要说明的是,具有规律性的约束输入数据并非仅有0和1,这里进行以0和1进行举例说明,而不必须限定为0和1。

步骤206,基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果。

其中,电路约束结果,是用于组成运算电路的约束结果。

约束结果查询表,是预先设置的用于查询电路约束结果的表格。即,将电路约束结果作为键值对中的值,通过表格进行预先记录,后续,只需要使用键值对中的键来查找相应电路约束结果即可,而不需要每次都通过复杂的约束计算来生成电路约束结果。大大节省了计算资源,提高了电路约束结果的生成效率。

在一个实施例中,约束结果查询表中,预先记录的是约束输入数据和电路约束结果之间的对应关系。该种情况下,约束输入数据即为键值对中的键,电路约束结果即为键值对中的值。因此,区块链节点可以将第一约束输入数据作为键,查找相对应的电路约束结果。

在另一个实施例中,约束结果查询表中预先记录的键值对中的键还可以不是约束输入数据,而是将由约束输入数据进行约束分析生成的结果作为键,将相应的电路约束结果作为值进行记录的。这种情况下,区块链节点则可以对第一约束输入数据进行约束分析,基于约束分析结果查找相应的电路约束结果。

步骤208,基于第二约束输入数据进行约束计算,生成相应的电路约束结果。

其中,第二约束输入数据,是约束输入数据中除第一约束输入数据之外的约束输入数据。可以理解,第二约束输入数据的相应电路约束结果,则不具备规律性,必须通过约束计算来生成,而无法通过识别分析规律预先在约束结果查询表中进行记录。

在一个实施例,区块链节点可以将第二约束输入数据作为至约束计算算法的输入,以进行约束计算,生成相应的电路约束结果。比如,约束计算算法可以是蒙哥马利算法((montgomery)幂模运算是快速计算a^b%k的一种算法,是rsa加密算法的核心之一)。

在一个实施例中,区块链节点还可以从电路约束生成的计算逻辑中,去掉与电路约束生成不相关的冗余的计算逻辑,以简化计算算法,从而在不影响生成电路约束结果的情况下,提高电路约束结果的生成效率。

步骤210,基于得到的电路约束结果进行零知识证明处理,生成零知识证明结果。

具体地,区块链节点可以将通过步骤206和208两种方式得到的两种类型的约束输入数据(即第一约束输入数据和第二约束输入数据)相应的电路约束结果进行合并,然后,将这些电路约束结果皆作为零知识证明处理的输入数据,从而生成零知识证明结果。

上述基于区块链的数据存储证明方法,响应于针对存储至区块链上的数据的证明任务,生成相应平凡证明结果;将所述平凡证明结果作为用于生成电路约束结果的约束输入数据,并从所述约束输入数据中,识别出约束结果具有规律性的第一约束输入数据;基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果;基于第二约束输入数据进行约束计算,生成相应的电路约束结果;第二约束输入数据,是所述约束输入数据中除第一约束输入数据之外的约束输入数据;基于得到的所述电路约束结果进行零知识证明处理,生成零知识证明结果。即,针对约束输入数据进行识别处理,对约束结果具有规律性的第一约束输入数据通过查表来获取相应电路约束结果,避免了针对这部分数据进行复杂约束计算,节省了系统资源,提高了效率。

在一个实施例中,第一约束输入数据为多个。本实施例中,步骤206基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果,包括:针对每个第一约束输入数据,以第一约束输入数据作为键,从预设的约束结果查询表中查找与键对应的电路约束结果;若查找到的电路约束结果为一个,则将查找到的电路约束结果,作为与第一约束输入数据对应的电路约束结果。

可以理解,约束结果查询表中的键与值之间并不限定于一对一的关系,也可以是一对多的关系,即一个键可以对应多个值(即多个电路约束结果)。

当约束结果查询表中,预先记录的是约束输入数据和电路约束结果之间的对应关系时,则可以分别将每个第一约束输入数据作为键,从预设的约束结果查询表中查找与键对应的电路约束结果。若查找到的电路约束结果为一个,说明该第一约束输入数据仅有唯一对应的电路约束结果,因而,可以将查找到的电路约束结果,作为与第一约束输入数据对应的电路约束结果。

比如,第一约束输入数据为0或1时,在约束结果查询表中则可能仅具有唯一的电路约束结果。

在一个实施例中,该方法还包括:若查找到的电路约束结果为多个,则从约束输入数据中识别与第一约束输入数据具有关联关系的关联约束输入数据;对第一约束输入数据和关联约束输入数据进行约束关系分析;根据约束分析结果从查找到的多个电路约束结果中,识别第一约束输入数据最终对应的电路约束结果。

可以理解,若查找到的电路约束结果为多个,需要对该第一约束输入数据进一步进行分析,以从多个对应的电路约束结果中选取最终的电路约束结果。

关联约束输入数据,是与第一约束输入数据具有关联关系的约束输入数据。可以理解,关联约束输入数据由于与第一约束输入数据具有关联关系,所以,对其在本次任务中具体对应哪个电路约束结果也就具有一定的影响。

因此,区块链节点可以从约束输入数据中识别与第一约束输入数据具有关联关系的关联约束输入数据。区块链节点可以对第一约束输入数据和关联约束输入数据进行约束关系分析。可以理解,由于电路约束结果很大程度上是由约束关系确定的,所以,约束关系分析的约束分析结果,是对确定电路约束结果起到一定影响作用的中间数据。因而,可以根据约束分析结果从查找到的多个电路约束结果中,识别第一约束输入数据最终对应的电路约束结果。即,可以从多个电路约束结果中,识别与该约束分析结果相关性最高的电路约束结果,作为第一约束输入数据最终对应的电路约束结果。

比如,若第一约束输入数据为2,那么其电路约束结果也具有规律性,但是,就不是唯一的电路约束结果,而可能对应多个电路约束结果,因此,就需要对2与其具有关联关系的关联约束输入数据进行约束关系分析,以从中选取本次任务中与2最终对应的电路约束结果。

可以理解,进行约束分析生成的约束分析结果是进行较为简单计算得到的中间数据,相较于使用约束输入数据进行约束计算直接生成电路约束结果而言,同样大大节省了计算量,减少系统资源消耗,提高效率。

在一个实施例中,基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果,包括:对第一约束输入数据进行类别识别;当第一约束输入数据属于唯一性结果类别时,则从预设的约束结果查询表中,查找与第一约束输入数据相对应的电路约束结果;当第一约束输入数据属于非唯一性结果类别时,则对第一约束输入数据和相应关联约束输入数据进行约束分析,并将约束分析结果作为键,从约束结果查询表中查找对应的电路约束结果。

其中,唯一性结果类别,是指具有唯一对应的电路约束结果这一类别。非唯一性结果类别,是指不具有唯一对应的电路约束结果这一类别。

本实施例中,约束结果查询表中,针对唯一性结果类别的约束输入数据,则记录的是该约束输入数据本身与相应电路约束结果之间的对应关系,针对非唯一性结果类别的约束输入数据,则记录的是基于约束输入数据进行约束分析得到的中间数据与电路约束结果之间的对应关系,该中间数据,是指约束分析结果,即,记录的是约束分析结果与电路约束结果之间的对应关系。

因此,在从预设的约束结果查询表中查询数据之前,区块链节点可以对第一约束输入数据进行类别识别,当第一约束输入数据属于唯一性结果类别时,则可以直接以该第一约束输入数据为键,从预设的约束结果查询表中,查找相对应的电路约束结果。当第一约束输入数据属于非唯一性结果类别时,由于约束结果查询表中并非记录这类数据本身与电路约束结果之间的对应关系,所以,针对属于非唯一性结果类别的第一约束输入数据,区块链节点可以确定其相应关联约束输入数据,第一约束输入数据和相应关联约束输入数据进行约束分析。区块链节点可以将约束分析结果作为键,从约束结果查询表中查找对应的电路约束结果。

比如,若第一约束输入数据为2,那么约束结果查询表中记录的就不是2本身与相应电路约束结果之间的对应关系,而记录的是对2与其关联约束输入数据进行约束关系分析后得到的约束分析结果与相应电路约束结果之间的对应关系。因此,区块链节点需要先识别2属于非唯一性结果类别后,对2与其关联约束输入数据进行约束关系分析,然后,将约束分析结果作为键,从约束结果查询表中查找相应的电路约束结果,作为2最终对应的电路约束结果。

上述实施例中,对第一约束输入数据进行类别识别,对唯一性结果类别的第一约束输入数据通过直接查表的方式来获取相应电路约束结果,对非唯一性结果类别的第一约束输入数据,能够进一步进行约束关系分析,基于约束分析结果进行查表,以查找相应电路约束结果。即,并不局限于单一的直接查表,而是能够结合约束关系分析,能支持多种类型的第一约束输入数据,能够使得更多的约束输入数据快速获取相应的电路约束结果,既节省了资源,又提高了效率。

在一个实施例中,基于得到的电路约束结果进行零知识证明处理,生成零知识证明结果,包括:预测本次执行快速傅里叶变换任务所需的公共参数,并预先加载公共参数;对电路约束结果进行有限域数据类型转换,得到类型转换结果;调用预先加载的公共参数,对类型转换结果进行快速傅里叶变换,得到变换结果;根据变换结果,生成零知识证明结果。

可以理解,进行零知识证明计算时,会需要多次进行快速傅里叶变换(fft,fastfouriertransform),在每次快速傅里叶变换时,除了会使用到类型转换后的电路约束结果以外,还会使用到一些公共参数,本申请发明人发现,传统方法中,每进行一次快速傅里叶变换计算,就需要从无到有地计算生成这些公共参数,这样就需要耗费一定的系统资源,而且,生成公共参数需要耗费一定的时间,从而影响效率。

因此,发明人对此提出了优化方案,在区块链节点上增加了公共参数预测程序和预加载程序,可以预测本次执行快速傅里叶变换任务所需的公共参数,并预先加载这些公共参数。进而,在后续每次快速傅里叶变换时,直接调用预先加载的公共参数即可,不需要每次都计算生成这些公共参数,大大节省了系统资源,并提高了证明结果的生成效率。

具体地,区块链节点可以预测本次执行快速傅里叶变换任务所需的公共参数,并预先加载公共参数。此外,由于零知识证明算法主要基于椭圆曲线有限域数据进行计算的。所以,区块链节点可以将对电路约束结果进行有限域数据类型转换,即,将电路约束结果转换为有限域数据格式,得到类型转换结果。

进一步地,区块链节点可以调用预先加载的公共参数,对类型转换结果进行快速傅里叶变换,得到变换结果。

在一个实施例中,由于进行零知识证明计算时,会涉及到很多比较耗时的计算处理,所以,针对这类耗时处理,可以通过gpu(图形处理器,graphicsprocessingunit)语言实现这些算法,从而在gpu端并行地进行计算处理,以提高效率。比如,由于类型转换比较耗时,所以可以通过gpu语言实现类型转换算法,对电路约束结果并行地进行有限域数据类型转换。可以理解,其他耗时的计算处理,也可以放到gpu端进行并行计算,比如,可以将类型转换、快速傅里叶变换处理或者有限域大数乘法,都放到gpu端来进行并行计算。有限域大数乘法可以是椭圆曲线有限域数据大数乘法算法((multiexp)。

在一个实施例中,预测本次执行快速傅里叶变换任务所需的公共参数,包括:分析历史变换任务或变换任务执行逻辑,得到需固定生成的公共参数;根据需固定生成的公共参数,确定本次执行快速傅里叶变换任务所需的公共参数。

其中,历史变换任务是进行快速傅里叶变换的历史任务。变换任务执行逻辑,是用于执行快速傅里叶变换任务的处理逻辑。需固定生成的公共参数,是每次进行快速傅里叶变换需要固定生成的公共参数。

在一个实施例中,区块链节点可以对历次历史变换任务中生成的公共参数进行分析,以根据历史数据分析得到需固定生成的公共参数。具体地,区块链节点可以将历次历史变换任务中生成的公共参数进行比对,以从中在每次历史变换任务中都生成了的公共参数,得到需固定生成的公共参数。

在另一个实施例中,区块链节点可以对变换任务执行逻辑的字段进行解析,以从中解析识别公共参数字段,得到需固定生成的公共参数。

进一步地,区块链节点可以根据需固定生成的公共参数,确定本次执行快速傅里叶变换任务所需的公共参数。具体地,区块链节点可以从需固定生成的公共参数中选取至少部分,作为本次执行快速傅里叶变换任务所需的公共参数。

在一个实施例中,区块链节点可以直接将需固定生成的公共参数,作为本次执行快速傅里叶变换任务所需的公共参数。

在另一个实施例中,可能基于历史数据或者变换任务执行逻辑分析的需固定生成的公共参数,是比较通用型的数据,所以,可以进一步进行分析,以从中筛选与本次执行快速傅里叶变换任务更为相关的公共参数,从而细化粒度,提高准确性。所以,区块链节点还可以对本次执行快速傅里叶变换任务所使用到的类型转换后的电路约束结果进行分析,以从需固定生成的公共参数中剔除与该电路约束结果无关的或者相关性小于预设阈值的公共参数,然后,将剩余的公共参数作为本次执行快速傅里叶变换任务所需的公共参数。

在一个实施例,在每进行完一个处理,即可以释放相应内存,从而节省内存占用,进而提高效率。

在一个实施例中,由于进行零知识证明计算时,会涉及到模乘计算,发明人发现传统方法将模乘运算统一在一起,导致计算量很大,效率低,所以,对此进行优化,通过修改代码将乘法和模运算分开,从而提高效率。可以理解,乘法和模运算分开计算的方法,可以适用于零知识证明计算中的快速傅里叶变换、以及有限域大数乘法等计算处理中。

在一个实施例中,区块链节点可以对进行快速傅里叶变换得到的变换结果,进行乘法和模运算分开的处理,得到有限域大数乘法的证明输入数据,进而基于该有限域大数乘法的证明输入数据,生成零知识证明结果。

图4为一个实施例中快速傅里叶变换的流程简示图。参照图4,可以预加载快速傅里叶变换计算所需参数。电路约束结果中可以包括数据a、数据b和数据c这三部分数据,(相当于三个子电路约束结果),区块链节点可以分别对数据a和数据b进行快速傅里叶变换处理,然后,将数据a和数据b分别进行快速傅里叶变换的变换结果进行乘法计算,得到数据a和数据b的变换结果之间的相乘结果,然后关于数据a和数据b的计算就完成了,因而可以及时释放数据a和数据b所占用的内存。再对数据c进行快速傅里叶变换处理,将数据c的变换结果,与数据a和数据b的变换结果之间的相乘结果进行模运算,模运算的结果数据即为有限域大数乘法的证明输入数据。然后,由gpu并行地对模运算的结果数据进行类型转换后,传回至cpu。

可以理解,若在gpu端进行有限域大数乘法处理,又可以在gpu端对回传至cpu的数据再次进行数据类型转换,以转换为有限域数据格式,然后,在gpu端进行有限域大数乘法的处理。

上述实施例中,分析历史变换任务或变换任务执行逻辑,能快速、准确地确定本次执行快速傅里叶变换任务所需的公共参数。进而能够节省资源,也提高了整体的证明效率。

在一个实施例中,根据变换结果,生成零知识证明结果,包括:根据所述变换结果,得到有限域大数乘法的证明输入数据;识别所述证明输入数据中证明结果具有规律性的第一证明输入数据;基于预设的证明结果查询表,查找与第一证明输入数据相应的第一证明结果;针对所述输入数据中除所述第一证明输入数据之外的第二证明输入数据,对所述第二证明输入数据进行有限域大数乘法计算,生成相应的第二证明结果;合并所述第一证明结果和所述第二证明结果,生成零知识证明结果。

其中,证明输入数据,是指用于输入至有限域大数乘法以生成证明结果的输入数据。可以理解,基于证明输入数据,进行有限域大数乘法计算,可以生成证明结果。

证明结果查询表,是预先设置的用于查询证明结果的表格。即,将证明结果作为键值对中的值,通过表格进行预先记录,后续,只需要使用键值对中的键来查找相应证明结果即可,而不需要每次都通过复杂的有限域大数乘法计算来生成证明结果。大大节省了计算资源,提高了证明结果的生成效率。

对于证明结果具有规律性的第一证明输入数据来说,若将第一证明输入数据作为有限域大数乘法计算的输入,则生成的证明结果具有规律性。比如,具有唯一对应的证明结果或者其他具有规律性的证明结果。

在一个实施例中,区块链节点可以预先基于历史的证明生成数据进行大数据分析,识别出证明结果具有规律性的证明输入数据,并将这些证明输入数据进行记录。然后,可以将本次证明任务中生成的证明输入数据,与预先记录的证明结果具有规律性的证明输入数据进行比对,从而识别本次证明任务中生成的证明输入数据中的、且证明结果具有规律性的第一证明输入数据。其中,历史的证明生成数据,是历史的使用有限域大数乘法进行证明生成计算过程中所使用到的数据。

在一个实施例中,区块链节点可以对进行快速傅里叶变换得到的变换结果,进行乘法和模运算分开的处理,得到有限域大数乘法的证明输入数据。区块链节点可以识别该证明输入数据中的第一证明输入数据。可以理解,乘法和模运算分开处理,能够降低计算难度,提高系统性能。

在一个实施例中,区块链节点可以以该第一证明输入数据作为键,从预设的证明结果查询表中,查找相应的第一证明结果。这种情况下,证明结果查询表中记录的则是证明输入数据和证明结果之间的对应关系。在另一个实施例中,区块链节点还可以对第一证明输入数据进行分析处理,根据分析结果从证明结果查询表中,查找相应的第一证明结果。这种情况下,证明结果查询表中记录的则是证明输入数据的分析结果与证明结果之间的对应关系。

比如,若第一证明输入数据为0或1,则可以从预设的证明结果查询表中,查找相应的第一证明结果。

进一步地,针对所述输入数据中除所述第一证明输入数据之外的第二证明输入数据,区块链节点可以对该第二证明输入数据进行有限域大数乘法计算,生成相应的第二证明结果。区块链节点可以合并所述第一证明结果和所述第二证明结果,生成最终的零知识证明结果。

在一个实施例中,区块链节点可以预测进行有限域大数乘法所需的公共参数,并预先加载公共参数,在使用有限域大数乘法进行证明结果生成计算时,可以直接调用预先加载的公共参数,进行有限域大数乘法计算。具体地,可以对历史大数乘法计算任务或乘法计算任务执行逻辑进行分析,得到进行有限域大数乘法所需的公共参数。

图5为一个实施例中有限域大数乘法的流程简示图。参照图5,可以判断预测的所需公共参数是否加载,若否,则加载公共参数,若是,则加载根据变换结果得到的有限域大数乘法的证明输入数据。假设这些证明输入数据中包括3部分数据a、b和c,假设,0和1是属于证明结果具有规律性的第一证明输入数据,那么,针对每部分数据,分别可以针对其中的0和1,通过查表的方式,即从证明结果查询表中,查找相应的第一证明结果。针对除0和1之外的第二证明输入数据,则进行有限域大数乘法计算,生成相应的第二证明结果。进而合并第一证明结果和所述第二证明结果,得到零知识证明结果。

上述实施例中,针对证明输入数据进行识别处理,对证明结果具有规律性的第一证明输入数据通过查表来获取相应证明结果,避免了针对这部分数据进行复杂的计算,节省了系统资源,提高了效率。

应该理解的是,虽然本申请各实施例的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,本申请各实施例的流程图的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

如图6所示,在一个实施例中,提供了一种基于区块链的数据存储证明装置,该装置包括:生成模块602、识别模块604以及查找模块606;其中:

生成模块602,用于响应于针对存储至区块链上的数据的证明任务,生成相应平凡证明结果。

识别模块604,用于将所述平凡证明结果作为用于生成电路约束结果的约束输入数据,并从所述约束输入数据中,识别出约束结果具有规律性的第一约束输入数据。

查找模块606,用于基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果。

所述生成模块602还用于基于第二约束输入数据进行约束计算,生成相应的电路约束结果;第二约束输入数据,是所述约束输入数据中除第一约束输入数据之外的约束输入数据;基于得到的所述电路约束结果进行零知识证明处理,生成零知识证明结果。

在一个实施例中,所述第一约束输入数据为多个。查找模块606还用于针对每个第一约束输入数据,以所述第一约束输入数据作为键,从预设的约束结果查询表中查找与所述键对应的电路约束结果;若查找到的电路约束结果为一个,则将查找到的所述电路约束结果,作为与所述第一约束输入数据对应的电路约束结果。

在一个实施例中,识别模块604还用于若查找到的电路约束结果为多个,则从所述约束输入数据中识别与所述第一约束输入数据具有关联关系的关联约束输入数据;对所述第一约束输入数据和所述关联约束输入数据进行约束关系分析;根据约束分析结果从查找到的多个所述电路约束结果中,识别所述第一约束输入数据最终对应的电路约束结果。

在一个实施例中,查找模块606还用于对所述第一约束输入数据进行类别识别;当所述第一约束输入数据属于唯一性结果类别时,则从预设的约束结果查询表中,查找与所述第一约束输入数据相对应的电路约束结果;当所述第一约束输入数据属于非唯一性结果类别时,则对所述第一约束输入数据和相应关联约束输入数据进行约束分析,并将约束分析结果作为键,从所述约束结果查询表中查找对应的电路约束结果。

如图7所示,在一个实施例中,生成模块602,包括:

预测模块602a,用于预测本次执行快速傅里叶变换任务所需的公共参数,并预先加载所述公共参数。

转换模块602b,用于对所述电路约束结果进行有限域数据类型转换,得到类型转换结果;调用预先加载的所述公共参数,对所述类型转换结果进行快速傅里叶变换,得到变换结果。

证明结果生成模块602c,用于根据所述变换结果,生成零知识证明结果。

在一个实施例中,预测模块602a还用于分析历史变换任务或变换任务执行逻辑,得到需固定生成的公共参数;其中,历史变换任务是进行快速傅里叶变换的历史任务;根据所述需固定生成的公共参数,确定本次执行快速傅里叶变换任务所需的公共参数。

在一个实施例中,证明结果生成模块602还用于根据所述变换结果,得到有限域大数乘法的证明输入数据;识别所述证明输入数据中证明结果具有规律性的第一证明输入数据;基于预设的证明结果查询表,查找与第一证明输入数据相应的第一证明结果;针对所述输入数据中除所述第一证明输入数据之外的第二证明输入数据,对所述第二证明输入数据进行有限域大数乘法计算,生成相应的第二证明结果;合并所述第一证明结果和所述第二证明结果,生成零知识证明结果。

上述基于区块链的数据存储证明装置,响应于针对存储至区块链上的数据的证明任务,生成相应平凡证明结果;将所述平凡证明结果作为用于生成电路约束结果的约束输入数据,并从所述约束输入数据中,识别出约束结果具有规律性的第一约束输入数据;基于预设的约束结果查询表,查找第一约束输入数据对应的电路约束结果;基于第二约束输入数据进行约束计算,生成相应的电路约束结果;第二约束输入数据,是所述约束输入数据中除第一约束输入数据之外的约束输入数据;基于得到的所述电路约束结果进行零知识证明处理,生成零知识证明结果。即,针对约束输入数据进行识别处理,对约束结果具有规律性的第一约束输入数据通过查表来获取相应电路约束结果,避免了针对这部分数据进行复杂约束计算,节省了系统资源,提高了效率。

关于基于区块链的数据存储证明装置的具体限定可以参见上文中对于基于区块链的数据存储证明方法的限定,在此不再赘述。上述基于区块链的数据存储证明装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是作为区块链节点的服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于区块链的数据存储证明方法。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是作为区块链节点的终端,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过wifi、运营商网络、nfc(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种基于区块链的数据存储证明方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。

本领域技术人员可以理解,图8或9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-onlymemory,rom)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(randomaccessmemory,ram)或外部高速缓冲存储器。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(staticrandomaccessmemory,sram)或动态随机存取存储器(dynamicrandomaccessmemory,dram)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

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