零知识证明电路的优化方法、装置、设备及可读存储介质与流程

文档序号:16935974发布日期:2019-02-22 20:42阅读:306来源:国知局
零知识证明电路的优化方法、装置、设备及可读存储介质与流程

本发明涉及密码学技术领域,尤其涉及一种零知识证明电路的优化方法、装置、设备及可读存储介质。



背景技术:

零知识证明是一种密码学的证明思想,示证者与验证者共同协商好一个规则,在该规则中,示证者在不暴露自身私密证据的情况下,向验证者提供一串密文,验证者通过验证密文,能够相信示证者拥有相应的私密证据,而验证者却无法知道私密证据的内容。零知识证明技术的引入,有效的提高的区块链上数据的隐私性,但由于零知识证明的实现较为复杂,目前出现的落地方案zcash,仅仅停留在可用的阶段,并未考虑性能和易用性。在零知识证明的实际应用中,最关键的步骤是根据具体的应用场景设计零知识证明电路。零知识证明电路描述了场景中各个数据对象间的映射关系,零知识电路将场景中的公开参数和秘密参数的映射关系联系在一起,为参数构造了约束关系。只有满足电路约束关系的参数,才是符合具体场景的参数。

根据一个场景设计一个零知识证明电路,是需要涉及复杂的,大量变量的设计。目前的零知识证明电路,仅仅只抽象了参数设计的方式,化繁为简,根据不同场景,实现了较为可用的,可编程的零知识证明电路。目前的零知识证明电路虽然带来可用性,但在零知识证明电路中却引入了大量的中间参数,降低了零知识证明电路对应程序的执行效率。从存储空间上来说,零知识证明电路中的中间参数需要占用很大的存储空间,对于普通用户使用的终端而言,这是终端无法接受的。从时间上来说,大量的中间参数造成了零知识证明电路对应程序的运行时间很长,无法满足现有的高频率交易的需求。



技术实现要素:

本发明的主要目的在于提供一种零知识证明电路的优化方法、装置、设备及可读存储介质,旨在解决现有的零知识证明电路占用的存储空间大,且零知识证明电路对应程序的运行时间长,执行效率低下的技术问题。

为实现上述目的,本发明提供一种零知识证明电路的优化方法,所述零知识证明电路的优化方法包括步骤:

当侦测到优化零知识证明电路的优化指令后,根据所述优化指令获取所述零知识证明电路对应的约束集合;

按照预设遍历方式遍历所述约束集合中的各个约束,确定所述约束输入中存在常数项的目标约束;

构建所述目标约束对应的并查集,并删除所述约束集合中的所述目标约束,以得到优化后的所述零知识证明电路。

优选地,所述构建所述目标约束对应的并查集的步骤包括:

将所述目标约束中约束输入的常数项与所述约束输入的变量系数相乘,得到乘积,并将所述乘积和所述目标约束中约束输出的变量系数确定为所述目标约束对应并查集的权值;

将所述目标约束对应的变量确定为同类项,将同类项的所述变量加入所述并查集中,得到所述目标约束对应的并查集。

优选地,所述删除所述约束集合中的所述目标约束,以得到优化后的所述零知识证明电路的步骤包括:

删除所述约束集合中的所述目标约束,判断所述约束集合中是否存在未遍历的约束;

若所述约束集合中存在未遍历的所述约束,则检测未遍历的所述约束的输入中是否存在常数项;

若未遍历的所述约束的输入中不存在常数项,则将未遍历的所述约束标记为已遍历约束,以得到优化后的所述零知识证明电路。

优选地,所述若所述约束集合中存在未遍历的所述约束,则检测未遍历的所述约束的输入中是否存在常数项的步骤之后,还包括:

若未遍历的所述约束的输入中存在常数项,则返回执行所述确定所述约束输入中存在常数项的目标约束的步骤。

优选地,所述构建所述目标约束对应的并查集,并删除所述约束集合中的所述目标约束的步骤之后,还包括:

将删除目标约束后的所述约束集合确定为约束数组,以递归的形式将所述约束数组拆分成左右子区间,其中,递归的结束条件为各个子区间中的约束个数为1个;

按照拆分的递归顺序反向回溯至最顶层递归,以得到优化后的所述零知识证明电路,其中,在回溯过程中,在每一个递归中将两个子区间归并为一个子区间。

优选地,所述按照拆分的递归顺序反向回溯至最顶层递归的步骤包括:

获取左右两个子区间中的约束,并分别记为第一约束和第二约束;

追溯所述第一约束对应变量的并查集祖先,记为第一并查集祖先,以及追溯所述第二约束对应变量的并查集祖先,记为第二并查集祖先;

