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

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

完备(complete)

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

健全(sound)

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

零知识(zero-knowledge)

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

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

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

zkp1

如果要用一个概念直观地解释零知识证明如何证明用户拥有数据,可以想象一个山洞只有一个入口,洞里面有两条路(路径A和路径B),这两条路由一扇门连接,要说出密码才能通过这扇门。Alice希望向Bob证明她知道开门的密码,但不想将密码透露给Bob。因此,Bob需要站在山洞外,Alice从其中一条路走进山洞,而Bob并不知道她选了哪条路。接着,Bob指定Alice从其中一条路回到山洞入口(注:这是随机选择的)。如果Alice最初选择从路径A走到门口,但Bob让她从路径B回来,唯一的方法就是穿过那扇门,而穿过门必须知道密码。为了充分证明Alice真的知道门的密码,而不是运气好刚好选到了同一条路,这个过程可以反复重复好几次。


Re: