零知识证明

密码学中,零知识证明(英语:zero-knowledge proof)或零知识协议(zero-knowledge protocol)是一方(证明者)向另一方(检验者)证明某命题的方法,特点是过程中除“该命题为真”之事外,不泄露任何资讯。

因此,可理解成“零泄密证明”。

例如,欲向人证明自己拥有某情报,则直接公开该情报即可,但如此则会将该细节亦一并泄露;

零知识证明的精粹在于,如何证明自己拥有该情报而不必透露情报内容。这也是零知识证明的难点。

若该命题的证明,需要知悉某秘密方能作出,则检验者单凭目睹证明,而未获悉该秘密,仍无法向第三方证明该命题(即单单转述不足以证明)。

待证的命题中,必定包含证明者宣称自己知道该秘密,但过程中不能传达该秘密本身。

否则,协议完结时,已给予检验者有关命题的额外的资讯。此类“知识的零知识证明”是零知识证明的特例,其中待证命题仅有“证明者知道某事”。

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

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

生活范例

以下有一个熟知的故事,总结零知识证明的若干重要概念。故事最早由Jean-Jacques Quisquater及同事发表于《如何向贵子弟解释零知识协议》。

设有小静(证明者)和阿严(验证者)两人。[注 1]

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

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

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

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

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

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

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

定义

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

完备(complete)

若所要证之事为真,则诚实(意即依协议行事)的证明者能说服诚实验证者。

健全(sound)

若命题为假,则作弊证明者仅得极小机会能说服诚实验证者该事为真。

零知识(zero-knowledge)

若命题为真,则验证者除此之外,过程中没有得悉任何其他资讯。

换言之,仅知命题为真(而不知秘密本身)已足以“想像”出一个交互的情境,其中证明者的确知道该秘密。此性质能严格定义为:每个验证者皆有相应的模拟器,输入欲证事实时,无需求助于证明者,已可输出一套通讯誊本,看似诚实验证者与证明者的通讯记录。

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

零知识证明不算数学证明,因为尚允许有很少(但非零)概率,令作弊证明者能向验证者“证明”假命题。

该概率称为可靠度误差(soundness error)。换言之,零知识证明是概率“证明”,而非决定性。

不过,也有技巧将可靠度误差压到忽略不计。

零知识条件的变式

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

完美零知识(perfect zero-knowledge)

模拟器与真正交互产生的概率分布完全相等。离散对数范例即属此类。

统计零知识(statistical zero-knowledge)

两个分布并非完全相等,但统计上接近,即有某个可忽略函数,使该两列分布[注 3]在任意集合取值的概率差,皆小于该函数。[8]

计算零知识(computational zero-knowledge)

无高效算法分辨两个分布。

应用

身份验证

零知识证明的研究,是受身份验证系统启发。验证时,一方要向另一方证明自己身份,通常藉赖证明自己持有某种袐密(如通行密码),但不希望对方知悉该袐密,称为零知识知识证明。

不过,通行密码一般不是太短,就是不够随机,不能用于许多零知识知识证明方案。零知识通行码证明就是有考量密码长度限制的一类零知识知识证明。

2015年4月,Sigma协议(“其中之一”证明,英语:one-out-of-many proofs)面世。

2021年8月,美国网络基建、安全公司Cloudflare采用该种证明机制,以供应方硬件为私人网络提供验证服务。

道德行为

密码学协议之中使用零知识证明,可以在不退让隐私的情况下,确保各方诚实。

粗略言之,方法是迫用户零知识地证明,其所作所为是依足协议。由健全性,用户必先确实跟从协议,才能服众。又由于证明是零知识,此过程并无犠牲用户的隐私。

核裁军

2016年,普林斯顿等离子物理实际室与普林斯顿大学展示一个技巧,或许适用于未来的核裁军谈判。

其特点是,无需揭露某物件内部的机密构造,亦可允许督查员判断该物件是否核武器。

区块链

零知识证明用于小零币与大零币协议中,最终于2016年发展成小零币(2020年改称飞熔币)和大零币两种加密货币。

小零币内置有混币模型,以确保匿名,且该模型无需信任任何对等用户或中央集权混币者。

用户可以用另一种基准币交易,也可以将该币卖出买入小零币。

大零币协议的模型也类似(该变式称为非交互式零知识证明),而且可以掩盖交易额,但小零币则不能。大零币的交易数据如此隐密,所以与小零币相比,较不易受到隐私计时攻击。不过,此层额外隐私,可能导致不能追踪假币,倘因此造成大零币供给的超通涨,可能无法侦测到。

2018年,防弹证明(bulletproofs)面世。其改进自非交互式零知识证明,不再需要可信的安装环境。

其后,实作成“结舌”协议(Mimblewimble protocol,Grin和Beam两种加密币皆出自该协议)和门罗币。

2019年,飞熔币实作Sigma协议,是对应小零币协议无可信环境的改进。

同年,飞熔币引入莱兰托斯协议(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)、米卡利证明,若证明者与验证者共有一条随机字串,则可以达成计算零知识,而毋须交互。

拓展阅读

hash 哈希算法

Base64 加密算法详解

SM4 国密算法入门介绍

DES 加密算法入门及算法原理

3DES 加密算法入门及算法原理

AES 加密算法入门及算法原理

和你一起走进对称加密算法的世界

RSA 非对称加密算法原理详解及 java 实现

RSA 非对称加密算法原理详解及 java 实现 02 一点额外的思考

你连对外接口签名都不会知道?有时间还是要学习学习。

参考资料

零知识证明