我们已经对零知识这个概念有了一定的了解了,让我们现在关注zkSNARKs的另一个主要特征,即简洁性。正如您稍后将看到的,简洁性是zkSNARKs中更为显着的部分,因为由于某种编码允许有限形式的同态编码,零知识部分将“免费”给出。
SNARKs 是 succinct non-interactive arguments of knowledge 的缩写。一般都通用设置之所以叫做交互式协议,是因为这里有一个证明者和一个验证者,证明者想要通过交换信息的方式让验证者相信一个表达式(比如 f(x) = y)。一般来说,没有证明者可以让验证者相信一个错误的表达式(可靠性),而且对于证明者来说一定存在一个确定的策略让验证者相信任何真实的表达式(完整性)。SNARKs 各个部分的的意义如下:
简洁:与实际计算的长度相比,消息的大小很小 非交互式:没有或者只有很少很少的交互。对于 zkSNARKs 来说就是在证明者向验证者发送一条信息之后的过程。此外,SNARKs 还常常拥有叫做『公共验证者』的属性,它的意思是在没有再次交互的情况下任何人都可以验证,这对于
区块链来说是至关重要的。 参数:验证者仅受到计算限制的证明者的保护。具有足够计算能力的证明器可以创建关于错误语句的证明/参数(注意,如果具有足够的计算能力,则可以破坏任何公钥加密)。这也称为“计算可靠性”,而不是“完美可靠性”。 知识:对于证明者来说在不知道一个叫做证据(witness)(比如一个哈希函数的原象或者一个确定 Merkle-tree 节点的路径)的情况下,构造出一组参数和证明是不可能的。
如果你添加了零知识的前缀,那么在交互中你就需要一个性质,即验证者除了知道表达式的正确与否之外其他一无所知。尤其是验证者不能知道 见证字符串 稍后我们会详细解释这是什么。
举个例子,让我们考虑下面的交易验证计算:当且仅当 σ 1 和σ2 是账户默克树s(pre 和 post 状态)的根哈希,s 和 r 是发送者和接收者账户, PS和PR 是默克树 的证明(当 v 从 s 的余额中转移到 r 的余额的过程中,能够证明在 中 s 的余额至少是 v 并且他们的哈希结果是 而不是 ),这些条件都成立时,f(σ1,σ2,s ,r,v,ps,pr,v) 成立。
如果所有输入都已知,则验证f的计算相对容易。正因为如此,我们可以将F转换成一个zkSNARK,其中只有σ 1和σ 2是公开的和(s ,r,v,ps,pr,v)是witmess-string。零知识属性现在会使得验证者能够检查证明方是否知道一些见证,它可以将根哈希从σ 1转换至σ 2,而这样的转换又不影响正常的交易,但是验证者却不知道到底是谁发送了多少钱给谁。
关于零知识的部分相对正式的定义(仍然缺乏一些细节)就是:存在一个模拟器,它可以生成一些设置字段,但是却不知道私密的证人,它还可以和验证者交互 -- 但是外部的观察者却不能分辨出哪个与验证者进行的交互,哪个是与证明者进行的交互。
为了了解zkSNARKs可以用于哪些问题和计算,我们必须从复杂性理论中定义一些概念。如果你不关心“见证”是什么,那么即使在“阅读”零知识证明之后你也不会知道他是什么,并且你也不会了解到为什么 zkSNARKs 只适用于特定的多项式问题,如果真是这样的话,那么你就可以跳过本节了。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。