菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
59
0

《零知识证明在区块链上的应用》

原创
05/13 14:22
阅读数 1066

2019年11月26日,同济创业谷与 PPIO CodeTalks 联合举办了《创新X - 区块链与创新创业》区块链技术分享会。在本次分享会中,我们有幸邀请到了四位重量级嘉宾来做主题分享。

在本期文章中,我们先向大家介绍由路印协议CTO,UVA基金合伙人 ,郭雄辉老师的主题分享——《零知识证明在区块链上的应用》(原文稿有修改)

嘉宾简介:

郭雄辉老师15岁时考入中国科学技术大学少年班,2005年,他取得中科大计算机软件与技术博士学位,并在Intel开始了他的职业生涯,担任高级软件研发工程师。

在接下来的几年里,他一直致力于安卓 ROM 的开发和定制工作,并且成为真正的安卓专家。2015年,在他第一家创业公司——帛茂信息科技有限公司被收购之后,郭雄辉加入了在纽交所上市的猎豹移动,并担任高级研发总监。在猎豹移动内部,他还推动了 contento 项目的立项工作。目前是路印协议CTO,UVA基金合伙人。

以下是郭老师的分享实录:

“ 其实区块链的一个最重要的应用方向就是数据上链,保证数据公开透明,不可篡改。但是还有一个问题也要解决,就是数据上完链之后,其实有些隐私数据是不能公开的,至少是不能对所有人公开。比如你上市公司的很多的机密的合同,这种必须是私密的,但是同时也要上链,这怎么办?

如何做到链上数据的隐私保护,就需要用到我接下来介绍的这门技术—零知识证明。

我想大概问一下在座的同学,有多少人听过这个零知识证明,可以稍微举一下手。当我在朋友圈里面说我要做一次零知识证明的分享后,竟然有人跑过来问我说零知识是不是就是零基础也能听?我就说这是偏技术的,零知识不是零基础,零知识证明其实还是要会涉及很多大量的我们在大学时代学过的数学的基础,实话实说,大家要有一定的经验才能做这件事情。
1.jpg
今天晚上我大概会介绍2块,第1块是零知识证明技术的一个简单的概要,我尽量让大家能听懂明白,不涉及这种公式的推导。然后第2个是我总结了目前在区块链里,零知识证明技术在区块链中行业的应用方向。

1 零知识证明技术概要

我们先来看第1块,零知识证明技术的概要。这张图大家一看应该能明白,为什么说零知识证明是零知识?
2.jpg
比如说我想证明,我知道一个函数的 input 的是X,那么这个函数的 output 就等于 Y,但是我不能告诉你X是多少,这叫零知识。但是,我同时又要让你相信,我知道这样的一个 X 能算出 Y,这就叫零知识证明。

所以说这就是一个简单的函数变换,这个函数大家可能没什么感觉,我们来举两个具体的例子。

零知识证明系统他会有几个特性:第一个我给出一个证明,那么“真的证明是假不了”,我这个证明一定是任何人都可以验证它一定为真;另外一个是“假的真不了”,就是我给出一个假的证明,一定是过不了那套证明系统,大家一定可以知道他是假的;第三个特征就是证明过程不泄露任何知识,就是前面举过的不泄露X值。
3.jpg
1.1 阿里巴巴与四十大盗

我们来看两个具体的例子,第1个就是举一个阿里巴巴和40大盗的问题。

阿里巴巴知道如何通过某个门的密码,但是他又不能告诉大盗,同时又让大盗们相信他有这个密码,他能过这个门,这怎么办呢?

阿里巴巴知道一个密码能过这个门,但是阿里巴巴不能告诉大盗密码。很简单,我们转换一个思路,这个山洞是一个环形,大盗只要让阿里巴巴随机地从左边或右边进入山洞,如果阿里巴巴能从另外一边再出现,大盗就可以确定阿里巴巴知道密码,并且阿里巴巴向大盗证明的过程中并没有泄露密码。这个就是一个很典型的零知识证明对吧?阿里巴巴没给出任何的密码,但是大盗知道阿里巴巴有这个密码。

1.2 寻找沃尔多

第2个,是小朋友很爱读的一本书,叫寻找沃尔多。

这个例子其实就是从一张很大的图中将沃尔多这个人物找出来,在这张图上,我不能告诉你这个人物的具体位置在哪,但是我要让你相信我能找出这个位置,那么如何应用零知识证明来解决这个问题?

大家想一想,我不能告诉你这个人的位置在哪,但是我要让你相信,我知道这个人的位置在哪?这不就又是一种另外的零知识证明。OK这个问题怎么来做?其实很简单的办法,用一块黑布,然后黑布上,抠出这个人的形状,然后我用黑布把原始的画面再给盖起来,只让你看到那个人,那不就行了。我能找出人在哪,然后你又不知道在哪,你又不知道真实的地方在哪,这就是零知识证明。我知道一个秘密,但是我不会告诉你,但是你能知道我知道它的魅力所在。

1.3 零知识证明框架结构

