Lasso、Jolt 以及 Lookup Singularity——Part 2

1. 引言

前序博客见:

相关论文见:

相应的开源代码实现见:

Lasso、Jolt 以及 Lookup Singularity——Part 1中内容概要为:

  • 1)Lookup argument:是指Prover P P P对vector a ∈ F m a\in\mathbf{F}^m aFm进行commit,并证明 a a a中的每个元素均在预定义的table t ∈ F n t\in\mathbf{F}^n tFn中。
  • 2)Lasso:为一组新的Lookup argument族:
    • Lasso的Prover P P P 要比之前的lookup argument 快一个量级。
    • Lasso的Prover P P P 对更少的field elements进行commit,且所有这些field elements都是small的。
    • 无需对许多table t t t进行commit。
    • 支持巨大(decomposable,或,LDE-structured)lookup table
    • Lasso的Prover P P P 的commit开销为: O ( c ( m + N 1 / c ) ) O(c(m+N^{1/c})) O(c(m+N1/c))个field elements。
  • 3)Jolt:为新的zkVM技术。
    • 相比于之前的zkVM技术,Jolt的Prover P P P 的commit开销要低很多。
    • 所实现的primitive instructions,通过对该instruction的整个evaluation table,做一次lookup。

2. 何为Lookup Singularity?

Lookup Singularity概念 由Barry WhiteHat在2022年11月在zkResearch论坛 Lookup Singularity中首次提出:

  • 其主要目的是:让SNARK前端生成仅需做lookup的电路。
  • Barry预测这样有很多好处,特别是对于可审计性 以及 形式化验证:
    • 更易于审计单个lookup argument和各种lookup tables,不再需要数千行的硬编码电路。
  • 承认现有的lookup argument方案具有性能瓶颈 但 预测将得到改进:
    • 强调可能需要支持巨大table,如size为 2 128 2^{128} 2128的table。
  • Lasso/Jolt可能可实现该愿景?

3. 何为Jolt?

Jolt反驳的故事点:

  • 1)twitter上常提到的一个直观的观点——“更简单的指令集(如Cairo-VM),对应,更快的zkVM”,但事实上:
    • 1.1)Prover的开销主要在commit开销——Jolt Prover的开销 比 现有zkVM的Prover开销 要少;
    • 1.2)Jolt Prover的可扩展性更强,事实上Jolt Prover的开销与指令复杂度无关。
      • Jolt(每个指令)的复杂度仅依赖于该指令的输入size。
      • 只要每个指令的evaluation table是“structured”。
      • 出乎意料的是,复杂指令是“structured”的。
  • 2)很多SNARKs方案(如HyperNova、ProtoStar等)都关注支持high-degree constraints,efficient SNARKs需要high-degree constraints,但当对应zkVM应用场景时,则没那么重要:
    • Jolt使用R1CS(为degree-2 constraints)。
    • 大多数工作量都“推给了lookup argument”。
    • 剩下的工作量很容易且简单地用R1CS来使用。
  • 3)认为“基于large fields是浪费的(wasteful)”,这也是人们喜欢使用FRI的原因之一(还有一个原因是FRI可能具有post Quantum安全性)。在特定场景下,基于small field的field运算,要比,基于big field的field运算,快得多。但当使用基于椭圆曲线的承诺方案,对small field element进行commit时,其速度可以很快:
    • Jolt中几乎Prover commit的所有值都是small的。
    • 对于基于MSM的承诺方案,对某small field element进行commit所需的group运算次数,仅依赖于该element的size。
    • 与element所处的field本身有多大无关。
  • 4)认为“将大计算分解为小计算(即“去规模经济”),不会带来性能损失”,但事实上是:
    • 如很多zkVM,仅对size不超过约 2 23 2^{23} 223的pieces才会做recursive SNARKs。
    • Lasso/Jolt Prover P P P开销中均固定有 N 1 / c N^{1/c} N1/c,其中 N N N为table size。
    • 对大计算的摊销效果 要比 小计算的 好。
    • Lookup arguments都是关于“规模经济(economies of scale)”的。

4. Lookup arguments as data parallel computation

之前有很多研究成果是将SNARKs看成是数据并行计算:

  • 基于许多不同的输入 x 1 , ⋯   , x m x_1,\cdots,x_m x1,,xm,计算相同的函数 f f f
  • 可将其看成是a “polynomial” amount of data parallelism:
    • f f f的输入长度为 n n n,则不同输入的数量为 m = p o l y ( n ) m=poly(n) m=poly(n)
  • 强迫Prover P P P以特定的方式evaluate f f f
    • 为计算 f f f而执行特定的电路。

本文将lookup arguments看成是data parallel computation SNARKs:

  • lookup table中存储了函数 f f f的所有evaluations。【将 f f f看成是CPU的某Primitive instruction。】
  • lookup argument则为 f f f的高度数据并行evaluation SNARK:
    • 令Prover P P P证明某committed vector:
      ( ( a 1 , f ( a 1 ) ) , ⋯   , ( a m , f ( a m ) ) ) ((a_1,f(a_1)),\cdots,(a_m,f(a_m))) ((a1,f(a1)),,(am,f(am)))
      中包含了 f f f对不同输入 a 1 , ⋯   , a m a_1,\cdots,a_m a1,,am的正确evaluations。
  • 由于Lasso Prover P P P的开销为 O ( c ( m + N 1 / c ) ) O(c(m+N^{1/c})) O(c(m+N1/c)),仅当lookup次数 m m m不会比table size N N N小太多时,Lasso的效率才会更高:
    • 即, f f f的执行次数,应为 f f f input size,的指数级。

