CN112632888A - 电路合成方法、设备、介质和数据存储证明系统 - Google Patents

电路合成方法、设备、介质和数据存储证明系统 Download PDF

Info

Publication number
CN112632888A
CN112632888A CN202010830354.4A CN202010830354A CN112632888A CN 112632888 A CN112632888 A CN 112632888A CN 202010830354 A CN202010830354 A CN 202010830354A CN 112632888 A CN112632888 A CN 112632888A
Authority
CN
China
Prior art keywords
constraint
constraint system
parent
data
variables
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010830354.4A
Other languages
English (en)
Inventor
李星
夏坤贤
张守恒
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Zhiju Information Technology Co ltd
Original Assignee
Shanghai Zhiju Information Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Zhiju Information Technology Co ltd filed Critical Shanghai Zhiju Information Technology Co ltd
Priority to CN202010830354.4A priority Critical patent/CN112632888A/zh
Publication of CN112632888A publication Critical patent/CN112632888A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/337Design optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)

Abstract

本发明提供了一种用于零知识证明的电路合成方法、设备、计算机存储介质和数据存储证明系统。该方法包括,由进行零知识证明的证明单元:基于待证明数据的逻辑电路为所述待证明数据产生一个父约束系统;将所述父约束系统发送给多个处理单元;接收所述多个处理单元并行产生的多个不同的一阶约束系统分量,其中每个一阶约束系统分量包括所述父约束系统和一个子约束系统,所述子约束系统基于所述父约束系统得到;对所述多个不同的一阶约束系统分量进行合并以获得所述一阶约束系统;以及基于所述一阶约束系统构造针对所述待证明数据的零知识证明。

Description

