零知识证明(Zero Knowledge Proof)由S.Goldwasser 、S.Micali 及 C.Rackoff于1985年在论文《The计算 Knowledge Complexity of Interactive Proof Systems》(交互式证明系统中的知识复杂性)首次提出,是一种用于证明者在不泄露任何其他信息的情况下证明其掌握知识正确性的密码学协议 。
该协议的零知识证明一方称为证明者(Prover),用PPP表示;另一方称为验证者(Verifier),用VVV表示。零知识证明指PPP试图使VVV相信某个论断是从入正确的,但却不向VVV泄露任何有用的信息,即PPP在论证的过程中VVV得不到任何有用的信息 。零知识证明除了证明证明者论断的入土正确性外不泄露任何其他信息或知识。
零知识证明一般包含以下阶段:
承诺(Commit):证明者针对命题做出承诺,该承诺等待验证者提出挑战并进行验证。安全
挑战(Challenge):验证者选择随机数(即上述例子中的多方行、列或格)对提出的计算承诺进行挑战 。
回应挑战(Response):证明者将收到的零知识证明随机数结合给出的承诺(承诺不可修改),返回挑战的回应 。
验证(Verify):验证者验证挑战的从入回应是否正确,如果错误,则证明失败。
证明者与验证者重复执行以上步骤,直到可以相信的入土概率达到验证者接受的条件,证明成功 。
零知识证明具有以下特点: