ROO:用程序员听得懂的方式介绍零知识证明

本来想写《用人话解释零知识证明》,但是发现做不到,因为至今我也没能用人话解释区块链原理,零知识证明比区块链原理更抽象,网上的资料90%以上是关于这个算法的推导,但是对于90%以上的程序员来说,我们并不关心哈希算法的原理,我们只关心哈希算法怎么用。

首先,这是一个非常基础的函数结构:

如果这个function是一个哈希算法,那么,输入任意文件,就可以得到对应的哈希值。假设有这样的一个情况,某个哈希值我们大家都知道了,想要知道是哪个文件,这个文件在你手上,你很兴奋的说,文件找到了,大伙说好啊你把文件拿出来,我们算一下哈希,看能不能对上。这时候你就犯愁了,这是个机密文件,哪能说提供就提供的,咋办?

苹果App Store上出现假冒Trezor的恶意应用程序Trezor Wallet Suite:6月20日消息,苹果App Store上出现一款假冒Trezor的恶意应用程序Trezor Wallet Suite,该应用已经上架了几周,可能已经窃取了数千人的资金。该恶意程序最初由The Crypto Lawyers的管理合伙人Rafael Yakobi发现。Trezor的实际iOS应用程序被称为“Trezor Suite Lite”,使用户能够跟踪他们的投资组合并交易资产。如果用户忘记了钱包应用的登录细节,钱包供应商会要求他们离线存储种子短语。种子短语是最后一道防线,用户只能用它从钱包应用程序中收回资金。

Trezor为用户提供了Shamir备份,以帮助他们生成多个种子短语,这些种子短语可以存储在不同的物理位置。下载应用程序后,用户可以选择一定数量的短语来解锁资金。例如,他们可以生成三个种子短语,但只需要两个就可以解锁他们的资金。而使用假冒的Trezor Wallet Suite泄露种子短语的用户可能创建了一个种子短语。生成多个种子短语需要用户创建新的钱包。多个种子短语可以确保即使假冒应用获取了一个短语,它也无法访问用户资金。

截至发稿时,这款假冒应用已成为英国区App Store搜索量第二高的应用。(BeInCrypto)[2023/6/20 21:49:55]

这就请来零知识证明,这个算法结构如下:

木马Alien正瞄准Coinbase等安卓版加密应用程序:金色财经报道,新发现的名为Alien的木马正在攻击安卓手机上的加密应用程序,包括Coinbase、Blockchain.com和Luno。这种新恶意软件基于臭名昭著的Cerberus木马。Alien的目标是226个安卓应用程序,其中大部分是针对银行业的。除了窃取用户证书,恶意软件还可以在受感染的设备上安装和删除应用程序,甚至拦截通知。[2020/9/25]

Pantera Capital合伙人:很愿意投资一个面向消费者的应用程序:Pantera Capital合伙人Paul Veradittakit在接受采访时被问及“什么样的区块链商业机会会吸引你的注意?”时表示:“我很愿意投资一个面向消费者的应用程序,让区块链的使用成为主流。最初,用户可能不会知道这个应用是以区块链为基础,这样消除不必要的摩擦,省去教育环节。(Cointelegraph)[2020/8/8]

橙色部分就是zk-proof,分成证明和验证两个部分,其中证明部分也叫电路circuit,需要用电路描述语言编程,最终编译为电路逻辑。在这个例子里,我们用circuit写了个哈希算法,用来替代原来的function,circuit的特点是输入是不需要公开的,输出的是哈希值和proof,这个proof证明的就是:

动态 | 甲骨文第一批区块链应用程序云服务现在已经上线:据CoinDesk消息,软件巨头甲骨文(Oracle)2月11日宣布,自去年7月基于云服务的区块链平台上线以来,已经有多达十几家企业客户在使用实时应用程序,其中包括全球航运商业网络(GSBN)、正保远程教育等,其他处于生产阶段的客户包括AJIB银行、NeuroSoft、TradeFin等公司。为了支持其客户,甲骨文为该平台添加了新功能,帮助用户加速新区块链应用程序的开发、集成和部署。[2019/2/13]

有一个未知input,经过circuit的运算,生成了output

有一个未知input,经过circuit的运算,生成了output

有一个未知input,经过circuit的运算,生成了output

重要的事情说三遍!并且我还要画出来:

这个proof就相当于对这个过程的认证盖章,就这么板上钉钉了,无争议了,别问input是啥,问就是不知道,所以叫零知识。已知的是啥呢,电路逻辑,输出的值,还有证明文件proof。

在这个例子中,电路逻辑相当于哈希函数,如果你算出的哈希值和公开的那个哈希值一样,那就说明你输入的文件就是大家要找的那个机密文件,而你并不需要提供这个文件,只需要提供证明文件proof就行。

验证的时候,大家把哈希值和proof放进verify函数,返回true,那就证明了:

你用某个文件,经过circuit的哈希算法,生成了这个哈希值

那还能是哪个文件,那肯定是那个正确的文件啊,要不怎么生成这个哈希!

混币

zk-proof显而易见在隐私场景很有用。混币的原理是用户把币存进保险箱,保险箱的密码的哈希值帖在保险箱上,谁要是能提供这个密码,谁就能把保险箱里的币全部拿走。跟上面这个找文件的原理是一样的,用户不用提供密码,只要提供proof就行,合约校验通过就让你提币。

还有一个问题,如果你能开某个保险箱,那就说明你就是放钱进去的人,谁放了多少钱到哪个保险箱,这在链上是可查的,所以你开哪个保险箱,你不能说。在合约里用树形结构来存放保险箱,且层数固定,一般为16层。从你要开的保险箱到树根root,中间的15个节点确定了,就确定了你要开哪个保险箱,所以这15个节点,也在circuit的privateinput里面。

最后合约校验的时候,证明了保险箱的位置、保险箱密码全部正确,但不知道是什么密码也不知道是哪个保险箱,可能用户也不知道,但是用户把proof保管好就行,谁拿这个proof都可以去提款。

扩容

zk-proof除了隐私场景的应用,这两年还发现可以做区块链扩容。区块里的每一个tx,都有用户的签名,用来证明这个操作不是伪造的,一个区块的大小是有限的,所以要是能在区块中塞入的tx越多,TPS也就越高。

如果把签名砍掉,给tx瘦身,那就可以塞入更多的tx。问题是,砍掉了签名,又如何证明这个操作是用户签名过的呢?用零知识证明,把用户签名的校验逻辑写进circuit电路,输入是区块数据,输出是区块数据,并附上proof,一个proof这就能证明所有tx都是被用户签名过的,达到瘦身目的。本文来源:https://bress.xyz/zh/post/nKtuByYTvPri75xHQoA7f8vNyJ6NQPvCL_YH8KVp31Q

作者:加戈

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

地球链

[0:15ms0-1:101ms