大家晚上好!
“零知识证明”技术在区块链领域经常被人谈起,但是很多人并不理解这项技术,只知道这项技术可以做很多很高级的事情,其实它并没有什么特别神秘的地方,今天重点来讲一下“零知识证明”。
1-同态加密-
在讲零知识证明之前,首先需要了解一个有些相关的概念——“同态加密”。
01原理
对经过加密的数据进行计算,得到的结果同样是加密的数据,将这一结果进行解密,其结果与用同一计算方法处理未加密的原始数据得到的计算结果是一样的,这就是同态加密。
02作用
同态加密不仅对原始数据进行了加密,还对数据处理过程进行了加密。这样就可以在外界不知道原有数据的情况下,让需要数据处理结果的人得到原始数据处理的结果。
03举例:什么是同态加密
举个实际的例子,更方便大家理解,比如有一个富商想找一个工人,把一块黄金加工成一件艺术品,但是在工人加工过程中,存在工人苛扣黄金的可能,比如将用剩的黄金残渣带走等行为。那么商人就用了一个方法,既能让工人将黄金加工成艺术品,又可以不让工人将黄金带走,这个方法就是创造一个盒子,将黄金放入其中,工人可以把手伸进盒子去加工黄金,但黄金没办法从盒子中取走。
在此过程中,盒子就相当于同态加密算法,工人加工的是加密过后的数据,但最终能将数据加工成最终想要的结果。
2-零知识证明-
01概念
验证者在不需要知道原始的数据的情况下,通过一些列步骤可以验证出由原始数据生成的结果是否正确,这就是零知识证明。
02作用
如果一个人想要向验证者证明一件事,但又不想把具体信息透漏给验证者,那么就可以通过零知识证明,经过一系列步骤让验证者相信这件事。
03举例:什么是零知识证明
1.如何证明谁知道1元3次方程根公式?
在几个世纪以前有两个数学家,他们都宣称得到一个计算1元3次方程根的公式。如何证明谁真正知道这个公式?方法就是由双方互相出30道1元3次方程,互相解答题目,如果一人全部答对而另一人没有,那么全部解出的人,公众就相信他是知道这个根的公式的。
在此过程中,实际上公众并不知道这个公式是什么,但是却能知道哪位数学家真正知道这个公式。这就是一个典型的零知识证明的例子。
零知识证明并不是非常严格的证明方法,它存在非常小的概率能够骗过验证者,让验证者相信一个错误的结果。一定要创造出一种技术手段,让这个概率下降到最低,接近于零,那么这个算法就成立了。比如上述的例子,让公众确信其中一人知道公式的证明方法,就是让他们将对方所出题目全部解决,这种欺骗的概率就是非常小的,因此这个零知识证明方法也就是可行的。
2.计算机密码学相关案例
(1)A如何在不向B出示钥匙的情况下证明其拥有钥匙?
假设一个房间只能用唯一一把钥匙打开,A拥有这把钥匙并要向B证明这件事,通过什么方法能证明呢?最直接的方法就是A将钥匙交给B,由B将房间打开,但这样的坏处是B将知道钥匙的样子,可以复制钥匙成为同样能打开房间的人,显然A不希望这样做。那么A就需要使用别的方法来让B信任他。
这种方法就是让B首先确认房间内的一件事,比如一本书的名字而且书名只有B知道,而后由A使用钥匙进入房间,找到书并记住书名,然后告知B,那么就能向B证明A确实拥有房间的钥匙了。
上述例子与区块链系统中经常用到的私钥有关,当一方不愿出示私钥给另一方,但又需要证明自己拥有私钥,就一定要用零知识证明这种方式。
(2)非对称加密案例
非对称加密算法中首先要生成一个公钥和一个私钥。假设A收到B广播的公钥,但A并没有见过B,而B见过A的照片,当有一天B见到A并认出A,那么A如何确认B就是B,B如何向A证明他就是B呢?
第一种方法就是B将私钥交给A,A使用公钥先将一段数据加密,再使用B给的私钥解密,如果能够正确的解开,那么就能证明B拥有私钥,也就证明了B的身份(排除私钥丢失的情况),但这样的方法并不好。
第二种方法是A使用自己的方法(B不知情)产生一个随机数,而后用B的公钥去加密,将加密后的数据交给B,让其使用他的私钥去解密这个加密后的数据,将所得数据再交还给A,如果这个数据与A产生的随机数相同,那么就能确定B是拥有私钥的人,也就确认了B的身份。
这是计算机系统中经常会用到的一种零知识证明的方式,即用另外一件事的结果来证明与其相关的一件事是确定无疑的,而完成另外一件事的一系列步骤就是一个零知识证明的算法。
3-零知识证明应用 Zcash-
零知识证明最早应用在Zcash项目的“零币”中。
在比特币这类加密货币交易中,是从某一个地址输出一部分金额,然后到另外一个地址输入一部分金额,用这样的方式来表示转账交易的。但这样的方式是能够看到地址及交易金额的,缺乏一定的匿名性。Zcash项目的零币创建了一种真正匿名的交易方法,让交易发送者、接收者和交易数额是保密的。那么矿工如何验证交易信息呢?
方法如下:
在零币中,是将某一个账户地址中转出金额和某一账户地址接收金额的数据整体加密,生成加密的字符串,所有矿工看到数据实际上就是一系列加密后的字符串,暂称之为支票编号,其中做转出交易的编号要放到作废交易列表(证明某账户减少零币是发生过的)中,矿工所要维护的也就是这些支票编号数据和作废交易编号的列表。
这样矿工就不需要知道交易的具体地址和金额是什么,但是整个系统仍然能确信这些特定金额的交易是真实发生过的,不会出现双花。这就是零知识证明在ZCash中使用原理。
4-零知识证明 zk-SNARK-
零知识证明经过一系列的改进,目前比较受认可的算法是zk-SNARK。这个算法目前被应用到了以太坊大都会分叉中,旨在为以太坊交易增加匿名性。
zk-SNARK算法的原理同样基于零知识证明,但更复杂,在数学上更严谨。它使用了类似同态加密的算法,即在进行任何计算之前,先用一种加密算法把原始要素进行加密,加密过后的数据仍然可以进行加减乘除,也就是说这种算法是在算术运算下是同态的,计算这些加密过的数据并且得到一个结果,而这个结果用同样的加密算法中的参数可以进行解密还原,即还原为原始数据计算应该得到的结果,这样验证者就不需要知道真实的原始数据是什么,仍然能确定计算结果是否正确。
这个算法中的关键信息是用来做加密的两个参数,如果被其他人知道了这两个参数,那么整个的零知识证明体系就被破解了。所以在已有的零知识证明系统中,通常会采用一些方法来保护这个属于系统管理员级别的参数,通常的做法就是将参数数据加密后分散处理,使密钥分段掌握在多个人手中,如果需要知道参数,必须将多个人手中的密钥凑齐,成为完整的密钥,才可以查看或者修改这些参数,从而降低风险。
5-结语-
零知识证明实质是让用户不需要公开关键数据,而是用其他方法来证明其确实拥有这些数据的技术,这就是零知识证明的本质特征。
今天的课就讲到这里。谢谢大家!
彩蛋
1、转发文章到朋友圈,送50平台积分(不许设置权限、删除,截图发群秘,未进群的小伙伴请先加群秘入群)
2、本篇文章内留言,超过50个赞,送500平台积分(留言限高质量提问、精彩观点分享、参考资料推荐)
以上两项活动时间截止本周四20:00。
3、Q&A、大神考核环节:
小伙伴可在授课公众号文章内留言提问。
DRC精选问题,周五晚8点直播解惑,并开展线上互动Q&A,随后将迎来大神考核,根据课程内容出三道题,每个社区群全部答对的最快的前三名小伙伴将平分600平台积分。
往期精彩回顾:
网友评论