Sumcheck
- Prover 需要计算并证明 在布尔输入上的值求和的结果是 :
- 完全展开后会产生 个常数项,并求和
- Sumcheck 可以计算任意 时 的值,完全展开后会产生 个常数项。
- 证明者的计算时间 , 是证明过程需要用到的额外步骤,一个常数因子。
- 验证者的计算时间 , 为 在单个输入上的计算成本。
协议描述
假设验证者拥有对 的 oracle 的访问权限,即获取 在随机向量 的取值 。
- 协议开始时, 发送 , 并声称
- round :
- 发送一个一元多项式 , 声称:
- 检查 ,如果不相等,则拒绝。如果 的次数大于 ,则拒绝。
- 选择一个随机数 ,发送给
- round for :
- 发送一个一元多项式 ,声称:
- 检查 ,如果不相等,则拒绝。如果 的次数大于 ,则拒绝。
- 选择一个随机数 ,发送给
- round :
- 发送一个一元多项式 ,声称:
- 检查 ,如果不相等,则拒绝。如果 的次数大于 ,则拒绝。
- 选择一个随机数 ,并使用 oracle 查询来获取 ,如果不相等,则拒绝。
- 如果 在上述操作中仍未拒绝,则 停止并接受。
另外一个角度
- 直接生成随机挑战 ,让 返回 ,然后和通过 oracle 获取 ,再验证
- 这样只能验证 知道多项式 ,不能获取在布尔输入下的结果。
再另外一个角度
- 声称
- 通过随机挑战,选取 ,通过 oracle 计算 ,验证 ,没问题,就是单变量多项式那一套。现在可以信任
- 声称
- 通过随机挑战,选取 ,验证 ,没问题,就是单变量多项式那一套。现在可以信任
- 然后一路回溯到可以相信
和 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 的复杂度为 ,其中 为被求和项个数,等于 。
本文的优化:协议运行在一个很小的 base field 的扩域上。然后让尽量多的 prover 乘法操作在这个 base field 上。代价是更多的 total field 乘法
什么是 total field?
当 sumcheck 应用到多项式乘积时,并且它的 output 是在这个 base field。该算法可以能够将扩域上的操作减少几个数量级。
在一些 SNARK 中, sumcheck 和 多项式承诺相结合,但是多项式承诺发展更快(growing faster),尤其被承诺的值很小的时候。这些优化后的承诺方案让 sum-check prover 成为瓶颈,本文可以缓解该瓶颈。
扩域
为基域, 为 上的 次扩域。 中的元素可用向量空间的一组基 表示。其中 。
塔式基
令 ,其中 且 。
如果 通过以下步骤从 构造出来,则 称为塔式扩域:
- 首先构造一个 的 次扩域
- 然后构造 的 次扩域
- 进行 次迭代。
Binius[DP23b] 已经使用了 tower basis。并产生好处:
- 压缩子域元素
- 子域之间,基域与子域之间的快速乘法
成本:
- :指两个基域元素相乘的成本
- : 指基域元素与扩域元素相乘的成本,大约为 , 为扩张次数
- :指两个扩域元素相乘的成本,由前面讨论的 Karatsuba 算法可得,若 是 的幂,则