若通过全序关系函数确定所述第一并查集祖先与所述第二并查集祖先相等,则删除所述第一约束,将所述第二约束写入归并后的子区间中,得到归并后的子区间,并将归并后的子区间返回给上层递归,以回溯至最顶层递归;

若通过全序关系函数确定所述第一并查集祖先与所述第二并查集祖先不相等,但确定所述第一并查集祖先大于所述第二并查集祖先,则删除所述第一约束,并将所述第二约束写入归并后的子区间中,以回溯至最顶层递归。

优选地,所述按照预设遍历方式遍历所述约束集合中的各个约束的步骤包括:

按照深度优先的遍历方式遍历所述约束集合中的各个约束。

此外,为实现上述目的,本发明还提供一种零知识证明电路的优化装置,所述零知识证明电路的优化装置包括:

获取模块,用于当侦测到优化零知识证明电路的优化指令后,根据所述优化指令获取所述零知识证明电路对应的约束集合;

遍历模块,用于按照预设遍历方式遍历所述约束集合中的各个约束;

确定模块,用于确定所述约束输入中存在常数项的目标约束;

构建模块,用于构建所述目标约束对应的并查集;

删除模块,用于删除所述约束集合中的所述目标约束,以得到优化后的所述零知识证明电路。

此外,为实现上述目的,本发明还提供一种零知识证明电路的优化设备,所述零知识证明电路的优化设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的零知识证明电路的优化程序,所述零知识证明电路的优化程序被所述处理器执行时实现如上所述的零知识证明电路的优化方法的步骤。

此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有零知识证明电路的优化程序,所述零知识证明电路的优化程序被处理器执行时实现如上所述的零知识证明电路的优化方法的步骤。

本发明通过在侦测到优化零知识证明电路的优化指令后,根据优化指令获取零知识证明电路对应的约束集合;按照预设遍历方式遍历约束集合中的各个约束,确定约束输入中存在常数项的目标约束;构建目标约束对应的并查集,并删除约束集合中的目标约束,以得到优化后的零知识证明电路,减少了零知识证明电路对应约束集合中的约束个数,降低了零知识证明电路占用的存储空间,在零知识证明电路对应程序的运行过程中,提高了遍历约束集合中约束的遍历效率,缩短了零知识证明电路对应程序的运行时长,提高了零知识证明电路对应程序的执行效率。

附图说明

图1是本发明实施例方案涉及的硬件运行环境的结构示意图;

图2是本发明零知识证明电路的优化方法较佳实施例的流程示意图;

图3是本发明实施例中约束的电路表示的一种示意图;

图4是本发明实施例构建所述目标约束对应的并查集,并删除所述约束集合中的所述目标约束,以得到优化后的所述零知识证明电路的一种流程示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,图1是本发明实施例方案涉及的硬件运行环境的结构示意图。

需要说明的是,图1即可为零知识证明电路的优化设备的硬件运行环境的结构示意图。本发明实施例零知识证明电路的优化设备可以是pc,便携计算机等终端设备。