5. 对zkVM的沉思

现有zkVM设计的优点有:

  • 1)可利用现有(可供CPU使用的)编译器基础设施:
    • RISC-V、EVM
    • 可利用现有的开发者友好的工具链,避免从头开始构建所有轮子
  • 2)仅需要运行一次front-end。
  • 3)生成“uniform”电路:
    • 特定size的uniform电路的后端,要比,不使用uniformity的后端,快得多。

现有zkVM设计的缺点为:

  • 1)导致更大的电路:以矩阵乘法运算为例,只需要加法和乘法运算:
    在这里插入图片描述
  • 2)形成更大的攻击面:将高级语言编写的计算程序,编译为,汇编语言,的整个过程,必须是bug free的。

6. 何为Lasso?

6.1 Lookup argument定义

以range check为例,lookup argument是指:

  • 1)令 t = ( 0 , 1 , 2 , 3 , ⋯   , 2 128 − 1 ) t=(0,1,2,3,\cdots,2^{128}-1) t=(0,1,2,3,,21281)为具有 N N N个table元素的向量。
  • 2)令 a ∈ F m a\in\mathbf{F}^m aFm为一组应包含在上述table的值列表。
  • 3)Verifier V V V已知: a a a的承诺值 c m a cm_a cma
  • 4)Prover P P P声称: a a a中所有元素均在table t t t中。
    即Prover P P P声称其知道 c m a cm_a cma的opening a a a,使得:
    • 对于每个 i = 0 , ⋯   , m − 1 i=0,\cdots, m-1 i=0,,m1,存在 j ∈ { 0 , 1 , ⋯   , N − 1 } j\in\{0,1,\cdots, N-1\} j{ 0,1,,N1},使得 a i = t j a_i=t_j ai=tj
  • 5)通常将这种lookup argument称为unindexed lookup argument。

而indexed lookup argument是指待证明元素中还附加了索引值,indexed lookup argument定义为:

  • 1)令 t ∈ F n t\in\mathbf{F}^n tFn为具有 N N N个table元素的向量。
  • 2)Prover P P P对向量 ( ( a 1 , b 1 ) , ⋯   , ( a m , b m ) ) ((a_1,b_1),\cdots,(a_m,b_m)) ((a1,b1),,(am,bm))进行承诺。
  • 3)Prover P P P声称,对于 i = 1 , ⋯   , m i=1,\cdots,m i=1,,m,有 a i = t [ b i ] a_i=t[b_i] ai=t[bi]。【即 a i a_i ai为value, b i b_i bi对应为table t t t的索引号,Prover P P P声称 a a a中所有元素均存在于 t t t中相应的index。】

6.2 Interactive Proofs:动机与模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基于interactive proofs(IPs)的SNARKs:

  • 1)Trivial proof:Prover P P P将witness w w w发送给Verifier V V V,Verifier V V V直接自己检查witness w w w是否满足所声称的属性。
  • 2)Slightly less trivial proof:Prover P P P将witness w w w发送给Verifier V V V,然后使用interactive proofs(IPs)来证明witness w w w满足所声称的属性:
    • 可解决Verifier V V V的工作量,但proof不是succinct的。
  • 3)实际的SNARK:Prover P P P对witness w w w做密码学commit:
    • 使用interactive proofs(IPs)来证明witness w w w满足所声称的属性。
    • 仅公开关于committed witness w w w的足够信息,供Verifier V V V在interactive proofs(IPs)做相应check。
    • 借助Fiat-Shamir,可将interactive 协议转换为non-interactive 协议。

6.3 SNARK主流设计历史回顾

SNARK主流设计历史回顾:

  • 1)SNARKs设计理论演变路径为:Interactive Proofs(IPs)–》multi-prover interactive proofs(MIPs)–》PCPs–》SNARKs:
  • 2)实用SNARKs方案:
    • 2.1)Linear PCP:为首个实用SNARKs。
    • 2.2)数年之后,才有源于IPs/MIPs/PCPs(really IOPs)的实用SNARKs。

6.3.1 源于Interactive Proofs(IPs) SNARKs优势

源于Interactive Proofs(IPs)的SNARKs,与,源于其它设计理论的SNARKs方案,的主要不同之处在于:

  • Prover P P P具有最小的承诺开销。
  • 关键技术为:sum-check protocol [LFKN 1990]:
    • 基于多变量多项式(如有16到100个变量)。
    • Force Prover P P P正确地实现计算过程中的中间值,但不需要对这些中间值进行commit。
    • 某些使用sum-check协议的SNARKs方案(如Spartan)的Prover P P P仍需对中间值进行commit。事实上这样的方案是源于MIPs的,而不是IPs:
      • 尽管如此,相比于基于单变量多项式构建的SNARKs,这些方案的Prover P P P会对 更少 的中间值进行commit。
      • 借助sum-check,Prover P P P无需对“quotient多项式”或“composition多项式”进行commit,也没有FFT运算等等。

6.3.2 基于sum-check SNARKs缺点

