### ZKSwap团队解读零知识证明PLONK协议

*L1 R1 - O1 = 0**

*L2 R2 - O2 = 0**

*L3 R3 - O3 = 0**

L(1) = L1, R(1) = R1, O(1) = O1

L(2) = L2, R(2) = R2, O(2) = O2

L(3) = L3, R(3) = R3, O(3) = O3

*F(1) = L(1) R(1) - O(1) = 0**

*F(2) = L(2) R(2) - O(2) = 0**

*F(3) = L(3) R(3) - O(3) = 0**

*F(X) = T(X) Z(X) ==> T(X) = F(X) / Z(X)**

1. P计算F(X)并把F(X)发送给V；
2. V根据Z(X)直接校验F(X) / Z(X)

1. Setup：初始化，生成计算多项式承诺需要的一些必备参数；
2. Commit：计算多项式承诺，其结果是一个值；
3. Open：返回与多项式承诺对应的多项式函数；
4. VerifyPoly：验证多项式承诺是否和多项式函数一致；
5. CreateWitness：证明多项式函数在某一点的值是否是证明方P声称的值，具体的数学方法就是：判断多项式是否能被整除，即：
6. VerifyEval：验证方V验证多项式函数在某一点的值是否是证明方P声称的值，具体的数学方法是：利用双线性配对验证其数学乘法逻辑关系。

<center data-v-0c5b29ee="" style="box-sizing: border-box; border: 0px solid rgb(226, 232, 240); color: rgb(74, 85, 104); font-family: system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, "Noto Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">T(X) = F(X) / (X - 1) ==> T(X) (X - 1) = F(X) ==> T(X) X = F(X) + T(X)</center>

<center data-v-0c5b29ee="" style="box-sizing: border-box; border: 0px solid rgb(226, 232, 240); color: rgb(74, 85, 104); font-family: system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Arial, "Noto Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">e(Commit(T(x)), x*G) =？ e(Commit(F(x)) +Commit (T(x)), G) (双线性配对的性质)</center>

Relation

1. w 代表着电路里的输入、输出，总共3n个，n是电路里乘法门的数量，每个门都有左输入，右输入和输出，因此w总共有3n个；
2. q* 代表着选择向量，它的取值对应这这个是乘法门，还是加法门等类似的约束类型
3. σ 代表着置换多项式，其表示门之间的一致性约束索引
4. 倒数第一个公式代表 门之间的约束成立
5. 倒数第二个公式代表 门的约束关系成立

CRS & P_Input & V_Input

1. 整个协议都是基于多项式的，因此需要构建对应的多项式形式。
2. 多项式σ的阶是3n的，由于和多项式承诺相关的CRS最高的阶位n+2，因此需要把σ拆分成3个多项式S,分别记录每个多项式的置换关系(L、R、O);
3. 为了减少通信复杂度和保护隐私，协议基于多项式承诺构建，因此验证方V的输入都是承诺值。

Prove

1. b1...b9是随机数，从用法看是为了安全，但是我暂时也没明白，不加这个随机数，又会有什么安全问题？
2. a(X)、b(X)、c(X)分别是代表了电路里的左输入，右输入和输出
3. [a]、[b]、[c]表示多项式的承诺值，参考多项式承诺小节里的承诺计算方法

1. β和ϒ都是用来生成置换校验函数的参数，详见第一篇里f`(x)和g`(x)的生成过程；
2. z(X)的生成方式对应置换校验里跨多项式的生成过程，Li(X)为拉格朗日多项式基，性质满足，尽在x=i的时候为1，其他为0；
3. 注意区分ω和w，ω是群H的生成元，是多项式的自变量的取值。w是电路的左输入，右输入和输出，是多项式L,R,O在在群H上的取值。

1. 根据前面的描述，门约束多项式和一致性约束多项式在群H上的所有元素都是取值为0的，因此都会被多项式ZH(X)整除，等同于上面所述的T(X);
2. 因此，证明方只要能证明整除的结果的确是多项式，那就能证明，门约束多项式和一致性多项式在群H所有元素上取值为0，即所有约束关系成立，即电路逻辑成立；
3. 可以知道的是t(X)的阶最高为3n，但是用于计算承诺的CRS只到了n的级别，因此需要把多项式t(X)拆分，然后单独计算承诺值。

1. 为了减少验证方V的操作复杂度，t(X)的分子部分r(X)在x=z处的值，P计算好，然后验证方直接验证，其他的操作类似；
2. v的值看起来是为了更安全；
3. Wz(X)对应多项式协议里的CreateWitness操作，证明这些多项式r(X),a(X),b(X)等在x=z处的值确实等于r,a,b等，对Wzw(X)同理，并返回承诺值。

Verify

1. 从输入看，比较清晰，就是一些公开的输入和证明方P的证明输出；
2. 根据输入，生成置换校验过程中需要的一些参数

1. 根据证明方P的过程来看，验证方V的核心工作就是验证两个多项式承诺；
2. 两个多项式承诺验证需要两个配对，可以通过一个参数组合成一个配对，即μ；
3. 在验证前，先计算Wz(x)，Wzw(x)的分母在x=z处的值，两部分，减数和被减数，分别对应[F]、[E]。μ作为系数的，就是对应Wzw(X)多项式的。
4. 最后通过一个双线性配对操作完成两个多项式承诺的验证。

• 发表于 2021-01-28 10:57
• 阅读 ( 341 )
• 学分 ( 13 )
• 分类：零知识证明

ZKSwap

16 篇文章, 121 学分