区块链与零知识证明

零知识证明:

零知识证明(Zero Knowledge Proof),是这样的一个过程,证明者在不向验证者提供任何额外信息的前提下,使验证者相信某个论断(Statement)是正确的。
证明过程包括交互式(Interactive)非交互式(Non-interactive 两种。
(零知识证明:零知识,即在证明的过程中不透露任何内情。通俗的来讲,就是既证明了自己想证明的事情,同时透露给验证者的信息为“零”。)

交互式
零知识证明协议的基础是交互式的。它要求验证者不断对证明者所拥有的“知识”进行一系列提问。证明者通过回答一系列问题,让验证者相信证明者的确知道这些“知识”。然而,这种简单的方法并不能使人相信证明者和验证者都是真实的,两者可以提前串通,以便证明者可以在不知道答案的情况下依然通过验证。

非交互式
非交互式零知识证明不需要交互过程,避免了串通的可能性,但是可能需要额外的机器和程序来确定实验的顺序。


为什么区块链要用到零知识证明?

  • 个人的身份与很多信息进行了关联,你的手机号,身份证号,银行卡号等等都绑定在一起,只要知道你的手机号,就可以通过关联信息获取到你的姓名,出生年月等等信息。

  • 在区块链的世界中,用地址来表示交易双方,这样达到了匿名的作用。然而,链上的信息虽然是匿名的,但是通过链上信息绑定的链下信息,像很多交易所都绑定了链上地址与链下的银行账户、支付宝,使得可以很方便的追溯真实世界的交易双方,使得匿名性荡然无存。

  • 零知识证明能够在隐藏发送方、接受方以及交易金额等其他细节的情况下,保证交易有效


零知识证明如何保证区块链中交易的匿名性?

目前ZCASH(大零币)使用零知识机制来证明交易有效,其零知识方法为:zk-SNARK是“zero knowledge Succinct Non-interactive ARgument of Knowledge”的缩写。ZCASH可以将交易纪录上的交易双方和金额都加密隐藏起来,因此矿工无从得知这些交易上的细节,但仍然可以验证交易。
**1、 zero knowledge:**零知识,即在证明的过程中不透露任何内情,如上文的例子所示。
**2、 succinct:**简洁的,主要是指验证过程不涉及大量数据传输以及验证算法简单。
**3、 non-interactive:**无交互。
**4、 ARguments:**验证者只对计算能力有限的证明者有效。拥有足够计算能力的证明者可以伪造证明。这也叫“计算可靠性"(相对的还有”完美可靠性")。
**5、 of Knowledge:**对于证明者来说在不知道证据(Witness,比如一个哈希函数的输入或者一个确定 Merkle-tree 节点的路径)的情况下,构造出一组参数和证明是不可能的。

零知识证明大体由四部分组成:

  • 多项式问题的转化 - 需要证明的问题转化为多项式问题 t(x)h(x) = w(x)v(x),证明者提交证明让验证者确认多项式成立。

  • 随机挑选验证 - 随机选择验证的数值s,验证t(s)h(s) = w(s)v(s)。相对于验证多项式相等t(x)h(x) =w(x)v(x),随机挑选验证,简单,验证数据少。随机挑选验证,安全性肯定不及多项式等式验证,但如果确实足够随机,安全性还是相当高的。

  • 同态隐藏 -同态隐藏指的是函数的一种特性。输入的计算和输出的计算保持“同态”。以加法同态为例,满足如下的三个条件的函数E(x),称为加法同态:

1.给定 E(x),很难推导出x.
2.不同的输入,对应不同输出
3. E(x+y) 可以由 E(x),E(y)计算出来。乘法同态类似。

  • 零知识 - 证明者和验证者之间除了“问题证明与否”知识外,不知道其他任何知识(不知道随机挑选值,不知道挑选值的多项式计算结果等等)。

在ZCASH中,摒弃了之前的UTXO方式,而是使用了一种基于UTXO,被称为NOTE(支票)的新方式代替。NOTE代表了当前账户对资产的支配权,与UTXO不同,账户余额的存储方式不再是“未消费的交易输出”,而是“未被作废的支票(NOTE)”;一个NOTE是由所有者公钥PK、所拥有金额V、和唯一区分支票的序列号r组成,表示为NOTE=(PK, v, r)。

Cash交易分为两类:透明地址交易隐藏地址交易

透明地址交易的输入、输出直接是可见的NOTE信息;隐藏地址交易,输入和/或输出的地址和金额是隐藏的。

在ZCASH的隐藏地址交易中,交易的输入输出不再是明文的NOTE,而是NOTE的签发废弃通知
在这里插入图片描述
左侧代表的是“签发的新的NOTE”,右侧代表的是“作废的NOTE”。每次进行转账,就会把转账方的NOTE放到作废列表里,代表此NOTE已经作废,同时为收款方创建一张等额的NOTE。这样就实现了“资产的转移”,并且由于都是记录的NOTE的哈希值,因此并不知道被废弃的和新签发的NOTE的内容,这样就做到了隐藏交易双方及交易细节。

矿工怎么能够确认这些匿名交易是真实有效的呢?(运用零知识证明的部分)

  • 其实,在矿工确认交易时,转账方会提供一个证明P,能够证明:转账方通过私钥SK、公钥PK、支票序列号r计算后的哈希值与在签发列表中存在的哈希值一致,这足以证明转账方的NOTE存在。这样既没有泄露转账方的信息,又证明了NOTE存在(类似上文提到的用户注册的例子)。

  • 矿工确认NOTE存在后,就会在作废列表中查询,如果没有此笔NOTE的作废记录,则证明转账方NOTE有效 (防止双花)。然后再在作废列表中,把当前NOTE的序列号哈希计算后的值记录在作废列表中,表明此笔NOTE已经 作废,同时为收款方签发新的NOTE。

发布了81 篇原创文章 · 获赞 25 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_43090158/article/details/104043040