零知识证明
麻省理工学院研究人员在 20 世纪 80 年代提出的一种加密方案===零知识证明
零知识证明(Zero-Knowledge Proof)或零知识协议是一种基于概率的验证方法,包括两部分:宣称某一命题为真的证明者(prover)和确认该命题确实为真的验证者(verifier)。
顾名思义,零知识证明就是既能充分证明自己是某种权益的合法拥有者,又不把有关的信息泄漏出去,即给外界的 “知识” 为“零”。
“能够在不知道用户是谁,或者他们有多少钱的情况下判断‘一个用户是否有足够的钱发送给另一个用户’的问题,是零知识证明在区块链中的主要应用之一。”——Demiro Massessi
举个例子,如果有人声称知道某个数字序列的答案,零知识证明就是验证者随机指定某个序列位置进行有验证,每个测试不需要知道确定的答案,只需要检测指定位置的数字正确即可,只要测试的次数足够多,就可以判断证明者是否知道数字序列的答案。
但是这种测试并不能证明验证者和证明者是否做过伪证,因为完全有可能两者在测试之前串通传递答案。所以,这种简单的测试并不能使人相信,要让第三者相信这个结果,验证者还须证明此过程是随机的。
非交互式的零知识证明
这种方式不需要交互过程,避免了验证者和证明者作伪证的可能性。但可能需要第三方程序或者机器的参与。
就比如,在数字序列的验证过程中,由第三方程序做次验证过程,验证序列必须保密,否则验证者可能在不知道真实“知识”的情况下通过验证。
零知识证明的特点
1.完备性
如果验证方和证明方都是诚实的,并遵循证明过程中的每一步,并正确的计算,那么这个证明就一定是成功的,验证方一定能接受证明方。
2.合理性
没有人能够假冒证明方,使这个证明成功。
3.零知识性
证明过程执行完之后,验证方只获得了“证明方拥有这个知识”这条信息,而没有获得关于这个知识本身的任何一点信息。