如图1所示,该零知识证明电路的优化设备可以包括:处理器1001,例如cpu,用户接口1003,网络接口1004,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如wi-fi接口)。存储器1005可以是高速ram存储器,也可以是稳定的存储器(non-volatilememory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图1中示出的零知识证明电路的优化设备结构并不构成对零知识证明电路的优化设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及零知识证明电路的优化程序。其中,操作系统是管理和控制零知识证明电路的优化设备硬件和软件资源的程序,支持零知识证明电路的优化程序以及其它软件或程序的运行。

在图1所示的零知识证明电路的优化设备中,用户接口1003可用于侦测优化指令,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;而处理器1001可以用于调用存储器1005中存储的零知识证明电路的优化程序,并执行以下操作:

当侦测到优化零知识证明电路的优化指令后,根据所述优化指令获取所述零知识证明电路对应的约束集合;

按照预设遍历方式遍历所述约束集合中的各个约束,确定所述约束输入中存在常数项的目标约束;

构建所述目标约束对应的并查集,并删除所述约束集合中的所述目标约束,以得到优化后的所述零知识证明电路。

进一步地,所述构建所述目标约束对应的并查集的步骤包括:

将所述目标约束中约束输入的常数项与所述约束输入的变量系数相乘,得到乘积,并将所述乘积和所述目标约束中约束输出的变量系数确定为所述目标约束对应并查集的权值;

将所述目标约束对应的变量确定为同类项,将同类项的所述变量加入所述并查集中,得到所述目标约束对应的并查集。

进一步地,所述删除所述约束集合中的所述目标约束,以得到优化后的所述零知识证明电路的步骤包括:

删除所述约束集合中的所述目标约束,判断所述约束集合中是否存在未遍历的约束;

若所述约束集合中存在未遍历的所述约束,则检测未遍历的所述约束的输入中是否存在常数项;

若未遍历的所述约束的输入中不存在常数项,则将未遍历的所述约束标记为已遍历约束,以得到优化后的所述零知识证明电路。

进一步地,所述若所述约束集合中存在未遍历的所述约束,则检测未遍历的所述约束的输入中是否存在常数项的步骤之后,处理器1001还可以用于调用存储器1005中存储的基于区块链的零知识证明电路的优化程序,并执行以下步骤:

若未遍历的所述约束的输入中存在常数项,则返回执行所述确定所述约束输入中存在常数项的目标约束的步骤。

进一步地,所述构建所述目标约束对应的并查集,并删除所述约束集合中的所述目标约束的步骤之后,处理器1001还可以用于调用存储器1005中存储的基于区块链的零知识证明电路的优化程序,并执行以下步骤:

将删除目标约束后的所述约束集合确定为约束数组,以递归的形式将所述约束数组拆分成左右子区间,其中,递归的结束条件为各个子区间中的约束个数为1个;

按照拆分的递归顺序反向回溯至最顶层递归,以得到优化后的所述零知识证明电路,其中,在回溯过程中,在每一个递归中将两个子区间归并为一个子区间。

进一步地,所述按照拆分的递归顺序反向回溯至最顶层递归的步骤包括:

获取左右两个子区间中的约束,并分别记为第一约束和第二约束;

追溯所述第一约束对应变量的并查集祖先,记为第一并查集祖先,以及追溯所述第二约束对应变量的并查集祖先,记为第二并查集祖先;

若通过全序关系函数确定所述第一并查集祖先与所述第二并查集祖先相等,则删除所述第一约束,将所述第二约束写入归并后的子区间中,得到归并后的子区间,并将归并后的子区间返回给上层递归,以回溯至最顶层递归;

若通过全序关系函数确定所述第一并查集祖先与所述第二并查集祖先不相等,但确定所述第一并查集祖先大于所述第二并查集祖先,则删除所述第一约束,并将所述第二约束写入归并后的子区间中,以回溯至最顶层递归。

进一步地,所述按照预设遍历方式遍历所述约束集合中的各个约束的步骤包括:

按照深度优先的遍历方式遍历所述约束集合中的各个约束。

基于上述的结构,提出零知识证明电路的优化方法的各个实施例。

参照图2,图2为本发明零知识证明电路的优化方法较佳实施例的流程示意图。

本发明实施例提供了零知识证明电路的优化方法的实施例,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。

首先,对本发明实施例所需要用到的专业名词进行解释。

①零知识证明:一种密码学的证明思想,示证者与验证者共同协商好一个规则。在该规则中,示证者在不暴露自身私密证据的情况下,向验证者提供一串密文,验证者通过验证密文,能够相信示证者拥有相应的私密证据,而验证者却无法知道私密证据的内容。

②公开参数:零知识证明中,示证者向验证者提供的证明信息中的可公开部分。

③秘密参数:零知识证明中,示证者所持有的秘密的信息。示证者希望让验证者知道其拥有这些秘密,但却不向验证者暴露这些信息。

④零知识证明电路:示证者与验证者共同协商好的规则,在具体算法中的实现。描述的是公开参数与秘密参数的映射关系。在进行零知识证明前,验证者和示证者协商好公开参数与秘密参数之间的映射关系。示证者在提供证据时,提供的是公开参数和秘密参数转化后的proof字段。验证者在验证时,验证proof字段和公开参数是否满足之前协商好的映射关系。若满足映射关系,则验证者可确信示证者是拥有相应的秘密参数的。此映射关系,即是零知识证明电路。

⑤proof:一串密文,由示证者在prove(证明)阶段生成。示证者根据自己拥有的公开参数和秘密参数,计算零知识电路中的各个电路变量,再利用公开参数,将变量转化成proof。验证者可验证proof的正确性,进而相信示证者拥有相应的秘密参数信息,但却不能通过proof反推示证者的秘密参数。

⑥零知识证明电路的变量:是场景中的数据对象,即“参”数在零知识电路中的具体表示,变量可以是公开参数的表示,可以是秘密参数的表示,也可以是中间的临时参数的表示。

⑦约束constrant:描述了变量间的映射关系。具体说,是描述了三个变量的乘法关系,即a×b=c。在零知识证明电路中,通过借助单位变量和临时变量,可以用一系列的变量的乘法关系,构造出各种复杂的逻辑。

⑧零知识证明的setup(初始化)阶段:整个零知识证明的系统初始化阶段,生成系统所依赖的公共参数。该过程耗时很长,是零知识证明的一个性能瓶颈。

⑨零知识证明的prove阶段:生成证明的过程。示证者要向验证者提供相关的零知识证明内容,即proof。prove阶段是生成此零知识证明内容的过程。此过程耗时很长,是零知识证明实际应用落地的一个重要的性能瓶颈。

在在零知识证明的setup阶段,需要将零知识证明电路转化成公共参数。首先是将电路通过r1cs(rank-1constraintsystem)的方法拆分并转化成等价的向量点积形式,得到向量关系,再用qap(quadraticarithmeticprograms,二次算术规划)的方法把向量关系转化成多项式形式的验证。之后用拉格朗日差值法或傅里叶变换的方法将多项式的相关系数计算出来。多项式的相关系数,即为零知识证明时的公开参数。此过程复杂度极大,设零知识证明电路的变量个数为v,约束个数为c,则setup阶段的计算复杂度为vc2。setup阶段的时间是零知识证明是否能在某个场景真正落地应用的重要指标。在某些场景下,根据场景设计的零知识证明系统,往往因为setup阶段时间过长,而无法真正落地使用。

在零知识证明的prove阶段,示证者需要生成proof。示证者根据自己拥有的公开参数和秘密参数,计算零知识电路中的各个电路变量,再利用公开参数,将变量转化成proof,此过程的计算复杂度为vc。由于此过程在零知识证明的系统中需要频繁的进行(每个示证者在进行一次操作时,都需要进行一次prove),故prove的执行效率也是零知识证明系统是否能够真正落地应用的重要指标。在某些场景下,每次prove都需要较长的时间,导致零知识证明系统无法满足高频操作的要求。因此提出以下零知识证明电路的优化方法。

零知识证明电路的优化方法应用于服务器或者终端中,终端可以包括诸如手机、穿戴设备、平板电脑、笔记本电脑、掌上电脑、个人数字助理(personaldigitalassistant,pda)等移动终端,以及诸如数字tv、台式计算机等固定终端。零知识证明电路的优化方法的各个实施例中,为了便于描述,省略执行主体进行阐述各个实施例。零知识证明电路的优化方法包括:

步骤s10,当侦测到优化零知识证明电路的优化指令后,根据所述优化指令获取所述零知识证明电路对应的约束集合。

当侦测到优化零知识证明电路的优化指令后,根据该优化指令获取零知识证明电路对应的约束集合。其中,优化指令可由用户根据具体需要而触发,也可由服务器或者终端中预先设置好的定时任务而触发。在该约束集合中,存在多个约束。需要说明的是,本发明实施例中的零知识证明电路是对应开发人员已编辑好的,本发明是对编辑好的零知识证明电路进行二次处理。零知识证明电路是将实际场景中的逻辑关系拆分成极小的逻辑关系,用乘法的约束关系构造一个庞大的电路。零知识证明电路的变量是电路中最小的数据对象,约束是对电路中某三个变量间乘法关系的一种描述。零知识电路通过构造若干个变量和约束,构造一个庞大的电路,来实现实际场景中的逻辑关系。例如,三个变量a,b和c,一个约束条件为a×b=c,则此约束的电路可参照图3所示,这三个变量可为公开参数、秘密参数和/或临时参数。在零知识证明电路中,存在复杂的逻辑关系,该复杂的逻辑关系是通过对图3所示的约束的层层封装得到的。

步骤s20,按照预设遍历方式遍历所述约束集合中的各个约束,确定约束输入中存在常数项的目标约束。

当获取到约束集合后,按照预设遍历方式遍历约束集合中的各个约束,并确定约束输入中存在常数项的约束,并将约束输入中存在常数项的约束为目标约束。如在约束a×b=c中,约束输入为变量a和b,约束输出为变量c。常数项为多项式中,每个单项式上不含字母的项叫常数项。如在xa×y=zb约束中,xa和y为约束输入,zb为约束输出,约束输入中存在常数项为y;在x×ya=zb约束中,x和ya为约束输入,zb为约束输出,约束输入中存在常数项x。其中,预设遍历方式可根据具体需要而设置,如可将预设遍历方式设置为从零知识证明电路的最外层开始往里面遍历,也可将预设遍历方式设置为随机遍历约束集合中的各个约束,也可将预设遍历方式设置为按照广度优先搜索的方式遍历约束结合中的各个约束。

进一步地,若约束集合中的某个约束的约束输入中不存在常数项,则为该约束输入中不存在常数项的约束添加已遍历标识。

进一步地,为了提高了优化零知识证明电路的优化效率,所述按照预设遍历方式遍历所述约束集合中的各个约束的步骤包括:

步骤a,按照深度优先的遍历方式遍历所述约束集合中的各个约束。

进一步地,当获取到约束集合后,按照深度优先的遍历方式遍历约束集合中的各个约束。具体地,在按照深度优先的遍历方式遍历约束集合过程中,优先获取存在共同节点的约束。如存在e×f=a,a×b=c和d×l=m这三个约束时,由于约束e×f=a和约束a×b=c存在共同节点a,因此在按照深度优先的遍历方式遍历过程中,先获取到约束e×f=a后,然后继续获取约束a×b=c,最后再获取约束d×l=m。

深度优先遍历图的方法是,从图中某顶点v出发:①访问顶点v;②依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问;③若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。

步骤s30,构建所述目标约束对应的并查集,并删除所述约束集合中的所述目标约束,以得到优化后的所述零知识证明电路。

当确定约束集合中的目标约束后,构建目标约束对应的并查集,并删除约束集合中的目标约束,以删除约束集合中的冗余变量,得到优化后的零知识证明电路。

进一步地,所述构建所述目标约束对应的并查集的步骤包括:

步骤b,将所述目标约束中约束输入的常数项与所述约束输入的变量系数相乘,得到乘积,并将所述乘积和所述目标约束中约束输出的变量系数确定为所述目标约束对应并查集的权值。

步骤c,将所述目标约束对应的变量确定为同类项,将同类项的所述变量加入所述并查集中,得到所述目标约束对应的并查集。

具体地,构建目标约束对应的并查集的过程为:获取目标约束中约束输入的常数项和约束输入的变量系数,将该常数项与约束输入的变量系数相乘,以将常数项并入约束输入的变量系数中,得到目标约束中约束输入的常数项与约束输入的变量系数的乘积,将该乘积和目标约束中约束输出的变量系数确定为目标约束对应并查集的权值,将目标约束对应的变量确定为同类项,即将目标约束中的输入变量和输出变量确定为同类项,将确定为同类项的变量加入并查集中,得到目标约束对应的并查集。如在约束xa×y=zb中,约束的左侧输入y为常数项,左侧输入x为约束输入的变量系数,则将常数项与约束输入的变量系数相乘,得到目标约束中约束输入的常数项与约束输入的变量系数的乘积为xy,则可确定目标约束对应并查集的权值为xy和z,合并目标约束xa×y=zb中的变量,得到转换后的目标约束为xya=zb,使目标约束xa×y=zb存在的两个输入变量(xa和y)合并为一个输入变量(xya),以删除约束集合中的冗余变量,此时,a和b为同类项,对应删除约束集合中的目标约束xa×y=zb。

进一步地,若在约束集合的其它约束中存在可用同类项替换的输入变量或者输出变量,则可用同类项替换对应变量,以合并约束集合中的变量,减少约束集合中的变量。如若存在目标约束a×2000=b和约束b×c=d,则可得到2000a=b,此时变量b是冗余的,可以用变量2000a来直接表示变量b作为下一个约束的输入,即2000a×c=d,此时,可删除约束a×2000=b和约束b×c=d。

本实施例通过在侦测到优化零知识证明电路的优化指令后,根据优化指令获取零知识证明电路对应的约束集合;按照预设遍历方式遍历约束集合中的各个约束,确定约束输入中存在常数项的目标约束;构建目标约束对应的并查集,并删除约束集合中的目标约束,以得到优化后的零知识证明电路,减少了零知识证明电路对应约束集合中的约束个数,降低了零知识证明电路占用的存储空间,在零知识证明电路对应程序的运行过程中,提高了遍历约束集合中约束的遍历效率,缩短了零知识证明电路对应程序的运行时长,提高了零知识证明电路对应程序的执行效率。

进一步地,提出本发明零知识证明电路的优化方法第二实施例。

所述零知识证明电路的优化方法第二实施例与所述零知识证明电路的优化方法第一实施例的区别在于,步骤s30包括:

步骤d,删除所述约束集合中的所述目标约束,判断所述约束集合中是否存在未遍历的约束。

构建目标约束对应的并查集,并删除约束集合中的目标约束,判断约束集合中是否存在未遍历的约束。需要说明的是,当遍历了约束集合中的某个约束时,会为该约束添加已遍历标识。在本发明实施例中不限制已遍历标识的表现形式。当约束集合中存在未携带已遍历标识的约束时,确定约束集合中存在未遍历的约束;当约束集合中不存在未携带已遍历标识的约束时,确定约束集合中不存在未遍历的约束,即约束集合中的所有约束都已遍历过了,结束遍历流程。

步骤e,若所述约束集合中存在未遍历的所述约束,则检测未遍历的所述约束的输入中是否存在常数项。

步骤f,若未遍历的所述约束的输入中不存在常数项,则将未遍历的所述约束标记为已遍历约束,以得到优化后的所述零知识证明电路。

若约束集合中存在未遍历的约束,则检测未遍历的约束的输入中是否存在常数项。若未遍历的约束的输入中不存在常数项,则将未遍历的约束标记为已遍历约束,即为该约束添加已遍历标识,并继续检测未遍历的约束的输入中是否存在常数项,直到约束集合中不存在未遍历的约束,得到优化后的零知识证明电路。

进一步地,所述零知识证明电路的优化方法还包括:

步骤g,若未遍历的所述约束的输入中存在常数项,则返回执行所述确定所述约束输入中存在常数项的目标约束的步骤。

若检测到未遍历的约束的输入中存在常数项,则返回执行确定约束输入中存在常数项的目标约束,此时,将未遍历约束的输入中存在常数项的约束确定为目标约束。

本实施例通过在删除约束集合中的目标约束后,判断约束集合中是否存在未遍历的约束,若约束集合中存在未遍历的约束,且检测到未遍历的约束的输入中不存在常数项,则将未遍历的约束标记为已遍历约束,以得到优化后的零知识证明电路,避免约束集合中存在未遍历的约束,进一步降低了零知识证明电路占用的存储空间,缩短了零知识证明电路对应程序的运行时长。

进一步地,提出本发明零知识证明电路的优化方法第三实施例。

所述零知识证明电路的优化方法第三实施例与所述零知识证明电路的优化方法第一或第二实施例的区别在于,参照图4,步骤s30还包括:

步骤s31,将删除目标约束后的所述约束集合确定为约束数组,以递归的形式将所述约束数组拆分成左右子区间,其中,递归的结束条件为各个子区间中的约束个数为1个。

构建目标约束对应的并查集,并删除约束集合中的目标约束,将删除目标约束后的约束集合确定为约束数组,以递归的形式将约束数组拆分成左右子区间,其中,递归的结束条件为各个子区间中的约束个数为1个,即各个子区间中含有一个携带已遍历标识的约束。需要说明的是,递归的结束条件也可设置为各个子区间中的约束个数至少为1个。

如当约束数组中存在a、b、c、d、e、f、g和h这8个约束时,在拆分过程中,先将a、b、c和d拆分为左边的第一子区间,将e、f、g和h拆分为右边的第一子区间,若此时两个子区间都只存在1个约束,则结束拆分约束数组的拆分操作;若此时a、b、c和d中还存在至少2个约束,则将a、b、c和d拆分成a和b,c和d两个子区间,若此时a和b,以及c和d子区间中都只存在一个约束,则结束拆分操作,依此类推。进一步地,若拆分后的某个子区间中不存在约束,则可重新拆分,以保证该子区间中存在1个约束。

步骤s32,按照拆分的递归顺序反向回溯至最顶层递归,以得到优化后的所述零知识证明电路,其中,在回溯过程中,在每一个递归中将两个子区间归并为一个子区间。

当得到拆分后的子区间后,按照拆分的递归顺序反向回溯至最顶层递归,以得到优化后的零知识证明电路,其中,在回溯过程中,在每一个递归中将两个子区间合并为一个子区间。具体地,如当约束数组的左边拆分后得到4个区间,分别为a1,a2,a3和a4,在按照拆分的递归顺序反向回溯过程,先回溯a1和a2,以及a3和a4,若a1和a2回溯后所得的子区间为a12,a3和a4回溯后所得的子区间为a34,则继续回溯a12和a34,得到a12和a34对应的子区间,依次类推,最终得到的那个子区间,即最顶层递归所得递归结果即为优化后的约束数组,优化的约束数组即为优化后的零知识证明电路。

进一步地,按照拆分的递归顺序反向回溯至最顶层递归的步骤包括:

步骤h,获取左右两个子区间中的约束,并分别记为第一约束和第二约束。

步骤i,追溯所述第一约束对应变量的并查集祖先,记为第一并查集祖先,以及追溯所述第二约束对应变量的并查集祖先,记为第二并查集祖先。

具体地,按照拆分的递归顺序反向回溯至最顶层递归的过程为:按照归并方向获取左右两个子区间中的约束,并分别记为第一约束和第二约束。其中,归并方向为拆分的递归顺序的反方向。如在拆分时,是从中间往外拆分,在归并时,是从外边往中间归并。具体地,可参照上述描述的回溯过程。可以理解的是,第一约束和第二约束是约束集合中未被删除的约束。

当确定第一约束和第二约束后,追溯第一约束对应变量的并查集祖先,记为第一并查集祖先,以及追溯第二约束对应变量的并查集祖先,记为第二并查集祖先。需要说明的是,在本发明实施例中的并查集祖先都是指各个约束最原始的祖先。如在并查集中,变量m、变量n和变量s为同类项,但m是最先存储的,然后是变量n,最后是变量s,则m是n和s的并查集祖先,即存在an=bm的关系,a和b的大小可根据具体需要而设置。

步骤j,若通过全序关系函数确定所述第一并查集祖先与所述第二并查集祖先相等,则删除所述第一约束,将所述第二约束写入归并后的子区间中,得到归并后的子区间,并将归并后的子区间返回给上层递归,以回溯至最顶层递归。

当得到第一并查集祖先和第二并查集祖先后,通过全序关系函数判断第一并查集祖先和第二并查集祖先是否相等。其中,全序关系是在x上的反对称的、传递的和完全的任何二元关系。全序的定义为:设集合x上有一全序关系,如果我们把这种关系用≤表述,则下列陈述对于x中的所有a,b和c成立:如果a≤b且b≤a,则a=b(反对称性);如果a≤b且b≤c,则a≤c(传递性);a≤b或b≤a(完全性)。全序集合形成了偏序集合的范畴的全子范畴,通过是关于这些次序的映射的态射,比如,映射f使得“如果a≤b则f(a)≤f(b)”,在两个全序集合间的关于两个次序的双射是在这个范畴内的同构。如x是任何集合,而f是从x到一个全序集合的单射函数,则f诱导出x上的一个全序:规定x1<x2当且仅当f(x1)<f(x2)。

若通过全序关系函数确定第一并查集祖先与第二并查集祖先相等,则删除其中一个约束,即可删除第一约束,也可删除第二约束。若删除第一约束,则将第二约束写入归并后的子区间中,得到归并后的子区间,并将归并后的子区间返回给上层递归,具体地,将第二约束写入到归并后子区间的末端;若删除第二约束,则将第一约束写入归并后的子区间中,依次类推,直至回溯至最顶层递归。如先回溯a1和a2,以及a3和a4,若a1和a2回溯后所得的子区间为a12,a3和a4回溯后所得的子区间为a34,此时将a1和a2归并后的约束写入a12中,a3和a4归并后的约束写入a34中,a12为a1和a2的归并后的子区间,a34为a3和a4的归并后的子区间,上层递归对应的子区间a12和a34,下一步回溯子区间a12和a34。若子区间a1中存在a和b两个约束,a2存在c和d两个约束,在通过并查集祖先对应后,删除了约束a,则归并后的子区间a12中存在b、c和d三个约束。

在定义两个约束之间的关系过程中,只要能够定义全序关系函数h()为一个全序关系的函数即可,不限定采用哪种全序关系的函数。任意满足条件的h()的函数,都可作为约束大小判断的函数,如当h()有6个输入参数,即h(a,b,c,d,e,f),h(a,b,c,d,e,f)为全序关系(所有参数值传入,结果都可比较)。若h(a1,b1,c1,d1,e1,f1)=h(a2,b2,c2,d2,e2,f2)则必然a1=a2,b1=b2,c1=c2,d1=d2,e1=e2和f1=f2。具体地,若全序关系函数h()有6个输入参数,分别为a,b,c,d,e,f,且这6个输入参数的大小为在0至9之前取值,则全序关系函数可为h(a,b,c,d,e,f)=a+10b+100c+1000d+10000e+10000f。

如若第一约束为c1,第二约束为c2,约束c1为:x2a1×y2b1=z2c1,其中,a1、b1和c1的并查集祖先对应为pa1、pb1和pc1;约束c2为:x2a2×y2b2=z2c2,其中,a2、b2和c2的并查集祖先对应为pa2、pb2和pc2。在判断c1和c2的关系时,h()参数的传入的顺序必须一致。将c1和c2的并查集祖先按照相同的方式排列,作为参数传入h()中,如hc1=h(pa1,pb1,pc1,x1,y1,z1)和hc2=h(pa2,pb2,pc2,x2,y2,z2),比较hc1和hc2,即可得到c1与c2的大小关系。

进一步地,当递归的结束条件也可设置为各个子区间中的约束个数至少为1个时,在将第二约束写入归并后的子区间中后,判断对应子区间中是否还存在未归并的约束,即判断对应子区间中是否还存在携带已遍历标识的约束。若对应子区间中存在未归并的约束,则按照拆分的递归顺序反向回溯至最顶层递归。

步骤k,若通过全序关系函数确定所述第一并查集祖先与所述第二并查集祖先不相等,但确定所述第一并查集祖先大于所述第二并查集祖先,则删除所述第一约束,并将所述第二约束写入归并后的子区间中,以回溯至最顶层递归。

若通过全序关系函数确定第一并查集祖先与第二并查集祖先不相等,则通过全序关系函数确定第一并查集祖先和第二并查集祖先之间的大小关系。若确定第一并查集祖先大于第二并查集祖先,则删除第一约束,并将第二约束写入归并后的子区间中;若确定第二并查集祖先大于第一并查集祖先,则删除第二约束,并将第一约束写入归并后的子区间中,依此类推,直至回溯至最顶层递归。需要说明的是,回溯至最顶层递归后,会得到对应子区间,该子区间即为简化后的约束数组,在该简化后的约束数组中,删除了重复约束。

本发明实施例通过删除约束集合中的重复约束,进一步地减少了零知识证明电路对应约束集合中的约束个数,降低了零知识证明电路占用的存储空间,在零知识证明电路对应程序的运行过程中,提高了遍历约束集合中约束的遍历效率,缩短了零知识证明电路对应程序的运行时长。

此外,本发明实施例还提出一种零知识证明电路的优化装置,所述零知识证明电路的优化装置包括:

获取模块,用于当侦测到优化零知识证明电路的优化指令后,根据所述优化指令获取所述零知识证明电路对应的约束集合;

遍历模块,用于按照预设遍历方式遍历所述约束集合中的各个约束;

确定模块,用于确定所述约束输入中存在常数项的目标约束;

构建模块,用于构建所述目标约束对应的并查集;

删除模块,用于删除所述约束集合中的所述目标约束,以得到优化后的所述零知识证明电路。

进一步地,所述构建模块包括:

相乘单元,用于将所述目标约束中约束输入的常数项与所述约束输入的变量系数相乘,得到乘积;

确定单元,用于将所述乘积和所述目标约束中约束输出的变量系数确定为所述目标约束对应并查集的权值;将所述目标约束对应的变量确定为同类项;

加入单元,用于将同类项的所述变量加入所述并查集中,得到所述目标约束对应的并查集。

进一步地,所述删除模块包括:

第一删除单元,用于删除所述约束集合中的所述目标约束;

判断单元,用于判断所述约束集合中是否存在未遍历的约束;

检测单元,用于若所述约束集合中存在未遍历的所述约束,则检测未遍历的所述约束的输入中是否存在常数项;

标记单元,用于若未遍历的所述约束的输入中不存在常数项,则将未遍历的所述约束标记为已遍历约束,以得到优化后的所述零知识证明电路。

进一步地,所述删除模块还包括:

执行单元,用于若未遍历的所述约束的输入中存在常数项,则返回执行所述确定所述约束输入中存在常数项的目标约束的步骤。

进一步地,所述确定模块还用于将删除目标约束后的所述约束集合确定为约束数组;

所述零知识证明电路的优化装置还包括:

拆分模块,用于以递归的形式将所述约束数组拆分成左右子区间,其中,递归的结束条件为各个子区间中的约束个数为1个;

回溯模块,用于按照拆分的递归顺序反向回溯至最顶层递归,以得到优化后的所述零知识证明电路,其中,在回溯过程中,在每一个递归中将两个子区间归并为一个子区间。

进一步地,所述回溯模块包括:

获取单元,用于获取左右两个子区间中的约束,并分别记为第一约束和第二约束;

追溯单元,用于追溯所述第一约束对应变量的并查集祖先,记为第一并查集祖先,以及追溯所述第二约束对应变量的并查集祖先,记为第二并查集祖先;

第二删除单元,用于若通过全序关系函数确定所述第一并查集祖先与所述第二并查集祖先相等,则删除所述第一约束;

写入单元,用于将所述第二约束写入归并后的子区间中,得到归并后的子区间;

返回单元,用于将归并后的子区间返回给上层递归,以回溯至最顶层递归;

所述第二删除单元还用于若通过全序关系函数确定所述第一并查集祖先与所述第二并查集祖先不相等,但确定所述第一并查集祖先大于所述第二并查集祖先,则删除所述第一约束;

所述写入单元还用于将所述第二约束写入归并后的子区间中,以回溯至最顶层递归。

进一步地,所述遍历模块还用于按照深度优先的遍历方式遍历所述约束集合中的各个约束。

本发明零知识证明电路的优化装置具体实施方式与上述零知识证明电路的优化方法各实施例基本相同,在此不再赘述。

此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有零知识证明电路的优化程序,所述零知识证明电路的优化程序被处理器执行时实现如上所述的零知识证明电路的优化方法的步骤。

本发明计算机可读存储介质具体实施方式与上述零知识证明电路的优化方法各实施例基本相同,在此不再赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

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