零知识证明(Zero-Knowledge Proof, ZKP)是一种密码学技术,它允许一方(证明者,Prover)向另一方(验证者,Verifier)证明某一陈述是真实的,而无需透露除了该陈述为真之外的任何额外信息。换句话说,零知识证明允许证明者证明他们知道一个秘密,而不需要透露这个秘密的任何信息。举个简单的例子,假设您要向朋友证明您知道某个秘密房间的开门密码,但是又不想让朋友知道这个密码具体是什么。您可以通过在朋友不看到您输入密码的情况下,进入房间并拿出房间内预先放置的一个特定物品来证明您知道密码,这就是一种零知识证明。
一、基本概念
- 交互式 vs 非交互式:
- 交互式零知识证明:证明者和验证者之间有多个来回的通信过程。
- 非交互式零知识证明:证明者只需要发送一次信息给验证者,不需要后续交互。
在交互式零知识证明中,证明者和验证者之间需要进行多次交互来完成证明过程。例如,验证者向证明者提出一系列随机的挑战,证明者根据这些挑战做出相应的回应,验证者通过检查这些回应来判断证明者是否真的知道相关的秘密信息。
非交互式零知识证明则不需要这种交互过程,证明者可以生成一个证明,验证者可以在无需与证明者交互的情况下验证该证明的有效性。
- 完美 vs 统计 vs 计算:
- 完美零知识证明:验证者在理论上无法从证明过程中获得任何关于证明内容的信息。
- 统