电路合成方法、设备、介质和数据存储证明系统
技术领域
本发明涉及零知识证明领域,更具体地,涉及一种用于零知识证明的电路合成方法、设备、计算机存储介质以及使用该方法的数据存储证明系统。
背景技术
零知识证明是指证明者能够在不透露任何有用信息的前提下,使验证者相信某个论断是正确的。在典型的零知识证明过程中,证明者声称某些公开参数符合某个论断,并且根据这些公开参数和某些私有参数,以某种算法生成零知识证明(ZKP)。验证者可以根据相应的算法,基于公开参数来验证该零知识证明,验证通过即认为证明者的该论断为真。
当前,零知识证明方法已广泛应用于区块链技术、数字货币、多方计算、安全计算等领域。然而,对于很多零知识证明方法,如zk-SNARK(zero knowledge Succinct Non-interactive ARgument of Knowledge,零知识简洁非交互式知识证明),在大电路情况下,证明生成时间很长,这将严重影响依赖于零知识证明的应用的实施。
尤其是,在证明者提供零知识证明(如zk-SNARK)的过程中,需要将待证明的逻辑(也称为证明逻辑)转换为QAP(Quadratic Assignment problem,二次分配问题)。在这一过程中,需要对逻辑电路进行电路合成,生成约束系统(Constraint System,CS)。当前,传统的电路合成算法不考虑逻辑电路的具体情况,直接以串行处理方式执行电路合成,从而使得电路合成所需的时间过长,不利于零知识证明的产生。
发明内容
针对上述问题,本发明的发明人研究证明,通过精巧设计约束系统,可以使得约束系统的至少一部分并行执行电路合成,从而加速整个约束系统的产生。有鉴于此,本发明提供了一种用于零知识证明的电路合成方法以及利用该方法的数据存储证明系统。
根据本发明的一个方面,提供了一种用于零知识证明的电路合成方法,包括,由进行零知识证明的证明单元:基于待证明数据的逻辑电路为所述待证明数据产生一个父约束系统;将所述父约束系统发送给多个处理单元;接收所述多个处理单元并行产生的多个不同的一阶约束系统分量,其中每个一阶约束系统分量包括所述父约束系统和一个子约束系统,所述子约束系统基于所述父约束系统得到;对所述多个不同的一阶约束系统分量进行合并以获得所述一阶约束系统;以及基于所述一阶约束系统构造针对所述待证明数据的零知识证明。
根据本发明的另一个方面,提供了一种用于零知识证明的电路合成设备。该设备包括:存储器,其上存储有计算机程序代码;以及处理器,其被配置为运行所述计算机程序代码,以执行如上所述的方法。
根据本发明的又一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序代码,所述计算机程序代码在被运行时执行如上所述的方法。
根据本发明的再一个方面,提供了一种数据存储证明系统,包括证明单元和多个处理单元。所述证明单元被配置为:对原始数据执行标签计算、哈希计算和编码计算并构造Merkle树以进行存储;从所存储的原始数据中选择多列数据,其中每列数据包括多个数据块;为所述多列数据构造一个通用电路,所述通用电路用于基于所述多列数据的逻辑电路为所述多列数据产生一个父约束系统;将所述父约束系统发送给多个处理单元;接收所述多个处理单元并行产生的多个不同的一阶约束系统分量,其中每个一阶约束系统分量包括所述父约束系统和一个子约束系统,所述子约束系统利用多个抽查子电路中的一个抽查子电路基于所述父约束系统得到;对所述多个不同的一阶约束系统分量进行合并以获得所述一阶约束系统;以及基于所述一阶约束系统构造针对所述多列数据的零知识证明以用于证明所述证明单元存储了所述原始数据。
利用本发明的方案,通过并行执行电路合成以产生约束系统,加快了零知识证明的产生。
附图说明
图1示出了根据本发明的实施例的用于零知识证明的电路合成方法的流程图;
图2示出了根据本发明的实施例的电路合成方法中产生父约束系统的步骤的一种示例性流程图;
图3示出了根据本发明的实施例的电路合成方法中产生一阶约束系统分量的步骤的一种示例性流程图;
图4示出了利用本发明的用于零知识证明的电路合成方法的应用系统的示意图;
图5示出了图4的应用系统中的数据处理过程的示意图;
图6示出了图4的应用系统中的逻辑电路结构的示意图;以及
图7示出了可以用来实施本发明的实施例的示例设备的示意性框图。
具体实施方式
以下将结合附图对本发明的各实施例进行详细说明,以便更清楚理解本发明的目的、特点和优点。应理解的是,附图所示的实施例并不是对本发明范围的限制,而只是为了说明本发明技术方案的实质精神。
在下文的描述中,出于说明各种发明的实施例的目的阐述了某些具体细节以提供对各种发明实施例的透彻理解。但是,相关领域技术人员将认识到可在无这些具体细节中的一个或多个细节的情况来实践实施例。在其它情形下,与本申请相关联的熟知的装置、结构和技术可能并未详细地示出或描述从而避免不必要地混淆实施例的描述。
除非语境有其它需要,在整个说明书和权利要求中,词语“包括”和其变型,诸如“包含”和“具有”应被理解为开放的、包含的含义,即应解释为“包括,但不限于”。
在整个说明书中对“一个实施例”或“一实施例”的提及表示结合实施例所描述的特定特点、结构或特征包括于至少一个实施例中。因此,在整个说明书的各个位置“在一个实施例中”或“在一实施例”中的出现不一定全都指相同实施例。另外,特定特点、结构或特征可在一个或多个实施例中以任何方式组合。
说明书和所附权利要求中所用的单数形式“一”和“所述”包括复数指代物,除非文中清楚地另外规定。应当指出的是术语“或”通常以其包括“和/或”的含义使用,除非文中清楚地另外规定。
如前所述,现有的零知识证明方法有多种多样,包括交互式证明方法和非交互式证明方法,其中非交互式证明方法不需要借助证明者和验证者之间的交互来产生证明,相对于交互式证明方法具有显著的优点。zk-SNARK是当前常用的一类非交互式零知识证明方法,以下,本文中以Groth16这种zk-SNARK方法为例来对本发明的方案进行描述。然而,本领域技术人员可以理解,本发明的思想可以容易地扩展到其他零知识证明方法,只要该方法中涉及了约束系统的构造。
Groth16是Jens Groth设计的一种有效的zk-SNARK零知识证明方法。Groth16产生的证明更小并且验证更加快速。完整的Groth16证明系统包括三个过程,分别对应着三种算法:设置、证明和验证。其中设置算法创建证明密钥和验证密钥,验证算法使用验证密钥检查一个证明,以决定是接受还是拒绝该证明。对于一个QAP实例,设置算法仅运行一次,所创建的证明密钥和验证密钥对证明者和验证者公开,而验证算法的计算速度非常快。因此决定整个Groth16证明系统速度的关键因素在于其中的证明部分(证明算法)的执行速度。在执行该证明时,一个重要的过程是对逻辑电路进行电路合成,以生成约束系统,如一阶约束系统(Rank-1 Constraint System,R1CS)。因此,加快约束系统的生成将会加快整个零知识证明的过程。
图1示出了根据本发明的实施例的用于零知识证明的电路合成方法100的流程图。
概括来说,与常规的直接构建完整的约束系统的方法不同,图1所示的用于零知识证明的电路合成方法中通过并行构建多个一阶约束系统分量并对这些分量进行合并来构建完整的一阶约束系统,以加快约束系统的构建过程,从而加快整个零知识证明的过程。
如图1所示,方法100包括步骤110,其中证明单元基于待证明数据的逻辑电路为该待证明数据产生一个父约束系统(Parent CS,以下简写为P)。
这里,如本领域技术人员所公知的,在zk-SNARK中,待证明的逻辑(即证明逻辑)可以被拍平为由多个门电路(如加法门(+)、乘法门(*)等,注意,减法和除法也可以用加法门或乘法门来表示)组成的逻辑电路关系(本文中称为逻辑电路)。
图2示出了根据本发明的实施例的电路合成方法100中产生父约束系统P的步骤110的一种示例性流程图。
如图2中所示,步骤110可以包括子步骤111,其中证明单元基于待证明数据的逻辑电路确定R1CS的多个第一类型变量和多个第二类型变量以及R1CS的约束个数。
在Groth16算法中,采用R1CS来描述约束系统,其中每个变量都是一阶的。R1CS的变量可以分为两种类型,一种称为公开变量(Public Input),另一种称为不公开变量或辅助变量(Aux Input),因此R1CS的总的变量个数为公开变量的个数与不公开变量的个数之和。取决于逻辑电路,每个变量可以有不同的赋值,这些不同赋值称为约束。也就是说,变量和约束(赋值)是构建约束系统的两个决定因素。
接下来,在子步骤112,证明单元基于待证明数据的逻辑电路确定R1CS的多个约束系数矩阵。
在一种实施例中,该多个约束系数矩阵包括第一约束系数矩阵A、第二约束系数矩阵B和第三约束系数矩阵C,第一约束系数矩阵A指示多个第一约束a,第二约束系数矩阵B指示多个第二约束b,第三约束系数矩阵C指示多个第三约束c,其中对于多个约束系数矩阵,满足第一约束与第二约束的乘积等于第三约束,即a*b=c。
约束系数矩阵可以按照变量存储,例如,每个约束系数矩阵可以表示为如下的表1的形式,其可以按变量稀疏表示以减少内存消耗:
表1约束系数矩阵
Figure BDA0002637706690000051
Figure BDA0002637706690000061
其中,c0、c1、……、c4指示该约束系数矩阵中的约束(例如表1中假设一共是5个约束),i0、i1指示第一类型变量(例如表1中假设一共是2个第一类型变量),aux0……aux6指示第二类型变量(例如表1中假设一共是7个第二类型变量),表格中的值则指示对应变量在对应约束下的取值,例如与i0和c1对应的方格中的值“-1”表示变量i0在约束c1下的取值。如上所述,第一类型变量可以是公开变量,其可以被系统中的多个节点或单元所知,第二类型变量可以是辅助变量,只由某个节点或单元本身知道。
接下来,在子步骤113,证明单元基于待证明数据的逻辑电路的公共电路部分确定一个父约束系统P,其中该父约束系统P对应于一个约束系数矩阵(例如如上面的表1所示的约束系数矩阵A)中的至少一个约束(以下也称为父约束)和该至少一个父约束下的第一数量的变量,其中该第一数量的变量是多个第一类型变量i0、i1和多个第二类型变量aux0……aux6中的至少一部分。
例如,假设证明单元根据待证明数据的逻辑电路的公共电路部分确定的父约束系统P对应于表1中所示的约束c0,则父约束系统P在该约束c0下包含四个变量,即两个第一类型变量i0和i1以及两个第二类型变量aux0和aux1,该四个变量的取值即为约束c0下变量i0、i1、aux0和aux1的对应取值0(图中缺省为空)、-1、1和2。
这里,本领域技术人员可以理解,父约束系统P可能不是唯一的,其可以基于待证明数据的逻辑电路的全部公共电路部分或者部分公共电路部分构建。在一种实施例中,父约束系统P的大小会影响整个约束系统的产生速度,如下面所述,在父约束系统P足够小的情况下,整个约束系统的产生能够实现近似于线性加速。
接下来,在步骤120,证明单元将所产生的父约束系统P发送给多个处理单元。
在步骤130,多个处理单元分别基于接收到的父约束系统P和如表1所示的约束系数矩阵并行产生多个不同的R1CS分量,其中每个R1CS分量包括该父约束系统P和一个子约束系统subCS,该子约束系统subCS基于父约束系统P和该约束系数矩阵得到。
图3示出了根据本发明的实施例的电路合成方法100中产生R1CS分量的步骤130的一种示例性流程图。
如图3中所示,步骤130包括子步骤131,其中一个处理单元从证明单元接收父约束系统P。如上所述,假设父约束系统P对应于约束c0下的四个变量i0、i1、aux0和aux1,该四个变量的取值分别为0、-1、1和2。
接下来,在子步骤132,处理单元基于约束系数矩阵(例如如上面的表1所示的约束系数矩阵A)确定与父约束系统中P中的至少一个父约束不同的至少一个子约束,并且基于该第一数量的变量在所述至少一个子约束下的取值对该至少一个子约束进行赋值,以产生一个子约束系统subCS1的第一子矩阵P1。
如上所述,假设父约束系统P对应于约束c0下的四个变量i0、i1、aux0和aux1,该四个变量的取值分别为0、-1、1和2,则可以选择约束c1和c2作为第一子矩阵P1的子约束,并且基于四个变量i0、i1、aux0和aux1在约束c1和c2下的取值为第一子矩阵P1的子约束进行赋值,即,P1包含两个约束c1、c2下的四个变量i0、i1、aux0和aux1,该四个变量的取值分别为-1、2、0、0和28、0、0、0。
在子步骤133,处理单元从多个第一类型变量(i0、i1)和多个第二类型变量(aux0……aux6)中选择与父约束系统P中的第一数量的变量不同的第二数量的变量,并基于该约束系数矩阵(例如上述矩阵A)为该第二数量的变量进行赋值以产生子约束系统subCS1的第二子矩阵C1。这里,第二数量可以与第一数量相同,也可以与第一数量不同。
如上所述,假设父约束系统P的第一数量的变量包括约束c0下的四个变量i0、i1、aux0和aux1,该四个变量的取值分别为0、-1、1和2,并且子步骤131确定的子约束系统subCS1的第一子矩阵P1包含两个子约束c1、c2下的四个变量i0、i1、aux0和aux1,该四个变量的取值分别为-1、2、0、0和28、0、0、0,则在子步骤133,处理单元可以从所有变量中选择除了i0、i1、aux0和aux1之外的其他变量中的任意一些(例如选择aux2和aux3),并且根据该约束系数矩阵对所选择的变量aux2和aux3进行赋值,该两个变量的取值分别为5、13和3、17。
接下来,在子步骤134,处理单元基于父约束系统P、子约束系统subCS1的第一子矩阵P1和第二子矩阵C1构成一个R1CS分量。
在一种实施例中,处理单元将父约束系统P、子约束系统subCS1的第一子矩阵P1和第二子矩阵C1以及全零矩阵0形成一个下三角矩阵,以作为该一阶约束系统分量。在这种情况下,R1CS分量A1可以表示为:
Figure BDA0002637706690000081
以同样的方式,多个处理单元(如下面结合图4所述的处理单元4601、4602、4603)可以并行获得如下所示的多个不同的R1CS分量A1、A2、A3:
Figure BDA0002637706690000082
其中,P1、P2和P3分别指示多个处理单元的子约束系统subCS1、subCS2和subCS3的第一子矩阵,C1、C2和C3分别指示多个处理单元的子约束系统subCS1、subCS2和subCS3的第二子矩阵,并且P1、P2和P3包含彼此不同的约束和相同的变量,C1、C2和C3分别包含与P1、P2和P3相同的约束和不同的变量。
返回图1,接下来,在步骤140,证明单元从多个处理单元接收多个不同的R1CS分量(如R1CS分量A1、A2、A3),并对其进行合并以获得完整的R1CS。
在一种实施例中,证明单元将该父约束系统P作为R1CS的第一子矩阵元素,将多个子约束系统subCS(如子约束系统subCS1、subCS2、subCS3)的第一子矩阵(如第一子矩阵P1、P2、P3)分别作为R1CS的列元素,将多个子约束系统subCS的第二子矩阵(如第二子矩阵C1、C2、C3)分别作为R1CS的对角元素,并且将R1CS的其他元素设置为0来构建该R1CS。在这种情况下,所构建的R1CS可以表示为:
Figure BDA0002637706690000091
可以看出,在上述电路合成方法100中,通过并行获取各个R1CS分量加快了约束系统的构建过程。尤其是,如果将父约束系统P构建得足够小,并且将各个子约束系统构建得基本上差不多大小,则可以实现近乎于线性加速。
接下来,在步骤150,证明单元基于步骤140获得的R1CS针对其所存储的待证明数据进行零知识证明。
具体地,在构造该证明时,需要计算每个约束的对应值,即约束中的每个变量赋值后的计算结果。
以子约束系统subCS1为例,由于其只与父约束系统P中的变量和其本身的变量有关,因此可以利用如下的公式分别计算相应地约束系数矩阵:
P1*v0+C1*v1
其中,P1是subCS1的第一子矩阵,C1是subCS1的第二子矩阵(如上所述),v0是对父约束系统P的赋值,v1是对subCS1的第二子矩阵C1的赋值。可以用函数表示为:
Figure BDA0002637706690000092
在获得了多个子约束系统subCS1、subCS2、subCS3之后,可以将这些子约束系统的结果进行合并,可以用函数表示为:
Figure BDA0002637706690000093
Figure BDA0002637706690000094
Figure BDA0002637706690000095
其中,P2是subCS2的第一子矩阵,C2是subCS2的第二子矩阵(如上所述),v0是对父约束系统P的赋值,v2是对subCS2的第二子矩阵C2的赋值;P3是subCS3的第一子矩阵,C3是subCS3的第二子矩阵(如上所述),v0是对父约束系统P的赋值,v3是对subCS3的第二子矩阵C3的赋值。从而,将多个R1CS分量A1、A2、A3合并为R1CS可以表示为:
Figure BDA0002637706690000101
如前所述,根据本发明的用于零知识证明的电路合成方法100可以用于需要提供零知识证明的多个应用领域和多种应用场景中,如区块链、多方计算、安全计算等。图4示出了利用本发明的用于零知识证明的电路合成方法100在区块链中进行数据存储证明的应用系统400的示意图。图5示出了图4的应用系统400中的数据处理过程的示意图。该应用系统400例如是一个挖矿项目Filecoin区块链。图6示出了图4的应用系统400中的逻辑电路结构的示意图。以下结合图4至图6对在Filecoin区块链中利用方法100进行数据存储证明的过程进行描述。
注意,本文中以如图4所示的在区块链中进行数据存储证明的系统400为背景对用于零知识证明的电路合成方法100进行了描述,然而本领域技术人员可以理解,图1所示的用于零知识证明的电路合成方法100可以容易地应用于任何需要提供零知识证明的场景中。
项目Filecoin采用PoRep以及PoSt协议,保证存储节点正确存储了用户数据。PoRep代表Proof of Replicate(复制证明)。PoSt代表Proof of Space time(时空证明)。这两部分协议的计算都需要通过零知识证明计算生成证明并提交到区块链上,因此可以利用本发明的并行电路合成方法来加快约束系统的生成,从而加快零知识证明的产生。以下,结合图4和图5对系统400进行描述。为了简洁起见,该描述主要集中于PoRep协议的数据存储的零知识证明过程。本领域技术人员可以理解,该描述也可以容易地应用于PoSt协议的情况。
如图4中所示,系统400包括区块链逻辑模块410、存储处理和证明模块430、作为区块链逻辑模块410和存储处理和证明模块430之间的接口的接口模块420,以及零知识证明模块440。此外,系统400物理上包括多个区块链节点,如图4中所示的证明单元450和验证单元470等。区块链逻辑模块410是用于实现区块链的底层逻辑的代码模块或硬件模块。在一种实施例中,区块链逻辑模块410是代码层面的,可以部署在包括证明单元450和验证单元470在内的多个区块链节点上。例如对于Filecoin区块链来说,模块410可以是go语言实现的Filecoin Blockchain代码模块。存储处理和证明模块430是用来对区块链的数据以及证明进行存储和管理的代码模块或硬件模块。在一种实施例中,例如对于Filecoin区块链来说,存储处理和证明模块430可以是rust语言实现的Rust-fil-proofs代码模块,用于将数据存储为Merkle树形式。接口模块420是模块410和430之间的接口。在一种实施例中,例如对于Filecoin区块链来说,接口模块420可以是go语言实现的FFI代码模块。零知识证明模块440是用于进行零知识证明的代码库或承载该代码库的硬件模块,其可以由证明单元450和验证单元470进行调用。例如对于Filecoin区块链来说,其是Groth16的证明系统的实现,可以由rust语言实现,称为Bellman。
系统400还包括证明单元450和验证单元470。证明单元450用于调用零知识证明模块440以提供对其所存储的数据的零知识证明,其上的代码可以利用rust语言实现。验证单元470用于调用零知识证明模块440以对证明单元450所提供的零知识证明进行验证。在一些实施例中,多个处理单元4601、4602、4603……(以下统称为处理单元460)也可以是系统400内的区块链节点,或者,在一些其他实施例中,处理单元460是仅与证明单元450进行通信的外部处理器或者是证明节点450内部包含的多个处理器。类似地,证明单元450和/或验证单元470也可以是系统400内的区块链节点或位于所述区块链节点上的证明处理单元和/或验证处理单元。
参考图5,存储处理和证明模块430将数据分成多个Sector(单个存储单元),每个Sector进行独立的处理和存储。对于Filecoin应用来说,Sector的大小默认为32G。以下以单个Sector为例进行描述。
一个Sector的数据称为原始数据500,其被分为多个数据块,每个数据块可以包含32个字节。存储处理和证明模块430对原始数据500进行标签(Labeling)计算,生成多层标签数据51、52、……、5L(统称为5i,1≤i≤L),每层标签数据5i包括多个数据块5i1、5i2、……5iN。这里,L是大于1的正整数。在一个典型的Filecoin应用中,L=11。在一个Sector包含32G数据,每个数据块包含32个字节的情况下,每层的数据块的个数N=32G/32=1G。每层标签数据中的每个数据块的计算依赖于对应的上一层标签数据和本层的前两个数据块,如图中虚线所示。此外,多层标签数据51、52、……、5L还经过哈希计算(Hash)、编码计算以及构造Merkle树等过程产生最终的存储数据并存储在各个区块链节点上。这里,Hash计算、编码计算和Merkle树构造的具体方法例如可以参见Filecoin白皮书,在此不展开描述。
在一个区块链节点存储了上述信息之后,其应当提交零知识证明以证明其确实存储了相应的原始数据,此时该节点称为证明单元(如图4中的单元450)。然而,由于处理的数据较大(例如通常超过32G),因此逻辑上不可能对所有的数据处理过程都生成逻辑电路。对此,当前采用的一种解决方案是通过抽查原始数据500中的若干个列(例如18个列)来提供该零知识证明。
具体地,证明单元450可以随机选择其所存储的原始数据500中的多列(如图中所示的数据块51i、52i、……、5Li构成的列)数据,通过并行处理来为该多列数据产生零知识证明,从而证明其存储有待证明的原始数据500。证明单元450可以将产生的零知识证明发送给验证单元470以进行验证。在产生该零知识证明时,证明单元450和多个处理单元460可以利用如上所述的方法100执行并行操作以进行电路合成,从而产生针对原始数据500的零知识证明。
如上所述,证明单元450对原始数据500执行标签计算、哈希计算和编码计算并构造Merkle树以进行存储。
然后,证明单元450从所存储的原始数据500中选择多列数据,其中每列数据包括多个数据块。例如,所选择的多列数据包括如图5中所示由数据块511、521、……、5L1构成的列、由数据块512、522、……、5L2构成的列、……、由数据块51i、52i、……、5Li构成的列,以及由数据块51N、52N、……、5LN构成的列等,优选地可以选择18列数据。
证明单元450为所选择的多列数据构造一个通用电路610,该通用电路610用于基于该多列数据的逻辑电路的公共电路部分为该多列数据产生一个父约束系统P。
在一种实施例中,证明单元450可以基于该多列数据的逻辑电路确定一阶约束系统R1CS的多个第一类型变量和多个第二类型变量以及R1CS的约束个数,如上述子步骤111所述。
证明单元450基于该多列数据的逻辑电路确定R1CS的多个约束系数矩阵,如上述子步骤112所述。
证明单元450基于该多列数据的逻辑电路的公共电路部分确定一个父约束系统P,该父约束系统P对应于一个约束系数矩阵中的至少一个父约束和该至少一个父约束下的第一数量的变量,其中该第一数量的变量是该多个第一类型变量和多个第二类型变量中的至少一部分,如上面的子步骤113中所述。
证明单元450将该父约束系统P发送给多个处理单元460。
每个处理单元460(如处理单元4601)从证明单元450接收该父约束系统P,并且基于该多列数据的逻辑电路确定R1CS的多个约束系数矩阵,如上述表1所示和上述子步骤132所述。
具体地,处理单元4601基于该约束系数矩阵构建一个抽查子电路620(如图6所示的抽查子电路6201),并且利用该抽查子电路6201选择与父约束系统P中的至少一个父约束不同的至少一个子约束,并且基于该第一数量的变量在该至少一个子约束下的取值对该至少一个子约束进行赋值,以产生一个子约束系统subCS1的第一子矩阵P1,如上述子步骤132中所述。例如,如图6中所示,假设M个处理单元460参与电路合成,则可以构建M个抽查子电路6201、6202、……、620M。在一种实例中,M=18。
处理单元4601从多个第一类型变量和多个第二类型变量中选择与父约束系统P中的第一数量的变量不同的第二数量的变量,并基于该约束系数矩阵为该第二数量的变量进行赋值以产生子约束系统subCS1的第二子矩阵C1,如上述子步骤133中所述。
处理单元4601基于父约束系统P、子约束系统subCS1的第一子矩阵P1和第二子矩阵C1构成一个R1CS分量。
证明单元450从多个处理单元460分别接收多个不同的R1CS分量,其中每个R1CS分量包括父约束系统P和一个子约束系统subCS。如上所述,该子约束系统subCS是利用专用于每个处理单元460的抽查子电路基于父约束系统P得到的。
证明单元450对多个不同的R1CS分量进行合并以获得R1CS,并且基于该R1CS构造针对该多列数据的零知识证明以用于证明证明单元450存储了原始数据500。
图7示出了可以用来实施本发明的实施例的示例设备700的示意性框图。设备700例如可以是上述证明单元450或验证单元470,其包含多个处理器710,也可以是上述处理单元460。如图所示,设备700可以包括一个或多个中央处理器(CPU)710(图中仅示意性地示出了一个),其可以根据存储在只读存储器(ROM)720中的计算机程序指令或者从存储单元780加载到随机访问存储器(RAM)730中的计算机程序指令,来执行各种适当的动作和处理。例如,该计算机程序指令还可以包括用于实现上述方法100的程序代码和/或实现上述系统400中的模块410至440的程序代码。在RAM 730中,还可存储设备700操作所需的各种程序和数据。CPU 710、ROM 720以及RAM 730通过总线740彼此相连。输入/输出(I/O)接口750也连接至总线740。
设备700中的多个部件连接至I/O接口750,包括:输入单元760,例如键盘、鼠标等;输出单元770,例如各种类型的显示器、扬声器等;存储单元780,例如磁盘、光盘等;以及通信单元790,例如网卡、调制解调器、无线通信收发机等。通信单元790允许设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
上文所描述的方法100例如可由设备700的处理器710执行。例如,在一些实施例中,方法100可被实现为计算机软件程序,其被有形地包括于机器可读介质,例如存储单元780。在一些实施例中,计算机程序的部分或者全部可以经由ROM 720和/或通信单元790而被载入和/或安装到设备700上。当计算机程序被加载到RAM 730并由CPU 710执行时,可以执行上文描述的方法100的一个或多个操作。此外,通信单元790可以支持有线或无线通信功能。
以上结合图1至图7对根据本发明的用于零知识证明的电路合成方法100和使用该方法的数据存储证明系统400进行了描述。然而本领域技术人员可以理解,本文所述的用于零知识证明的电路合成方法100并不局限于图4所示的场景中,而是可以用于需要提供零知识证明的各种应用领域和场景中,如多方计算、安全计算等。此外,本领域技术人员可以理解,方法100的步骤的执行并不局限于图中所示和以上所述的顺序,而是可以以任何其他合理的顺序来执行。设备700也不必须包括图7中所示的所有组件,其可以仅仅包括执行本发明中所述的功能所必须的其中一些组件,并且这些组件的连接方式也不局限于图中所示的形式。例如,在设备700是诸如手机之类的便携式设备的情况下,设备700可以具有与图7中相比不同的结构。
本发明可以实现为方法、装置、系统和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于执行本发明的各个方面的计算机可读程序指令。
计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言-诸如Smalltalk、C++等,以及常规的过程式编程语言-诸如"C"语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络-包括局域网(LAN)或广域网(WAN)-连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。
这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理单元,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理单元执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包括一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

