2022年7月23日9:30,隐衷学院PrivacyIN首期ZK训练营第三课——《Applied ZK In Practice》准时开课。本期课程由香港科技大学在读博士韩思远讲授,以ZK电路开发和zkEVM设计为主题,围绕零常识证实利用电路设计及zkEVM构建思路开展,帮忙学员学懂ZKP电路设计。此次培训连续小班授课,数十名国内外密码学及相干畛域的专家学者加入了本次ZK技术培训。

背景常识

基于零常识证实(ZKP)的利用实现,次要是通过将个别的计算问题转化为电路问题,而后构建基于零常识证实零碎的电路束缚或其余保障计算个性的束缚,来实现可验证计算和零知识性。在确定的零常识证实零碎(协定)上,ZKP利用的构建核心内容则是业务电路的设计和开发,因而理解利用电路设计思路、保障安全性和高效性都是十分重要的议题。

课程次要内容

简略介绍了基于零常识证实的利用零碎设计所波及的背景常识后,韩思远老师以开发者的视角,为大家介绍了ZKP利用波及的难题。

他示意:残缺了解零常识证实(ZKP)利用开发是非常复杂的,须要了解多种经典ZKP协定设计原理、深度的密码学和数学知识、难以抉择的ZKP框架、艰涩难懂的术语和概念等,ZKP利用零碎设计常识曲线较高,初学者是很难入门的。

ZKP零碎

从程序设计视角,ZKP零碎个别能够划分为前端frontend和后端backend两个局部。

ZKP零碎的Frontend局部的次要应用低级别语言来示意高级别语言,例如能够将一个个别地计算问题应用较低级别的电路语言示意,如R1CS电路束缚构建计算等(比方circom应用R1CS形容其前端电路)。

ZKP零碎的Backend局部即密码学证实零碎,次要将frontend构建低级别的语言形容的电路,转换为生成证实和验证正确性等,比方罕用的backend零碎协定有Groth16和Plonk等。

韩思远博士示意,基于frontend和backend开发拆散的思路,开发一个基于ZKP的利用零碎,在密码学专家选定适合ZKP证实零碎作为backend后,开发人员的工作次要思考的是如何应用frontend提供的低级语言来形容和实现利用业务逻辑,而无需关注ZKP证实零碎后端。

R1CS的创立

zkSNARKs零碎比拟罕用的是R1CS(rank1-constraint-system),R1CS定义构造形如:

Ai、Bi、Ci别离为乘法电路门的左操作符(线)的系数向量、右操作符(线)的系数向量、输入系数向量,S为输出变量或witness,R1CS次要关注乘法门。(留神:系数向量的元素示意对应的变量(或线)是否参加该电路门计算)

在进行实现某个计算业务时候,构建R1CS模式束缚电路方程组和QAP十分重要,课堂中以Vitalik的提供的范例,即有函数f(x)=x^3 + x + 5,如何示意为能够用来构建该函数证实proof的R1CS电路束缚。

创立R1CS和QAP(Quadratic Arithmetic Programs)的次要步骤:

1.计算业务应用对立的计算表达式示意,并示意为电路,其中如if,switch,循环等语句须要转换;(本例无需转换)

2.计算表达式拍平(flatten),将计算表达式应用算数电路门示意成电路circuit,并依照电路门开展、每个电路门一行,电路门的输入都定义新的变量(两头变量)。例如z=x+y能够应用一个加法门示意,z=x+5y能够应用一个加法门和一个乘法门示意;本例中f(x)拍平后的变量:one,~out(为35), x, y, sym_1, sym_2为,其中one为常量,~out为输入,x, y, sym_1, sym_2形成witness,x也是惟一的私密输出变量。

3.每个约束方程转换或合并为乘法门约束方程(多个加法能够在一个约束方程中),所有乘法门形成R1CS束缚方程组;(留神:本例prover曾经晓得一个解x=3,并得出其余witness取值,如y=27, sym_1=9, sym_2=27)

4.对R1CS束缚方程组,应用多项式插值别离求解每个变量的系数多项式,如本范例能够失去Ai、Bi、Ci(其中i=0,1,2,3)多项式;(留神:系数多项式求解个别应用随机数作为x值,y值则示意对应的变量在计算这个乘法门中是否起作用了)

5.将所有变量的系数多项式向量Ai、Bi、Ci(其中i=0,1,2,3)形成的矩阵多项式与变量向量相乘,再向量点积,就能够示意为对立的多项式,且该多项式可被“多项式插值“作为根的可擦除多项式Z(x)整除,其与Z(x)形成QAP;

课堂中,韩博士应用Vitalik提供的范例进行重点解说,即给定一个多项式f(x),如何编写电路束缚和构建QAP,而个别的zkSNARK大多应用Bilinear-Pairing对QAP进行测验来实现ZKP计算。

R1CS的异或运算

R1CS实用于算数门电路,其次要应用+、-、*示意电路运算,其不间接反对布尔电路的异或运算。实现ZKP的多比特位的异或运算须要转换为算术电路来实现,并增加适合的束缚来实现。比方一个8bits的异或运算:A XOR B = C,其中A=11000000,B=1011111, C=01111111。实现的思路是将多个bit位转化为算术电路元素数组,证实这些bit的关系满足A XOR B = C, 于是转化为证实如下约束条件:

