看懂零知识证明(zero-knowledge proofs)


在区块链领域内,零知识证明(zero-knowledge proofs)是很有名的技术词汇。但是,多数人讨论到它就像讨论到 MakerDAO 差不多,会纷纷点头表示听过,并尴尬地表示自己懂得不多。

零知识证明是区块链领域公认困难的技术,这个技术才刚出来不久,现在开始了解应该是门槛最低的时候。但相对的,它也有还有很多有待改善的地方。今天我们先从区块链跟零知识证明有什么关系开始讲起。

区块链的两难:隐私、可查验

我们曾经用帐本比喻过区块链,负责记帐的人叫做矿工

矿工在记帐的时候,会先确定转出地址(或帐户)里余额还充足,且这些钱随时可动支,还没有被预定要花在其他地方。基于矿工的查核需求,目前许多区块链的设计,是在网络上公开每个地址的交易明细,矿工电脑运行的软件才有办法逐一检查地址里面的余额剩多少。

反面来说,因为交易明细都被迫公开在网络上接受矿工查核,导致大家只要知道对方的地址,就可以光明正大地查到他所有的交易纪录,毫无隐私性可言。

用银行帐户来想,会更容易理解这件事可怕在哪。

这就像是别人只要知道我的汇款帐号,他就可以光明正大的上网查询我银行帐户的收支纪录。只不过现在可查询的,是多数人比较少用的密码货币收支记录而已。

那为什么我们现在用的银行转帐服务,不需要公开自己的帐户余额,就能正确记帐呢?

银行的转帐服务是把个人帐户资料完全对银行公开,换句话说银行完全知道你帐户的收支纪录,只不过银行受到严格监管,不能对外公开这些资料。但是区块链上并没有银行负责记帐,而是由全球运行挖矿软件的矿工负责,所以区块链的原始设计,才会是强迫大家都得公开帐户资料。

因此,区块链的发展面临两难困境:用户想保有隐私,但是矿工记帐又必须知道用户的交易纪录才行。这符合我之前归纳出的结论:比特币区块链的「匿名公开」设计,其实正好与现实需求的「实名秘密」完全相反。

在过去几个月,我们已经看到包含台湾在内的许多国家,都开始要求交易所将「实名认证」加入帐号的注册流程中,这是为了防范犯罪。另外,今天我们也可以理解用户未来会更重视密码货币的交易隐私性,不希望像现在这样完全公开在网络上。

但是,如果交易纪录没有公开,矿工就不能查核交易。这该怎么办呢?

零知识证明就是用在这个地方。

保持秘密,但可验证

零知识证明(zero-knowledge proofs)的效果,等同于你不需要让矿工知道你帐户里面确切余额有多少,但是矿工仍然可以知道你的帐户里的钱,够不够钱支付这一笔消费。

我引用麻省理工学院多媒体实验室(MIT Media Lab)对零知识证明的解释:

你手上有两颗撞球,分别是绿色和红色,除了颜色之外这两颗撞球一模一样。假设我是红绿色盲,因此,就我看来你手上拿的是两颗一模一样的撞球。

问题来了,请问你是否能在不提到任何颜色资讯的前提下,说服我这个色盲相信这两颗球的颜色,确实不同?

当然可以!

你只要把两颗球交给我这个色盲,然后要我拿到背后去随意变换左右顺序之后,再拿出来让你「猜」原本在左手的球,现在换到了哪一手。

对你来说,你一眼就可以判断本来左手拿的是绿色,现在绿色跑到右手去,根本不用猜,很轻易就能指出球换位置了。但是,这对色盲来说简直惊讶!因为就我看来,这是完全相同的两颗球,你肯定只是运气好猜中的。

不过,只要重复做个几次测试,我很快就会相信你说的,这两颗球肯定有哪里不同,只是我看不出来。而且,你也完全没有透露任何关于颜色的资讯。

这就叫做零知识证明。

我们之间的互动中,完全没有提到颜色资讯。换句话说,双方对颜色这项资讯是「零知识」的情况下,你仍然能够用其他方法,说服色盲相信两颗球在颜色上的差异。

对看得到颜色的人来说,当然一眼就看出两者颜色不同,但是对色盲又想知道两颗球哪里不同的人来说,就得用零知识证明的方法说服他。

