03、Zero-Knowledge Proofs of Knowledge[知识的零知识证明]
这篇博客,是关于第九届BIU密码学冬令营上的内容,这篇博客是第三篇,会持续更新。
https://blog.csdn.net/qq_43479839/article/details/112946344
下面正式开始第三部分关于知识的零知识证明的介绍:
目录如下:
目录@xyi
接下来是正式描述内容:
1、Knowledge-definition【知识的定义】
1.1Knowledge-Motivation
1、证明你知道从A到B的最短路径。
2、证明你的身份,如下
- 对于离散问题来说,知道x是很难的,
- 可以用这个x作为私钥来证明你的身份。
- Attempt:用零知识去证明,…
- Problem:1、statement对于所有的群元素都是正确的,所以这里ZK变得不重要。2、有人说他需要知道一个witness去证明这是一个正确的statement。
什么是知识? - 定义:如果一个学生能输出material,则代表学生知道它。就像如果一个学生能够给出一个测试问题的所有正确答案,那么基本上就可以说他知道这份material。
- 定义,如下:
1.2 Formalizing Knowledge–first attempt【对知识的第一次正式定义】
- Attempt 1:一个机器M知道一个声明statement x的witness,如果存在一些M’它能输出w使得(x,w)∈R.
- 问题:
1、这与机器的行为有什么关系?
2、M’与M的关系是怎样的?如果他们之间没有连接那么M为什么能知道它【上文的witness】。
1.3 Formalizing Knowledge–second attempt【对知识的第二次正式定义】
Attempt 2:
- 我们定义一个PPT(Probabilistical Poly-time)的预言机K,我们称它为知识提取器knowledge extractor。
- 我们说如果KM(*)(x)输出w能使得(x,w)∈R,则说M知道声明statement x所对应的witness。
-其中K是与M进行交互的,并且能够在任何时间使用而得到w。
-因为K是通用类,它的能力是输出w,意味着M也知道w。
Q问题:
- Q1:仍然没有给出这个与机器M行为的关系
- Q2:K 仅仅只能知道w与M独立。
1.4 Formalizing Knowledge–third attempt【对知识的第三次正式定义】
Definition:
- 我们定义一个PPT(Probabilistical Poly-time)的预言机K,我们称它为知识提取器knowledge extractor。
- 我们说一个证明者P知道对于statement x的witness,如果(K,P,x如下图)能输出w使得(x,w)∈R,且不管什么时候P都能让V相信自己知道x。
Intuition:
- K是通用的,并且对于任何x和任何P*:如果P*能够使V相信其拥有w,即K能输出w,同样M也知道w
Question:“无论何时P*都能使V相信其拥有x”,这意味着什么?
- K需要在多项式时间内运行并且其输出witness w的概率与P*使V相信自己拥有x的概率相同。
1.5 Formalizing Knowledge–final attempt【对知识的最后一次正式定义】
- 总是在ZK上能被证明,能运行zk的模拟器,并且希望Verifier的询问能与真实的询问匹配。
- 这个定义被更新,被允许了一个Knowledge error (知识误差)κ,然后将这个κ考虑进入之前的定义中去。
1、如果这个P*使V相信的概率大于这个知识误差,那么K就能运行在一个期望的多项式时间内以至多κ的概率输出一个witness w,这个概率比P *使得V相信的概率少。 - 这个性质被称为knowledge soundness【知识可靠性】。
给出knowledge soundness的定义:一个证明系统具有error κ的知识可靠性,在下面的情况下,如果存在一个PPT K使得对于任何的P和任何的x,如果P能使V以概率ε相信P*知道x,然后就会以概至少以ε(|x|)-κ(|x|)的概率使得Kp*(.)(x)输出的w能满足(x,w)∈R
这个等价的公式,当我们想要使用他们的知识的时候,这个公式是很有用的。
其动机是:想要去权衡运行时间和成功的概率,
- 原本的定义是说:运行在该概率的,多项式的,以概率ε输出
- 这个可选择的定义:运行在期待的次数1/ε并且总是输出
等价的定义(knowledge soundness):略
等价的定义:【证明】
Original --> alternative,如下:
- 我们所给的K在概率多项式时间内运行,并且以ε的概率输出witness w。
- 我们能运行K很多次,直到输出一个witness
1、因为它们是NP关系,能验证其正确的结果
2、期盼的次数是1/ε;
Alternative --> original :
- 如果我们给K能在运行次数1/ε之内输出witness。
- 则对于i=1…n;则K运行2(i+1)步,在这其中如果输出witness,在此就结束运行的过程,否则则继续,这个概率是1/2;
1、其中取i最小的时候,使得2i+1>1/ε:则推出至少2-(i+1)>ε.
2、即期待的运行次数是poly(|x|)
2、ZKPOK:ZK proof of Knowledge【知识的零知识的证明】
2.1 ZKPOK:definition
1、一个证明系统是知识的零知识,如果它有下面的性质:
- Completeness(完备性):诚实的证明者能使诚实的验证者相信他知道。
- zero-knowledge(零知识):确保验证者不会知道任何东西。
- knowledge soundness(知识可靠性):确保证明者知道witness。
2、Zero-knowledge是对于证明者Prover的性质:
- 证明者的职责是保证不揭露任何东西
- 这是为了对抗一个不诚实的验证者Verifier。
3、knowledge soundness是对于验证者的性质
- 验证者的职责是保证证明者是知道witness的。
- 对于这个为了对抗一个不诚实的Prover。
2.2 Reducing knowledge error【降低知识误差】
1、sequential composition(顺序合成)能以指数的误差降低
2、指数级的很小的误差等于零误差(下面又给解释)
- 假设知识误差κ<2-|x|,之后考虑可选择的那个定义。
- 如果Kp*(.)(x)靠蛮力去寻找witness。【假设蛮力寻找的次数是2|x|】
- 我们让P*以概率ε使V相信其拥有x。
1》如果。。
3、Constructing ZKPOKs【构造知识的零知识证明】
3.1 对于QR_N(知识)的零知识证明
知识提取器的想法:
- K调用P*,然后收到一些y;
- K发送给P*的询问b=0,之后会收到回复z0。
- 之后K使用rewind技术,使得运行环境回到K发送b=0之前,之后给P*发送询问b=1,随机收到回复z1。
- 然后K会得到w=z1/z0 mod N;
下面的证明很清楚,不描述:
3.2 对于NP问题(知识)的零知识证明
对于HAM的交互式证明。
4、the Applications of ZKPOK【知识的零知识证明的应用】