基于sum-check SNARKs方案的缺点为:

  • 具有相对更大的Verifier V V V开销。
    • proof中包含logrithmically个 field elements,且,通过Fiat-Shamir,Verifier V V V需计算logrithmically次 hash evaluation。
    • 必须使用多变量多项式承诺,而不是单变量多项式承诺:从而无法 与 单变量KZG承诺方案中的Verifier V V V开销 媲美。【“log size proof” vs. “constant size proof”】
  • 当今许多使用FRI多项式承诺方案的项目,其evaluation proof中包含了 O ( λ log ⁡ 2 ( n ) ) O(\lambda \log^2(n)) O(λlog2(n))个 hash evaluations:
    • 通过基于small fields,来实现更快的prover。

6.3.3. sum-check最小化commit开销极端示例

接下来将展示使用sum-check来使commit开销最小化的极端示例:

  • 1)示例一:矩阵乘法[T. 2013]:
    许多算法通过对 n × n n\times n n×n矩阵做乘法运算来获得感兴趣的结果,如:

    • 基于一组输入来评估某神经网络。
    • 计算某graph中的三角形数量、直径等。

    sum-check协议为这些问题提供了IP(Interactive Proof)解决方案,其中Prover P P P计算矩阵的乘积,并做 O ( n 2 ) O(n^2) O(n2)次field运算来证明该乘积结果的正确性:

    • proof size为 O ( log ⁡ n ) O(\log n) O(logn)
    • 永远不会将 乘法运算中的矩阵 发送给Verifier,也不会对 乘法运算中的矩阵 进行commit。
  • 2)示例二:GKR协议([GKR 2008, CMT 2012, T. 2013, 等等]):

    • 对circuit evaluation 做interactive proof。所谓circuit evaluation ,是指Verifier V V V也知道电路的输入。
    • 为SNARK for circuit satisfiability,其中Prover P P P仅对电路输入进行commit,但不对中间gate值进行commit。所谓circuit satisfiability,是指Verifier V V V不知道电路的输入。
      在这里插入图片描述
      【而在Lasso/Jolt中,public input x x x对应为lookup table,其size可能为 2 128 2^{128} 2128。】

GKR协议的开销为:

  • 1)GKR协议Verifier V V V端开销为:
    • 1.1) O ( d log ⁡ ∣ C ∣ ) O(d\log{|C|}) O(dlogC)次field运算,其中 d d d为circuit depth, ∣ C ∣ |C| C为circuit size。
    • 1.2)+ 计算 x ~ ( r ) \tilde{x}(r) x~(r) 所需用时 + "check an evaluation proof for w ~ ( r ) \tilde{w}(r) w~(r)"所需用时。
  • 2)GKR协议Prover P P P端开销为:
    • 2.1) O ( ∣ C ∣ ) O(|C|) O(C)次field运算。
    • 2.2)+ “为 w ~ ( r ) \tilde{w}(r) w~(r) 生成 an evaluation proof” 所需用时。

6.4 GKR协议–》Lasso/Jolt

在Lasso/Jolt中,GKR协议中的public input x x x对应为整个lookup table:

  • 但所有Jolt lookup tables均是structured的,因此Verifier V V V可 以logarithmic time来计算 x ~ ( r ) \tilde{x}(r) x~(r)
  • 谁也不用对这些lookup tables进行commit,甚至Prover P P P也不需要。

基于GKR的SNARKs方案,通常具有 适中的 Prover速度:

  • 由计算机程序,转换为电路,需使用大量的“untrusted advice”。
  • 即使是采用基于GKR的SNARKs方案,Prover P P P也需要对所有这些“untrusted advice”进行commit。
  • 且,电路模型是受限的(为low-depth arithmetic circuits)。

Lasso/Jolt 将 “6.3.3. sum-check最小化commit开销极端示例” 更通用化:

  • 1)Lasso中确实使用了GKR协议,但仅用GKR协议来计算“grand products”:
    • 所谓“grand products”,是指:对 n n n个(committed)values求乘积,其中 n n n很大。
    • 在Lasso中,几乎所有的这 n n n个values均为lookups自身:
      • 根据定义,没有任何lookup argument可避免该commit工作。
  • 2)使用low-depth arithmetic circuits可胜任,对大量field elements做乘积运算。
    • 相应的电路为depth为 log ⁡ ( n ) \log(n) log(n),由multiplication gates组成的binary tree。
    • 在[T. 2013]中为这样的binary tree做了优雅的IP(Interactive Proof):
      • [Lee + Setty 2020]将proof size由 O ( log ⁡ 2 ( n ) ) O(\log^2(n)) O(log2(n)) reduce为 O ( log ⁡ ( n ) log ⁡ log ⁡ ( n ) ) O(\log(n)\log\log(n)) O(log(n)loglog(n))
      • Prover P P P确实需要对 O ( n / log ⁡ 10 ( n ) ) O(n/\log^{10}(n)) O(n/log10(n))个field elements进行commit。

6.5 Basic-Lasso:技术细节

6.5.1 Memory Checking

Basic-Lasso与Memory Checking的关系为:

  • 可将lookup table t ∈ F N t\in\mathbf{F}^N tFN看成是计算机内某内存(memory)。
  • indexed lookup argument实现了对该内存(memory)的读操作:
    • Prover P P P对vector ( ( a 1 , b 1 ) , ⋯   , ( a m , b m ) ) ((a_1,b_1),\cdots, (a_m,b_m)) ((a1,b1),,(am,bm))进行commit。
    • 对于所有的 i = 1 , ⋯   , m i=1,\cdots,m i=1,,m,Prover P P P声称 a i = t [ b i ] a_i=t[b_i] ai=t[bi]

