http://www.7klian.com

浅谈零常识证明:配景与发源

零常识证明(zkSNARK)
 CoinJoin
在讲这个话题之前,我想把思路变一变,把这个话题拆分成两个部门:零常识(zk)和证明(SNARK)。
我们想要证明数字之间的干系,好比0 <= a <= 2^256,可能SHA256(x) = y。可是我们又不想袒暴露这几个数字来,好比说前文的a和x。如何构建一套系统来实现这点呢?
留下悬念,后头再讲。
 

在提交了Pederson理睬和区间证明之外,我们特别再提供一个证明,证明生意业务输入的数字和本来的世界态里A的余额是相符的。我们可以用Merkle Proof来实现这个证明。
匿名(Anonymous) 与化名(Pseudonymous)
回到这个当局审计数据库的观念上,我们可以假设这个数据库是公司的纳税环境。当局必然要确定纳税的数据必然要精确无误,可是对付企业来说,他们并不想让审查员看到他们天天的业务流水,因为也许涉及贸易机要。这个时候区区一个SNARK就不足了,我们需要zkSNARK才气够实现:
比拟特币相识的伴侣们大概会知道,在建设一个比特币生意业务的时候,是需要提供输入生意业务的UTXO Txid的,这样可以快速的验证,筹备付款给B的A是不是真的有这笔钱。

假如A要付给B一笔钱,那么A就会拿着大喇叭向全网发布,她要建设一笔新的生意业务(Tx),而且这个生意业务的受益人是B的公钥(P2PK),可能是公钥的哈希值(P2PKH)。B只要看到了这笔生意业务,就可以用本身的私钥签署一份数字签名,证明本身真的是这个公钥的主人,从而花掉这笔钱。
篇幅原因,这次就写到这儿。想必看到这里,各人对为什么需要零常识证明,和零常识证明到底有多强大,有了一个越发深入的相识。
我们顿时可以想到一个应用:假如某个第三方机构存了大量(PB级别)的数据在本身的数据库里。如果当局机构思要去审计他们的数据库,确保每个数据点都没有问题,正常环境下大概得一行一行的看,把每个PB的数据都看完,看到天荒地老。这个时候溘然SNARK横空出世,通过O(1)可能O(logN)的巨细和时间就充实的证明白这个复杂的数据库里每个数据都没有任何问题,想想都有点感动。一般人以为这是完全不行能的:怎么可以凭借几个数字就验证了几千万个数字的精确性呢?

团结上文提到的加法同态,假如我们有一个加法同态的加密要领E,我们就可以把这笔生意业务转化成:

其实零常识只是在这个SNARK证明的基本上又特别多了一个要求:整个证明自己不能袒露任何干于要证明的答案有关的数据。零常识这个观念的官方界说又长短常艰涩难解的,引入了一个模仿器(Simulator)的观念。具体的先容照旧可以去参考郭宇老师的文章,我这儿就一笔带过了。一句话总结就是:一个再智慧的黑客,怎么瞅着零常识的证明,都没法提取出任何和谜底自己有关的信息来。

我们可以假设有一个加密要领E,假如E是加法同态的话,那么E(a) + E(b) = E(a+b)。反之假如乘法同态的话,那么E(a) x E(b) = E(a x b)。
SNARK的全称是Succinct Non-interactive ARgument of Knowledge。这个名词由三个维度构成:
既然A给B付钱会被人看到,C给D付钱也会被人看到,有人就想到了说那索性把ABCD这四小我私家全部扔到一笔生意业务内里去。因为比特币的生意业务可以多个输入输出,所以一个傍观者会看到一个生意业务里,aaaaa和ccccc都往内里打了x个币,然后bbbbb和ddddd收款。这样一来,就算生意业务所得知了这几个地点别离对应ABCD四人,也很难判别到底谁收了谁的钱。

第一种是匿名(Anonymous),意思是用户不消透露任何和本身相关的信息,比如是学校的批注墙,你永远无法知道到底是谁写了上去,横竖字就是写在了上面。

未完待续
假如用上文的分类来看的话,CoinJoin只是比特币现有系统的一个骚操纵,它的本质仍然是化名机制。
读到这里,有些伴侣就会发明一个天大的裂痕:固然Pederson理睬证明白数字之间的干系,可是并没有限制任何数字的取值区间!那也就说,A就可以使坏,提交一笔生意业务,说本身要付-100个币给B,然后“找”给本身200个币,这样一来一去,等式照旧创立的。A就可以借此无限印钞,从而摧毁整个系统。

