📜  零知识证明

📅  最后修改于: 2021-08-25 10:51:50             🧑  作者: Mango

零知识证明(ZKP)是最初由MIT研究人员Shafi Goldwasser,Silvio Micali和Charles Rackoff在1980年代提出的一种加密方案。

零知识协议是概率评估,这意味着它们不能像仅仅揭示整个信息那样确定性地证明某些事情。它们提供了不可链接的信息,这些信息可以一起表明断言的有效性。

当前,网站将用户密码作为输入,然后将其哈希值与存储的哈希值进行比较。同样,银行也要求您提供信用评分,才能为您提供贷款,而这将使您的隐私和信息泄露风险完全由主机服务器承担。如果可以使用ZKP,则验证者未知客户端的密码,并且仍可以对登录进行身份验证。在ZKP之前,我们总是质疑证明者的合法性或证明系统的健全性,但ZKP质疑验证者的道德。如果验证者试图泄漏信息怎么办?

示例1:一个有色盲的朋友和两个球:
有两个朋友Sachin和Sanchita,其中Sanchita是色盲的。萨钦(Sachin)有两个球,他需要证明两个球的颜色不同。桑奇塔(Sanchita)随机地将球切换到背后,然后将其展示给萨钦(Sachin),后者必须告知球是否被切换。如果球的颜色相同并且Sachin提供了错误的信息,则他正确回答的可能性为50%。当该活动重复几次时,Sachin用错误信息给出正确答案的可能性非常低。萨钦(Sachin)是“证明者”,桑奇塔(Sanchita)是“验证者”。颜色是绝对信息或要执行的算法,并且在不向验证者透露颜色信息的情况下证明了其安全性。

示例2:查找Waldo:
查找Waldo是一款游戏,您必须从从上方拍摄的大量人群的快照中找到一个名为Waldo的人。萨钦(Sachin)有找到沃尔多(Waldo)的算法,但他不想透露给桑奇塔(Sanchita)。 Sanchita想购买该算法,但需要检查该算法是否有效。萨钦(Sachin)在纸板上切了一个小孔,然后放在沃尔多(Waldo)上。 Sachin是“提供者”,Sanchita是“验证者”。用零知识证明了该算法。

零知识证明的性质:

  • 零知识–
    如果该语句为真,则验证者将不知道该语句是否为。此处的语句可以是绝对值或算法。
  • 完整性–
    如果陈述正确,那么最终可以说服诚实的验证者。
  • 健全性–
    如果证明者不诚实,他们就无法说服验证者证明其正确性。

零知识证明的类型:

  1. 交互式零知识证明–
    它要求验证者不断询问关于证明者拥有的“知识”的一系列问题。上面发现Waldo的示例是交互式的,因为“证明者”进行了一系列操作以向验证者证明知识的正确性。
  2. 非交互式零知识证明–
    为了使“交互式”解决方案有效,验证者和证明者都需要同时在线,这使得在实际应用中难以扩展。非交互式零知识证明不需要交互式过程,从而避免了勾结的可能性。它需要选择一个哈希函数来由验证者随机选择挑战。 1986年,菲亚特(Fiat)和沙米尔(Shamir)发明了菲亚特-沙米尔(Fiat-Shamir)启发式技术,并将交互式零知识证明成功地更改为非交互式零知识证明。