SNARKs擅长让Prover P P P证明对committed values运行了特定算法:

  • 通常,相应算法以arithmetic circuit高效实现。
  • 该算法仅执行加法和乘法运算:
    • 对于基于sum-check的SNARKs,若算法可高度并行化——circuit为low-depth的,这样是有益处的。

6.5.2 关键技术:Fingerprinting vectors

Basic-Lasso中使用了2个Fingerprinting vectors变种:

  • 1)equality checking
  • 2)permutation checking

6.5.2.1 equality checking

所谓equality checking,是指:

  • Alice有向量 a = ( a 0 , ⋯   , a n − 1 ) ∈ F n \mathbf{a}=(a_0,\cdots,a_{n-1})\in\mathbf{F}^n a=(a0,,an1)Fn
  • Bob有向量 b = ( b 0 , ⋯   , b n − 1 ) ∈ F n \mathbf{b}=(b_0,\cdots,b_{n-1})\in\mathbf{F}^n b=(b0,,bn1)Fn
  • Alice和Bob的目标为:通过交换尽可能少的field elements,来判断 a = b \mathbf{a}=\mathbf{b} a=b是否成立。

Trivial解决方案为:

  • Alice将 a \mathbf{a} a发送个Bob,Bob自己来检查 a = b \mathbf{a}=\mathbf{b} a=b是否成立。
  • 相应的communication开销为: n n n个值。

Randomized equality checking方案为:

  • F \mathbf{F} F为满足 ∣ F ∣ ≥ n 2 |\mathbf{F}|\geq n^2 Fn2的任意有限域。
  • a i , b i a_i,b_i ai,bi看成是 F \mathbf{F} F有限域内元素。
  • p ( x ) = ∑ i = 0 n − 1 a i x i , q ( x ) = ∑ i = 0 n − 1 b i x i p(x)=\sum_{i=0}^{n-1}a_ix^i,q(x)=\sum_{i=0}^{n-1}b_ix^i p(x)=i=0n1aixi,q(x)=i=0n1bixi
  • 具体协议实现为:
    • Alice选择随机值 r ∈ F r\in\mathbf{F} rF,并发送 ( r , p ( r ) ) (r,p(r)) (r,p(r))给Bob。
    • p ( r ) = q ( r ) p(r)=q(r) p(r)=q(r),则Bob输出EQUAL,否则输出NOT-EQUAL。
    • 总的communication开销为: 2 2 2个field elements。
  • p ( r ) p(r) p(r)称为“vector a \mathbf{a} a r r r的Reed-Solomon fingerprint”。

对以上Randomized equality checking方案的正确性分析:

  • 1)Claim 1:若 a = b \mathbf{a}=\mathbf{b} a=b,则Bob输出EQUAL的概率为1。原因在于:
    • 由于 a = b \mathbf{a}=\mathbf{b} a=b,因此 p p p q q q为相同的多项式,对于所有的 r ∈ F r\in\mathbf{F} rF,均有 p ( r ) = q ( r ) p(r)=q(r) p(r)=q(r)
  • 2)Claim 2:若 a ≠ b \mathbf{a}\neq\mathbf{b} a=b,选择 r ∈ F r\in\mathbf{F} rF而Bob输出NOT-EQUAL的概率至少为 1 − 1 n 1-\frac{1}{n} 1n1。原因在于:
    • p ≠ q p\neq q p=q为degree最多为 n n n的单变量多项式,因此 p , q p,q p,q最多有 n n n个重合点,等价为:
      Pr ⁡ r ∈ F [ p ( r ) = q ( r ) ] ≤ n ∣ F ∣ \Pr_{r\in\mathbf{F}}[p(r)=q(r)]\leq \frac{n}{|\mathbf{F}|} PrrF[p(r)=q(r)]Fn

6.5.2.2 permutation checking

所谓permutation checking,是指:

  • Alice有向量 a = ( a 0 , ⋯   , a n − 1 ) ∈ F n \mathbf{a}=(a_0,\cdots,a_{n-1})\in\mathbf{F}^n a=(a0,,an1)Fn
  • Bob有向量 b = ( b 0 , ⋯   , b n − 1 ) ∈ F n \mathbf{b}=(b_0,\cdots,b_{n-1})\in\mathbf{F}^n b=(b0,,bn1)Fn
  • Alice和Bob的目标为:判断 a \mathbf{a} a b \mathbf{b} b中是否具有相同的元素,对元素顺序无要求。

a = ( 0 , 1 , 8 , 9 ) \mathbf{a}=(0,1,8,9) a=(0,1,8,9) b = ( 0 , 9 , 1 , 8 ) \mathbf{b}=(0,9,1,8) b=(0,9,1,8),则二者为permutation关系。
而若 a = ( 0 , 1 , 8 , 3 ) \mathbf{a}=(0,1,8,3) a=(0,1,8,3) b = ( 0 , 9 , 1 , 8 ) \mathbf{b}=(0,9,1,8) b=(0,9,1,8),则二者不是permutation关系。

