深入浅出零知识证明(二):电路模型概述

805 阅读4分钟

[隐私计算研习社]

图片

0

****前言上一节我们主要通过Schnorr签名的方式来介绍了什么是零知识证明,详情请见深入浅出零知识证明(一):Schnorr协议,本次我们将介绍基于电路构造的零知识证明及怎么样的计算问题可以使用电路来构造。

1

****零知识证明概述

零知识证明可以让证明方(prover)在不透露自己证据(witness)的前提下,向验证方(verifier)证明某一个断言(statement)为真,其中部分公开的数据我们称之为实例(instance)。

零知识证明具有完备性(completeness),健全性(soundness)和零知识性(zero-knowledge)的特点,并广泛在Aleo等Web3生态中被使用到。

零知识证明可以根据使用场景的不同,一般可以分为专用类和通用类,专用类一般用于解决特定问题,如证明大质数分解问题,通用类均基于电路构造,运用不同的约束系统,将电路编译为特定的数学表达式,接下来我们来简单讲解一下电路构造和证明逻辑。

2

****运算模型一电路电路(circuit)是一种常见的描述功能函数的模型,任何在NP空间内的功能函数(一般为计算任务),都可以使用异或门和与门的组合(布尔电路),加法门和乘法门的组合(算术电路)来实现。电路模型在零知识证明,安全多方计算和全同态加密领域被广泛使用。
尤其需要注意的是,该电路仅仅只是将计算任务进行等价的一个计算模型,而非真实物理意义上的电路,另一个常见的计算模型是图灵机(Turing Machine)。
举一个非常简单的例子,证明方想要证明自己知道X^3+X+5=35的解是X=3。(虽然在实际应用场景中,解决一元三次方程是容易的,但是为了便于读者理解,我们使用该例子来进行讲解,后续会具体讲解规约理论)。
如下图所示,是证明X^3+X+5=35解的算术电路,在该算术电路中,X是输入,作为证明方的证据,35是输出(为了便于理解,直接认为是输出,但其实在严格意义中,证明电路中35不是电路的真实输出),可作为instance,证明方需要证明自己持有X,使得等式成立。
在下一节的推送中,我们将重点介绍证明电路执行的正确性和电路的相关数学模型。

图片

图片来源于网络
3

****为什么要使用电路模型?

在说明为什么使用电路模型之前,我们首先介绍一下P问题,NP问题和NP完全问题(NP-Complete or NPC)。

P问题:可以在多项式时间内求解的问题。

NP问题:不知道是否存在多项式时间算法,能够求解的问题,但是给定问题的一个解,可以在多项式时间内进行验证,其中P问题包含于NP问题,但目前不知道P是否和NP等价。

NPC问题:任何在NP空间内的问题,都可以在多项式时间内规约到该问题的一类问题类型。

我们首先介绍一下Circuit-SAT问题,即电路满足性问题。一般而言,给定一个布尔表达式,我们很难有一个高效的算法,找到一组合法的输入,使得最后的输出为真。我们一般需要遍历所有的输入,然后以此计算尝试,才能得到相应的结果,这就需要2^n的尝试,其中n是门电路输入的个数。

电路满足性问题可以使用布尔电路的方式来表示,它是一种典型的NPC问题,即任何在NP空间内的问题,均可以在多项式时间内规约到电路满足性问题。同时算术电路也是电路的一种,我们可以通过将布尔电路扩展到算术电路来进行扩展,

所以,大部分基于NP空间的计算任务,都可以使用算术电路来构建。

当然,我们在后续博客介绍HyperPlonk,Halo2等工作中,会发现有许多方式可以优化算术电路,以减少乘法的复杂度。

4

****总结本章首先概述了零知识证明的概念和性质,后续通过一个示例,介绍了电路模型和哪些计算任务可以规约到电路。
在下次的推送中,我们将介绍证明电路执行正确性的方式,主要包括零知识证明的数学基础,Rank-1 Constraint System (R1CS) 约束系统,并通过实例来演示R1CS的规约过程。
作者:杨赟博
本文由作者自行整理,若有疑问,或有指正的地方,请在评论区内指出,谢谢!