Sumcheck

  • g(x1,x2,,xv), xiF
  • Prover 需要计算并证明
    g
    在布尔输入上的值求和的结果是
    H
    :
    • H:=x1{0,1}x2{0,1}xv{0,1}g(x1,x2,,xv)
  • 完全展开后会产生
    2v
    个常数项,并求和
  • Sumcheck 可以计算任意
    BF
    x1Bx2BxvBg(x1,x2,,xv)
    的值,完全展开后会产生
    |B|v
    个常数项。
  • 证明者的计算时间
    O(2v)+c
    c
    是证明过程需要用到的额外步骤,一个常数因子。
  • 验证者的计算时间
    O(v+d)
    d
    g
    在单个输入上的计算成本。

协议描述

假设验证者拥有对

g 的 oracle 的访问权限,即获取
g
在随机向量
(r1,r2,,rv)Fv
的取值
g(r1,r2,,rv)

  • 协议开始时,
    P
    发送
    C1
    , 并声称
    C1=H
  • round
    1
    :
    • P
      发送一个一元多项式
      g1(X1)
      , 声称:
      g1(X1)=(x2,,xv){0,1}v1g(X1,x2,,xv)
    • V
      检查
      C1=?X1{0,1}g(X1)=g1(0)+g1(1)
      ,如果不相等,则拒绝。如果
      g1
      的次数大于
      deg1(g)
      ,则拒绝。
    • V
      选择一个随机数
      r1F
      ,发送给
      P
  • round
    j
    for
    1<j<v
    :
    • P
      发送一个一元多项式
      gj(Xj)
      ,声称:
      gj(Xj)=(xj+1,,xv){0,1}vjg(r1,,rj1,Xj,xj+1,,xv)
    • V
      检查
      gj1(rj1)=?Xj{0,1}gj(Xj)=gj(0)+gj(1)
      ,如果不相等,则拒绝。如果
      gj
      的次数大于
      degj(g)
      ,则拒绝。
    • V
      选择一个随机数
      rjF
      ,发送给
      P
  • round
    v
    • P
      发送一个一元多项式
      gv(Xv)
      ,声称:
      gv(Xv)=g(r1,,rv1,Xv)
    • V
      检查
      gv1(rv1)=?Xv{0,1}gv(Xv)=gv(0)+gv(1)
      ,如果不相等,则拒绝。如果
      gv
      的次数大于
      degv(g)
      ,则拒绝。
  • V
    选择一个随机数
    rvF
    ,并使用 oracle 查询来获取
    g(r1,r2,,rv)=?gv(rv)
    ,如果不相等,则拒绝。
  • 如果
    V
    在上述操作中仍未拒绝,则
    V
    停止并接受。

另外一个角度

  • V
    直接生成随机挑战
    (r1,r2,,rv)
    ,让
    P
    返回
    sp=gp(r1,,rv)
    ,然后和通过 oracle 获取
    so=g(r1,,rv)
    ,再验证
    sp=?so
    • 这样只能验证
      P
      知道多项式
      g
      ,不能获取在布尔输入下的结果。

再另外一个角度

  • P
    声称
    gv(Xv)=g(r1,,rv1,Xv)
  • V
    通过随机挑战,选取
    Xv=rv
    ,通过 oracle 计算
    g(r1,,rv1,rv)
    ,验证
    gv(rv)=g(r1,,rv1,rv)
    ,没问题,就是单变量多项式那一套。现在可以信任
    gv(Xv)
  • P
    声称
    gv1(Xv1)=g(r1,,rv2,Xv1,0)+g(r1,,rv2,Xv1,1)
  • V
    通过随机挑战,选取
    Xv1=rv1
    ,验证
    gv1(rv1)=g(r1,,rv1,0)+g(r1,,rv1,1)=gv(0)+gv(1)
    ,没问题,就是单变量多项式那一套。现在可以信任
    gv1(Xv1)
  • 然后一路回溯到可以相信
    H

和 Fields of Small Characteristic 的结合

https://people.cs.georgetown.edu/jthaler/small-sumcheck.pdf

The Sum-Check Protocol over Fields of Small Characteristic

https://zhuanlan.zhihu.com/p/688641141

基于 Sumcheck 的 SNARKs 拥有最快的 prover,其中 prover 的复杂度为

O(n),其中
n
为被求和项个数,等于
2v

本文的优化:协议运行在一个很小的 base field 的扩域上。然后让尽量多的 prover 乘法操作在这个 base field 上。代价是更多的 total field 乘法

什么是 total field?

当 sumcheck 应用到多项式乘积时,并且它的 output 是在这个 base field。该算法可以能够将扩域上的操作减少几个数量级。

在一些 SNARK 中, sumcheck 和 多项式承诺相结合,但是多项式承诺发展更快(growing faster),尤其被承诺的值很小的时候。这些优化后的承诺方案让 sum-check prover 成为瓶颈,本文可以缓解该瓶颈。

扩域

B 为基域,
F
B
上的
k
次扩域。
F
中的元素可用向量空间的一组基
β1,,βk
表示。其中
βiB

xF
x=i=1kαiβiαiB

塔式基

k=2z,其中
z>0
zZ

如果

F 通过以下步骤从
B
构造出来,则
F
称为塔式扩域:

  1. 首先构造一个
    B
    2
    次扩域
    B
  2. 然后构造
    B
    2
    次扩域
    B
  3. 进行
    z
    次迭代。

Binius[DP23b] 已经使用了 tower basis。并产生好处:

  1. 压缩子域元素
  2. 子域之间,基域与子域之间的快速乘法

成本:

  • bb
    :指两个基域元素相乘的成本
  • be
    : 指基域元素与扩域元素相乘的成本,大约为
    kbb
    ,
    k
    为扩张次数
  • ee
    :指两个扩域元素相乘的成本,由前面讨论的 Karatsuba 算法可得,若
    k
    2
    的幂,则
    eek1.58496bb