2019上海区块链国际周DEMO DAY:“zkPoD”零信任公平交换协议
2019年9月14日-9月18日,由万向区块链实验室举办的“2019上海区块链国际周”在上海举行。区块链国际周黑客马拉松、DEMO DAY、第五届区块链全球峰会,以及一系列项目方专场、技术研讨会、主题晚宴等活动。其中峰会将邀请世界范围内极具话语权的技术大咖、专家学者、技术代表以及其他行业的代表人物汇聚一堂,共同探讨当前区块链技术的热门议题。金色财经将全程参与2019上海区块链国际周,为您带来第一手资讯报道。
9月16日为区块链项目路演的DEMO DAY,包括bloXroute、CovenantSQL、Eagle Eye、KMS、PlatON、dRoute、Chainlink等在内的20个项目进行路演,虽然其中项目宣传的内容较多,但从中我们也可以了解到当前发展热点,以及区块链在各个行业和实体经济的真实价值的机会。
在DEMO DAY上,安比实验室创始人、CEO郭宇带来了主题演讲,以下是全部内容:
今天我给大家讲一下安比实验室在过去一年中做的工作,项目叫——“zkPoD”零信任公平交换协议。
首先介绍一下什么叫公平交换Fair Exchange,这是非常传统的学术界问题,研究了很多年。在google Scholar上输入Fair Exchange会看到这么多论文,要花68年才能看完所有的问题。
想解决什么问题呢?在网上做电子商务的时候能不能不依赖第三方做Two Party Fair Exchange,Seller是买家,会传递货物到Buyer这边,然后付前的一。双方能不能把过程做的透明,从而避免第三方引入带来的很多问题。论是Impossible,最早的一篇论文在1985年关于分布式协议就表示在Two Party情况下是做不到的。
谢谢大家!并没有结束。
在过去这么多年论文里大家很快地发现Two Party Exchange是不能做到的,所以250万篇论文都在讲怎么引入第三方来做。但第三方必须是绝对可信的,不能有问题。
第三方真的那么可信吗?首先肯定有Single Failure,可以作弊,历史上发生过很多恶劣故意签发虚假证书的情况,还有Personal Data Abuse以及个人信息泄漏,一周前Facebook有4.5亿个人信息泄漏的案件。
能不能有让我们信任的第三方呢?能够解决互联网中一直存在的问题,答案是Yes!
在2008年的时候中本聪给了很简单的解决方案——Bitcoin白皮书。Bitcoin其实给了方案,在B2B协议的时候可以模拟出像“小天使”一样的第三方真的可以信任他,相信在座很多人你们是拥有比特币的人,你们不用担心哪天比特币没了,可信度是很强的,好像有一个非常信任的人帮我们记录比特币是属于自己的。
但是对是Fair Exchange很古老的学术问题以及在现实世界中许多人试图做到两方进行可信交换的问题,能不能用Blockchain作为trustess third party呢?答案是Yes。
2014年有一个Paypub项目,这个项目沉寂了很多年。但是Paypub最大的问题并不是strong fair。过程必须要买卖双方绝对公平,谁都不能受到一点利益损失,只要有一点就很难在互联网上得到大规模的应用,卖商品的人可能放虚假的价格,接收方必须要先看一下数据有没有问题的情况下才愿意付钱,但如果他看了数据不付钱对卖家是不公平的。
2016年Bitcoin社区的开发者Gregory Maxwell和来自Sean Bowe实现了ZKCP的方案,真正实现了Two Party的Fair Exchange,利用了比特币的Blockchain,发出这篇博客的时候非常激动,大家后续的关注并不是很多。实现了Storang Fail。
ZKCP是非常简单的协议,第一步卖家会把数据装在箱子里(加密),买家通过零知识证明告诉他数据没问题,虽然还封在箱子里,这个时候可以把零知识证明和Bitcoin交给Blockchain。这个时候卖家可以拿着Key交换,交换以后买家可以拿着密钥把箱子打开把数据拿出来。这是非常漂亮的解决方案,充分利用了Zero Knewledge Proofs来实现Stong Fairness。
但能够处理的数据量非常小,所以在2016年的实验里仅仅是两个不超过1KB的数据公平交换,主要是数据量变大以后Zero Knewledge Proofs需要巨大的内存和很长时间的计算,计算量非常大,所以很难使用。2017年和2019年在国内顶级安全会议CCS上出现了两篇文章,在当时方案里发现了Bug,Bug是Trusted-Setup引入的。
2018年来自波兰大学的几位研究者给出了Fairswap的方案,他们没有用到零知识证明,但也充分利用区块链的性质,利用了Blockchain上来自于闪联网络由参与者举证的思路,同样实现了Stong Fairness的效果。
和ZKCP很大的不同点是,当你拿到数据后可以先假设没问题,一旦出现问题后需要在一段时间(24小时)内向Blockchain抗议对方作弊。但是有很强大性的假设,并没有考虑到Blockchain上常见的攻击行为,最重要的是攻击者可以短时间内堵塞区块链、堵塞以太坊,通过堵塞可以组织买家做投诉行为,这有很小但非常有可能的攻击窗口。
如果想做到协议需要三点非常关键:如果deliver比较大的数据,数据可能是一部电影、一个数据库,对买家来说拿到后有没有简单易行的方案在数据没有被解密的情况下都证明数据是没有问题的。而对卖家是出示了数据一定要拿到钱,不然就吃亏了。
我们对向深入研究后发现有几个难点:Blockchain是非常透明的,会造成所有东西经过Blockchain所有人都可以看到,意味着必须在链下传输数据,哪怕数据加密也不能放在链上,因为存储很贵。同时区块链很慢,如果能支持上千上万用户的话以太坊很难支撑。
首先解决第一个Transparency的问题,我们FollowZKCP的方案,数据加密只在链下传输,在链下有很多种办法,可以通过邮件、社交网络、GitHub等来传输数据,所有在链上暴露的内容和数据没有半毛钱关系。
第二,怎么构造ZKPs处理1GB的数据?在这个过程中产用了Pedersen Commitment加Sigma Protocol,先把1GB的数据拆成N譙的矩阵,对每一行做Pedersen Commitment。一方面是买家用口Key-Matrix,拿到Key-Matrix就可以解密;另外一方面虽然数据是加密的,但数据是你想要合法的。主要参考了学术界的研究成果。
买家需要给卖家Key-Matrix的矩阵编码,由买家把编码发在链上,当卖家出示密钥之后区块链的智能合约会进行计算。
今年3月份发布了0.1的版本。但是很大的问题需要在链上做O(N)的测算,我们测试以后发现很麻烦,在以太坊上最大做250K数据的传输,需要花很多钱在以太坊上做运算,非常非常不实用。
5月1日的时候有了巨大的进展,这时候用Breakthrough的方案实现了由链下数据压缩到链上的O(n)压缩到O(1)的解决方案。
做到这一点之后最终形成了zkPoD协议,卖家给买家发送协议的时候需要不同的poofs,需要单独一个key的过程是绝对真实可靠的。这个协议最后出来后的效果是做一次交易数据没有上限,可以做10TB、100PB,只是需要花一次校验的钱,在以太坊上只要再一次哈希就可以。
把数据切成了矩阵,所以我们可以想象成数据库的table,可以按行按列进行统计,做用户的额外要求。用的是一的方案,可以完美地避免ZKCP在2017、2019年被发现的很关键的严重问题。
协议的完成经过了数学安全性证明,大概用了一年的密码学论文,最后发现零知识证明非常非常有用。刚刚说Blockchain、Transparent、Expensive、Slow,但Zero-Knowledge Proofs当然都藏在传统的学术论文里,需要花时间花精力琢磨。能做Computation Compression,能解决BitcoinExpensiv和Slow的问题。
实现分为三部分,zkPoD-lib,大家可以看所有的代码都在上面,最底层的密码部分是C++写的,中间层用Golang写的,做了特殊的MIMC hash。
给大家一个直观的感觉,如果想在互联网上卖1GB的数据需要做什么事情?卖家需要花250秒把数据做初始化,花130秒做加密,花9.5小时产生零知识证明。现在最新的结果已经将近砍半的时间。
Verifying更轻松一些,只需要做344秒的Verifying,498秒解密动作,Ethereum GAS消耗非常少,只有18万左右。
协议可以做到一点,数据可以往互联网上很多点传输、流通,在流通过程中会产生零知识证明,零知识证明可以提交到链上,让链上是可验证的数据传输协议,性能现在可以做到30KB每秒,类比20年前的互联网这已经是当时高速上网的情况,30KB每秒可以做实时视频流。
这是跟常见协议的比较,协议比较特色的是对Blockchain没有太大要求,可以支持BTC,很快会接到BTC上,只要你的Blockchain支持都没问题。
下一步要做数据如何可以被可验证地被处理,数据是未来很重要的东西,处理过程能不能被区块链感知到,做到可验证,会对图片、文本、视频、网站做特殊处理,也许这是未来Web3的机会。
zkPoD是几乎已经可以使用的数据交换协议,现在正在寻找各种场景,欢迎想合作的会下聊。
我们并不是做密码学的,但在过程中得到了很多密码学社区的帮助,非常非常感谢他们!
谢谢大家!