Claims (11)

1.一种用于零知识证明的电路合成方法,包括,由进行零知识证明的证明单元:
基于待证明数据的逻辑电路为所述待证明数据产生一个父约束系统;
将所述父约束系统发送给多个处理单元;
接收所述多个处理单元并行产生的多个不同的一阶约束系统分量,其中每个一阶约束系统分量包括所述父约束系统和一个子约束系统,所述子约束系统基于所述父约束系统得到;
对所述多个不同的一阶约束系统分量进行合并以获得所述一阶约束系统;以及
基于所述一阶约束系统构造针对所述待证明数据的零知识证明。
2.如权利要求1所述的电路合成方法,其中基于待证明数据的逻辑电路为所述待证明数据产生一个父约束系统包括:
基于所述待证明数据的逻辑电路确定所述一阶约束系统的多个第一类型变量和多个第二类型变量以及所述一阶约束系统的约束个数;
基于所述待证明数据的逻辑电路确定所述一阶约束系统的多个约束系数矩阵;以及
基于待证明数据的逻辑电路的公共电路部分确定所述父约束系统,其中所述父约束系统对应于所述约束系数矩阵中的至少一个父约束和该至少一个父约束下的第一数量的变量,其中该第一数量的变量是所述多个第一类型变量和多个第二类型变量中的至少一部分。
3.如权利要求2所述的电路合成方法,其中所述多个约束系数矩阵包括第一约束系数矩阵、第二约束系数矩阵和第三约束系数矩阵,所述第一约束系数矩阵指示多个第一约束,所述第二约束系数矩阵指示多个第二约束,所述第三约束系数矩阵指示多个第三约束,其中对于所述多个约束系数矩阵,满足第一约束与第二约束的乘积等于第三约束。
4.如权利要求2所述的电路合成方法,还包括,由多个处理单元中的每个处理单元:
从所述证明单元接收所述父约束系统;
基于所述约束系数矩阵选择与所述父约束系统中的至少一个父约束不同的至少一个子约束,并且基于所述第一数量的变量在所述至少一个子约束下的取值对所述至少一个子约束进行赋值,以产生一个子约束系统的第一子矩阵;
从所述多个第一类型变量和所述多个第二类型变量中选择与所述父约束系统中的第一数量的变量不同的、第二数量的变量,并基于所述约束系数矩阵为所述第二数量的变量进行赋值以产生所述子约束系统的第二子矩阵;以及
基于所述父约束系统、所述子约束系统的第一子矩阵和第二子矩阵构成一个一阶约束系统分量。
5.如权利要求4所述的电路合成方法,其中所述处理单元基于所述父约束系统、所述子约束系统的第一子矩阵和第二子矩阵构成一个一阶约束系统分量包括:
所述处理单元将所述父约束系统、所述子约束系统的第一子矩阵和第二子矩阵以及全零矩阵形成一个下三角矩阵,以作为所述一阶约束系统分量。
6.如权利要求3所述的电路合成方法,其中所述证明单元对所述多个不同的一阶约束系统分量进行合并以获得所述一阶约束系统包括:
将所述父约束系统作为所述一阶约束系统的第一子矩阵元素,将所述多个子约束系统的第一子矩阵分别作为所述一阶约束系统的列元素,将所述多个子约束系统的第二子矩阵分别作为所述一阶约束系统的对角元素,并且将所述一阶约束系统的其他元素设置为0来构建所述一阶约束系统。
7.一种用于零知识证明的电路合成设备,包括:
存储器,其上存储有计算机程序代码;以及
处理器,其被配置为运行所述计算机程序代码,以执行如权利要求1至6中任一项所述的方法。
8.一种计算机可读存储介质,其上存储有计算机程序代码,所述计算机程序代码在被运行时执行如权利要求1至6中任一项所述的方法。
9.一种数据存储证明系统,包括证明单元和多个处理单元,其中所述证明单元被配置为:
对原始数据执行标签计算、哈希计算和编码计算并构造Merkle树以进行存储;
从所存储的原始数据中选择多列数据,其中每列数据包括多个数据块;
为所述多列数据构造一个通用电路,所述通用电路用于基于所述多列数据的逻辑电路的公共电路部分为所述多列数据产生一个父约束系统;
将所述父约束系统发送给多个处理单元;
接收所述多个处理单元并行产生的多个不同的一阶约束系统分量,其中每个一阶约束系统分量包括所述父约束系统和一个子约束系统,所述子约束系统由所述处理单元利用多个抽查子电路中的一个抽查子电路基于所述父约束系统得到;
对所述多个不同的一阶约束系统分量进行合并以获得所述一阶约束系统;以及
基于所述一阶约束系统构造针对所述多列数据的零知识证明以用于证明所述证明单元存储了所述原始数据。
10.如权利要求9所述的数据存储证明系统,其中所述证明单元还被配置为:
基于所述多列数据的逻辑电路确定所述一阶约束系统的多个第一类型变量和多个第二类型变量以及所述一阶约束系统的约束个数;
基于所述多列数据的逻辑电路确定所述一阶约束系统的多个约束系数矩阵;以及
基于所述多列数据的逻辑电路的公共电路部分确定一个父约束系统,其中所述父约束系统对应于约束系数矩阵中的至少一个父约束和所述至少一个父约束下的第一数量的变量,其中所述第一数量的变量是所述多个第一类型变量和所述多个第二类型变量中的至少一部分。
11.如权利要求10所述的数据存储证明系统,其中,所述多个处理单元中的每个处理单元被配置为:
从所述证明单元接收所述父约束系统;
基于所述多列数据的逻辑电路确定所述一阶约束系统的多个约束系数矩阵;
基于所述约束系数矩阵构建一个抽查子电路,并且利用所述抽查子电路选择与所述父约束系统中的至少一个父约束不同的至少一个子约束,并且基于所述第一数量的变量在所述至少一个子约束下的取值对所述至少一个子约束进行赋值以产生一个子约束系统的第一子矩阵;
从所述多个第一类型变量和所述多个第二类型变量中选择与所述父约束系统中的第一数量的变量不同的第二数量的变量,并基于所述约束系数矩阵为所述第二数量的变量进行赋值以产生所述子约束系统的第二子矩阵;以及
基于所述父约束系统、所述子约束系统的第一子矩阵和第二子矩阵构成一个一阶约束系统分量。
CN202010830354.4A 2020-08-18 2020-08-18 电路合成方法、设备、介质和数据存储证明系统 Pending CN112632888A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010830354.4A CN112632888A (zh) 2020-08-18 2020-08-18 电路合成方法、设备、介质和数据存储证明系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010830354.4A CN112632888A (zh) 2020-08-18 2020-08-18 电路合成方法、设备、介质和数据存储证明系统

