title | tags | ||||
---|---|---|---|---|---|
Milestone 05. 初探零知识证明 |
|
这一讲,我们将初探零知识证明,介绍一个基于二次剩余问题的简单示例。我们会在后面的章节更系统的介绍它。
零知识证明(Zero-Knowledge Proofs, zkp)最初由三位科学家 Goldwasser,Micali 和 Rackoff 在1985年的论文 "The Knowledge Complexity of Interactive Proof Systems" 中正式提出。这篇论文不仅首次引入了零知识证明的概念,还确立了交互式证明系统的知识复杂性框架。
零知识证明有三要素,可用于判断一个算法是否为零知识证明算法:
- 完备性(Completeness):如果陈述是真的,诚实的验证者将会被诚实的证明者说服。也就是“真的假不了”。
- 可靠性(Soundness):如果陈述是假的,不诚实的证明者无法说服诚实的验证者。也就是“假的真不了”。
- 零知识(Zero-Knowledge):如果陈述是真的,验证者除了陈述的真实性以外,不会了解到任何其他信息。
零知识证明的价值在于其强大的隐私保护功能,它能够确保个人或机构的敏感信息在验证过程中不被泄露。这一特性在安全协议设计、身份验证、区块链技术以及隐私保护等众多领域中都有广泛的应用。
二次剩余的问题: 给定
假设有这样一个场景,证明者 Alice 想向验证者 Bob 证明一个整数
最直接的方法就是将满足
这一证明方式满足完备性和可靠性,但不满足零知识,因为 Bob 除了知道命题为真之外,还知道了满足
下面我们用一个示例来体会零知识证明的巧妙,在证明之后,Bob 除了知道命题为真和得到一堆随机数外,不会了解到任何其他信息。这个示例来自ZKP MOOC。
假设 Alice 想向 Bob 证明他知道整数
步骤 1: Bob 随机选择选择两个大素数$p$ 和
步骤 2: Alice 随机选择一个数
步骤 3: Bob 随机选择一个比特(布尔值)
步骤 4: 如果
步骤 5: Bob 接收到
不断重复上述步骤 2-5,直到 Bob 接受命题为真。
这个例子属于交互式零知识证明,它是一种概率证明,即如果证明者是诚实的,那么在足够多的交互轮次后,验证者将以高概率被说服;即使证明者尝试欺骗验证者,由于随机性的引入,他们也只能以极低的概率成功欺骗。
下面,我们从零知识证明的三要素分析这个例子是否属于零知识证明。
-
完备性: 若 Alice 知道满足
$x^2 \equiv y \mod N$ 的$x$ 的值,那么他在每次的交互中都能正确的发送满足$z^2 = s y^b \mod N$ 的$z$ 值。如果验证者 Bob 是诚实的,那么它每一轮交互中都会接受命题为真,最终被说服。 -
可靠性: 若 Alice 不知道满足
$x^2 \equiv y \mod N$ 的$x$ 的值,那么她无法在 Bob 选择$b=1$ 时正确地计算出$z = rx \mod N$ 。因此,如果她试图欺骗Bob,她必须猜测$b$ 的值。-
猜测 Bob 会选择
$b = 0$ :那么 Alice 策略就是诚实的发送$s = r^2$ ,再然后发送$z=r$ (对应$b = 0$ 的正确回应)。但如果 Bob 选择了$b=1$ ,验证将会失败,因为$z^2 \neq s \cdot y \mod N$ 。 -
猜测 Bob 会选择
$b = 1$ :那么 Alice 可以在第一步发送$s$ 的时候做手脚,不发送随机数$r$ 生成的$s$ ,而是选择$s$ 使得$sy$ 成为二次剩余(比如 4)发送,然后再发送$z$ (比如 2)使得$z^2 = sy$ (对应$b = 1$ 的正确回应)。但如果 Bob 选择了$b=0$ ,Alice 没法给出满足$z^2 = s$ 的$z$ ,同样会导致验证失败。
因此,Alice在不知道
$x$ 的情况下,每轮只有$\frac{1}{2}$ 的概率能成功让Bob接受证明。经过足够多轮交互后,Alice成功说服Bob的概率会非常低,接近于$(\frac{1}{2})^k$ ,其中$k$ 是交互轮数。这确保了证明的可靠性。 -
-
零知识: 通过这种方法,Bob 能够验证
$y$ 是二次剩余,但无法了解到$x$ 具体是多少。即使交互多次,由于每次 Alice 都会随机选择一个新的$r$ ,Bob 无法构造出$x$ ,得到的仅是一串随机数。
因此,这个示例中的算法满足三要素,是零知识证明。大家可以体会下零知识证明这种“我知道正确答案,不过我不告诉你正确答案,但是我可以证明当我想给你正确答案的时候,我的确做得到”的装逼感。
这一讲,我们简单介绍了零知识证明的三要素,并举了一个基于二次剩余问题的简单示例。在这个示例中,Alice 交互式的向 Bob 证明了
零知识证明是一个很复杂但很有意思的学科,我们会在之后的教程中慢慢领略它的魅力。