Randomized permutation checking方案为:

  • F \mathbf{F} F为满足 ∣ F ∣ ≥ n 2 |\mathbf{F}|\geq n^2 Fn2的任意有限域。
  • a i , b i a_i,b_i ai,bi看成是 F \mathbf{F} F有限域内元素。
  • p ( x ) = ∏ i = 0 n − 1 ( x − a i ) , q ( x ) = ∏ i = 0 n − 1 ( x − b i ) p(x)=\prod_{i=0}^{n-1}(x-a_i),q(x)=\prod_{i=0}^{n-1}(x-b_i) p(x)=i=0n1(xai),q(x)=i=0n1(xbi)。【与Randomized equality checking方案不同,各元素不再是多项式的系数,而是多项式的roots。】
  • 具体协议实现为:
    • Alice选择随机值 r ∈ F r\in\mathbf{F} rF,并发送 ( r , p ( r ) ) (r,p(r)) (r,p(r))给Bob。
    • p ( r ) = q ( r ) p(r)=q(r) p(r)=q(r),则Bob输出EQUAL,否则输出NOT-EQUAL。
    • 总的communication开销为: 2 2 2个field elements。
  • 将以上整个流程称为“permutation-invariant fingerprinting”。

6.5.3 通过Fingerprinting来做Memory-checking [BEGKN 1994]

Basic-Lasso中将lookup argument看成是Memory Checking:

  • 可将lookup table t ∈ F N t\in\mathbf{F}^N tFN看成是计算机内某内存(memory)。
  • indexed lookup argument实现了对该内存(memory)的读操作:
    • Prover P P P对vector ( ( a 1 , b 1 ) , ⋯   , ( a m , b m ) ) ((a_1,b_1),\cdots, (a_m,b_m)) ((a1,b1),,(am,bm))进行commit。
    • 对于所有的 i = 1 , ⋯   , m i=1,\cdots,m i=1,,m,Prover P P P声称 a i = t [ b i ] a_i=t[b_i] ai=t[bi]

这样就将构建lookup argument,转换为,实现一种高效的算法,以检查从某内存(memory)中读取的所有值都是正确的:

  • 可将内存(memory)读取看成是顺序发生的:
    • 由“weak Verifier”来决定每个time step读取哪个memory cell,并将相应的读取请求发送给某untrusted Prover P P P
    • Prover P P P给每个请求恢复相应的value,声称当前在该memory cell中存储的即为该值。
    • “weak Verifier”需检查所返回的所有值都是“correct(正确的)”。
  • [BEGKN 1994] 中关注Verifier V V V的space复杂度:
    • 通过fingerprinting特定vectors,Verifier V V V来完成相应检查;
    • fingerprints可 以递增方式来计算,因此Verifier V V V仅需要存储 2 2 2个field elements。
  • 本文重点关注Verifier V V V可在某arithmetic circuit内高效实现!

为让内存读取更checkable,[BEGKN 1994]中对读取流程做了如下修改:

  • 1)修改1:对于每个“memory cell” j = 1 , ⋯   , N j=1,\cdots,N j=1,,N,维护了一个计数器 c j c_j cj
    • 可将 c j c_j cj看成是用于追踪记录cell j j j已被读取的次数。
  • 2)修改2:每次对cell b i b_i bi做读取操作,返回的为(value, count) pair ( a , c ) (a,c) (a,c),且Verifier V V V需请求将该cell “overwrite”为tuple ( a , c + 1 ) (a,c+1) (a,c+1)。【即每个读操作 R R R,对应有一个写操作 W W W
  • 3)修改3:当完成所有读取操作之后,Verifier V V V会对内存做最后一次请求(final pass),要求Prover P P P提供存储于所有cell的(value, count) pair。【最后一次,只有读操作 R R R,不再附加有写操作】
    • 而这最后读取的 N N N个cell set值,不会再附加有“overwrite”操作。

[BEGKN 1994]中指出:

  • 当且仅当,对每个cell j j j的每次读操作 R R R 返回的(value, count) pair,均为该cell上一次写操作 W W W写入的(value, count) pair值,则 R R R W W W为permutation关系。

对应的基本流程为:

  • 1)刚初始化完之后, W W W中包含了 N N N个tuples,而 R R R为空。

  • 2)每次读取操作,为向 R R R中增加一个tuple,每次写操作,会向 W W W中增加一个tuple:

    • 若Prover P P P是诚实的,则每次向 R R R中增加的tuple,应与 W W W中现有的某个tuple “match(匹配)”。
    • 且,每个写操作,向 W W W中添加的为在 R R R中不存在的新tuple。
    • 在对final pass时, R R R应“match(匹配)” W W W中所有内容。【若Prover P P P是诚实的,则此时 R R R W W W长度完全一样,且内容完全一样,只是顺序不同。

    若Prover P P P返回的为“incorrect” (value, count) pair,则:

    • R R R中该tuple,在 W W W中并不存在。
    • W W W中仍然有 N N N个tuple 不存在于 R R R中。
    • R R R W W W中不同tuple的个数( R Δ W R\Delta W RΔW)变为了 N + 1 N+1 N+1
    • 这种 R R R W W W之间的“mismatch”是永远不可纠正的:
      • 在final pass之前,对该内存的每个读操作均会立即跟随一个写操作(写入另一值),因此,这种读/写组合,不会让 ∣ R Δ W ∣ |R\Delta W| RΔW值减少的。
      • 而对内存的final pass之后,只会让 ∣ R Δ W ∣ |R\Delta W| RΔW值减少 N N N

即:

  • 令Prover P P P返回的所有读操作值,组成 R R R向量,其每个元素为(cell, value, count) tuple。
  • W W W向量对应为写操作,其每个元素为(cell, value, count) tuple。
    • W W W中包含对内存的初始化写入值——即 ( j , t [ j ] , 0 ) : j = 1 , ⋯   , N (j,t[j],0):j=1,\cdots,N (j,t[j],0):j=1,,N

