一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种零知识证明分割电路及信息验证方法与流程

2022-02-22 09:55:58 来源:中国专利 TAG:


1.本发明属于数据保护技术领域,具体涉及一种零知识证明分割电路及采用该零知识分割电路验证信息的方法。


背景技术:

2.零知识证明指的是证明者能够在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。它带来了一种隐私解决方案,使证明者能够说服验证者对一系列语句进行验证,而不泄露必要信息。例如,一个人可以通过证明身份或生物信息满足特定的访问规则来证明他/她有进入房间的权限,同时保持用户信息的私密性。在基于零知识证明的区块链应用中,存在许多隐私保护技术,特别是在金融领域,如zerocash(零币)、去中心化匿名支付、blockmaze。这些应用程序可以在不消除区块链带来的透明度的情况下,保护信息(如发送方和接收方的身份、传输金额)不被泄露。除金融外,零知识证明还广泛应用于去中心化文件系统、智能电网、交通管理、covid-19接触者追踪等应用。
3.zk-snark(简洁非交互式零知识证明)是一种主流的零知识证明电路。如图1所示,一个zk-snark系统通常用来证明证明者知道一个秘密值w满足f(x,w)=true,其中f指的是一个类似于函数的零知识证明电路,x代表公开输入,w是隐私输入。
4.zk-snarks通常包含以下三个过程:
5.(1)初始化阶段setup:setup(1
κ
,f)

(pk,vk)。该阶段是对于给定的一个安全参数1
κ
和一个zk-snark电路f,由一个可信第三方来生成公共参数(由一个证明密钥pk和一个验证密钥vk组成)。
6.(2)证明阶段prove:prove(f,x,w,pk)

π。在该阶段,给定一个零知识证明电路f,公开输入x,隐私输入w和一个证明密钥pk,证明器(prover)输出一个恒定大小的证据π用于证明f(x,w)=true而不泄露任何关于w的信息。
7.(3)验证阶段verify:verify(x,π,vk)

{0,1}。在该阶段,给定公开输入x,证据π和验证密钥vk,当且仅当证据π通过验证时,验证器(verifier)输出1。
8.上述的zk-snark零知识证明通常在cpu的时间和内存占用方面效率低下,尤其是在初始化和证明阶段,需要消耗大量的内存,耗费很多时间。因此,验证者必须在计算能力和内存空间方面都很强大。巨大的内存消耗限制了zk-snarks在边缘计算和物联网等拥有有限资源领域的应用。例如,边缘设备正在从用户那里收集大量的敏感数据,由于边缘节点所拥有的内存空间有限,零知识技术无法保护用户的隐私。出于同样的原因,普通的智能手机用户无法成为大规模的零知识证明的证明者。


技术实现要素:

