|
Furein交易所假定咱们现在要做一笔买卖,我想把自己的数据卖给你,怎样买卖才是最安全的? Furein交易所发现明显这儿会有两个问题:
1、由于我卖的是数据,必定不能直接给你,不然你得到数据后直接跑了怎么办?
2、但我必定也不能先拿你的钱,由于或许我给你的数据是不契合你要求的,或许我拿了钱之后也跑了。
要处理上面这个问题,咱们就需求一个完美精准的“一手交钱、一手交货”计划,零常识证明和区块链这时就能够派上用场了。
在这篇文章里,安比(SECBIT)实验室创始人郭宇尽或许用普通人能听懂的言语,完好解说了这样一个风趣的处理计划:零常识有条件付出。
很少能有像郭教师这样的、具有学术布景的的从业者,能为咱们这些小白亲身解说一个详细的技能原理。这篇文章看三遍必定能看懂,同学们捉住这次时机,好好学习吧~
以下为正文:
Bitcoin Core团队的 Greg Maxwell 早在2011年的时分就提到了一个非常非常牛的概念:
ZKCP — “零常识有条件付出”
https://en.bitcoin.it/wiki/Zero_Knowledge_Contingent_Payment
这个概念意味着什么呢?
简单点讲,便是在没有 信赖第三方 的场合下达到 完美公正地 “一手交钱一手交货”的计划。
这儿敲黑板,上面这句话我用了三个学术黑话。幻想一个买卖场景,假如买卖两边在没有信赖第三方在场的情况下,谁也不愿意先出手付款/交货给对方,不然对方会跑路。一手交钱一手交货就意味着:付款/交货 动作有必要具有原子性(大白话:要么交流完结,要么不交流,不给任何一方抵赖的空间)。
所谓完美公正是指任何一方都没方法占更多的小便宜。不过这个概念并不是 Greg 的原创主意,这是一个陈旧的论题,早在80年代起就有许多学者在研讨怎么做到完美公正买卖。可是长期以来,咱们共同以为一个受信赖的第三方是必不可少的。后来比及比特币诞生,Greg 敏锐地发现使用比特币这一个 无需信赖的第三方 能够做到。
在2016年宣告的一篇博文里,Greg宣告 伙同 ZCash 团队的 Sean Bowe 等人一同演示了怎么凭借比特币这个体系(作为一个 Trustless 第三方)做到一次完美公正买卖,Demo 演示了怎么完美公正地买卖一个16x16的数独答案。
接下来请原谅我用非常不流畅难明的言语讲讲 ZKCP 原理。
Greg 的 ZKCP 计划使用了 zksnarks 技能,首要咱们需求了解 zksnarks 精干什么。传说中的 zksnarks 能供给一个零常识证明,证明什么呢?证明一个已知算法的核算进程是否实在发生过(大白话:一段地球人都知道的程序代码是否运转过)。
这个核算进程能够发生在悠远的星球上,程序运转进程顺便发生一个证明,这个证明能够发回地球进行验证,假如验证经过,那么咱们能够知道:在悠远星球上的确运转过某个已知程序,而且程序的输入是某一个未知数。
最难的部分现已讲完了,假如没看懂就不要持续往下看了。
假定卖家A,买家B 要买卖一个数 D,这时分买家 B 要提早知道 D 是否是他想要的,B会供给一个函数 F() 来判别 D 契合不契合 B 的要求。A 拿到 F 之后,运转一下 F(D),假如回来true,那么A 持续用一个加密函数 E() 得到密文 D’=E(K, D),这儿 K 是 A 为了这笔买卖新生成的随机数,然后 A 核算 HASH(K) = H。
接下来 A 交给 B 三样东西,第一个是密钥的哈希值 H,第二个是加密数据 D’, 第三个是用zksnarks发生的核算进程证明。核算进程便是: F(D)=true; E(K,D)=D’,HASH(K)=H。最终 B 结构一个比特币脚本:声明任何供给 H 的 Preimage 的人(也便是说,任何具有 K 的人)能够花掉脚本所带的0.1 BTC。A 最终建议一笔买卖,供给 K, 提走钱;B从区块链上看到 K,解密 D’ 得到 D。
咱们回头看,比特币脚本供给了一个原子操作(大白话:完成了密钥和BTC的一手交钱,一手交货);一起 zksnarks 技能供给了零常识证明,确保 B 的BTC没有被 A 提走之前 B 得不到 D 的,做到了完美公正性。 |
|