Publications (1)

Publication Number Publication Date
CN112632888A true CN112632888A (zh) 2021-04-09

Family

ID=75300040

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010830354.4A Pending CN112632888A (zh) 2020-08-18 2020-08-18 电路合成方法、设备、介质和数据存储证明系统

Country Status (1)

Country Link
CN (1) CN112632888A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113794567A (zh) * 2021-09-13 2021-12-14 上海致居信息科技有限公司 一种sha256哈希算法零知识证明电路的合成加速方法及装置

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050138585A1 (en) * 2003-12-18 2005-06-23 Eduard Cerny Method and apparatus for solving sequential constraints
CN103516522A (zh) * 2013-10-12 2014-01-15 湖南科技大学 一种基于零知识证明协议的芯核水印盲检测方法
CN104798375A (zh) * 2012-11-16 2015-07-22 联发科技股份有限公司 在3d视频编码中约束视差向量推导的方法及装置
CN107949997A (zh) * 2015-04-30 2018-04-20 法国矿业电信学校联盟 用于通信系统的空时编码
CN109379195A (zh) * 2018-12-18 2019-02-22 深圳前海微众银行股份有限公司 零知识证明电路的优化方法、装置、设备及可读存储介质
CN110428249A (zh) * 2019-07-25 2019-11-08 重庆邮电大学 一种基于零知识证明的侧链小额支付系统
CN110995438A (zh) * 2019-10-24 2020-04-10 南京可信区块链与算法经济研究院有限公司 一种非交互零知识证明方法、系统及存储介质
CN111077573A (zh) * 2019-12-30 2020-04-28 中国石油大学(北京) 一种确定地层弹性参数的方法、装置及系统
CN111373694A (zh) * 2020-02-21 2020-07-03 香港应用科技研究院有限公司 零知识证明硬件加速器及其方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050138585A1 (en) * 2003-12-18 2005-06-23 Eduard Cerny Method and apparatus for solving sequential constraints
CN104798375A (zh) * 2012-11-16 2015-07-22 联发科技股份有限公司 在3d视频编码中约束视差向量推导的方法及装置
CN103516522A (zh) * 2013-10-12 2014-01-15 湖南科技大学 一种基于零知识证明协议的芯核水印盲检测方法
CN107949997A (zh) * 2015-04-30 2018-04-20 法国矿业电信学校联盟 用于通信系统的空时编码
CN109379195A (zh) * 2018-12-18 2019-02-22 深圳前海微众银行股份有限公司 零知识证明电路的优化方法、装置、设备及可读存储介质
CN110428249A (zh) * 2019-07-25 2019-11-08 重庆邮电大学 一种基于零知识证明的侧链小额支付系统
CN110995438A (zh) * 2019-10-24 2020-04-10 南京可信区块链与算法经济研究院有限公司 一种非交互零知识证明方法、系统及存储介质
CN111077573A (zh) * 2019-12-30 2020-04-28 中国石油大学(北京) 一种确定地层弹性参数的方法、装置及系统
CN111373694A (zh) * 2020-02-21 2020-07-03 香港应用科技研究院有限公司 零知识证明硬件加速器及其方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
NIAN-ZE LEE ET AL.: "Toward Unification of Synthesis and Verification in Topologically Constrained Logic Design", 《PROCEEDINGS OF IEEE》, vol. 103, no. 11, 30 November 2015 (2015-11-30), pages 2052 - 2060, XP011587964, DOI: 10.1109/JPROC.2015.2476472 *
汪元美 等: "多准则图像重建的神经网络实现", 《通信学报》, no. 05, 25 May 1992 (1992-05-25), pages 102 - 106 *
王会勇 等: "基于多密钥同态技术的安全多方计算协议", 《华南理工大学学报(自然科学版)》, no. 07, 15 July 2017 (2017-07-15), pages 75 - 82 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113794567A (zh) * 2021-09-13 2021-12-14 上海致居信息科技有限公司 一种sha256哈希算法零知识证明电路的合成加速方法及装置
CN113794567B (zh) * 2021-09-13 2024-04-05 上海致居信息科技有限公司 一种sha256哈希算法零知识证明电路的合成加速方法及装置