1.这些数组中的元素为0或1,即a(a-1)=0,a可取值0或1;

2.这些数组中的元素示意的是形成A、B、C的比特位,即元素依照低位到高位累加;

3.A XOR B=C,对每个bit位异或运算,比特的异或运算:a xor b = a+b-2ab

Plonk电路束缚

Plonk协定应用区别于传统R1CS的电路束缚模式,其应用一个对立的电路表达式:

,示意算术门和输出门。

Plonk中将束缚次要分为门束缚(运算和输出)、线束缚(复制束缚),而后别离对这两类束缚构建零常识证实和验证。

Plonk电路编写跟R1CS不同,它引入线束缚后,电路示意不是R1CS离散模式的,电路线之间通过线束缚关联起来。

ZKP业务开发者关注点

具体的ZKP业务开发中,开发者在选定零常识证实零碎后,针对R1CS或Plonkish格调的电路进行设计和实现,个别须要关注的是:

1.如何将业务问题转换为计算问题,再转化为电路问题,而后失去R1CS或Plonkish格调的电路束缚;

2.输出和两头变量对于多项式是很重要的,这将用于后端的证实。

zkEVM的实现

zkVM是个别意义上的可能执行ZK程序代码(低级或高级语言编写)并创立可验证证实的虚拟机,而zkEVM是一种非凡的EVM,其以ZK形式执行智能合约,可能生成智能合约或其指令执行的可验证证实。

zkEVM目前是十分炽热的我的项目,目前比拟支流的计划有STARKWARE,zkSync,polygen-Hermez,Scroll等,个别依照对EVM的兼容级别能够划分为:

1.EVM-EVM-compatibility智能合约性能级别兼容,如STARKWARE, zkSync

2.EVM-equivalence,EVM指令级别兼容(等同),如polygen-Hrmez,scroll

以太坊是通过交易执行驱动世界状态变动,这些交易包含转账交易和合约调用交易,最终都会转换成指令在EVM中执行,EVM执行波及状态机state machine、stack和memory等。EVM执行的时候从状态机state-machine获取执行指令,借助stack和memory顺次执行指令,并对storage进行更新。


一个指令兼容的zkEVM,EVM指令都是须要转换到ZK零碎中执行中,同样每一条对应的指令都须要提供证实,次要包含State状态证实和EVM执行正确性证实。

zkEVM个别是依照以太坊L1合约和L2(线下)联合的形式来实现的,L2层有一个类以太坊的节点程序,它从以太坊区块链零碎获取数据,并具备以太坊节点的其余解决能力(如何交易、区块头、合约等校验), 其工作大抵如下(不同的计划可能有差别):

1.节点程序处理和验证执行日志、区块头、交易、合约字节码、默克尔证实等,并把这些发送给zkEVM解决;

2.zkEVM应用电路,将执行、区块头、交易、合约字节码、默克尔证实这些变动的后果生成ZK证实proofs(十分大的证实),这里zkEVM电路性能次要应用table和特制circuit来实现的,zkEVM的所有计算指令和状态更新都须要依赖电路和table构建的证实来实现。zkEVM的电路和table如下如下图:

3.应用聚合电路将大的证实生成更小的证实,也即生成聚合证实,比方应用递归证实来生成;

4.聚合证实则以交易的模式发送给L1合约执行。

zkEVM作为通用的以太坊解决方案,同样能够提供ZK-Rollup的能力,因为L1上的交易可能放到L2上的zkEVM上执行,而后构建简洁的递归证实配合L1合约实现交易聚合,并因而晋升交易解决能力。

另外课堂上,韩老师针对zkEMV实现,对不同背景技术人员提出相干实际倡议,比方密码学专家能够更多关注缩小证实大小和证实工夫的密码学计划;比方程序开发人员如何应用优化电路门实现计算业务等,这些实践性倡议的指标是则是统一的:晋升效率和升高gas费用

课程完结之际,韩老师也提出了一些开放性的问题,心愿引发对于ZK的安全性思考。比方ZK技术的应用并不能保障安全性,不同的电路实现和对应生成的多项式都有很多差别,甚至电路的实现也可能暗藏着平安问题,安全性的保障更难,须要更多验证和技术审计等;另外保障电路实现和原始计算统一,而没有进行不等价的批改也是十分重要平安问题,比方ZK电路的不等价替换,ZK的延展性攻打问题等。

对于PrivacyIN

PrivacyIN 隐衷学院 (Privacy Institution) 由LatticeX基金会发动,致力于建设凋谢的明码和隐衷技术布道和钻研社区。联结寰球顶尖的学者、隐衷技术开发者推动ZK(零常识证实)、MPC(平安多方计算)、FHE(全同态明码)的翻新和落地。

对于LatticeX基金会

LatticeX基金会(LatticeX Foundation)是一家寰球范畴的开源技术社区,以通过构建简单计算偿还用户数据主权,爱护数据隐衷,实现数据价值替换为愿景,构建一个齐全去中心化的计算互操作网络,在爱护数据主权和隐衷的前提下促成数据使用权的交易,并为实现LatticeX愿景赞助各类学术研究及科研项目。