通过前面两个具体的例子,其实你会发现,我们都要先把问题做一个简单的变换,我一定要从原始的问题抽象出另外一个问题,然后在另外的问题上给出证明,你就能相信我在原问题上也能知道答案,这就是它的核心思想。抽象成这张图,大家看这张图,

总体来说,一个零知识证明的框架会分为四大块,就4个步骤:

第1个,大家要把问题抽象出来,通常抽象问题我们会表达成一个算数电路,或者理解成一段程序,一段运算,我们叫生成电路。有了这个电路表达之后,我们再构造一个约束系统,这套约束系统其实现在有好几个,最常用的是R1CS约束系统,有了这套约束系统之后,我们就把这个问题转化成多项式可满足的一个问题,叫QAP问题。

后面我都会跳过这些细节的介绍,我对其中的流程做一个大概的介绍。我先把一个具体的计算问题转化成多项式是能满足的一个问题。最后再在这个多项式满足的问题上再去构造这种零知识证明的算法,然后生成一个证明,在多项式满足问题上构造零知识证明算法可以有多种技术实现,现在只介绍其中一个实现叫zk-snark。

1.4 计算到证明

假设我是要去算这个函数X^3+X+5,把其表达成加和乘的电路很简单,就是先X平方再乘X就表达了一个X三次方,然后再加一个X再加5。这样一个电路就表达了这个方程式。

有了这个电路之后,我要用一种约束系统来表达电路,

由电路表达之后生成一个约束系统,约束系统之后再到一个QAP的问题的归结,然后QAP 问题得到之后,再用零知识证明的各种算法、各种体系去给出生成最终的证明。

这就是整个零知识证明的一套框架系统。

2.路印协议3.0

目前我们正在开发的路印协议的3.0版本是尝试将零知识证明落地的应用场景之一。

其实路印协议是17年发起的一个项目,前后做了两版分别是1.0与2.0,当时发现交易速度实在太慢了,在以太坊上每秒最多2~3笔的交易,这样的性能是很难被实际使用的。

如何去解决这个问题,去年开始我们就在考虑是不是能把零知识证明技术用到我们协议当中。

2.1 ZK Rollup

我只要利用零知识证明来证明我们如实撮合交易了,路印3.0核心的设计思想就在这张图上体现了。

我们把这个技术叫ZKrollup。

大家看图中的每个节点,表示一个account就是我一个账号有多少钱,我有一批账号,然后所有的账号构成一个默克尔树,用root就能代表当前所有的账号世界状态,我只要有一个根的root哈希,我就能代表着所有的账号状态,我只需要证明每一步状态的更改都是在更改这个默克尔树,比如说我交易A跟B:

我只要能证明 A 减 B 加同样的余额,你就能相信,我的确是如实的做了一笔撮合交易。

所以说你看其实我们这里面就会涉及一个智能合约,智能合约会存储每一个世界状态的root哈希,然后同时我们有个中继模块,会去收集每个人发出的每笔交易,我们叫tx。收集到之后,我们就能对这一批交易构造零知识证明。其实我们要证明的事情就是这个世界状态的转换,就是由前面链上已确认过的一个状态,经过这么多笔交易之后,会到达另外一个世界状态。我只要如实的证明这件事情,你就知道所有的的动作都是可验证的。

为什么之前的TPS很慢,是因为你所有的动作都要在链上发生。

基于ZKRollup这样的一个设计之上,我们做了一些改进:第1个改进是我们把默克尔树给分层了,在我们的体系上分为三层。比如说如果是一个充值交易,我只需要改balance层就行了。如果我是一笔交易类型的,我就得先改 trade 层,然后再改balance,再改 account,再改默克尔 root。这样的分层操作,能极大的减少电路的生成 size。

2.2 Quad-Merkle Tree With Poseidon Hash

第2个我们的改动点是在哪?通常的默克尔树都是二叉树,只有两个左右节点,然后算一个哈希值,我们的做法是改成四叉树,然后同时采用 Poseidon 哈希,这样你会发现生成证明的时间极大的降低了。

然后整个这样的一套 solution 完成之后,我们就能从原来的两笔交易每秒提高到目前的1400笔。这就是零知识证明能应用的一个方向,我们把它叫扩容。

我大概就讲这么多,如果大家对路印协议感兴趣,我们都是 open source 的,大家都可以去学习,因为区块链必然是拥抱开源精神。然后也欢迎大家跟我联系。

3. 问答环节

同学问:

“如果说有4个 account,其中 account1 与 account2 发生交易,同时 account2 也与 account3 发生交易,那么就作出了两次状态改变,我们怎么去证明这两笔交易是被正确执行的?”

郭老师答:

“谢谢。你问的这个问题挺好的一个问题。其实这就涉及一个点,你提到的交易我们叫Tx。每一笔交易其实是有顺序的,比如说我们已经假定这样的一个顺序,你的整个的世界状态的转变就已经决定了,你递交到链上数据的先后顺序,就决定了你的交易的顺序。明白这件事情吗?因为所有的这种Tx的数据都到要链上,你把数据放到链上面的过程就已经做了个排序。”


想了解更多有关 PPIO 的信息,可以移步官网:pp.io

发表评论

0/200
59 点赞
0 评论
收藏
为你推荐 换一批