Similar Documents

Publication Publication Date Title
Esgin et al. Practical exact proofs from lattices: New techniques to exploit fully-splitting rings
US11575511B2 (en) System for simplifying executable instructions for optimised verifiable computation
WO2020124317A1 (en) Multi-access edge computing node with distributed ledger
CN111008840B (zh) 一种业务处理系统、业务处理的方法、装置及设备
US10733082B2 (en) Computer program and server for executing test group distribution method
JP6069852B2 (ja) 情報処理装置、情報処理方法、及びプログラム
US10523422B2 (en) Tampering detection device, tampering detection method and program
CN111724169B (zh) 一种业务处理系统、业务处理的方法、装置及设备
CN113570030B (zh) 数据处理方法、装置、设备以及存储介质
CN110766410B (zh) 基于默克尔树的可信跨链事件构造与验证方法和设备
CN111585770B (zh) 分布式获取零知识证明的方法、设备、介质和系统
CN112651046A (zh) 跨链交易的数据同步方法、装置、系统及终端设备
US20240005165A1 (en) Machine learning model training method, prediction method therefor, apparatus, device, computer-readable storage medium, and computer program product
CN112632888A (zh) 电路合成方法、设备、介质和数据存储证明系统
US10771241B2 (en) Time authentication method, apparatus and device in blockchain-type ledger
WO2021028574A1 (en) Secure identity card using unclonable functions
CN111464319A (zh) 一种基于中心化块链式账本的交易存储、签名校验方法
Zhou et al. Efficient inner product arguments and their applications in range proofs
WO2016056502A1 (ja) 非減少列判定装置、非減少列判定方法及びプログラム
Mouris et al. Privacy-preserving ip verification
US20220391529A1 (en) Searching, matching, and masking of composite formats
US11062001B2 (en) Matrix transformation-based authentication
Soleymani et al. Non-adaptive Quantitative Group Testing via Plotkin-Type Constructions
CN116488816A (zh) 一种基于区块链网络的数据处理方法、装置及存储介质
KR102283161B1 (ko) Crs 기반의 영지식 증명 방법 및 이를 수행하는 단말 장치

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination