你或许已经坐在了历史上最好的观景台上。眼下的密码算法与协议——如零知识证明与安全多方计算等——正在深刻地改变社会个体/组织之间信任的来源和它的成本。密码技术可能会远远超出一个技术的范畴,最终对社会变革产生深远的影响。或许,我们将要看到的景象要远比Michael Lewis「在金融业即将迎来变革的戏剧性时刻坐在位置最好的观景台前」所看到的更加波澜壮阔。——邓燚
Feige-Shamir:优雅的证据不可区分与常数轮零知识证明
尽管并行上述图同构协议后我们不知道怎么证明新协议的零知识性,但这一并行版本有个非常好的性质:
针对NP断言的3-轮证据不可区分证明协议
我们希望能够对一般性的NP断言构造零知识或证据不可区分证明系统。幸运的是,对于任意的NP断言「x是正确的」(如「G0和G1是同构的」,「图G中存在一个简单的圈经过所有的顶点」等),或者,任何有关多项式时间算法正确性的断言,我们都有一个3-轮的证明协议同时具有上述两个性质:证据不可区分与(具有可忽略可靠性错误)知识的证明性质。
Blum在1986年的国际数学家大会上[Blum, ICM86]报告了一个对汉密尔顿图(上述带有一个经过所有点的简单圈的图)的3-轮可靠性错误为1/2的零知识证明。由于汉密尔顿图集合为NP-完全集合,任何其他NP问题都可以归约到一个汉密尔顿图的问题,Blum的构造实际给出了对任意NP断言的零知识证明。通过并行Blum协议后我们得到了针对任意NP断言的3-轮 (具有可忽略可靠性错误和知识的证明性质)证据不可区分证明协议。 Goldreich等人[GMW, FOCS 86]针对另一个NP-断言(图的三着色问题)给出了另一个类似的构造。
Feige-Shamir的构造
目前为止, 我们通过并行牺牲了零知识性,但得到了可忽略的可靠性错误和证据不可区分的性质。我们能够构造一个具有可忽略可靠性错误的常数轮零知识证明协议吗?答案是肯定的。Feige和Shamir[FS, STOC 90]给出了一个有着广泛影响的优雅构造[3] 。给定一个NP断言「x 是正确的」, P持有这一断言的证据(如图同构中的n)向V进行如下两阶段的证明:
利用第一阶段的证据不可区分性(为什么V需要生成两个原像?)和第二阶段的知识的证明的性质,我们可以证明,如果函数f是单向的,那么Feige-Shamir协议的(可抗多项式时间恶意证明者的)可靠性错误仍是可忽略的;利用第一阶段的知识的证明性质(模拟器可以通过调用上述抽取器,通过重置验证者来抽取到一个原像)和第二阶段的证据不可区分性,我们可以证明 Feige-Shamir协议是零知识的。此外,通过合理安排两阶段的消息顺序,我们可以得到一个4-轮的具有可忽略可靠性错误的零知识协议。
注意到Feige-Shamir协议需要假定存在单向函数,这与无需任何假设的图同构的零知识证明有着本质的区别。事实上,只有很少的断言具有像图同构那样的完美零知识证明[Fortnow, CCC 87]。
黑盒模拟/归约的局限性
注意到如果相对化的证明技巧如果能解决 NP vs P问题,那么相对于任意的oracle结论都应该一致。BGR意味着我们无法仅仅利用相对化证明技术来证明或否定NP=P。在研究交互证明的威力过程中,Nissan发现的非相对化的证明技术——算术化(arithmetization)——打破了之前相对化技术的壁垒,导致了一系列像IP=PSPAC和PCP定理这样影响深远的非相对化;结果。然而,对于这些非相对化结果的解读依然存在着分歧。感兴趣的读者可以参考Fortnow和Arora, Impagliazzo, Vazirani写的一些未发表的文章[5] 。
绝大多数密码学中归约(安全性证明)都是相对化的,也就是我们常说的黑盒归约。Impagliazzo和Rudich [IR, STOC 89]发现了第一个黑盒归约的分离(我们有时也称黑盒下界)结果:我们无法将公钥加密通过黑盒归约的方时建立在抽象的单向函数上。通常,欲证明一个密码原语P无法通过黑盒归约的方式建立在困难假设Q上,我们只需去构造一个oracle,在提供这个oracle接口的世界里,存在着高效的算法打破P的安全性,但不存在高效的算法打破Q的困难性。
Impagliazzo和Rudich提供的证明黑盒分离/下界的范式对密码学影响巨大,后来研究人员发现了许许多多这样的负面的结果。
Reingold, Trevisan和Vadhan [RTV, TCC 04]对于这些黑盒分离/下界提供了一些较为清晰的解读。
零知识证明中的黑盒下界通常指黑盒模拟(模拟器只允许以黑盒方式调用验证者,对应的零知识称为黑盒零知识)下的轮复杂度下界。注意到像前面提到IP=PSPACE一样,零知识证明中许多结果也是非相对化的,我们在证明它的黑盒轮复杂度下界时通常用到一个不同的证明策略:低轮复杂度的零知识证明所带有的黑盒模拟器通常可以用来直接判定被证明断言的真伪,这表明被证明断言本身就是平凡的。
Goldreich和Krawczyk [GK, SIAMCOMP 96]证明了不存在针对非平凡断言的3-轮黑盒零知识证明(这说明Feige-Shamir协议是轮数最优的黑盒零知识证明协议),也不存在针对非平凡断言的(任意)常数轮公开掷币(public-coin)的黑盒零知识证明,这里公开掷币指的是每个来自诚实验证者的消息都是通过随机掷币生成的真随机数,如上面的图同构协议。公开掷币的协议通常有着更为广泛的应用。
分布式环境下的并发性:嵌套难题与递归的Feige-Shamir模拟器
在互联网这种异步的分布式环境下,一个协议可能被成千上万的彼此都不知道对方存在的用户在执行。Dwork,Naor和Sahai[DNS, STOC 98]针对这种环境定义了并发零知识这一概念。在这一定义中,一个恶意的V*被允许控制许多个独立的验证者,每个验证者与一个独立的诚实证明者交互执行一次协议,但所有的这些协议的执行进度被V*统一控制和调度。并发零知识性就是指协议在这种环境下被并发执行时,对任意的恶意并发验证者V*,存在模拟器S能够输出一个与真实并发交互中V*的视图不可区分的副本。
前面提到的Feige-Shamir协议在这种环境下被并发多次执行时,它的零知识性受到了巨大的挑战。模拟器在重置每个会话(即,协议的单次执行)的第一阶段时,这一重置动作会导致后续已经解决了的会话(即,模拟器拿到了该会话中某个y的一个原像)作废,需要通过进一步重置来解决它。这就是所谓的嵌套效应(nest effect)。
在上图中,一个黑盒模拟器将在第n个会话的第三步时第一次尝试重置V*至这个会话第二步时的状态,进而期望得到一个新的第一阶段3-轮子协议副本来抽取某个y的原像。注意到第n个会话完全嵌套在第n-1个会话的第二步和第三步之间,所以当模拟器去重置第n-1个会话修改第二步的消息时,整个第n个会话都受到影响,需要进一步重置才能成功模拟,这将最终导致模拟器需要指数时间才能完成模拟。
这一模拟器时间呈指数膨胀的问题在随后的一年被Richardson和Kilian解决了。他们提出的构造——Richardson-Kilian协议——本质上就是一个带有多个slot(一个slot对模拟器而言可以看成一个重置的机会)的Feige-Shamir协议[6]:
注意到对于上述协议,我们称第一阶段的单个3-轮子协议[7]为一个重置机会(slot)。模拟器这时有了k个重置的机会,只要在第一阶段k个3-轮子协议中通过重置验证者成功抽取到一个原像,它便可以模拟整个会话Richardson和Kilian开发了一种非常聪明的递归模拟方法。
在模拟中,模拟器递归地「look-ahead」策略,看看当前会话第一阶段的当前3-轮子协议中第二个消息和第三个消息之间是否覆盖「太多」的新的会话(即,在这之间出现了很多会话的初始阶段出现了),如果是,则放弃重置当前3-轮子协议;如果不是,则重置当前子协议来获取一个原像。如果k比较大,这一模拟器运行时间则为多项式,因为对于单个会话不可能所有k都覆盖「太多」的新会话。
随后的Kilian和Rosen等人先后[KP, STOC 01; PRS, FOCS 02]改进了这个递归模拟器,最终上述协议中k值为安全参数的对数级别时模拟器的运行时间可以保证在多项式时间内。几乎同一时间,Canetti[CKPR, STOC 01]等人也证明,如果想取得并发的黑盒零知识,k至少为安全参数的对数级,这表明Rosen等人的并发黑盒零知识协议在轮数上是最优的。
Hada-Tanaka与Barak: 利用计算路径突破黑盒下界
每次在讲到Barak的突破之前,我总习惯性地提到Hada,他在2000年左右在零知识和程序混淆方面都做出了非常具有启发性的工作。这些工作都不幸地被淹没在后面更大的突破当中而被忽略了(至少从引用上来看是这样),我个人觉得并没有得到他应得的credit。
Hada和Tanaka在1998年发表了一篇3-轮零知识协议构造的文章[HT,Crypto 98],这看起来直接与上面提到的不存在3-轮黑盒零知识这一下界冲突。
从目前的一些信息来看,Hada-Tanaka应该在当时(尤其在魏茨曼)引起了较大的反响。Barak在随后的一年跟随Goldreich念博士,应该也受到了Hada和Tanaka的想法的影响和启发,两年后诞生了一个巨大的突破。我这里说的启发是比较广义的启发,它并不见得是技术技巧上的影响与启发,有时它可能是一个单比特的启发。当大家都拥挤在一条路上踌躇不前时,如果有个oracle告诉你「还有另一条路」,虽然它没有指出路在哪里,但这个单比特信息会强烈刺激一些人去找。这是我为什么认为尽管Hada-Tanaka的构造建立在一个不可证伪的假设之上,它仍是一个非常具有启发性的构造。
Barak在2001[Barak, FOCS 01]取得的一个突破性的构造就是基于标准假设的常数轮公开掷币的零知识协议,它同时还可以具有有界的并发安全性。此外,他的构造对应的模拟器是严格多项式时间的。这同时突破了之前有关黑盒零知识的几个下界。从外形上看,它基本上遵循了Feige-Shamir框架:在协议的第一阶段,证明者P与验证者V共同产生一个困难问题实例;在第二阶段,P向V证明「给定的断言x是正确的 或 我知道第一阶段产生的问题实例的答案」。在上面的Feige-Shamir协议里,第一阶段的困难问题实例由V独自生成,然后V向P证明它知道这一问题实例的答案。这一阶段通常需要保证两点:
· 真实世界中的P无法获取该问题实例的答案
· 模拟器在拥有验证者完整代码(包括它使用的随机数)的情况下能够抽取到该实例的答案。
Barak协议的第一阶段也需要满足这两点。与Feige-Shamir不同的是,Barak协议的第一阶段是公开掷币的,即验证者发送的消息都是随机数。这是Barak协议最令人惊讶的地方。
看起来完成了第一阶段的设计,但这里还存在一些问题。首先我们需要指定k的具体值和r的长度。对于后者,设定r的长度为安全参数n的线性或某个固定的多项式(在考虑协议并发运行时需要适当拉长)都可以。
Barak(和Goldreich)利用Babai,Levin,Fortnow和Szegedy在1991年提出的PCP机制(后来被 Kilian 和 Micali 等人应用到密码领域),构造了一个证据不可区分的普适论证系统(witness indistinguishable universal argument,WIUA)。
由底层PCP的可以scale down的特性,这一协议可以用来证明NP之外的一般性断言,同时具有一个优异的性质:证明者的运行时间不依赖于上面定义的集合r,而只依赖于集合中具体的实例(h,c, r)。如果被承诺在c中的程序Π的具体运行时间为某个特定的多项式,那么模拟器(在获得该实例的证据情况下)执行WIUA对这个实例进行证明所需的时间为这个特定程序N(即,恶意验证者的代码)具体运行时间的一个多项式。
根据这些改动,给定一个NP断言「x是正确的」,Barak协议的最终版本如下:
如果在并发环境中可以预先固定Barak协议被执行的次数,我们可以让诚实验证者选择一个充分长的r来实现这种有界的并发零知识性。但取得完全的并发安全性,我们需要重复第一阶段多项式次,这极大地增加了轮复杂度;或者,如果底层的PCP证明可以变得更短更轻(或假设存在这样的PCP),我们或许不用增加轮复杂度来取得完全的并发安全性。是否存在在标准的假设下针对非平凡NP语言的完全并发零知识协议目前还不清楚。
理论研究往往充满了意外。PCP定理的诞生于对交互证明的研究之中,后来它给予了密码学巨大的回馈。我们可以通过递归调用PCP机制,将Barak协议改造成为一个具有可重置(resettable)的零知识协议;Micali基于PCP构造的cs proof在威力强大的可抽取单向函数构造上扮演了关键的角色;此外,PCP证明以及它的递归版本也间接或直接影响了今天非交互简洁零知识证明的构造。
代码,它所计算的函数以及结构
当年看到Barak协议后便有了递归调用模拟器(本质上是递归调用PCP)来取得并发安全性的想法。虽然不久便发现这一幼稚的想法受制于PCP的长度和计算时间,递归深度非常受限而无法成功,但几年后还是利用了它(和一些其他的工具)构造一个轮复杂度非常高的可重置的零知识协议。
这一构造比较复杂,2009年投完稿我才慢慢从许多技术细节的泥沼中恢复过来。后面有一段完全放空的时间,开始纠结于一个简单问题:为什么每次新的模拟/归约技术(虽然在某些方面取得了进展)都会带来更为复杂的构造?对于一些密码学早期的经典而简单密码构造,如Schnorr身份认证和上面的Feige-Shamir协议等,当考虑它们是否具有后来定义的(更强的)安全性–如证据隐藏性,并发零知识性–时,你会发现一个非常混乱现状:
· 好消息(the good):没有发现有效的攻击;
· 坏消息(the bad): 没有找到安全性证明;
· 难以解读的消息(the ugly):已经证明「目前的黑盒归约无法证明它们的安全性」
这一现状翻译过来就是:我们无法排除 “将来能够找到新的归约方法来证明它们的安全性” 这一可能。这些观察使我渐渐意识到了目前已知的归约/模拟方法与证明安全性所要求的归约/模拟之间的巨大鸿沟:
在字面上,个体化归约的强大之处在于,给定的敌手A对于归约/模拟算法而言是完全透明的:它的代码,所使用的随机数,代码所计算的函数(functionality) 以及这一函数可能具有的结构/特征(如果有比较短的描述的话)等等,都可以被一个存在性的归约/模拟算法利用,或者,我们可以直接假定这些特征/结构信息被直接嵌入(hardwired)到了存在性的归约算法中。这是普适归约/模拟所无法做到的,因为单个普适归约/模拟算法需要应付所有可能的敌手,它被给定的只有敌手的代码,而一个多项式时间的算法是没有办法从(可能被混淆的)敌手代码中解构出有意义的(即使存在)特征或结构的,它最多只能观察代码的一些计算路径。
因此,即使一个给定的敌手代码所计算的函数非常简单和具有特定的结构,普适归约/模拟算法也只能通过观察它的输入输出(如黑盒归约)或它的具体计算路径(如Barak的非黑盒归约)来进行归约/模拟。
Canetti等人在证明并发零知识轮复杂性下界时所构造的一个恶意验证者V∗就是一个很好的例子:如果将这一恶意验证者V∗看成黑盒,那么模拟器无法模拟V∗的视图;如果知道V∗的具体计算结构和随机带,那么一个个体化的模拟器很容易模拟它的视图。如果我们从一个密码归约的观点去看待1978年Adleman的「BPP属于P/poly」的证明,这也是一个归约算法利用「敌手」 随机带结构的很好的例子。
实现个体化归约看起来第一步就需要去证明对任意一个成功攻击给定密码构造的敌手都(在合理的假设下)具有某种很好的「结构」。这当然无比困难。在我脑子里有限的几个例子中,对于其中一些我们似乎可以取得双赢:如果敌手算法有很好的结构,我们固然可以对它进行归约/模拟;如果没有的话,我们似乎也有另一种更为简单的策略对它进行归约/模拟。
当时脑子里从CPA到CCA的构造就属于这一种,但这一切都非常抽象而模糊不清。当年去UCL时,Jens Groth给我的第一个题目就是从单比特CCA安全的加密构造多比特CCA安全的加密,不巧(幸运?)的是讨论没几天后,这个题目便出现在当年FOCS09接受论文列表里了。后来我给他讲了一下我脑子里有关CPA到CCA构造的模糊想法,当然,那时候不可能给他讲清楚我自己都不理解的东西。
现在想起来有些后悔的是在接下来的几年几乎很少去读文章了。如果那时候接触到CDS(conditional disclosure of secrets)或者认真琢磨一下那些需要很强假设的证据加密(witness encryption)的话,或许会更早启发我写一些东西。
直到7年后,才对Feige-Shamir协议的并发安全性和个体化归约有了稍微清晰一点的认识,获得一个win-win的结果:要么Feige-Shamir协议具有并发安全性,要么可以将公钥加密建立在抽象的单向函数上(即,Impagliazzo[I, CCC95]的第四个世界Minicryp不存在)。注意到无论是Feige-Shamir协议的并发零知识性,还是建立在抽象单向函数上的公钥加密,都已被证明在黑盒归约下是不可能实现的。这表明确实存在着能够突破黑盒下界的新归约方法。
依赖区分器的归约/模拟
在通常的模拟安全性定义中,我们要对任意的敌手,存在一个模拟器使得对任何多项式时间区分器都无法区分真实世界与模拟世界。
2017年Jain等人[BPK,Eurocrypt 17]提出了一个区分器依赖的模拟方法,他们本质上是将模拟器和区分器前面的量词调换了:如果先给定一个区分器,那么我们可以构造一个模拟器(将此区分器作为子程序调用)使得预先给定的区分器无法区分它的输出与真实的交互。依赖区分器的模拟方法本质上依然是黑盒模拟:所有的子程序都被模拟器当成黑盒来调用。
在这种模拟方式下,他们给出了3-轮弱零知识构造(下面我们笼统地称为区分器依赖的零知识证明)。两年后Bitansky等人[BPK, STOC19]利用这个依赖区分器模拟的想法,引入了同态模拟的技术,对Jain等人构造的3-轮弱零知识证明有了非常大的改进。虽然[BPK, STOC 19]中的构造仍然不是一个正常定义下(模拟仍需依赖具体的区分器)的零知识证明,这也是目前标准假设下的最好的构造了。
[BPK, STOC 19]中的同态模拟非常巧妙和复杂,在这里我们不打算来详细介绍它,但仍有两方面值得注意:
Chung,Lui和Pass[CLP,TCC13]证明了这种区分器依赖的模拟器可以提升到只依赖区分器运行时间的模拟器(允许某个很小的区分优势),这离标准定义下的零知识更近了一步。
如果一个零知识带有一个依赖区分器的模拟器(即使仍存在某个很小的区分优势),那么该零知识协议通常会是标准定义下证据隐藏的。在我看来,Jain等人和Bitansky等人一个很大的贡献就是实现了标准定义下的3-轮证据隐藏协议,在他们结果之前,针对一般NP断言的3-轮证据隐藏协议很多时候被认为和3-轮零知识协议一样难以实现。
个体化归约/模拟
在写上面提到的有关Feige-Shamir协议并发安全性结果的同时,一个偶然的机会我注意到了基于整数分解的Rabin加密的一个优良性质,感觉可以用它来实现个体化归约,构造一个非常简单的3-轮弱零知识协议。但写作和投稿出人意外的漫长,期间收到了一些有趣和有益的评论,也被发现了一些错误,结果也几经改动。
这个想法的核心相对比较简单,但对于某些要求合成环境下安全的协议(如选择打开安全的承诺,并发零知识证明等),它在具体实现上(参见[Deng,Asiacrypt 20])要比下面的描述稍微复杂一点。
个体化(几乎最优)抽取器
考虑一个浓缩的2-轮协议(A,B),其中第一轮消息中B向A发送一个NP困难问题实例y,并且这个协议具有如下两个性质:
个体化抽取器/模拟器:依赖B的结构?
上面的抽取器(和模拟器)均依赖具体敌手算法B的结构。这里我们给出两个例子。假设y是某个单向置换的像。如果算法B仅仅利用它自身的随机带来随机选择一个像,那么对应的最优抽取器可以是一个垃圾算法(因为单向性,所以不存在好的抽取原像的算法,这个垃圾算法也是最优了)。
如果B利用它自身的随机带来随机选择一个原像,然后通过该原像来计算它对应的像y,那么对应的最优抽取器可以直接利用B的随机带来计算y对应的原像,它的成功概率就是1,所以是最优的抽取算法。这两个例子可以看出抽取器对算法B结构上的依赖。
我们还不知道能否利用个体化模拟/归约获得更好的安全性和更好的构造。期待未来能看到更多有趣的想法。
参考
[3]注意到 Feige-Shamir 协议是一个论证系统 (argument, 具有只能抵抗多项式恶意证明者的可靠性)。我们同样可以构造常数轮零知识证明(proof, 具有可以抵抗任意恶意证明者的可靠性)系统。
[4] 这里准确的断言为“存在 b 和 x_b, 使得 y_b=f(x_b)”。由于 3-轮证据不可区分协议通常具有知识的证明性质,这里我们可以将此断言写成上面这种形式。
[5] The Role of Relativization in Complexity Theory,以及 Relativizing versus Nonrelativizing Techniques: The Role of Local Checkability。
[6] RK 协议原始版本是一个证明系统,而非这里所描述的论证系统。
[7] 实际上为两轮消息,第一轮放到了初始阶段。
[8] 这一过程并非构造性的。
[9] 目前我们发现也可以基于另外一下标准假设,如 LWE