接下来是对 R R R W W W做permutation checking:

  • 1)对每个(cell, value, count) tuple 做Reed-Solomon fingerprint:
    • Verifier V V V选择随机值 γ ∈ F \gamma\in\mathbf{F} γF,将 γ \gamma γ发送给Prover P P P
    • Prover P P P R R R W W W中的所有 ( b , a , c ) (b,a,c) (b,a,c) tuple替换为 b + γ a + γ 2 c b+\gamma a+\gamma^2 c b+γa+γ2c
  • 2)这样,可将 R R R W W W由 具有 N + m N+m N+m个元素,每个元素为3个field elements的向量,reduce为,具有 N + m N+m N+m个元素,每个元素为1个field elements的向量 R ′ , W ′ R',W' R,W
    • 若无碰撞(即两个不同的tuple具有相同的fingerprint),则 R ′ R' R W ′ W' W为permutation关系,当且仅当 R R R W W W为permutation关系。
  • 3)对 R ′ R' R W ′ W' W做permutation-invariant fingerprinting:
    • Verifier V V V选择随机值 r ∈ F r \in\mathbf{F} rF,将 r r r发送给Prover P P P
    • Prover P P P让Verifier V V V信服: ∏ i = 0 N + m − 1 ( r − R i ′ ) = ∏ i = 0 N + m − 1 ( r − W i ′ ) \prod_{i=0}^{N+m-1}(r-R_i')=\prod_{i=0}^{N+m-1}(r-W_i') i=0N+m1(rRi)=i=0N+m1(rWi)

6.6 Basic-Lasso:完整技术细节

Basic-Lasso中:

  • t ∈ F N t\in\mathbf{F}^N tFN:为lookup table。
  • b ∈ F m b\in\mathbf{F}^m bFm:为table indices向量。
  • a ∈ F m a\in\mathbf{F}^m aFm:为looked value向量。
  • c ∈ F m c\in\mathbf{F}^m cFm:为相应index被读取的次数组成的向量。
  • Verifier V V V收到的为 C o m ( a ~ ) , C o m ( b ~ ) Com(\tilde{a}), Com(\tilde{b}) Com(a~),Com(b~)
  • Prover P P P声称:对于所有的 i = 1 , ⋯   , m i=1,\cdots,m i=1,,m,有 a i = t [ b i ] a_i=t[b_i] ai=t[bi]

