关于密码学:PrivacIN-Week3课程回顾-韩博士讲授ZK电路开发-zkEVM设计

1次阅读

共计 4245 个字符,预计需要花费 11 分钟才能阅读完成。

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 愿景赞助各类学术研究及科研项目。

正文完
 0