Skip to content

概念速查

VC (Verifiable Computation)

可验证计算

证明和论证 (Proofs and Arguments)

  • 证明,或者说交互式证明 (IP),允许验证者交互式的从一个强大的Prover那里验证一个断言的正确性,例如可以允许一个移动设备检验一台超级计算机的运算正确性
  • 论证:和证明相比允许不正确陈述的 "证明",例如一个论证可能运用一个密码系统,如果这个密码系统被破解,那么就可以为一个错误陈述产生一个正确证明

数学证明(Mathematical Proof)

既对于一个问题,Prover 能够给出一个证明,使得 Verifier 能够通过该证明确认问题的正确性。

证明系统(Proof system)

A “proof system” is any procedure that decides what is and is not a convincing proof. That is, a proof system is specified by a verification procedure that takes as input any statement and a claimed “proof” that the statement is true, and decides whether or not the proof is valid.

完备性(Completeness)

Any true statement should have a convincing proof of its validity.This property is typically referred to as completeness.

可靠性(Soundness)

No false statement should have a convincing proof. This property is referred to as soundness.

IP (Interactive Proofs)

交互式证明,简单说,对于一个问题,ProverVerifier 通过多轮交互来完成证明过程,具体来说,对于一个数独或者图着色问题的证明就是交互的。

对于一个函数 f 的论证系统是 f 的交互式证明,并且只需在多项式时间下保证Prover 的不可伪造性。

当一个作弊证明者产生的错误断言说服验证者的概率小于 13 时,我们说该系统是可靠的。

对于一个交互式证明系统,如果 VP 交换的消息为 k 条,则 [k/2] 称为其轮复杂度。

论证系统(Argument Systems)

论证系统属于IP,但是只能保证在仅拥有多项式时间 (PPt) 能力的Prover不能欺骗并说服一个Verifier接受他的证明。简单来说,可以把其视作一个密码系统,对于拥有有限计算力的Prover显然无法欺骗Verifier。但是在拥有超多项式计算能力的Prover,其依旧可以破解该密码系统。

RS 指纹 (Reed-Solomon Fingerprints)

Frevialds 算法 (Freivalds' Algorithm)

PCP (Probabilistically Checkable Proofs)

概率可检验证明,既对于一个系统,Verifier 只需要随机检查证明的一小部分就能决定是否接受该证明,并且Prover作恶的概率是可忽略的。

IOP(Interactive Oracle Proofs)

交互式预言机证明

一元拉格朗日插值与低度扩展

Details

拉格朗日插值是一种通过已知的数据点构造多项式的方法。给定 n+1 个不同的点 (x0,y0),(x1,y1),...,(xn,yn),拉格朗日插值公式可以构造一个次数不超过 n 的多项式 P(x),使得 P(xi)=yi

拉格朗日插值多项式的公式为:

P(x)=i=0nyiLi(x)

其中 Li(x) 是拉格朗日基多项式:

Li(x)=j=0,jinxxjxixj

简单理解:假设对于有三个点 (x1,y1),(x2,y2),(x3,y3),显然我们的思想是让 P(xi)=yi,既在取值 yi 时最好只有 Li(x),显然容易构建:

L1(x)=(xx2)(xx3)(x1x2)(x1x3)

显然只有当 x=x1 时,L1(x)=1 并且不为零,故而得到 P(x1)=y11=y1,而在 x=x2x=x3 时,L1(x)=0,故而 P(x2)P(x3) 不包含 y1 的影响。

低度扩展 (Low Degree Extension,LDE)

故而,对于一个 n 次多项式 P(x),我们可以用一个向量 a=<a0,a1,...,an1> 来表示其系数从而表示出一个多项式;但是,有了拉格朗日插值,我们也可以通过对 n 个点的评估 <P(x0),P(x1),...,P(xn1)> 来表示该多项式,记为 qa(X)。这里的 qa(X) 就是 a 的单变量低度扩展。

多线性扩展(Multilinear Extension, MLE)

alt text

alt text

alt text

多线性多项式的拉格朗日插值

alt text

alt text

alt text

alt text

alt text

计算优化,可略

alt text

alt text

Evaluations

评估,或者我更喜欢称为多项式求值&赋值, 即对于一个多项式 P(x) 和一个点 x=a,计算 P(a) 的值。由于在前面我们知道通过插值可以恢复一个多项式,故而对于一个 n 次的多项式,我们也可以用其 n 个评估来表示,或者说编码一个多项式。

Schwartz-Zippel 引理

Details

对于一个 m 元多项式 g, 其次数 deg(g)=d, 则有:

PrxSm[g(x)=0]d|S|

其中,S 指多项式所在域的元素集合,|S| 表示集合的大小, xSm 表示 x 是从 S 中均匀随机选择的 m 维向量。

如果 x 是随机均匀选取的,那么 g(x)=0 的概率至多为 d/|S|

特别地, 如果在 Sm 上选取两个不同的次数最多为d多项式,二者最多只有 (d|S|×|Sm|) 个点相同, 既 g1(x)g2(x) 最多只有 d×|Sm1| 个根。

这对我们对于后面构建证明系统非常关键,因为如果我们想要证明两个多项式 g1(x)g2(x) 相等,我们只需要随机选择一个点 x 并检查 g1(x)=g2(x)。根据 Schwartz-Zippel 引理,如果 g1(x)g2(x) 不相等,那么它们在随机选择的点上相等的概率至多为 d/|S|。通过多次独立选择点并进行检查,我们可以将错误接受不相等多项式的概率降低到一个可忽略的水平。

Sigma Protocols

Protocol

Sigma 协议是一个三轮协议:

典型情况如 Schorr 协议:

  1. Prover 选择随机数 r 并计算承诺 t=gr,将 t 发送给 Verifier
  2. Verifier 选择随机挑战 c 并发送给 Prover
  3. Prover 计算响应 s=r+cx 并发送给 Verifier
  4. Verifier 验证 gs=?tyc

可以很容易地转换为非交互式:

  1. Prover 计算承诺 t=gr
  2. Prover 计算挑战 c=H(t,gr),其中 H 是一个哈希函数。
  3. Prover 计算响应 s=r+cx
  4. Prover 发送 (t,s)Verifier
  5. Verifier 计算挑战 c=H(t,gr) 并验证 gs=?tyc

Merkle