然后应用GKR协议:
在这里插入图片描述
电路 C C C输出1个field element,为 ∏ i = 0 N + m − 1 ( r − R i ′ ) 与 ∏ i = 0 N + m − 1 ( r − W i ′ ) \prod_{i=0}^{N+m-1}(r-R_i')与\prod_{i=0}^{N+m-1}(r-W_i') i=0N+m1(rRi)i=0N+m1(rWi)之间的差值。
电路 C C C为由multiplication gates组成的binary tree,multiplication gates的输入为 R ′ , W ′ R',W' R,W,其中:

  • R ′ ~ ( z ) = b ~ ( z ) + γ ⋅ a ~ ( z ) + γ 2 ⋅ c ~ ( z ) \tilde{R'}(z)=\tilde{b}(z)+\gamma\cdot \tilde{a}(z)+\gamma^2 \cdot \tilde{c}(z) R~(z)=b~(z)+γa~(z)+γ2c~(z)
  • W ′ ~ ( z ) \tilde{W'}(z) W~(z)也为 t ~ ( z ) 、 b ~ ( z ) 、 a ~ ( z ) 、 c ~ ( z ) \tilde{t}(z)、\tilde{b}(z)、\tilde{a}(z)、 \tilde{c}(z) t~(z)b~(z)a~(z)c~(z)的简单组合。

6.7 Generalized-Lasso概览

6.7.1 多变量多项式基本事实

Schwartz-Zippel Lemma是指:

  • p ≠ q p\neq q p=q,且 p , q p,q p,q为degree最多为 d d d的单变量多项式,则 Pr ⁡ r ∈ F [ p ( r ) = q ( r ) ] ≤ n ∣ F ∣ \Pr_{r\in\mathbf{F}}[p(r)=q(r)]\leq \frac{n}{|\mathbf{F}|} PrrF[p(r)=q(r)]Fn
  • p ≠ q p\neq q p=q,且 p , q p,q p,q为total degree最多为 d d d的具有 l l l个变量的多变量多项式,则 Pr ⁡ r ∈ F l [ p ( r ) = q ( r ) ] ≤ n ∣ F ∣ \Pr_{r\in\mathbf{F}^l}[p(r)=q(r)]\leq \frac{n}{|\mathbf{F}|} PrrFl[p(r)=q(r)]Fn

extension定义:

  • 已知函数 f : { 0 , 1 } l → F f:\{0,1\}^l\rightarrow \mathbf{F} f:{ 0,1}lF,基于 F \mathbf{F} F域的具有 l l l个变量的多变量多项式 g g g,若对于所有的 x ∈ { 0 , 1 } l x\in\{0,1\}^l x{ 0,1}l,有 f ( x ) = g ( x ) f(x)=g(x) f(x)=g(x),则称 g g g为对 f f f的extend。

multilinear extension定义:

  • 任意函数 f : { 0 , 1 } l → F f:\{0,1\}^l\rightarrow \mathbf{F} f:{ 0,1}lF,具有 唯一的 multilinear extension(MLE) f ~ \tilde{f} f~
    • multilinear意味着:多项式单项内每个变量的degree最大不超过1。

如:
在这里插入图片描述
相应的multilinear extension为:
在这里插入图片描述
而下例中,由于 g g g中单项单个变量的最大degree为2,因此其为non-linear extension of f f f
在这里插入图片描述

6.7.2 sum-check protocol [LFKN90]

sum-check protocol [LFKN90]是指:

  • Verifier V V V对,基于 F \mathbf{F} F域的具有 l l l个变量的多变量多项式 g g g,进行oracle access。
  • 目标是:计算:
    ∑ b 1 ∈ { 0 , 1 } ∑ b 2 ∈ { 0 , 1 } ⋯ ∑ b l ∈ { 0 , 1 } g ( b 1 , b 2 , ⋯   , b l ) \sum_{b_1\in\{0,1\}}\sum_{b_2\in\{0,1\}}\cdots\sum_{b_l\in\{0,1\}}g(b_1,b_2,\cdots,b_l) b1{ 0,1}b2{ 0,1}bl{ 0,1}g(b1,b2,,bl)

sum-check protocol的开销为:

  • 总的communication开销为: O ( d l ) O(dl) O(dl)个field elements。
    • Prover P P P发送 l l l个message,每个message对应为——degree最多为 d d d的单变量多项式。
    • Verifier V V V发送 l − 1 l-1 l1个message,每个message对应为1个field element。
  • Verifier V V V的runtime为:
    O ( d l + time required to evaluate O(dl+\text{time required to evaluate} O(dl+time required to evaluate g g g at one point ) \text{at one point}) at one point)

6.7.3 sum-check protocol应用案例

sum-check protocol应用案例,如,构建统计三角形数量的Interactive Proof(IP),Verifier具有linear time:

  • 输入: A ∈ { 0 , 1 } n × n A\in \{0,1\}^{n\times n} A{ 0,1}n×n,表示某graph的相邻矩阵。
  • desired输出为: ∑ ( i , j , k ) ∈ [ n ] 3 A i j A j k A k i \sum_{(i,j,k)\in [n]^3}A_{ij}A_{jk}A_{ki} (i,j,k)[n]3AijAjkAki
  • 目前已知的,做矩阵乘法运算最快的算法,约为 n 2.37 n^{2.37} n2.37。【并不实用】
  • 借助sum-check protocol,使得Verifier time为 O ( n ) O(n) O(n),具体的设计思路为:
    • a)将 A A A看成是某function mapping { 0 , 1 } log ⁡ n × { 0 , 1 } log ⁡ n → F \{0,1\}^{\log n}\times \{0,1\}^{\log n}\rightarrow \mathbf{F} { 0,1}logn×{ 0,1}lognF。如:
      在这里插入图片描述
    • b)将 A ~ \tilde{A} A~看成是 A A A的multilinear extension。
    • c)定义多项式 g ( X , Y , Z ) = A ~ ( X , Y ) A ~ ( Y , Z ) A ~ ( X , Z ) g(X,Y,Z)=\tilde{A}(X,Y)\tilde{A}(Y,Z)\tilde{A}(X,Z) g(X,Y,Z)=A~(X,Y)A~(Y,Z)A~(X,Z)
    • d)对 g g g多项式应用sum-check协议,来计算:
      ∑ ( a , b , c ) ∈ { 0 , 1 } 3 log ⁡ n g ( a , b , c ) \sum_{(a,b,c)\in\{0,1\}^{3\log n}}g(a,b,c) (a,b,c){ 0,1}3logng(a,b,c)
  • 相应的开销为:
    • 总的communication开销为 O ( log ⁡ n ) O(\log n) O(logn)
    • Verifier V V V的runtime为 O ( n 2 ) O(n^2) O(n2),主要工作量在于evaluating:
      g ( r 1 , r 2 , r 3 ) = A ~ ( r 1 , r 2 ) A ~ ( r 2 , r 3 ) A ~ ( r 1 , r 3 ) g(r_1,r_2,r_3)=\tilde{A}(r_1,r_2)\tilde{A}(r_2,r_3)\tilde{A}(r_1,r_3) g(r1,r2,r3)=A~(r1,r2)A~(r2,r3)A~(r1,r3)
    • Prover P P P的runtime为 O ( n 3 ) O(n^3) O(n3)

