零知识证明(ZKP)的目的是让“验证者”通过满足某些关系而不向其他任何人透露证人,证明自己是某些信息的所有者,称为“证人”对“验证者”。交互式零知识证明需要验证者和证明者的实时交互。
零知识证明的基本概念最早可以追溯到1985年,当时开发人员Shafi Goldwasser,Charles Rackoff和Silvio Micali向世界提出了“知识复杂性”概念,该概念是ZKP的先驱。
带有离散算法的交互式零知识证明:
- Sanchita希望向Sachin证明她知道值信息,以y = g ^’见证’为基础g。
- Sanchita从一组值Z中选择随机值x,然后计算t = g ^ x并将t发送给Sachin。
- Sachin从集合Z中选择随机值c并将其发送给Sanchita。
- Sanchita计算r = xc *’Witness’并将r返回给Sachin。
- Sachin检查t = g ^ r * y ^ c是否成立(因为r = xc *’Witness’,y = g ^’Witness’并通过简单替换,g ^(xc *’Witness’)* g ^ c *’见证’= g ^ x = t)。
- 萨钦不知道“证人”的价值,但是通过检查t = g ^ r * y ^ c是否可以证明Sanchita确实知道“证人”的价值。
交互式零知识证明的问题:
- 可转让性有限–
为了再次向另一个验证者证明相同的证明,需要重复整个过程。 - 不可扩展–
交互式ZKP要求验证者和证明者都必须同时在线,这使整个过程难以满足。
应用范围:
- 核裁军–
2016年,普林斯顿等离子体物理实验室和普林斯顿大学展示了可能具有适用性的技术。这将使检查人员无需记录,共享或透露可能是秘密的内部工作原理,即可确定物体是否为核武器。 - 认证系统–
用户可以使用它来验证其密码,而无需将其透露给系统。零知识密码证明是一种特殊的零知识知识证明,由于大多数ZKP协议都需要较大的随机输入,因此可以解决有限密码的问题。
为了解决交互式零知识证明所面临的问题,我们进一步实现了非交互式零知识证明,以使其在实际应用中可扩展。