零知识证明

密码学中，零知识证明（zero-knowledge proof）或零知识协议（zero-knowledge protocol）是一方（证明者）向另一方（检验者）证明某命题的方法，特点是过程中除“该命题为真”之事外，不泄露任何资讯。因此，可理解成“零泄密证明”。例如，欲向人证明自己拥有某情报，则直接公开该情报即可，但如此则会将该细节亦一并泄露；零知识证明的精粹在于，如何证明自己拥有该情报而不必透露情报内容。这也是零知识证明的难点。

若该命题的证明，需要知悉某秘密方能作出，则检验者单凭目睹证明，而未获悉该秘密，仍无法向第三方证明该命题（即单单转述不足以证明）。待证的命题中，必定包含证明者宣称自己知道该秘密，但过程中不能传达该秘密本身。否则，协议完结时，已给予检验者有关命题的额外的资讯。此类“知识的零知识证明”是零知识证明的特例，其中待证命题仅有“证明者知道某事”。

交互式零知识证明中，需要各方互动，靠通讯过程证明某方具备某知识，而另一方检验该证明是否成立。

也有某种非交互式零知识证明，但证明之所以成立，依赖计算假设（典型假设是理想的密码杂凑函数）。

## 生活范例

以下有一个熟知的故事，总结零知识证明的若干重要概念。故事最早由Jean-Jacques Quisquater及同事发表于如何向你的孩子解释零知识协议。设有小静（证明者）和阿严（验证者）两人。英文文献中，常称零知识协议中的证明者为Peggy（取prover的首字母）、验证者Victor（verifier的首字母），见爱丽丝与鲍伯。

故事中，小静发现洞穴中某扇魔法门的开门暗号。洞穴呈环形，入口在一侧，对侧则有魔法门隔断。阿严想知小静是否已知该暗号，但小静很注重隐私，不希望泄露暗号予阿严，也不想全世界知道她有暗号之事。

两人分别将入口左右两条通道标示为A路、B路。首先，阿严在洞口外，待小静进入洞内。小静自行选择行A路或B路，但阿严不准窥视小静所选为何。然后，阿严行入洞穴，均匀随机喊出A路或B路，表明希望小静由该方向返回。假若小静确实知道暗号，则很易达成，因为即使起初所选不是同一条路，她也可以开门通过，从另一条路返回。

然而，若她其实不知道暗号，则祗有一半概率能从阿严所选的方向返回，因为阿严随机选A路和B路，恰有一半机会选中起初小静进入的方向。若两人重复以上过程，比如连续20次，则小静靠运气全部碰巧从正确方向返回的概率极小，为220分之1。

所以，若小静连续多次从阿严所选的方向返回，则阿严可以推断，小静很可能知道暗号。

以下考虑第三方的观点。即使假设阿严佩戴隐蔽的镜头，录影所见的整个过程，镜头所见亦只有阿严喊“A！”小静从A路返回；或阿严喊“B！”小静从B路返回。此种片段极易由两人共谋伪造（祗需小静与阿严事前商讨多次验证中阿严将选该串A、B的次序），从而对第三方而言，不具说服力，即阿严无法借此向第三方证明小静知道暗号。事实上，即使录影换成现场在阿严身旁监视亦同，因为两人可能一早已协调彩排好。

但是，若阿严在镜头前掷硬币，然后按该硬币喊A或B，则协议不再零知识。该段录影可能足以说服第三方，两人无法伪造，因为阿严难以准确掷出预定的AB次序。于是，虽然证明过程没有泄露暗号予阿严，但是阿严可借此说服世人，证明小静知道暗号，与小静起初的意欲完全相反。不过，数码的密码学中，“掷硬币”以伪随机数生成器实作，类似于一枚结果已预定好的硬币，但该结果（由其随机种子决定）仅有硬币主人知道。若阿严的硬币实际是以此法运作，则协议又回复为零知识协议，因为两人又有可能共同伪造“实验”结果，所以使用伪随机数生成器与掷真硬币不同，前者不会向世人泄露小静知道暗号。

还有另一种做法，小静以独一次实验已可向阿严证明自己知道暗号，而不泄漏。方法是，两人一同走入洞口，然后阿严目送小静沿A路走，没有原路折返，但从B路返回。如此，小静必然已向阿严证明自己知道暗号，而没有告知阿严暗号。不过此种证明亦非零知识：若第三方观察到过程，或阿严有录影，则该证明对第三方具说服力。换言之，小静无法宣称自己与阿严串通，所以无法向第三方说该证明无效。如此，小静无法控制何人得知她拥有暗号之事。

## 定义

零知识证明要具备下列三种性质：

完备（complete）:若所要证之事为真，则诚实（意即依协议行事）的证明者能说服诚实验证者。

健全（sound）:若命题为假，则作弊证明者仅得极小机会能说服诚实验证者该事为真。

零知识（zero-knowledge）: 若命题为真，则验证者除此之外，过程中没有得悉任何其他资讯。换言之，仅知命题为真（而不知秘密本身）已足以“想像”出一个交互的情境，其中证明者的确知道该秘密。此性质能严格定义为：每个验证者皆有相应的模拟器，输入欲证事实时，无需求助于证明者，已可输出一套通讯誊本，看似诚实验证者与证明者的通讯记录。

前两种性质，更广义的交互式证明系统亦应具备。第三种性质使该交互证明称为零知识。

零知识证明不算数学证明，因为尚允许有很少（但非零）概率，令作弊证明者能向验证者“证明”假命题。该概率称为可靠度误差（soundness error）。换言之，零知识证明是概率“证明”，而非决定性。不过，也有技巧将可靠度误差压到忽略不计。

零知识的严格定义，需要抽象计算模型，如常见的图灵机。设$P$、$V$、$S$为三部图灵机。某语言$L$的交互式证明系统即欲证事实为某字串$x \in L$。$(P, V)$为零知识，意思是对任意概率多项式时间（PPT）验证者$\widehat{V}$，皆有PPT模拟器$S$使得：

$$\forall x \in L, z \in \{0, 1\}^{*}, \operatorname{View}_{\widehat V} \left[P(x) \leftrightarrow \widehat V(x, z)\right] = S(x, z)$$

其中$\operatorname{View}_{\widehat V} \left[P(x) \leftrightarrow \widehat V(x, z)\right]$是$P(x)$与$\widehat V(x, z)$间交互的全记录。证明者$P$通常假设具无限计算能力（实践上，常为几率图灵机）。直观理解，某交互证明系$(P, V)$为零知识，即对任意验证者$\widehat{V}$，皆存在某高效模拟器$S$（视乎$\widehat V$而定），给定任何输入，可以重现$P$与$\widehat{V}$间的对话。定义中的辅助串$z$，是用作放置任何“前备知识”（包括预知$\widehat V$运行时掷得的硬币结果）。定义推出，$\widehat{V}$不能利用预知串$z$从与$P$的对话中发掘出资讯，因为若给予$S$该串，则也同样可以重现$\widehat{V}$与$P$间的对话。

以上为完美零知识的定义。若将定义中，验证者$\widehat{V}$的视角（view）与模拟相等之要求，改为仅要求计算不可辨，则得到计算零知识的定义。

## 计算范例

### 离散对数

前段概念适用于较实际的密码学场景。设小静欲向阿严证明，自己知道某群某指定元素的离散对数。

例如，给定数$y$、质数$p$、生成元$g$，小静希望证明自己知道某数$x$使$g^x \bmod{p} = y$，而不泄漏$x$。事实上，知晓$x$之事，本身可用作身份证明，即小静可借此证明该$y$值是由她先暗中选某随机值$x$，再计算$y = g^x \bmod{p}$，公诸所有潜在的验证者。如此，若某人证明自己知道$x$，则相当于证明自己即小静，因为学者相信离散对数很难计算，即其他人无法从$y$倒推出$x$值。

证明协议如下：每轮，小静预备随机数$r$，计算$C = g^r \bmod{p}$，将该值传予阿严。收到$C$后，阿严随机请求下列两者之一：小静公开$r$值，或$(x + r) \bmod{(p - 1)}$值。单独看任何一个值，其分布皆是均匀随机，所以协议每轮皆不泄露任何机密。

阿严可以验证所得回应。若问$r$，则可以计算$g^r \bmod{p}$，检查是否等于$C$。若问$(x + r) \bmod{(p - 1)}$，则可以计算$g^{(x + r) \bmod{(p - 1)}} \bmod{p}$，而该值应当等于$C \cdot y \bmod{p}$，所以亦验证$C$值是否满足该条件。若小静确实知道$x$值，理应很易回答阿严的任一条问题。

若小静预知阿严采用何种盘问，则很易作弊，在不知$x$的情况下，向阿严假装自己知道$x$：若她知道阿严将要问$r$，则如常继续，选$r$，计算$C = g^r \bmod{p}$，告知阿严$C$值；她可以答出$r$值。另一方面，若她知道阿严将问$(x + r) \bmod{(p - 1)}$，则取随机一个$r'$值，计算$C' = g^{r'} \cdot \left(g^x\right)^{-1} \bmod{p}$，然后发送$C'$值予阿严（阿严会以为该值为$C$值）。当阿严要求公开$(x + r) \bmod{(p - 1)}$值时，小静公开$r'$，但这足以让阿严验证结果，因为他计算的值实为$g^{r'} \bmod{p}$，是等于$C' \cdot y$，因为$C'$正是小静一早乘上$y$的逆元而计出。

然而，若有某轮验证中，阿严的问题与小静预估的有出入，则小静无法计算出要答的结果（假定该群的离散对数问题难解）。若她拣选$r$并公开$C = g^r \bmod{p}$，则无法作弊给出服众的$(x + r) \bmod{(p - 1)}$值来通过阿严的检查，因为不知道$x$。又若她拣选$r'$值，伪装成$(x + r) \bmod{(p - 1)}$，则要回答公开值的离散对数，但她无法回答，因为该值是由已知值乘出，而非某已知值以$g$为底的幂，所以她不能计出其离散对数

所以，作弊的证明者仅得$1/2$概率通过某轮验证。重复足够多轮，成功作弊的概率可压到任意小。

#### 撮要

小静要证知道$x$值（如其密码）。

- 小静与阿严约定某质数$p$，及域$\mathbb Z /p\mathbb Z$的乘法生成元$g$。
- 小静计算$y = g^x \bmod{p}$，传送予阿严。
- 小静选某个均匀随机数$r\in U[0, p-2]$，计算$C = g^r \bmod{p}$，传送$C$予阿严。
- 阿严问小静$(x + r) \bmod{(p-1)}$或$r$，二选其一。若问前者，则阿严验证$(C \cdot y) \bmod{p}\equiv g^{(x + r) \bmod{(p - 1)}} \bmod{p}$。若问后者，则他验证$C \equiv g^{r} \bmod{p}$。

$(x + r) \bmod (p-1)$之值，可视为$x \bmod (p-1)$的加密。若$r$确为随机，在$0$至$(p-2)$间均匀分布，则$(x + r) \bmod{(p-1)}$也同样均匀分布，所以不会泄漏任何关于$x$的资讯（见一次性密码本）。

### 大图的哈密顿环

下列方案是曼纽尔·布卢姆提出。

此场境中，小静知道某大图$G$的哈密顿环。阿严知道$G$但不知该环（比如说小静将该图打印给阿严）。一般相信，找大图的哈密顿环，在计算上并不可行，因为相应的决定问题已证为NP完全。小静欲证自己知道该环，但不想泄漏出去，原因可能是阿严打算向小静买，但付款前希望先验证小静知道；也可能是全世界只得小静知道该环，所以小静向阿严证明此事，是为向阿严核实自己身份。

小静为证明自己知道哈密顿环，与阿严作若干轮验证。每轮中：

- 一开始，小静预备图$H$，是与$G$同构（即$H$与$G$一样，但顶点的标签不同）。若小静知道$G$的哈密顿环，则因为$H$与$G$间的同构由她拣选，她很易找到$H$中对应的哈密顿环。
- 小静秘诺$H$。此处可选任意密码学秘诺机制，甚或直接将$H$的顶点编号，然后对$H$的每条边，将两端编号写在小纸片上，反转盖在台面。总之，秘诺目的是使小静此后无法窜改$H$，但同时不让阿严提早知道$H$的资讯。
- 阿严随机问小静以下两事之一：给出$H$与$G$间的同构（见图同构问题）；或给出$H$的哈密顿环。
- 若问两图的同构，则小静先展示$H$（将台面全部纸翻开），并给出$G$顶点与$H$顶点的对应表。阿严可以验证该对应关系是否满足图同构的条件。
- 若问哈密顿环，则小静只翻开在$H$的哈密顿环上的纸片。如此，阿严已可验证$H$有哈顿顿环。

秘诺一步必须使阿严在第二种情况能验证该环确实由$H$的边构成。一种做法是，逐条边分别秘诺。

#### 完备

若小静确知$G$中的哈密顿环，则阿严询问同构时，她很易回答（该同构为她所选），而阿严问$H$中的哈密顿环时，她同样很易回答（$G$有哈密顿环，$G$与$H$间的同构为所她选，所以可以找到$H$中对应的环）。

#### 健全

若小静不知哈密顿环，则只能预先猜测阿严会问何种问题，相应准备某个与$G$同构的图，或另一个不相关的哈密顿图。然而，因为她不知$G$的哈密顿环，所以无法同时做两件事。于是，若以上验证重复$n$次，则小静蒙混过关的概率仅得$2^{-n}$，从而实际意义上，只需合理多轮验证，已使造假者寸步难行。

#### 零知识

小静的回答不泄漏原图$G$的哈密顿环，因为每一轮，阿严只会得悉$H$与$G$的同构，或是$H$的哈密顿环，两者之一，但他需要对同一个$H$同时得知两者，才能构造出$G$中的哈密顿环。如此，只要小静每轮预备一幅不同的图$H$，就能保密。若小静不知$G$的哈密顿环，但不知为何已事前得知阿严每轮会问的问题，则她可以作弊。例如，若小静预知阿严该轮会问$H$的哈密顿图，则大可以秘诺一幅与$G$无关的哈密顿图。与之类似，若小静预知阿严会问同构表，则她可以随便预备一幅与$G$同构的图$H$（其中她不知道任何哈密顿图）。阿严根本无需小静在场，亦可独自想像出自己将见的场面，因为他清楚自己将会问什么，将见的仅是一个环（而不显示图的其他部分）或一幅与$G$同构的图，即阿严可以自行模拟该协议。因此，阿严从每一轮验证揭露之事，无法得到任何关于$G$哈密顿环的资讯。

## 零知识条件的变式

“零知识”的定义有若干变形，分别在于如何严谨定义模拟结果“看似”真实的交互记录：

完美零知识（perfect zero-knowledge）: 模拟器与真正交互产生的概率分布完全相等。离散对数范例即属此类。

统计零知识（statistical zero-knowledge）: 两个分布并非完全相等，但统计上接近，即有某个可忽略函数，使该两列分布对不同输入规模（安全参数），各有模拟器与真正交互此两个分布。在任意集合取值的概率差，皆小于该函数。

计算零知识（computational zero-knowledge）:无高效算法分辨两个分布。

## 应用

### 身份验证

零知识证明的研究，是受身份验证系统启发。验证时，一方要向另一方证明自己身份，通常藉赖证明自己持有某种袐密（如通行密码），但不希望对方知悉该袐密，称为零知识知识证明。不过，通行密码一般不是太短，就是不够随机，不能用于许多零知识知识证明方案。零知识通行码证明就是有考量密码长度限制的一类零知识知识证明。

2015年4月，Sigma协议（“其中之一”证明，one-out-of-many proofs）面世。2021年8月，美国网络基建、安全公司Cloudflare采用该种证明机制，以供应方硬件为私人网络提供验证服务。

### 道德行为

密码学协议之中使用零知识证明，可以在不退让隐私的情况下，确保各方诚实。粗略言之，方法是迫用户零知识地证明，其所作所为是依足协议。由健全性，用户必先确实跟从协议，才能服众。又由于证明是零知识，此过程并无犠牲用户的隐私。

### 核裁军

2016年，普林斯顿电浆物理实际室与普林斯顿大学展示一个技巧，或许适用于未来的核裁军谈判。其特点是，无需揭露某物件内部的机密构造，亦可允许督查员判断该物件是否核武器。

### 区块链

零知识证明用于小零币协议与大零币协议中，最终于2016年发展成小零币（2020年改称飞熔币）和大零币两种加密货币。小零币内置有混币模型，以确保匿名，且该模型无需信任任何对等用户或中央集权混币者。用户可以用另一种基准币交易，也可以将该币卖出买入小零币。大零币协议的模型也类似（该变式称为非交互式零知识证明），而且可以掩盖交易额，但小零币则不能。大零币的交易数据如此隐密，所以与小零币相比，较不易受到隐私计时攻击。不过，此层额外隐私，可能导致不能追踪假币，倘因此造成大零币供给的超通涨，可能无法侦测到。

2018年，防弹证明（bulletproofs）面世。其改进自非交互式零知识证明，不再需要可信的安装环境。其后，实作成“结舌”协议（Mimblewimble protocol，Grin和Beam两种加密币皆出自该协议）和门罗币。2019年，飞熔币实作知识证明，是对应小零币协议无可信环境的改进。同年，飞熔币引入莱兰托斯协议（Lelantus protocol），更自Sigma协议改进，隐去交易的源头与金额。