6.7.4 Generalized-Lasso协议

  • 1)Verifier V V V知道: a ~ \tilde{a} a~的(多项式)承诺值,其中:
    • a ~ \tilde{a} a~ a a a的extension,
    • 可将 a a a看成是某function mapping { 0 , 1 } m → F \{0,1\}^m\rightarrow \mathbf{F} { 0,1}mF
  • 2)Prover P P P的natural witness为:list j ( 0 ) , j ( 1 ) , ⋯   , j ( m − 1 ) j(0),j(1),\cdots,j(m-1) j(0),j(1),,j(m1)
  • 3)Verifier V V V需要check:
    对于 i = 0 , ⋯   , m − 1 i=0,\cdots,m-1 i=0,,m1 ( ∗ ) a i = t [ j ( i ) ] (*)a_i=t[j(i)] ()ai=t[j(i)]是否成立。【借鉴了Caulk思想。】
  • 4)令 M M M m × N m\times N m×N矩阵,其第 i i i行指定了 j ( i ) j(i) j(i) in unary。
    • M M M矩阵第 i i i行在列 j ( i ) j(i) j(i)值为1,其余位置均为0。【 M M M为超级稀疏的矩阵。】
  • 5)Checking ( ∗ ) (*) () 等价为 checking M t = a Mt=a Mt=a
    如:
    在这里插入图片描述
    在这里插入图片描述
  • 6)令 b = M t b=Mt b=Mt,则:
    • Fact 1: b ~ ( r ) = ∑ j ∈ { 0 , 1 } log ⁡ N M ~ ( r , j ) t ~ ( j ) \tilde{b}(r)=\sum_{j\in\{0,1\}^{\log N}}\tilde{M}(r,j)\tilde{t}(j) b~(r)=j{ 0,1}logNM~(r,j)t~(j)为formal polynomials。原因在于:
      • 该等式右侧为multilinear in r r r,且对所有的 r ∈ { 0 , 1 } m r\in\{0,1\}^m r{ 0,1}m输入均与 b b b agree。因此,其必然为 b b b的unique multilinear extension。
    • Fact 2:根据Schwartz-Zippel,检查 M t = a Mt=a Mt=a 等价为 对任意选择的 r ∈ F log ⁡ m r\in\mathbf{F}^{\log m} rFlogm来检查 b ~ ( r ) = a ~ ( r ) \tilde{b}(r)=\tilde{a}(r) b~(r)=a~(r),的soundness error上线为 log ⁡ ( m ) / ∣ F ∣ \log(m)/|\mathbf{F}| log(m)/∣F

为此,Generalized-Lasso协议为:

  • Prover P P P发送对 M ~ \tilde{M} M~的承诺值。
  • Verifier V V V随机选择 r ∈ F log ⁡ m r\in\mathbf{F}^{\log m} rFlogm
  • Prover P P P 和 Verifier V V V 运行sum-check protocol 来确认:
    a ~ ( r ) = ∑ j ∈ { 0 , 1 } log ⁡ N M ~ ( r , j ) t ~ ( j ) \tilde{a}(r)=\sum_{j\in\{0,1\}^{\log N}}\tilde{M}(r,j)\tilde{t}(j) a~(r)=j{ 0,1}logNM~(r,j)t~(j)【右侧等价为Fact 1的 b ~ ( r ) \tilde{b}(r) b~(r)
  • 在sum-check协议最后一步,Verifier V V V需要知道 a ~ ( r ) , b ~ ( r ′ ) , M ~ ( r , r ′ ) \tilde{a}(r),\tilde{b}(r'),\tilde{M}(r,r') a~(r),b~(r),M~(r,r),其中:
    • r ′ r' r为 Verifier V V V 在sum-check协议中选择的随机field elements vector。
    • a ~ ( r ) , M ~ ( r , r ′ ) \tilde{a}(r),\tilde{M}(r,r') a~(r),M~(r,r)由Prover P P P提供,因为 a ~ \tilde{a} a~ M ~ \tilde{M} M~通过多项式承诺方案进行commit了。
    • 若lookup table是LDE-structured,则Verifier V V V可自行计算 r ′ ~ \tilde{r'} r~,用时为 O ( log ⁡ N ) O(\log N) O(logN)
      如若 t = ( 0 , 1 , 2 , ⋯   , 2 128 − 1 ) t=(0,1,2,\cdots,2^{128}-1) t=(0,1,2,,21281),则 t ~ ( r ′ ) = ∑ k = 0 127 2 k r k ′ \tilde{t}(r')=\sum_{k=0}^{127}2^kr_k' t~(r)=k=01272krk

其中,忽略的主要细节有

  • 1)Prover P P P如何对 M ~ \tilde{M} M~进行commit,并在稍后reveal one requested evaluation,相应的Prover P P P runtime与 M M M中的非零元素数量呈比例?:
    • 而不是与 M M M中所有元素数呈比例。
    • 即希望的Prover P P P runtime为 m m m,而不是 m ⋅ N m\cdot N mN
    • 为此需要名为sparse polynomial commitment scheme的多项式承诺方案:【即Lasso自身】
      • Basic-Lasso中已提供了构建sparse polynomial 多项式承诺方案 的主要技术。
      • 核心思想为:Prover P P P M M M中的非零元素仅需commit:即为sparse多项式 M ~ \tilde{M} M~的“dense”表示。
      • 当Verifier V V V请求 M ~ ( r ) \tilde{M}(r) M~(r)时,Prover P P P证明其基于 M M M中的非零元素,运行某(快速)算法正确计算了 M ~ ( r ) \tilde{M}(r) M~(r)
      • 该算法仅用于乘法,以及,对size为 N N N的decomposable table的lookup。
  • 2)即使 M ~ ( r , j ) \tilde{M}(r,j) M~(r,j) t ~ ( j ) \tilde{t}(j) t~(j) extend vectors长度为 O ( N ) O(N) O(N),如何将sum-check Prover time实现为 O ( m ) O(m) O(m)?:
    • 关键在于让 M ~ ( r , j ) \tilde{M}(r,j) M~(r,j) m m m-sparse:
      • j ∈ { 0 , 1 } log ⁡ N j\in\{0,1\}^{\log N} j{ 0,1}logN中的 m m m个值之外的所有其它值均为0。
      • Prover仅需关注 j j j值,忽略其它 N − m N-m Nm个值。

参考资料

[1] 2023年8月Justin Thaler给a16z团队分享 视频 Lasso, Jolt, and the Lookup Singularity, Part II with Justin Thaler | a16z crypto research talks

Justin Thaler系列博客

lookup系列博客

猜你喜欢

转载自blog.csdn.net/mutourend/article/details/132363674