你发现了吗?

这里的色盲就好像区块链上的矿工,假如现在大家都没有把交易明细公开在网络上,那用户就得使用零知识证明这套方法,来说服查核的矿工,自己真的有这笔钱可以花,只是他看不到而已。

当然,用零知识证明来说服矿工自己有足够多的钱,复杂度远比说服色盲高得多,电脑的运算量会非常大。撞球只是方便理解的简化举例,但是两者的逻辑完全相同。

很反直觉吧!所以,Sergey Brin 才会说这是个不可思议的技术。

现在我们再回过头来看零知识证明对区块链的重要性,就会清楚许多。透过零知识证明,可以让原本在区块链上看似零和游戏两个角色(使用者、矿工),现在可以同时兼顾各自的隐私性(secrecy)及查核需求(accountability)。

那么,真的有人在用零知识证明吗?

有的,最早使用零知识证明技巧的区块链叫做 Zcash,实际的作法叫做 zk-SNARKs,这是许多零知识证明的做法之一,也是最有名的一个。

Zcash 可以将交易纪录上的汇款者、收款者和金额都经过加密隐藏起来,因此矿工无从得知这些交易上的细节,但仍然可以验证交易。不过,目前多数使用者在 Zcash上的交易,还是选择未经加密的作法。

为什么?因为花费的成本比较高,下一段我们马上会讨论。

另外,以太坊(Ethereum)上的智能合约目前也已经可以运用zk-SNARKs 这套零知识证明的作法。但以太坊不完全是从隐私的角度切入,而是从节省运算成本的角度应用零知识证明。

透过zk-SNARKs,以太坊矿工可以不用再重新执行交易的运算,而是只要对方提得出证明即可。大概就像我不需要真的知道你会高一到高三的数学,而只要看到高中毕业证书就能确定你懂高中数学。不过,这只有在制作证明的成本,远低于实际运算成本的情况下才划算。

简单来说,零知识证明是一套可以兼顾用户隐私性、矿工查核需求的新作法。但是如同一开始我们所提,零知识证明才刚出现不久,还有许多弱点有待研究、改进。

技术值得期待

即便软件开发者现在已经可以将zk-SNARKs 应用在以太坊的智能合约上,但实际上使用的人并不多。最主要的考量点,是zk-SNARKs 所耗费的运算时间太长、运算量太大。

运算时间太长很好理解,就是原本矿工只要1 秒以内就能完成查核的事,现在要花上7 秒甚至长达40 秒,这会拖慢整体区块链的运作效率。

至于运算量太大,之前我们刚讨论过,以太坊上矿工费的计算方式是单价(gas price)与运算量(gas limit)相乘。因此,将zk-SNARKs 应用在智能合约上,智能合约的使用者就得付出高额的矿工费。如果又因为急件而提高单价的话,矿工费就更贵。

除此之外,目前以太坊的每个区块(block)容量上限是 8,000,000 个 gas 左右。如果每次执行智能合约就得花掉上百万个 gas,那么其他交易没有空间写入区块,就只能等下一个区块再写,这等同于进一步拖慢了区块链的运作速度。

在目前各种区块链都以提升运作效率、解决规模化(scalability)问题为首要目标的情况下,采用零知识证明的优先序反而没有那么高。因此,距离区块链广泛采用zk-SNARKs 应该还有几年的时间要走,不需要过度惊慌。对研发人员来说,现在或许是个投入研究的好时机。

最后,我们再从监管的角度来看。

越注重隐私性的技术,犯罪者也越喜欢。原本警察可以根据比特币区块链公开在网络上的交易纪录,清楚地追查交易流向,虽然不知道这些交易地址的背后操控者是谁,但只要搭配其他的资讯(例如IP 位址)就有机会找到操控者。

但是,如果未来区块链采用零知识证明,就会让政府监管的难度变得更高。所以,未来政府会如何在用户隐私与监管之间拿捏尺度,是很值得期待的部分。又或者从技术的角度来看,说不定几年之后就又有新技术可以同时满足两者需求,就像是零知识证明同时满足隐私、查核需求一样。

本文链接地址:https://www.wwsww.cn/jishu/9796.html
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。