门罗币的方案看似已经接近完美,但依然存在一个可能的问题:环签名中依旧需要与其他用户的公钥进行混合,因此可能会遭遇恶意用户从而暴露隐私。零钞利用零知识证明避免了这个问题,让用户只是通过和加密货币本身进行交互来隐藏交易信息,做到了“所有货币生来平等”[8]。 首先给大家简要介绍一下什么是零知识证明(zero knowledge proof)。如图7的左图所示,北分支和南分支中间有一扇门,老王宣称自己能打开这扇门,如何在不给大家看开门细节的情况下让大家相信这件事呢?假设我们采用交互式的零知识证明,那么老王可以自己选择一个分支进入,如图中蓝色点(哪个分支可以不让验证者知道)。然后验证者(图中红色点)随机指定老王从哪个分支出来。如果老王打不开门,那么老王只有二分之一的概率达到要求。N次重复这个过程,如果老王不能打开门,那么老王N次都能从指定分支出来的概率为 (1/2) ^N。因此足够次数下,如果老王都能完成任务,可以认为老王能打开门。这样带来的一个问题就是交互成本太高。一个改进的方案是图7的右图,假设这儿有100条路,如果验证者随机指定100条路中的一条,老王能从该分支出现,那么老王不能开门的概率为1/100。这显著提高了交互的效率。
图7:零知识证明的一个简单例子。左图代表交互式证明,右图代表非交互式证明 在零钞的设计中,就采用了一种叫做zk-SNARK的非交互式的零知识证明。在这里我们并不深入zk-SNARK的细节,只是大致描述一下零钞中是如何使用这项技术的。首先我们看一个最简单的情形,假设零钞中的币值都是确定的,例如1BTC。那么铸币过程相当于是用户向某个托管池(escrow pool)注入1BTC,然后向一个列表中写入一个承诺(commitment) 。其中承诺必须由一个序列号以及用户私钥才能计算得到,并且是单向的。当用户想要花这个币的时候,需要做两件事:(1)给出序列号,以及 (2)利用zk-SNARK证明自己知道生成这个承诺的用户私钥。这样,用户就可以在完全不暴露身份的情况下,atv直播,花出这个币。并且序列号的唯一性可以保证没有双花的情况。 以上的简单情形有三个问题:(1)币值固定很不方便, (2)发送方可以通过序列号来判断接收方正在花钱,(3)接收方必须马上花掉得到的币否则可能被发送方提取。为了解决这三个问题,零钞中提出了一种浇铸(pour)的操作来花销钱币。简单地讲,浇铸操作就是通过一系列零知识证明,将一个币铸造成多个币,且输入输出的总和相等。每个新币都有自己的密钥、数额、序列号等等,从而解决了以上三个问题。与此同时,零钞还采用了一系列的优化措施来提高整个运行系统的性能。 零钞在现目前所有的密码学货币中是匿名性最好的,因此受到过市场狂热的追捧,在2016年10月底发行前后,单币价格估值曾高达几千个比特币。现目前币值稳定后,零钞的市值大约为800万美元。单币价格为62美元,仅次于比特币。 小结 区块链技术中的隐私问题一直以来都是饱受诟病的,一方面普通用户在区块链上的交易隐私应该得到保护,另一方面又应该防止恶意用户将其用作非法交易的平台。现目前的匿名化技术也还不能完美地保证匿名,比如像零钞,也必须依赖于初始化时的一些秘密参数(掌握在几个人手中)。这也会给用户带来交易与隐私上的风险。除了交易隐私,诸如以太坊等区块链技术中的智能合约隐私也是一个很值得关注的问题,目前也已经有一些工作开展起来。希望在不久的将来,区块链能做到在保证隐私的同时,为数字世界提供一个公开可信的技术支撑。 参考文献 [1] Arvind Narayanan, et al. “Bitcoin and Cryptocurrency Technologies: A Comprehensive Introduction”,2016 [2] Meiklejohn, Sarah, et al. "A fistful of bitcoins: characterizing payments among men with no names." Proceedings of the 2013 conference on Internet measurement conference. ACM, 2013. [3] https://github.com/dashpay/dash/wiki/ Whitepaper [4] https://coinmarketcap.com/ [5] https://getmonero.org/home [6] takarabito07.htm [7] Noether, Shen. "Ring signature confidential transactions for monero." [8] https://z.cash/ 作者简介
张宪 (责任编辑:本港台直播) |