零知识证明详解六:皮诺曹协议

本文翻译自zcash官方博客,讲解zcash中所使用的zk-SNARKs的原理第六部分,此处是原文链接。友情提示:本文偏技术化,适合对技术和数学非常感兴趣的同学阅读。
zkSNARK是zero-knowledge succint non-interactive arguments of knowledge的简称,意思是:简洁的非交互的零知识证明
(本文授权BH好文好报群摘编、转载以及相关转授权推文行为)

在第五章,我们看到了如何把Alice想要向Bob证明的语句翻译成等价的“多项式语言”,也就是二次运算方程(QAP).

在本章中,我们将展示Alice如何发送一个简短的证明给Bob,以显示她有一个能满足QAP的赋值。我们将会使用皮诺曹协议。首先,先让我们回忆一下QAP的定义:

一个dm大小的二次运算方程Q,由多项式L_1,…,L_m, R_1,…,R_m, O_1,…,O_m和一个d阶目标多项式T构成。

对于一组赋值(c_1,…,c_m)满足Q,如果定义
L := \sum_{i=1}^m c_i * L_i, R := \sum_{i=1}^m c_i * R_i, O:= \sum_{i=1}^m c_i*O_i,以及 P := L * R - O,那么我们可以断定T整除P

就像我们在第五章看到的,Alice通常想证明她有一个具有额外条件的正确赋值,比如c_m = 7;不过我们这里为了简洁,先忽略它,仅仅展示如何证明她知道一个正确的赋值。

如果Alice有一个正确的赋值,意思是,像上面那样定义L,R,O,P,则存在一个多项式H,使得P = H * T。特别地,对于任意 s \in \mathbb{F}_p,我们都有P(s) = H(s) * T(s)

现在假如Alice没有一个正确的赋值,但是她用一个不满足条件的赋值(c_1,..., c_m)构造L, R, O, P,那么我们可以保证T不能整除P。这是说,对于任意一个阶次不大于d的多项式HP, L, R, O, H都将是不同的多项式。注意,这里的P, L, R, O, H的阶次都最多不会超过2d

现在我们可以用著名的Schwartz-Zippel定理了,它告诉我们,两个不同的阶次不大于2d的多项式,他们最多有2d个共同的点 s \in \mathbb{F}_p。因此,如果P2d大很多,那么随机选择一个s就能满足P(s) = H(s) * T(s)的概率非常低。

