你或许已经坐在了历史上最好的观景台上。眼下的密码算法与协议--如零知识证明与多方安全计算等--正在深刻地改变社会个体/组织之间信任的来源和它的成本。密码技术可能会远远超出一个技术的范畴,最终对社会变革产生深远的影响。或许,我们将要看到的景象要远比Michael Lewis "在金融业即将迎来变革的戏剧性时刻坐在位置最好的观景台前" 所看到的更加波澜壮阔。
0.
我开始研究密码学和零知识证明的时候当然完全想象不到它们今天所产生的影响。那时只是觉得密码概念和构造新鲜而有趣,当然还很重要,就像你的基金申请书上所说的一样。
念博士第一年(2004)是基于pairing的IBE/signature进入井喷的前期。我也开始读一个超级腕的论文,他会在每篇论文后面留一个公开问题。那时每看到一个公开问题都会很兴奋,不管理不理解,总算有个问题可以思考了。不过只读过他三篇论文。我刚花了两周时间拼命弄懂他第一篇论文留下的问题后,他的第二篇论文出现了,声称解决了他的第一篇文章中的问题,但是文末还是留下一个看起来有点难的公开问题;我又花了两周去弄懂这个新问题,很不幸的是他的第三篇论文如期而至,声称已经解决了第二个问题。当然,在文末他又留下了第三个公开问题。
我怀着礼貌读完了他的第三篇论文,但再没有心思去琢磨他的第三个问题了。那时开始对这个圈子和对自己都产生了失望。迷茫中拾起了Goldreich写的密码学基础。这本书对于几乎没有任何基础的我非常困难,每次重读它都会觉得上一次读的时候有点什么误会。但不知什么原因它使我平静了一点,不是那么急切地去找一个题目了。读到最后零知识章节时,我留意了一下当时的一些主流会议这一领域的论文,通常都有但一年也只有几篇。那时便觉得自己可以尝试一下这个看起来很有趣竞争又不太激烈的领域。
第二年我读到Barak非黑盒模拟技术与分布式并发零知识时,对当时的一个重要问题--是否存在常数轮的完全并发的零知识协议--产生了很大的兴趣。读了Barak文章大概一个月后,我感觉到自己能够通过扩展Barak的技术构造这样的协议了。当时非常兴奋,给Barak写了一封邮件,详细描述了自己的想法。第二天一大早便收到了Barak的邮件(他当时应该在IAS做博后,现在应该不会有空及时给读者回信了),他花了很长的篇幅给我解释了为什么我的想法是错误的。
这个问题也便一直困扰我至今。虽然十五年后依然没有答案,但我对密码学和它的核心技术--安全性归约/模拟--的认识几乎都来自对它的研究。事实上,密码学中许多独立于具体安全模型的安全性归约/模拟的创新都诞生于对这个(或紧密相关的)问题的研究之中。
安全性归约,模拟,知识与知识的抽取. 几乎所有密码算法/协议的安全性(如可信/可靠性,隐私等)都源于底层问题(假定中的)计算困难性[1]。密码算法/协议的安全性证明通常指如下安全性"归约": 给定一个(声称成功地攻破该算法/协议安全性的)敌手算法,我们构造一个高效的归约算法通过调用该敌手算法来打破底层困难性假设,从而在逻辑上完成了“如果底层困难性假设成立那么目标系统是安全的”这一命题。
下面我们经常会等同看待归约,模拟与知识/秘密的抽取。在归约算法调用敌手算法过程中,它需要模拟敌手在真实世界中看到的视图(view,为什么?)。因此模拟是整个归约最为关键的一环,这是为什么通常将它俩等同起来的原因。
假设给定一个涉及两方的构造(A,B)和一个扮演角色A的敌手
- 利用底层困难性/不可区分性假设本身模拟。这在非交互密码算法中常见,如证明ElGamal 加密的CPA安全性时,模拟算法通过给敌手
输入可能无效的密文来利用它打破底层的DDH假设。这里的模拟简单而直接,底层DDH的不可区分性本身就假定了无论密文是否正常,的表现几乎都一样。
- 通过从
身上抽取(extract)到某些秘密/知识,或,在有setup的场景下,模拟器自身扮演其他可信/诚实方来生成对模拟有利的(公共)输入,进而模拟诚实的B。这在交互密码协议的安全性证明中非常普遍,如下面将提到的经典Feige-Shamir零知识协议。
第二种模拟方法中的关键就是秘密/知识的抽取。我们很多时候在谈论安全性归约时,它的核心就是模拟,或者知识的抽取。事实上,第二种模拟方法给一般性的密码协议设计提供了一个原则:我们设计一个诚实方B的算法时,要使得在拥有诚实方的私有输入或对方和/或公共输入的某些秘密的前提下,我们均能顺利执行诚实方算法。
什么是“知识”?或者,怎么定义一个算法“知道”某个秘密/知识呢?Goldwasser 他们在其开创性论文[GMR,STOC 85]中对知识的定义就是“the output of an unfeasible computation”,即,我们自己无法计算出来的东西。“output”在这里极为关键:敌手如果“知道”某个秘密那么它(或者一个调用它的新算法)能够输出这个秘密。这一概念在算法的世界里非常清晰,但它也是严谨安全性证明的噩梦:有时候一个算法 “明明”应该知道某个秘密才能成功,可我们无法通过它或改编后的新算法来输出这个秘密。这里一个经典的例子就是Damgard的指数知识(knowledge of exponent)猜测,我们目前还无法将它建立在更为牢固的标准困难性假设上。
免责声明. 这篇文章将描述一部分零知识证明研究所带来的模拟/归约的技术。由于时间和篇幅的原因,我们完全忽略了基于代数技巧的和各种依赖具体模型的模拟/归约技术。也由于个人的兴趣和十分有限的见识,偏见与不完整就难免了。
1. 零知识证明与重置模拟(rewinding):为什么简单的策略会失败
先回顾图同构的零知识证明。如果两个图
如果证明者P拥有这两图之间的置换映射
和传统的数学证明一样,这一交互证明也满足完备性,即如果断言为真那么V最终会接受; 以及某种程度的可靠性:如果给定的俩图不同构,那么无论证明者使用什么策略有多强的计算能力,它无法以高于1/2的概率使得V接受。
观察到P发送的消息在外界看起来都无关它所拥有的关键证据
GMR通过引入模范式给出了零知识严格的定义。粗略地讲,如果对于任意的多项式验证者策略V*, 如果存在一个多项式时间的模拟器S,它在没有证明者所拥有的关键证据(如上面提到的
一些观察:
- 代码,随机带与黑盒模拟. 上述模拟器S为V*选择随机带(我们假定知道V*随机带分布)仅仅是为了让V*运行起来,有时候我们也省略这一步。在大多数情况下,尽管模拟器知道V*的完整代码(包括它的随机带),它仍然很难直接利用这些信息来模拟。注意到V*是一个任意的函数,我们不知道它将怎么利用自身的随机带和S发送的图H来生成一比特的挑战i。如上面所描述的S,它直接忽略了V*的代码本身而将它看成一个黑盒,采用随机猜测i的策略进行模拟。
- 模拟器的输出分布. 注意到上面提到的三个算法P,V,V*和S均为随机算法。我们说模拟器的输出与真实世界中P与V*之间的交互不可区分,是指模拟器的输出分布[2](由模拟器所使用的随机数决定)和P与V*之间交互所产生的分布(由P和V*所使用的随机决定)对于任意的多项式时间算法而言是不可区分的。
- 重置:人与代码. 上述模拟器S所采用的重置策略有两种方式来实现。一种是将V*的状态重置/回复(如将当前的memory擦掉等)到初始状态,另一种是想象模拟初始时我们拥有V*多个克隆,当模拟器猜错时就换一个copy重头开始。对于后者,读者可以想象同一代码的不同copy活在“平行世界“中,但他们计算的是同一个函数:给定相同的输入,它们的输出相同。 这或许是人跟代码之间的根本区别:人能够被重置吗?
为什么简单的重置策略会失败. 我们希望图同构证明系统的可靠性错误非常小,而不是上面的1/2。上述协议可以通过顺序执行多次(验证者接受当且仅当所有的完整执行都接受)来降低这一可靠性错误(同时保持零知识性),但这会大幅增加交互的次数(轮复杂性,我们通常称发送一次消息为一轮)。 另一种方式就是并行执行多次协议来降低可靠性错误,这样可以保持交互轮数(3轮)不变。但它导致的一个问题就是上述简单的重置策略无法使得我们能够在多项式时间内完成模拟:假设进行n次并行,这时V的挑战问题变成了n个 (可有一个n长的比特串表示),模拟器S同时猜中这n个问题的概率此时就变成
信任, 隐私,针对NP断言与一般性计算的零知识证明. 零知识证明的可靠性让诚实验证者信任 被证明断言的正确性,同时,它的零知识性最大程度地保护了诚实证明者的隐私,即它所知道的传统数学证明/证据。我们接下来将针对一般NP断言构造零知识证明。所谓一般性NP断言指的是那些在给定数学证明/证据的条件下我们能够快速验证(虽然找到证明/证据可能非常困难)的断言,这包括有关一般性(高效算法)计算正确性的断言,比如,给定公开的多项式时间算法M,和一个y值,断言“存在x,使得输入x时M将输出y,M(x)=y”。当给定这一断言的证据x时,任何人都可以快速验证它(这说明它也构成一个NP断言):输入x然后自己运行算法M,检查M是否输出y。在许多密码场景下,M通常代表某实体的诚实算法,x代表这一方的私有输入,在不知x的情况下他人无法判断是否存在x使得M(x)=y。这样,针对此类断言的零知识证明就发挥了不可思议的功能:这一证明既保护M所代表实体的隐私(证明结束时他人仍然不知道有关x的信息),又能使得其他相关方能确认M所代表的实体诚实地执行了算法M并输出y。我们能够对一般性高效算法的正确性 构造零知识证明是它能够被广泛应用的根本原因。
2. Feige-Shamir: 优雅的证据不可区分与常数轮零知识证明
尽管并行上述图同构协议后我们不知道怎么证明新协议的零知识性,但这一并行版本有个非常好的性质:
- 证据不可区分性 (witness indistinguishability) .即,如果给定的断言有两个或以上的证据(如, 两个不同的置换
和同时使得和),那么无论验证者采用什么策略,它都无法区分证明者在证明中使用的是哪个证据。
- 可忽略的可靠性错误与知识的证明(proof of knowledge). 前面提到了并行可以将可靠性错误降至指数级的小。此外,这个协议(无论是否并行)还具有知识的证明的性质,这一性质本质上是可靠性的升级:对任意给定的断言,任意的证明者策略P*,只要P*使得V接受的概率显著地超过合理性错误,我们便能构造一个知识的抽取器E,它通过调用P*输出该断言的一个证据。例如,在图同构证明协议当中,如果P*能以超过1/2的概率使得V接受,那么我们能够构造算法E,它扮演V的角色和P*交互,通过 重置 的策略 (发送挑战i=0并得到相应的回答后,重置P*至它刚刚发送完第一条消息H时的状态,重新发送挑战i=1得到一个新的回答),它能将证明者使用的证据
(与之间的同构)计算出来。并行后的协议依然保持知识的证明这一性质。
针对NP断言的3-轮证据不可区分证明协议. 我们希望能够对一般性的NP断言构造零知识或证据不可区分证明系统。幸运的是,对于任意的NP断言“x是正确的" (如“
Feige-Shamir 的构造. 目前为止, 我们通过并行牺牲了零知识性,但得到了可忽略的可靠性错误和证据不可区分的性质。我们能够构造一个具有可忽略可靠性错误的常数轮零知识证明协议吗?答案是肯定的。Feige和Shamir[FS, STOC 90]给出了一个有着广泛影响的优雅构造[3]。给定一个NP断言 “x是正确的“,P持有这一断言的证据(如图同构中的
- 在第一阶段,V生成单向函数
的两个随机的像,和(这里原像和都是随机选取的),随机选择一个原像作为证据,利用一个3-轮证据不可区分的(具有可忽略的可靠性错误)证明协议向P证明"我知道和其中一个的原像"[4];
- 在第二阶段,如果上述V的证明是可接受的,那么P紧接着利用同一个3-轮证据不可区分(具有可忽略的可靠性错误)证明协议向V证明“x是正确的 或 我知道
和其中一个的原像”。如果该3-轮交互证明是可接受的,则V最终输出“接受”。
利用第一阶段的证据不可区分性(为什么V需要生成两个原像?)和第二阶段的知识的证明的性质,我们可以证明,如果函数
注意到Feige-Shamir协议需要假定存在单向函数,这与无需任何假设的图同构的零知识证明有着本质的区别。事实上,只有很少的断言具有像图同构那样的完美零知识证明[Fortnow, CCC 87]。
3. 黑盒模拟/归约的局限性.
计算理论/复杂性中许多早期的经典结果都是相对化的:在证明过程中所有的图灵机都被当成oracle(黑盒)来看待,其结果相对于任何的oracle(给所有图灵机提供该oracle接口)都成立。Baker,Gill和 Solovay[BGR, SIAMCOMP 75]发现这种证明方法无法解决NP vs P问题:存在着oracle A和B,使得
绝大多数密码学中归约(安全性证明)都是相对化的,也就是我们常说的黑盒归约。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)的黑盒零知识证明,这里公开掷币指的是每个来自诚实验证者的消息都是通过随机掷币生成的真随机数,如上面的图同构协议。公开掷币的协议通常有着更为广泛的应用。
4. 分布式环境下的并发性:嵌套难题与递归的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 [RK, Eurocrypt 99]解决了。他们提出的构造--Richardson-Kilian协议--本质上就是一个带有多个slot(一个slot对模拟器而言可以看成一个重置的机会)的Feige-Shamir协议[6]:
- 初始阶段:V准备好k对随机的像
以及k个3-轮证据不可区分证明协议的第一个轮消息 一次性发送给P;
- 在第一阶段,V按顺序执行k个3-轮证据不可区分证明协议剩余的两轮,在第i个执行中,V向P证明“我知道
或的一个原像”;
- 在第二阶段,P执行一个3-轮证明不可区分证明协议向V证明“x是正确的 或 对于某个i,我知道某个
和其中一个的原像”.
注意到对于上述协议,我们称第一阶段的单个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等人的并发黑盒零知识协议在轮数上是最优的。
5. Hada-Tanaka 与 Barak: 利用计算路径突破黑盒下界
每次在讲到Barak的突破之前,我总习惯性地提到Hada,他在2000年左右在零知识和程序混淆方面都做出了非常具有启发性的工作。这些工作都不幸地被淹没在后面更大的突破当中而被忽略了(至少从引用上来看是这样),我个人觉得并没有得到他应得的credit。
Hada和Tanaka在1998年发表了一篇3-轮零知识协议的文章[HT, Crypto 98],这看起来直接与上面提到的不存在3-轮黑盒零知识这一下界冲突。Hada-Tanaka协议当然不是黑盒零知识,它的模拟器也非构造性,而是存在性的。此外,这个模拟器的存在性本质上来自一个不太合理的假设(用Naor的话来说,不可证伪假设,这跟我们惯用的标准假设有着很大区别):Damgard的指数知识猜测。这一猜测假定,给定一对随机的输入
从目前的一些信息来看,Hada-Tanaka应该在当时(尤其在魏茨曼)引起了较大的反响。Barak在随后的一年跟随Goldreich念博士,应该也受到了Hada和Tanaka的想法的影响和启发,两年后诞生了一个巨大的突破。我这里说的启发是比较广义的启发,它并不见得是技术技巧上的影响与启发,有时它可能是一个单比特的启发。当大家都拥挤在一条路上踌躇不前时,如果有个oracle告诉你“还有另一条路”,虽然它没有指出路在哪里,但这个单比特信息会强烈刺激一些人去找。这是我为什么认为尽管Hada-Tanaka的构造建立在一个不可证伪的假设之上,它仍是一个非常具有启发性的构造。
Barak在2001[B, FOCS 01]取得的一个突破性的构造就是基于标准假设的常数轮公开掷币的零知识协议,它同时还可以具有有界的并发安全性。此外,他的构造对应的模拟器是严格多项式时间的。这同时突破了之前有关黑盒零知识的几个下界。从外形上看,它基本上遵循了Feige-Shamir框架:在协议的第一阶段,证明者P与验证者V共同产生一个困难问题实例;在第二阶段,P向V证明“给定的断言x是正确的 或 我知道第一阶段产生的问题实例的答案”。在上面的Feige-Shamir协议里,第一阶段的困难问题实例由V独自生成,然后V向P证明它知道这一问题实例的答案。这一阶段通常需要保证两点:
- 真实世界中的P无法获取该问题实例的答案;
- 模拟器在拥有验证者完整代码(包括它使用的随机数)的情况下能够抽取到该实例的答案。
Barak协议的第一阶段也需要满足这两点。与Feige-Shamir不同的是,Barak协议的第一阶段是公开掷币的,即验证者发送的消息都是随机数。这是Barak协议最令人惊讶的地方。Barak协议的第一阶段协议的核心(并不正确)由如下简单的两步组成:P首先向V发送一个承诺
由这两条消息我们可以定义一个困难问题集合
看起来完成了第一阶段的设计,但这里还存在一些问题。首先我们需要指定
真正的麻烦在于我们在定义集合
根据上面的修改,定义集合
根据这些改动,给定一个NP断言“x是正确的”,Barak协议的最终版本如下:
- 第一阶段(困难问题实例生成):验证者V先发送一个随机选择的哈希函数
;证明者P随即发送一个对0串的承诺值;验证者接着发送一个随机串;
- 第二阶段(WIUA):证明者利用WIUA向验证者证明“x是正确的 或
”。
对于真实世界的证明者而言,它可以在第一阶段承诺一个0串,而在第二阶段利用x的证据执行WIUA; 对于模拟器,它需要在第一阶段对给定的验证者代码进行承诺,然后在第二阶段利用
如果在并发环境中可以预先固定Barak协议被执行的次数,我们可以让诚实验证者选择一个充分长的
理论研究往往充满了意外。PCP定理的诞生于对交互证明的研究之中,后来它给予了密码学巨大的回馈。我们可以通过递归调用PCP机制,将Barak协议改造成为一个具有可重置(resettable)的零知识协议;Micali基于PCP构造的cs proof在威力强大的可抽取单向函数[BCPR, STOC 14]构造上扮演了关键的角色;此外,PCP证明以及它的递归版本也间接或直接影响了今天非交互简洁零知识证明的构造。
6. 代码,它所计算的函数以及结构
当年看到Barak协议后便有了递归调用模拟器(本质上是递归调用PCP)来取得并发安全性的想法。虽然不久便发现这一幼稚的想法受制于PCP的长度和计算时间,递归深度非常受限而无法成功,但几年后还是利用了它(和一些其他的工具)构造一个轮复杂度非常高的可重置的零知识协议。
这一构造比较复杂,2009年投完稿我才慢慢从许多技术细节的泥沼中恢复过来。后面有一段完全放空的时间,开始纠结于一个简单问题:为什么每次新的模拟/归约技术(虽然在某些方面取得了进展)都会带来更为复杂的构造?对于一些密码学早期的经典而简单密码构造,如Schnorr身份认证和上面的Feige-Shamir协议等,当考虑它们是否具有后来定义的(更强的)安全性--如证据隐藏性,并发零知识性--时,你会发现一个非常混乱现状:
- 好消息(the good):没有发现有效的攻击;
- 坏消息(the bad): 没有找到安全性证明;
- 难以解读的消息(the ugly):已经证明 "目前的黑盒归约无法证明它们的安全性".
这一现状翻译过来就是:我们无法排除 "将来能够找到新的归约方法来证明它们的安全性" 这一可能。这些观察使我渐渐意识到了目前已知的归约/模拟方法与证明安全性所要求的归约/模拟之间的巨大鸿沟:
- 已知的: 普适归约/模拟(universal reduction/simulation(
)). 对于一个密码构造,我们构造一个普适的安全性归约/模拟算法R, 对于任意的敌手,打破底层的困难性假设或成功模拟的视图。普适归约/模拟几乎是目前唯一已知的安全性归约/模拟技术,它包括了经典的黑盒归约和Barak的非黑盒模拟。
- 安全性要求:个体化的归约/模拟(individual reduction/simulation(
)). 注意到对于绝大多数安全性定义,通常只要求对任意给定的,存在 一个(可能依赖给定的敌手的)归约/模拟算法R使得它能够打破底层的困难性假设或成功模拟的视图。这里只要求归约算法的存在性是合理的,毕竟安全性证明/归约旨在给人们以信心,在实际中我们不需要用到归约算法。
在字面上,个体化归约的强大之处在于,给定的敌手
Canetti等人在证明并发零知识轮复杂性下界时所构造的一个恶意验证者
实现个体化归约看起来第一步就需要去证明对任意一个成功攻击给定密码构造的敌手都(在合理的假设下)具有某种很好的“结构”。这当然无比困难。在我脑子里有限的几个例子中,对于其中一些我们似乎可以取得双赢:如果敌手算法有很好的结构,我们固然可以对它进行归约/模拟;如果没有的话,我们似乎也有另一种更为简单的策略对它进行归约/模拟。当时脑子里从CPA到CCA的构造就属于这一种,但这一切都非常抽象而模糊不清。当年去UCL时,Jens Groth给我的第一个题目就是从单比特CCA安全的加密构造多比特CCA安全的加密,不巧(幸运?)的是讨论没几天后,这个题目便出现在当年FOCS09接受论文列表里了。后来我给他讲了一下我脑子里有关CPA到CCA构造的模糊想法,当然,那时后不可能给他讲清楚我自己都不理解的东西。
现在想起来有些后悔的是在接下来的几年几乎很少去读文章了。如果那时候接触到CDS(conditional disclosure of secrets)或者认真琢磨一下那些需要很强假设的证据加密(witness encryption)的话,或许会更早启发我写一些东西。直到7年后,才对Feige-Shamir协议的并发安全性和个体化归约有了稍微清晰一点的认识,获得一个win-win的结果[D, Eurocrypt 17]:要么Feige-Shamir协议具有并发安全性,要么可以将公钥加密建立在抽象的单向函数上(即,Impagliazzo[I, CCC 95]的第四个世界Minicryp不存在)。注意到无论是Feige-Shamir协议的并发零知识性,还是建立在抽象单向函数上的公钥加密,都已被证明在黑盒归约下是不可能实现的。这至少表明确实存在着能够突破黑盒下界的新归约方法。
7. 依赖区分器的归约/模拟
在通常的模拟安全性定义中,我们需要证明,对于任意的敌手,都存在一个模拟器使得对于任何多项式时间区分器都无法区分真实世界与模拟世界。2017年Jain等人[JKKR, Eurocrypt 17]提出了一个区分器依赖的模拟方法,他们本质上是将模拟器和区分器前面的量词调换了:如果先给定一个区分器,那么我们可以构造一个模拟器(将此区分器作为子程序调用)使得预先给定的区分器无法区分它的输出与真实的交互。依赖区分器的模拟方法本质上依然是黑盒模拟:所有的子程序都被模拟器当成黑盒来调用。在这种模拟方式下,他们给出了3-轮弱零知识构造(下面我们笼统地称为区分器依赖的零知识证明)。 两年后Bitansky等人[BPK, STOC 19]利用这个依赖区分器模拟的想法,引入了同态模拟的技术,对Jain等人构造的3-轮弱零知识证明有了非常大的改进。虽然[BPK, STOC 19]中的构造仍然不是一个正常定义下(模拟仍需依赖具体的区分器)的零知识证明,这也是目前标准假设下的最好的构造了。
[BPK, STOC 19]中的同态模拟非常巧妙和复杂,在这里我们不打算来详细介绍它,但仍有两方面值得注意:
- Chung,Lui和Pass[CLP,TCC13]证明了这种区分器依赖的模拟器可以提升到只依赖区分器运行时间的模拟器(允许某个很小的区分优势),这离标准定义下的零知识更近了一步;
- 如果一个零知识带有一个依赖区分器的模拟器(即使仍存在某个很小的区分优势),那么该零知识协议通常会是标准定义下证据隐藏的。在我看来,[JKKR, Eurocrypt 17]和[BPK, STOC 19]一个很大的贡献就是实现了标准定义下的3-轮证据隐藏协议,在他们结果之前,针对一般NP断言的3-轮证据隐藏协议很多时候被认为和3-轮零知识协议一样难以实现。
8. 个体化归约/模拟
在写上面提到的有关Feige-Shamir协议并发安全性结果的同时,一个偶然的机会我注意到了基于整数分解的Rabin加密的一个优良性质,感觉可以用它来实现个体化归约,构造一个非常简单的3-轮弱零知识协议。但写作和投稿出人意外的漫长,期间受到了一些有趣和有益的评论,也被发现了一些错误,结果也几经改动。这个想法的核心相对比较简单,但对于某些要求合成环境下安全的协议(如选择打开安全的承诺,并发零知识证明等),它在具体实现上(参见[D, Asiacrypt 20])要比下面的描述稍微复杂一点。
个体化(几乎最优)抽取器. 考虑一个浓缩的2-轮协议(A,B),其中第一轮消息中B向A发送一个NP困难问题实例
- 即使实例
由某个恶意的生成,如果模拟器知道的一个证据,那么模拟器可以顺利模拟的视图;
- 区分诚实方A发送的消息与一个(容易计算的)垃圾消息等价于找到
的一个证据。
(在不考虑协议的轮复杂度情况下,如果把敌手算法和区分器算法看成一个实体(虽然严格说起来不正确,但对于模拟器而言它们都是需要对付的敌人),那么许多MPC和零知识证明协议--包括经典的Feige-Shamir协议和上面提到的依赖区分器的零知识证明等--都(勉强)可以在上面这种框架下去解释。)
对于这样的协议,有两种情况模拟器可以成功地模拟
如前面提到的,在一般的安全性定义中,模拟器和区分器一样都允许依赖敌手算法
注意到
我们退而考虑[CLP, TCC 13]中定义的比较弱的模拟安全性:
这里有一种简单的构造上述
读者可以验证这一过程最终输出的抽取器一定是
个体化抽取器/模拟器:依赖
接下来的任务就是怎么去构造具有上面那两条性质的协议(A,B)。结合Rabin的加密方案的一个变形[9](该方案一个优良性质就是区分密文等价于抽取私钥), 我们能够构造2-轮的选择打开安全的承诺方案,BPK模型下的3-轮并发零知识协议和一个简单的2-轮零知识证明,这些协议的模拟安全性都是上面定义的
尽管它可能不是一个理论上很好的定义,在实践中
我们还不知道能否利用个体化模拟/归约获得更好的安全性和更好的构造。期待未来能看到更有趣的想法。
参考
- ^或许人们会怀疑随着计算技术(量子计算?)的进步,所有密码系统所依赖的数学难题在计算上都会变得容易。我觉得这是不可能的,因为实在无法想象一个没有密码的恐怖世界。
- ^更准确一点应该是分布簇。
- ^注意到Feige-Shamir协议是一个论证系统(argument, 具有只能抵抗多项式恶意证明者的可靠性)。我们同样可以构造常数轮零知识证明(proof, 具有可以抵抗任意恶意证明者的可靠性)系统。
- ^这里准确的断言为“存在b和x_b, 使得y_b=f(x_b)”。由于3-轮证据不可区分协议通常具有知识的证明性质,这里我们可以将此断言写成上面这种形式。
- ^The Role of Relativization in Complexity Theory,以及Relativizing versus Nonrelativizing Techniques: The Role of Local Checkability。
- ^RK协议原始版本是一个证明系统,而非这里所描述的论证系统。
- ^实际上为两轮消息,第一轮放到了初始阶段。
- ^这一过程并非构造性的。
- ^目前我们发现也可以基于另外一些标准假设,如LWE。