可是假如我们直接提交了Merkle Proof,所有傍观者都能看到A的生意业务输入了,那又违反了私密生意业务的前提。所以再次点题:我们照旧需要借用上文提到的神秘的算法——既可以埋没住答案自己(A的余额),但又可以证明这个数字真的属于世界态傍边。

我们再回归到零常识(zero knowledge)上来。
我们可以通过一种非凡生意业务,把普通的币转换成私密的输出。这种生意业务的输入是一个存在的生意业务id(比特币UTXO),然后输出就酿成了隐私的输出。这样我们就变出了最早的蛋来。(ZCash的shielded transaction就是这个道理)
有了zkSNARK之后,我们可以做什么呢?
可是此刻,至始至终我们都没有提及任何干于指向前一笔生意业务的内容。也就是说,因为全网不知道A花了几多钱,所以A纯粹就可以把input的数字改的异想天开,改成几千几万,然后再全部打给本身,给本身偷偷铸币。
第二件事,我们可以用这个技能来更好的办理区块链效率的问题。此刻今朝区块链Scaling的要领无疑是几种:牺牲共鸣强度增加出块速度,启用侧链,可能雷同于Lightning一样的线下点对点通道。

读完了媒介之后,我们就可以开始正文了。

要说零常识证明真正火热的呈此刻各人的视野里,其实还要从比特币开始说起。
Pederson Commitment (Pederson理睬)
相信看完上文,各人已经对我们想要办理的问题或许有所领略了。
增加隐秘性的要领
这两天考完期末测验,温习的进程中在脑海中再三回味整堂课,以为最出色的部门照旧零常识证明。想着最近趁着假期总结一下,分享给各人。
CoinJoin的漏洞是什么?其实殽杂多笔生意业务并不能完美的杜绝被人顺藤摸瓜,只能说在概率上减低了被一路摸上来的几率。并且尚有一个很重要的一点,假如要殽杂AB与CD的生意业务,那么他们的生意业务量必然要沟通。假如A付给B一万个币,C付给D一个币,我们只需要看输入和输出,就可以顿时把一笔CoinJoin生意业务拆散成两个独立的生意业务。所以混搭相似生意业务额度的生意业务,也是CoinJoin在实现的时候一个不容忽视的难点。

本文作者东泽,来自安比技能社区的小同伴,今朝就读于斯坦福大学,研究偏向暗码学,本系列文章来历于作者在斯坦福著名的课程《CS 251: Cryptocurrencies and blockchain technologies》上的进修条记,该课程讲课老师是暗码学大拿 Dan Boneh。
ZCash是基于ZeroCoin/ZeroCash协议实现的一个数字钱币,可以到达全匿名生意业务。过多的先容我在这就不论述了,不外依旧就是依靠着老几样暗码学的东西:Pederson理睬,区间证明,Merkle证明,尚有我们一直在提的黑邪术:不会袒露谜底自己的证明。
2. 的生意业务: https://blog.csdn.net/liduanwh/article/details/81141972
继承回到埋没生意业务量的话题。假如A有100个币的余额,付10个币给B,那么这笔生意业务或许长这样:

zkSNARK恰恰可以担保数据自己不会有问题。我们可以构思出一个漫衍式银行,每小我私家的存款余额都存在本身的电脑内里。当A想转账给B的时候,她需要向全网提交一个证明她账上余额正确扣款的zkSNARK,这样就确保了A厚道的把转账金额从本身的余额里扣除了。B进帐的时候也会对应提交一个余额增加的zkSNARK。
既然埋没我是谁那么贫苦,那么人们就开始动脑思考:假如不埋没参加生意业务的公钥,我们还可以埋没生意业务的额度。A给B打钱的时候,就算B被袒露了,全网也不会得知A毕竟给了B几多钱。

比特币的不敷

我们对付如何加强比特币的保密性,可以从这两种要领来接头。
 Confidential Transaction(私密生意业务/CT)
 
写完第一稿之后,分享给伴侣Proofread的时候,发明许多伴侣反馈到说,配景常识不太够。所以我在开始之前特别添加了这一章节,标注了一下为了能读懂这篇文章所需的配景阅读:
在我们继承深入研究之前,我想快速的指出一下,其实这个协议此刻尚有个天大的裂痕:所有权不明。
想要详细实现的要领,我们先要相识一种非凡的加密算法:同态加密。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。