于是可以草拟出下面这个可以验证Alice是否有一组正确赋值的协议:

  1. Alice选择如下阶次不大于d的多项式:L, R, O, H
  2. Bob选择一个随机的点 s \in \mathbb{F}_{p'},并计算出E(T(s))
  3. Alice把那些多项式在点s处的隐藏数(E(L(s)), E(R(s)), E(O(s)), E(H(s)))发送给Bob。
  4. Bob检查如下方程是否在s处成立:E(L(s) * R(s) - O(s)) = E(T(s) * H(s))

再强调一次,如果Alice没有一组正确的赋值,那么她所使用的方程大概率下在s点不能成立,因此,在这种情况,她将不能通过Bob的验证。

有一个问题是我们是否有工具可以实现上面的协议。关键点在于Alice必须在不知道s的情况下选择出她要使用的多项式,而这正是我们在第二章到第四章讲到的可验证的盲式计算协议

确保Alice是通过一组赋值生成她的协议的

这点很重要:如果Alice没有一组正确的赋值,也并不意味着她不能找到任何的阶次不大于d的,并且满足如下条件的L,R,O,HL * R - O = T * H。这仅仅是说她不能通过同一组赋值(c_1, ..., c_m)得到这样的多项式: L:=\sum_{i=1}^m c_i*L_i, R:= \sum_{i=1}^m c_i* R_i, O := \sum_{i=1}^m c_i * O_i

第四章的协议仅仅可以保证她使用了正确的阶次的多项式 L, R, O,但不能保证他们是从过同一组赋值产生的。这儿的形式化证明有点微妙;所以我们粗略的描述一下解决方案。

我们把多项式L, R, O组合成一个多项式F:
F = L + X^{d+1} * R + X ^ {2(d+1)} * O

RX^{d+1}相乘、Ox^{2(d+1)}相乘的原因是,这样L, R, O的系数在F中不会混合:1, X, ..., X^d刚好是L的系数,后面d+1个系数x^{d+1}, ..., X^{2d+1}刚好是R的系数,最后d+1个系数是O的。

让我们用同样的方式把QAP中的多项式组合起来,给每个i \in {1, ..., m}定义一个多项式F_i,它的第一部分d+1个系数是L_i的系数,之后的是R_i的系数,再之后是Q_i的系数。也就是说,对于每个i \in {1, ..., m},我们定义这个多项式:

F_i = L_i + X^{d+1} * R_i + X^{2(d+1)} * O_i

注意,当我们把两个F_i相加时,L_i, R_i, O_i也分别相加。例如:
F_1 + F_2 = (L_1 + L_2) + X^{d+1} * (R_1 + R_2) + X ^{2(d+1)} * (O_1 + O_2)

更一般地,假设对于(c_1, ..., c_m)我们有F = \sum_{i=1} ^m c_i * F_i ,那么我们将得到: L = \sum_{i=1}^m c_i * L_i, R = \sum_{i=1}^m c_i * R_i, O = \sum_{i=1}^m c_i * O_i,它们共用相同的(c_1, ..., c_m)。换句话说,如果FF_i的线性组合,那么L, R, O就确实是从同一组赋值得到的。

因此,Bob将会请Alice证明FF_i的线性组合,这个过程和盲式计算是类似的:

Bob选择一个随机的\beta \in \mathbb{F}_p^*,并把隐藏数E(\beta * F_i(s)), ..., E(\beta * F_m(s))发送给Alice,并请Alice发回E(\beta*F(s))。如果她成功了,根据扩展版本的KCA假设,就代表Alice知道如何对F_i进行线性组合,从而计算出F

加入零知识-隐藏那组赋值

在zk-SNARK里,Alice想隐藏她的赋值的所有信息,然后这些隐藏数E(L(s)), E(R(s)), E(O(s)), E(H(s))多少还是提供了一些信息。

比如,给定一些其他的符合条件的赋值(c_1, ..., c_m),Bob可以分别计算出对应的L', R', O', H',以及它们的隐藏数E(L'(s)), E(R'(s)), E(O'(s)), E(H'(s))。如果这些结果与Alice的隐藏数不同,那么他可以断定(c'_1, ..., c'_m)不是Alice的赋值。

为了避免这种的信息泄漏,Alice想给每个多项式添加一些随机数作为偏移量T,用以隐藏他的赋值。这样,她选择了随机的\sigma_1, \sigma_2, \sigma_3 \in F_p^*,并定义:

L_z:= L + \sigma_1 * T, R_z := R + \sigma_2 * T, O_z := O + \sigma_3 * T

假设 L, R, O是通过一组正确的赋值得到了,因此对于某个多项式H, 可以使得L * R - O = T * H。因为我们刚刚在每个地方都加了个T的倍数,因此T也能整除L_z * R_z - Oz。看看我们下面的计算:

L_z * R_z - O_z = (L + \sigma_1 * T)(R + \sigma_2 * T) - O - \sigma_3*T
=(L*R - O) + L*\sigma_2*T + \sigma_1 * T * R + \sigma_1 \sigma_2*T^2 - \sigma_3*T
=T*(H + L* \sigma_2 + \sigma_1 * R + \sigma_1 \sigma_2*T - \sigma_3)

如此,我们定义H_z = H + L* \sigma_2 + \sigma_1 * R + \sigma_1 \sigma_2*T - \sigma_3,我们就得到了: L_z * R_z - O_z = T * H_z。因此,如果Alice没使用L, R, O, H,而使用了L_z, R_z, O_z, H_z,那么Bob仍能接受。

换句话说,这些多项式在点s \in \mathbb{F}_p, T(s) \neq 0的计算,没有揭示出任何原有赋值的信息。例如,因为T(s) \neq 0并且\sigma_1是随机的,所以\sigma_1 * T(s)也是一个随机的值,因此,L_z(s) = L(s) + \sigma_1 * T(s)没有揭示出L(s)的任何信息,因为它被随机数给掩盖了。

下一章讲什么?

我们勾勒了出了一个皮诺曹协议,在这个协议里,Alice可以让Bob相信她拥有一组可以供QAP应用的赋值,并且没有泄漏任何关于这组赋值的信息。为了得到zk-SNARK,这里仍有两个主要的问题未被解决:

  • 在这个协议中,Bob需要一个支持乘法的同态加密函数(HH)。比如,他需要根据E(H(s))E(T(s))计算出E(H(s) * T(s))。然而,目前为止,我们还没有看到过这种HH的例子,我们只见过可以支持加法和线性组合的HH。
  • 在这个系列中,我们讨论了Alice和Bob间的交互式协议。不过,我们的最终目标是,能够让Alice发送一个单一的不需要交互的证明信息,并且可以被公开的验证——也就是说,任何人都可以看见这个证明信息,都可以验证她的合法性,而不仅仅是Bob(之前和Alice交流过的那个人)可以验证。

这两个问题将会通过应用双椭圆曲线解决,我们在下一章,也是最后一章,会讲解。

早赞声明:为方便早赞、避免乱赞,“BH好文好报群”为点赞者、写作者牵线搭桥,实行“先审后赞、定时发表”的规则,也让作品脱颖而出、速登热门!加群微信:we01230123(天平)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容