美文网首页区块链研习社区块链大学区块链
同态加密与零知识证明 张治谈区块链第二十讲问答 | DRC学院

同态加密与零知识证明 张治谈区块链第二十讲问答 | DRC学院

作者: 55e841da187d | 来源:发表于2018-11-18 21:53 被阅读0次

昨晚8点,大治如期给大家解答了关于同态加密和零知识证明方面的问题,并发布新一期考题。

本期测试六班学委尘突围成功,将获得DRC平台积分奖励!祝贺!

以下为问答整理(后附大神考核,新进的小伙伴们可自测哦~):

1社区成员:能详细说明一下零知识算法的具体过程吗?或者参考资料也可以。

张治:具体过程,在之前的讲解中已经举了很多例子。下面以Zcash为例,它的零知识证明的过程如下:

发起转账交易的一方A会把自己的账户地址减少一定量零币的数据记录重新加密成一个hash串,我们把这个hash串称为转出支票编号,而作为交易记录的另一半,接收零币的一方B的账户地址会增加一定量的零币,这个数据记录也被重新加密成一个hash串,我们把它称为转入支票编号。

当A发起一个转账交易后,实际上广播出去的数据就是A的一个转出支票编号和B的一个转入支票编号,矿工并不知道这两个支票编号到底代表什么意义,但是Zcash系统一开始就给矿工们准备了一个“废弃支票编号列表”,同时,凡是转出支票的编号,会附加表明这是“转出类型”的支票编号的数据,矿工是可以把转出和转入支票编号区分开的,那么矿工拿到一个转出支票编号时,就会去“废弃支票编号列表”里查询,如果发现这个支票编号已经在这个列表,那就表示这个支票已经被废弃过了,那么就不用再登记到废弃列表里了,如果不在列表里,那么就会把这个编号记录在列表里,方便下次查询对比,这样一笔同样的转出交易只能被记录一次。

所以矿工就通过这种方法记录了客户端提交的各个转账交易,也就是一个“废弃支票编号列表”,一个“当前支票编号列表”,这些编号就代表了真实发生的交易,但是矿工不知道具体交易的数据和内容,但这个账本是有效的。

至于如何防止双花等等,会通过其他手段来做到,而零知识证明只用来满足记账的匿名化的需求。同时,由于加密hash值的唯一性,A不可能通过同样的编号来表达不同的交易数据,所以账本上的数据是不会错的,任何人如果修改了编号数据,就相当于篡改了账本上记录的数据,同时也篡改了实际代表的交易数据,会被其他验证矿工和发起交易的人发现。所以这种方法完全可以代替比特币的转账记录模型。

大家有兴趣的话可以参考下面几篇文章:

https://zhuanlan.zhihu.com/p/24440530

https://www.jianshu.com/p/b6a14c472cc1

https://www.roboticschina.com/news/2264.html

后两篇是介绍zk-SNARK的,喜欢钻研技术的同学可以细看。

2社区成员:关于同态加密的例子,是不是也可以这样理解:商人把黄金放在盒子里,目的主要是让工人看不到盒子里的东西,工人不知道里面是什么,只是用既定的工艺将之加工成工艺品。这样工人加工的就是加密后的东西,而商人究竟拥有什么,工人最终还是不清楚。也就是说,在记账系统里多加了一道工序,让记账人和其他查阅数据的人不能直接看到数据?

张治:对的,这个例子当中,盒子是黑盒,工人按照一定的工序在看不见真实的东西的情况下,仍然可以把原始的东西加工成工艺品,最后只有持有钥匙(盒子是加密算法,钥匙就是解密的私钥)的人才可以打开盒子看到加工后的工艺品。

而这个盒子(也就是加密算法)好就好在它可以让工人在看不见的情况下也能进行同样的加工公序,换句话说就是加密过的数据也一样能进行计算,并且对加密数据进行计算就相当于对原始数据进行了计算。

所谓的“同态”就是无论是否加密,都可以进行同样的计算,并得到同样的计算结果。

“同态加密”和零知识证明非常相似的地方就是不让进行计算(验证)的人看到原始数据,但是同态加密的目的是为了让数据可以在加密状态下进行计算,是一种安全计算手段,而零知识证明是为了让验证人在不知道原始数据的情况下仍然能够验证原始数据计算的结果是正确的,是为了记录的账务更隐匿,两者的目的不同。

另外,零知识证明也不一定要用同态加密的方法来实现。我们已经举了很多零知识证明的例子,大部分都不是同态加密。

3社区成员:零知识证明的意义是什么?

张治:零知识证明就是为了让分布式账本里记录的内容,特别是交易数据更加隐私,除了交易者之外,其他人无法知道实际交易的信息。

这是一个隐私保护的课题,当然也是个有争议的话题,比如不利于监管。实际上零知识证明最初的目的就是为了去监管。如果我们所有在网络上记录的数据都可以做到采用零知识证明来验证的话,那就相当于所有人的隐私数据都是外人无法得知的,只有自己和与自己的数据有关联的人才能知道。

而零知识证明的方法的意义在于,它可以通过一件相关的事情的结果来证明另一件事情的结果,这实际上是数学上的因果关系必然性的延申,设计精巧的零知识证明方法一定也是一个非常精巧的数学算法。

4社区成员:同态加密包括所有加密算法是不是都可以破解?只是破解时间和成本的问题?

张治:应该说算力足够强大的话,确实大多数加密算法最终都能破解,也就是用穷举法来暴力推测出实际上用来加密使用的参数。

不过即使是算力非常强大的量子计算机,实际上现在也已经研究出了能够抗量子计算的加密算法,比如基于“格”的加密算法。