## 沿革

零知识证明最早由莎菲·戈德瓦塞尔、希尔维奥·米卡利、查尔斯·拉克福三人于1985年发表，论文题为交互式证明系统的知识复杂度。该论文引入交互式证明系统的IP (复杂度)，并构想出“知识复杂度”概念，衡量证明过程中，由证明者传递予验证者的知识量。三人亦给出首个具体问题的零知识证明，即零知识地证明某数不是模 m 的二次剩余。连同鲍鲍伊·拉兹洛与什洛莫·莫兰的另一篇论文，戈-米-拉三氏的论文发明了交互式证明系统。为此，五人同获1993年首届哥德尔奖。

引述戈-米-拉三氏：

该额外知识基本为0的情况尤其值得关注。我等证明，可以交互地证明某数非模 m 的二次剩余，而释出零额外知识。其出奇之处是，若不给定 m 的分解，则无高效算法判别某数是否模 m 的二次剩余。更甚者，任何已知的NP证明皆要表明 m 的质因数分解。这就表明，在证明过程中添加互动，可能减少证明某定理所必须交流的知识。

二次非剩余问题既有NP算法又有反NP算法，故位处NP与反NP两类之交集中。其后找到有零知识证明的若干个问题，亦具同样的性质，例如欧迪·戈德赖希未经正式出版的证明系统，可以验证某数（为两个未知质数之积）不是布卢姆整数，即并非两个模4余3的质数之积。

欧迪·戈德赖希、希尔维奥·米卡利、阿维·威格森更进一步证明，假定存在无懈可击的加密法，则可以造出三色图着色问题的零知识证明系统，而该问题本身为NP完全。又因为每个NP问题都可以高效化归成该NP完全问题，所以在前述假定下，所有NP问题皆有零知识证明。需要该假定的原因是，正如前节范例，需要有秘诺的手段。若存在单向函数，则的确有牢不可破的加密法。此为广泛引用的充分条件。另外也可能有物理方法实作。

更上一层楼，他们亦证明，图不同构问题，即图同构问题之补 (复杂度)，有零知识证明。该问题已知属于反NP，但未知是否属于NP或其他实际可行的复杂度类。更一般地，罗素·英帕利亚佐、莫迪凯·容二人，与米高·本-奥尔（Michael Ben-Or）及同事，两组证明：同样假设存在单向函数或牢不可破的加密，则任何属于IP（已证等于PSPACE）的问题，皆有零知识证明。换言之，任何命题若可藉交互系统证明，则可零知识证明。

许多理论家不希望假设不必要的条件，所以试图在不假定单向函数的条件之下，证明同样的结论。有种做法称为“多证明者交互式证明系统”（见交互式证明系统），即有多个独立的证明者，而非仅得一个。验证者可以将证明者逐个孤立，然后诘问，以免被作弊证明者误导。无需任何难解假设，已可证明在此系统中，任何NP问题皆有零知识证明。

后来发现，互联网等同时执行多个协议的环境中，较难构造零知识证明。研究并行零知识证明的先驱是辛西娅·德沃克、莫尼·纳奥尔、阿米特·萨海。此类研究之中，重要成果有证据不可辨协议。与零知识相比，其性质较弱：可能有多种证据供证明者选择采用何者作证，此时仅要求验证者无法分辨证明者选择为何即无法分辨该证明者与采用另一证据的证明者。但证明者可以泄漏部分资讯，如全体证据组成的集合。尽管失去零知识性质，但此类协议的好处是，并行时不会遇到此前提及的问题。

变式尚有非交互式零知识证明。曼纽尔·布卢姆、保罗·费尔德曼（Paul Feldman）、米卡利证明，若证明者与验证者共有一条随机字串，则可以达成计算零知识，而毋须交互。

## 参见

- 配对式密码学：给定$f(x)$与$f(y)$，无需知道$x$、$y$，已可计算$f(x \times y)$。
- 安全多方计算：各方的输入值保密，但共同计算出该些输入对应的结果。
- 圈子签名：可以签署某文件，使圈外人无法得悉由圈内何人署名，只知圈内有某人署名。
- 阿罗资讯悖论
- 密码学协议
- 费盖-菲亚特-萨莫尔身份认证
- 密码学诸主题