零知识证明 (Zero Knowledge Proof)的种类

10阅读 0评论2022-03-10 有看到天上的屋吗
分类:虚拟化

什么是零知识证明 (Zero Knowledge Proof)?

零知识证明可以让一方 (证明方) 在不透露任何实际信息的情况下向另一方 (验证方) 证明某保密信息或声明是真的。

术语 “零知识“ 本身就表明了不需要揭露任何信息,证明方就可以向验证方证实 ta 所知道的保密信息以及 ta 的声明都是真的。

那为什么需要零知识证明呢?当我们不想披露任何信息,但需要说服其他人相信我们知道的保密信息和提出的声明是真的时候。

目前有两种零知识证明:

1.交互式的 (Interactive)

2.非交互式的 (Non Interactive)

举例说明交互式的零知识证明

假设你需要通过 ZKP (零知识证明) 证明你的年龄大于或等于18岁,但不揭露具体年龄。我们需要第三方机构为你的年龄担保,具体如下:

第三方说:”已接收您出生证明的复印件,我们已经得知您的年龄为 21 岁。现在为您提供一串数字密码,请将它保存到保密与安全的地方。稍后您会用到它。“

”你持有的那串数字密码将会被哈希算法处理 22 次,然后得出一个最终年龄哈希代码给你 (没错,处理次数必须为年龄 +1,才能使得整个操作行得通)。也就是说,你拿到那串数字密码之后,会有 22 次哈希处理过程才能获得最终的年龄哈希代码。“

“我们将您的姓名、时间戳与最终年龄哈希代码一起打包。这个证明包将提供给他人验证。“

好了,那么当你想要向其他人证明你的年龄超过 18 岁时,你只需要证明从你拿到数字密码到最终年龄哈希代码之间的哈希算法处理次数大于 18 就可以了。

那么怎么证明呢?你只需要向他人展示最后的 18 次哈希算法处理记录。你需要自己进行前 4 次哈希算法处理 (对数字密码进行哈希算法处理 4 次),然后将结果提供给其他人:第四次哈希值。

他们会对第四次哈希值再处理18次 (现在对你的数字密码总共进行了 22 次哈希算法处理),最终他们能够得出最终年龄哈希代码并且使用证明包对它进行验证。

实际上,验证者是在说:"发送我们一个值,我们会对其进行 18 次哈希算法处理,然后这个哈希值将与你提供的年龄哈希代码进行对比。" 如果你低于18岁,最终年龄哈希代码的哈希算法处理次数就没有18次,我们对你提供的那个初始哈希值进行 18 次哈希算法处理后,就会与最终年龄哈希代码不一样。

但是这种交互式方法有一些局限:

1.每次验证都需要进行整个冗长的过程。而上述例子只是简单的哈希算法处理,想象一下如果需要对实际加密算法进行计算会如何。

2.证明方与验证方都需要同时在场,不管是在线还是面对面。

接下来是非交互式的零知识证明

1986 年,Fiat 与 Shamir 发明了 Fiat-Shamir heuristic (启发式) 算法,这是第一个基于交互式零知识证明来构建数字签名的算法。

Fiat-Shamir heuristic 算法通过使用承诺方案 (Commitment Scheme) 可变为非交互式零知识证明。这就是所谓的 ZK-SNARKs,也可以称为简洁的非交互式零知识证明 (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)。

要使 Fiat-Shamir Heuristic 算法更加强大,需要使用承诺 (commitment)。承诺方案在许多加密协议中都是基本组成部分。XM外汇账户xmsyms.com承诺方案允许承诺者发布一个值 (即承诺),然后将它们绑定到某消息上而不披露它们 (隐藏)。

Pederson 承诺与 Polynomial 承诺是 ZK 证明使用的两个最著名承诺方案。

但大约到 2013 年,ZK-SNARKs 才实际可行和实现,并真正用于应用中。
上一篇:为什么需要链上的隐私保护
下一篇:Layer 2 究竟是什么?