数学上把计算难题归为几种类别,一类是P问题,也就是能在多项式的计算复杂度级别上解决的问题,这类问题用暴力破解的方法一定是可以破解的,但是P问题复杂度级别往上还有NP,NP-hard,NP-complete,PSPACE问题,这些问题其实是确定是否可计算的问题,所以这类问题不一定是量子计算都能破解的,目前并无定论。

5社区成员:除了zk-SNARK算法之外,其他零知识证明算法有没有关键参数?

张治:有的,这要看实际设计的零知识证明的算法是否要用参数来对原始数据进行处理,一般来说,设计精巧的数学算法是一定会有一些系统级别的参数,所以如何保护这些参数不外泄也是设计零知识证明算法的一个关键。

6社区成员:零知识证明是不是也要考虑监管政策?比如在美国是直接对个人资产进行穿透的,应该不可能允许使用这种技术的,除非关键参数掌握在监管机构手中。国内虽然是分业监管,但是应该也是不能容忍在无监管的情况下应用这种技术的吧?

张治:对,这方面确实有争议,一方面是公众希望隐私保护越强越好,一方面监管的力度还不能放松,因为经济上的违法犯罪活动还很猖獗,匿名性、隐藏交易数据等对于洗钱等犯罪行为是一个天然的保护措施。

目前业界也一直在探讨如何在隐私和监管这两方面取得平衡的问题,用联盟链不失为一种好方法。但是公链领域要想既做到强隐私保护,又可以穿透式监管,目前还没有特别好的方案,原因是公链是面向全球的,世界上每个国家的监管需求是不一样的,公链无法同时满足所有国家的监管要求,同时还能保护数据的隐私。必须要有一种统一的监管标准才好开发。

附:

大治考题

1. 关于同态加密,正确的说法有哪些?

a. 同态加密的意思就是要加密的数据在同一种状态下加密,比如都处于锁定状态下加密。

b. 同态加密是指不仅数据本身加密,而且加密过后的数据仍然可以进行没有加密前的同样的计算或者操作,虽然外界看不到真实数据在进行计算,但是仍然可以确信在对加密数据进行计算的同时,真实数据也进行了正确的计算过程。

c. 同态加密处理过的数据在进行计算后,可以通过用加密秘钥解密来得到原始数据计算得到的结果,而且可以确信这个结果是正确的。

d. 同态加密算法的性能很高,可以很方便的在实际当中运用。

(答案:b、c)

 

2. 关于零知识证明的原理,下列哪些说法是错误的:

a. A不确定B是否拥有某个房间的钥匙,她要求B去这个房间取回房间内的一本书,如果B能取回,说明B有这个房间的钥匙。假设这个房间只有通过钥匙这一种方法才能进入的话,那么A使用的就是零知识证明的方法。

b. 零知识证明算法是确定性的,可以严格的证明其正确性。

c. 零知识证明其实只是一种类型的方法或者手段的统称,具体要怎么做,则要根据所要证明的目标制定相应的证明算法或步骤。

d. 零知识证明的方法用在数字加密货币领域,主要是为了增加支付交易的匿名性。

e. 零知识证明会增加系统的的不确定性,让外界无法知道该系统是否正常运行。

(答案:b、e)

3. 关于zk-SNARK这个零知识证明的算法,下列解释哪些是正确的?

a. zk-SNARK利用类似同态加密的思想,在对原始数据进行计算之前,先对原始数据进行一番处理,使得外界无法获得原始数据,但仍然可以对处理后的数据进行算术运算,而得到正确的计算结果。也就是说这个处理方法对于算术运算是同态的 。

b. zk-SNARK方法使验证人在不知道确切的原始数据的情况下,也能通过把处理过后的数据进行相同的计算所得的结果,与真实计算结果进行相同的处理过程所得到的数据进行校验的方法,来验证原始数据是否进行了正确的计算。

c. 可以简单举例来说就是,A进行了实际计算x+y = a,而希望B来验证这个结果,但是B不能知道是x+y,假设zk-SNARK提供的处理方法是E,则B进行的是E(x) + E(y) = b,如果处理方法E可以做到E(a) = E(x+y) = b的话,那么这个处理方法就是一个针对加法的合格的处理方法(即B不知道是哪两个数相加,但他确信x+y的结果一定是a)。当然实际当中zk-SNARK提供的算法比这个例子要复杂的多。

d. zk-SNARK的方法有几个重要的要求:第一,不能暴力破解,也就是说不能让验证者从要验证的结果反推出参与计算的原始数据。第二,处理数据的方法必须足够复杂,即不能从处理后的数据反推出原始数据是什么。只有满足这两点,zk-SNARK才能是一种实际可用的方法。

(答案:a、b、c、d)

更多区块链知识,请关注下期DRC学院【张治谈“区块链的诞生及运转”】系列课程,同时也非常欢迎社区的小伙伴们留言提问~DRC社区,一个精英互动学习的高端社区。

 本期彩蛋 

评论区说说你在听课之后的收获。

点赞超50个的小伙伴奖励500DRCT,分享到朋友圈也有50DRCT哦~

(分享截图加入DRC社群后发送群秘)

点击“阅读原文”回顾第二十讲~

相关文章

网友评论

  • 猜6:张老师您好!我看了一遍您所有关于零知识证明文章所列举的例子都是Zcash,其实Zcash已经不是最值得列举的例子了。昨天国内有一支叫SERO的技术团队公布了一组视频,证实所用的零知识证明技术Super-ZK已经比Zcash10月份最新发布的版本快20倍,而且SERO支持图灵完备的智能合约运行,DApp开发者可以在SERO CHAIN上发行自己的具有隐私保护的通证和票据,并进行流通。官网sero.cash

本文标题:同态加密与零知识证明 张治谈区块链第二十讲问答 | DRC学院

本文链接:https://www.haomeiwen.com/subject/yrhnfqtx.html