零知识证明 - 说说Nova
前段时间在翻译一本零知识证明技术的书。上个月底基本内容已经翻译完成。翻译时间比我预想的长得多。目前正在和作者讨论书中的一些笔误,准备最后的定稿。anyway,终于有点时间看看新鲜东西。先从Nova算法开始~01,Nova算法相关资料三份资料可以帮助理解Nova算法:Nova论文:https://eprint.iacr.org/2021/370.pdf Nova潜在攻击和相应修正:https://eprint.iacr.org/2023/969.pdf Nova潜在攻击的理解总结:https://www.zksecurity.xyz/blog/posts/nova-attack/ 本文是上述资料的理解和总结。本文中的一些图来自于上述资料,在本文中不再一一标注。02,从IVC开始Nova算法是一种针对IVC(增量可验证计算,Incrementally Verifiable Computation)的新型的零知识证明算法。IVC,即同一个函数把前一个输出作为下一个输入迭代计算。F函数的迭代计算过程如下图:z0是最初的输入,通过F函数计算生成的结果,作为下一个F函数的输入。03,松弛R1CS以及松弛承诺R1CS众所周知,R1CS是零知识证明技术中电路约束表示形式。松弛R1CS(Relaxed R1CS)可以看成是R1CS的扩展形式。在R1CS的基础上,增加一个标量u以及一个错误向量E。松弛R1CS的实例用(E, u, x)表示。松弛承诺R1CS在松弛R1CS的基础上,将E以及W向量承诺。松弛承诺R1CS的实例用(\bar{E}, u, \bar{W}, x)表示,其中x和u是公开变量。从R1CS扩展到松弛R1CS,是为了折叠方案。注意的是,从松弛R1CS的角度看,R1CS是其的一种特例。也就是说,R1CS也是一种“特别“的松弛R1CS。04,折叠方案(Folding Scheme)直觉上来说,一个关系R的折叠方案就是将两个符合关系R的实例“折叠成”一个新的复合关系R的实例。松弛R1CS/松弛承诺R1CS就能进行类似的折叠。两者的折叠过程类似。松弛承诺R1CS的折叠方案如下:整个折叠方案由4步组成。第一步,证明者P发送一个交叉项T的承诺\bar{T}给验证者。第二步,验证者发送随机挑战r给证明者。第三步是证明者和验证者都需要执行的,承诺的折叠。第四步,证明者独自执行,将两个实例的E和W向量进行折叠。05,增广函数F' (Argumented Function)折叠方案,折叠的是松弛R1CS实例。那这些松弛R1CS实例证明的计算是什么?显然,这些计算要包括折叠的计算。这些计算不仅仅是IVC计算中的F函数了,也就被称为增广函数F‘。增广函数F’的计算主要由两部分组成:1/ IVC中的F函数2/ R1CS实例的折叠计算06,理想中的样子有了上述的这些理解,可以想象出折叠的过程:其中,circuit就是增广函数F’对应的电路。acc{1,2,3,4,5,6}是松弛承诺R1CS实例。circuit有两个计算:1/松弛承诺R1CS实例的折叠,比如acc1+acc2->acc3。2/计算F函数,将状态state1变为state2,再从state2变为state3等等。注意的是,增广函数F’对应的circuit,本身也是一个R1CS实例,其可以表示成松弛R1CS实例。也就是图中的acc4和acc6。“summarize”是将松弛R1CS实例转换为松弛承诺R1CS实例。仔细观察第二个电路的输入,acc3是折叠后的松弛承诺R1CS实例,acc4是证明acc3是正...














![[Star Li]零知识证明 - KZG多项式承诺](https://images.bitpush.news/2021/10/special_cn-20211016-163437866247425923.jpeg:0-37.jpeg)
![[Star Li]零知识证明 - zkEVM解读](https://images.bitpush.news/2021/09/special_cn-20210904-163073538048265962.png:163073520450215091.png)