9.本发明的目的是为了解决现有的zk-snark零知识证明电路存在的内存占用大、耗费时间长、效率低的缺陷,在zk-snark基础上,对零知识证明电路进行优化。
10.为了实现上述目的,本发明采用的技术方案是:包括由zk-snark电路分割成的第
一执行电路、第二执行电路;所述第一执行电路用于输入待验证信息和证明密钥,获得第一证明;所述第二执行电路用于获得第二证明;所述第一证明、第二证明用于供验证者验证,以实现对待验证信息的验证;其中,第一证明包含隐私中间值;第二证明包含公开输出值;所述公开输出值由第二执行电路根据输入的隐私中间值生成。
11.进一步地,与所述第一执行电路连接的第一哈希电路,根据输入的待验证信息,生成第一哈希值和隐私中间值;所述第二执行电路连接的第二哈希电路根据输入的隐私中间值生成第二哈希值;通过比较第一哈希值和第二哈希值,来验证第一执行电路输出的隐私中间值与输入所述第二执行电路的隐私中间值是否相同。
12.进一步地,所述zk-snark电路的分割方法包括:
13.将零知识电路表示为r1cs结构;
14.选择r1cs结构图中的任意一个源点;
15.边权为1,通过广度优先遍历计算出图中其他各点与该源点的距离;
16.将各点按照距离从小到大进行排序,并依次重新命名为(v1,v2,...,vn),(n为图中所有点的数量);
17.定义点集a为(v1,v2,...,vi),则a的补集为(v
i 1
,v
i 2
,...,vn),求使得最小的点集as,并围绕点集as对图进行切割成为两部分;其中,σ(a)表示点集a与a的补集之间相连的边的数量,|a|表示点集a的模,表示点集a的补集的模;
18.对分割后的两部分电路分别增加哈希电路,其中包含所选源点的部分为第一执行电路,另一部分为第二执行电路。
19.为了进一步实现本发明的目的,本发明还提供一种信息验证方法,该方法包括一下步骤:
20.(1)获取预先约定的证明密钥;
21.(2)将用户的待验证信息和所述证明密钥输入预设的零知识证明分割电路,获得第一证明和第二证明;
22.(3)将所述第一证明和第二证明发送给验证方,以使所述验证方在不访问所述待验证信息的具体内容的情况下,通过预先约定的验证密钥对第一证明和第二证明进行验证,以实现对所述待验证信息的验证;
23.其中,所述零知识证明分割电路包括第一执行电路和第二执行电路;所述第一执行电路生成第一证明,第二执行电路生成第二证明。
24.进一步地,通过预设的加密参数,生成第一证明秘钥和第一验证秘钥;及第二证明秘钥和第二验证秘钥。
25.进一步地,将用户的待验证信息和第一证明秘钥输入第一执行电路,获得第一证明,所述第一证明包括隐私中间值和第一哈希值。
26.进一步地,将所述隐私中间值和第二证明秘钥输入第二执行电路,获得第二证明,所述第二证明包括第二哈希值和公开输出值。
27.进一步地,当第一哈希值等于第二哈希值时,第一证明和第二证明被验证方验证。
28.进一步地,验证方通过第一验证密钥验证第一证明;通过第二验证秘钥验证第二
证明;当第一证明、第二证明据均通过验证时,实现对用户的待验证信息的验证。
29.与现有技术相比,本发明具有以下有益效果:
30.本发明将zk-snarks的电路进行分割,分割后可以显著减少零知识证明prove阶段的内存占用。本发明在对zk-snarks的电路进行拆分后,为拆分后的电路增加了哈希电路,用以保证数据的真实性,防止待验证数据被篡改。
附图说明
31.图1为现有零知识证明电路的示意图;
32.图2为本发明提出的零知识证明分割电路示意图;
33.图3是r1cs结构示意图;图中,x表示公开变量,w表示隐私变量。
具体实施方式
34.为了便于理解本发明,下面结合附图和具体实施例,对本发明进行更详细的说明。附图中给出了本发明的较佳的实施例。但是,本发明可以以许多不同的形式来实现,并不限于本说明书所描述的实施例。相反地,提供这些实施例的目的是使对本发明公开内容的理解更加透彻全面。
35.实施例1本实施例提供一种零知识证明分割电路,该电路如图2所示,对于一个zk-snark电路f(x,w)=true,其对应的分割为(f1,f2,h,x,w,m,h,h'),其中f1和f2是分割后的电路,h是哈希电路,x,w,m,h,h'是变量。
36.具体来说,f1(x,w)=(h,m)是电路f分割后且增加哈希电路h的第一执行电路,其中x表示公开输入变量,w表示隐私输入变量,h表示公开输出变量,m表示隐私中间变量,为第一执行电路f1的输出变量,第一执行电路f1中新增的哈希电路保证了h=h(m)。
37.f2(m)=(o,h')是电路f分割后增加了哈希电路h的第二执行电路,其中m表示隐私中间变量,为第二执行电路f2的输入变量,o和h'表示公开输出变量,第二执行电路f2中新增的哈希电路保证了h'=h(m)。
38.为了保证第二执行电路f2输入的隐私中间变量m与第一执行电路f1输出的隐私中间变量m是同一组数据,本发明通过确保h=h',即可保证隐私中间变量m不被篡改。此时,定义s=(f1,f2)是电路f的分割电路。
39.其中,对电路f进行分割采用的方法是:
40.对于任意一个零知识证明电路,将其表示为r1cs结构,这类结构图是一种有向无环图,如图3所示,对该图采用以下算法步骤进行分割:
41.(1)选择图中的一个源点s;
42.(2)边权为1,通过广度优先遍历计算出图中各点与源点s的距离;
43.(3)将各点按照距离从小到大进行排序,并依次重新命名为(v1,v2,...,vn)(n为图中所有点的数量);
44.(4)定义点集a为(v1,v2,...,vi),则a的补集为(v
i 1
,v
i 2
,...,vn),求使得(其中σ(a)表示点集a与a的补集之间相连的边的数量,|a|表示点集a的模,表示点集a的补集的模)最小的点集as,并围绕点集as对图进行切割成为两部分;
45.(5)对分割后的两部分分别增加哈希电路,组成分割电路。其中,包含选定源点的部分为第一执行电路f1,另一部分为第二执行电路f2。
46.实施例2本实施例提供一种信息验证方法,该方法利用上述的零知识证明分割电路s=(f1,f2)来实现,具体证明过程和步骤如下:
47.(1)获取证明秘钥和验证秘钥
48.初始设置阶段setup:setup(1
κ
,f,s)

(pks,vks)。
49.对于一个zk-snark电路f,分割电路s=(f1,f2)和一个安全参数1
κ
。首先让一个可信机构检查s是否是电路f的分割电路,若s是电路f的分割电路,那么就通过setup(1
κ
,f1)来生成一对密钥(pk1,vk1),通过setup(1
κ
,f2)来生成一对密钥(pk2,vk2)。定义证明密钥pks=(pk1,pk2),验证密钥vks=(vk1,vk2)。其中,pk1为第一证明密钥,vk1为第一验证秘钥;pk2为第二证明秘钥;vk2为第二验证秘钥。
50.(2)将用户的待验证信息和所述证明密钥输入预设的零知识证明分割电路,获得第一证明和第二证明。
51.证明阶段prove:prove(s,x,w,pks)

π。对于给出的分割电路s=(f1,f2),公开输入变量x,隐私输入变量w以及证明密钥pks=(pk1,pk2),证明者通过第一执行电路f1(x,w)=(h,m),获得隐私中间值m及第一哈希值h,给出第一证明:π1=(f1,x,w,m,h,pk1);通过第二执行电路f2(m)=(o,h'),获得公开输出变量o和第二哈希值h',给出第二证明:π2=(f2,m,h,pk2)。
52.h=h(m),h'=h(m)是公开输出,通过比较h和h',若两者相等,则说明证明者没有对隐私中间值m进行恶意修改,保证了m的真实性。
53.(3)验证方对证明πs=(π1,π2)进行验证
54.验证阶段verify:verify(x,h,πs,vks)

{0,1}。对于已知的公开变量x、h,证明πs以及验证密钥vks=(vk1,vk2),验证者进行验证:v1=verify(x,h,π1,vk1)及v2=verify(h,π2,vk2),当v1=1且v2=1时验证通过。
55.至此,验证方在不访问用户待验证信息的隐私输入变量w情况下,实现待验证信息的验证。
56.以for循环组成的零知识证明电路为例进行实验,用以展示本发明的提出的分割电路的实际效果。通过改变for循环次数分别为10000,30000,50000,100000,200000,300000来对电路规模大小进行调整,用电路1-6表示,实验中通过测量不同规模的电路分割前、后的prove阶段的时间和内存占用量,证明了本发明提出的分割电路可以显著减少内存占用。具体检测结果见表1。
57.表1零知识证明电路分割前后的prove阶段的时间及内存占用数据
58.
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献