区块链中的隐私支付问题探讨
扫描二维码
随时随地手机看文章
摘要
本文简单介绍目前流行的几种去中心化隐私支付方案及其所使用的密码学工具,并比较这些方案的优劣。我们将重点介绍零知识证明在这些方案中所起的作用,并讨论未来这个领域可能的发展方向。
前言
中本聪在其短短9页的比特币白皮书[Sato08]中用了一整个章节讨论比特币的隐私问题。
比特币的区块链是个完全公开的分布式账本,这带来公开可验证性的同时,显然也会对账本上的这些交易隐私造成影响,这点中本聪是心知肚明的。
比特币[Sato08]的终极目标是成为网络世界的电子现金,我们看现实中的纸币现金在所有货币形式中匿名性毫无疑问是最强的。但比特币这种公开账本却允许人们通过这些公开的交易地址和金额做很多去匿名化分析,尤其是当这些公开账本信息和从其他渠道比如某些交易平台上获得的数据进行交叉匹配分析的时候,很多用户的身份将被暴露出来。
比特币隐私性的缺乏毫无疑问是其被广泛采用成为电子现金的巨大障碍,以前我们使用纸币不用担心隐私泄漏,使用信用卡或各个互联网大厂的支付方案起码这些银行或大公司们受现行各种法律的约束,我们不用过于担心个人隐私泄漏。可是如果使用比特币我们直接将自己的隐私公之于众了那就有点滑天下之大稽了。假如比特币真的成为被人广为使用的电子现金,你敢想象将自己每天衣食住行相关的所有消费记录公开于世吗,这个显然不太合理。
另外一个问题是,由于比特币区块链公开记录了所有交易历史,这就对货币本身的可互换性(fungibility)造成深远影响,这个原因在于比特币接收方有可能因为比特币的某些交易历史而拒收该比特币,比如说曾涉及恐怖活动之类的。可能现在该比特币的持有者未曾和恐怖活动有过任何牵连,但仅仅因为之前的持有者涉及恐怖活动,就导致现在持有者的比特币价值降低资产受损,这个显然也不是很合情合理。
在比特币之前,隐私支付一直是密码学一个重点研究领域。这方面的文献可以说是汗牛充栋,我这里就不一一列举了。密码学与隐私支付结合得如此紧密一点不奇怪,因为毕竟密码学是一种数字解决方案,而支付中所涉及的货币实际上就是一嘟噜数字串,而这种数据又极为敏感,所以密码学和隐私支付当然是天生一对。
零知识证明简介
一般来讲,区块链中的隐私支付涉及的主要有这么几个隐私方面的问题:
· 交易发起者和接收者的隐私:指让攻击者通过分析区块链或者分布式账本上的信息无法或很难推断出交易发起者和接收者身份。
· 交易金额的隐私:指攻击者通过分析区块链无法获得具体交易金额的有用信息。
· 交易安全性:
· 由于区块链系统是去中心化的,所以需要考虑如何防止双花攻击(double spending attack)。
目前看来,上面谈及的两个隐私问题都可以用零知识证明来解决,而且事实上在已有的隐私币设计中零知识证明也确实是主角。
「零知识证明」到底是什么?
我们来讲讲这个被神化的密码学概念。
1)「证明」是什么?
其实大家如果上过数学课,做过证明题,你就知道“证明”是什么,零知识证明里的“证明”其实和你数学课里的证明很接近。
当你读完一个数学题的证明之后,这个证明应该能说服你这个证明所要证明的命题(statement)的正确性。零知识证明里也有个对应需要证明的命题的,而且当证明读者,或者更正式的说法叫验证者(verifier)读完该证明后也应该会相信这个命题的正确性。
大家注意,数学证明这个过程涉及两方:写证明的人和证明读者。零知识证明中除了有我们刚才说的证明读者也称验证者外,还有一方是提供证明的人,这一方我们正式地称之为证明者(prover)。通常情况下,区块链里使用的零知识证明方案是公开可验证的,换句话说,谁都可以是证明验证者,但证明者则必须是那位掌握了命题成立所需秘密的人,只有他才能成功生成正确证明。
2)零知识(zero knowledge)又是什么呢?
当你读完一个数学证明,正常情况下你应该有种在数学上功力见长的感觉,因为你掌握了一个新定理,你获得新知识。而零知识证明则有所不同,他的目的不在于让验证者掌握新知识,他的核心目的是说服验证者证明者懂得如何证明这个命题,或者更正式地说他掌握了使得命题成立所需的秘密,仅此而已。他不关心验证者读完证明后有没有掌握新知识,事实上这里的零知识恰恰被定义成证明本身除了泄露一个事实:即证明者掌握了使得命题成立需要的秘密外,不泄漏其他任何信息。所以零知识证明的证明往往是以密文的形式出现,所谓密文你可以把他看作一堆乱码。换句话说你通过读这些乱码,就能相信命题成立,相信证明者懂得如何写这个证明,但除此之外你一无所知。
由于零知识证明本身是以乱码的形式出现,这时候我们就得考虑一个问题,就是如果一个没有掌握证明这个命题所需秘密的人,一个攻击者浑水摸鱼滥竽充数怎么办?所以零知识证明的另外一个性质健全性(soundness)就变了非常有意义,他的目的就在于保证攻击者在不掌握证明命题成立所需的知识或秘密情况下是无法伪造证明的。当然,通用的零知识证明还得考虑完整性(completeness)这个性质,我们这里暂时就不展开了。
通俗地说,零知识证明可以看作数字签名和加密两种概念的推广和结合。零知识这个性质其实和加密方案所需的保密性有一定对应关系的,加密方案的保密性能保证加密密文不泄漏所加密明文的任何有用信息。零知识这个性质在隐私币中则通常用于保证隐私性。
而健全性则可以看作数字签名方案的不可伪造性在通用命题中的一种推广。在数字签名方案中,一个没有签名密钥的用户是无法伪造签名的,这就是所谓的不可伪造性。零知识证明的健全性在隐私币中往往用于保证只有用户掌握隐私币对应的秘密情况下才能成功花掉相应货币。希望我上述描述能让大家对这些听起来拗口难懂的密码学概念之间的对应关系有些感觉。
说句题外话,和我们中小学阶段学数学所需的各种死记硬背机械计算不同,高等数学或现代数学的研究对象更多是概念和关系。20世纪最伟大的数学家之一格罗腾迪克在谈平生所学的体会曾说过一句话:“在不同的时代和世纪中,对于依次出现的不同的主题,它展现给我们微妙而精细的对应,仿佛来自虚空”。密码学作为一门应用数学时不时会有一些像零知识证明这种天马行空天外飞客的想法出现,这些想法不仅能让人很接地气地用来造隐私币,还能向我们展示一些“微妙而精细的对应”,给人一种抽象美的体验,这也算是学习密码学的一大乐趣了。
我们在区块链情景里用到的零知识证明还需要些其他性质,比如必须是简短(succinct)的,因为证明需要在区块链网络中广播,如果证明太长就会导致网络出块率太低。我们还希望验证者计算负担越小越好,因为这意味着验证者,也就是我们通常所说的矿工们处理单个交易需要的计算量很低。
隐私币
现有隐私币大概可以分成两大类,需要可信初始化(trusted setup)的和无需可信初始化(setup free)的方案。我们在下文中会介绍可信初始化是什么。
无需可信初始化的隐私币
1. Cryptonote
Cryptonote[Saberhagen18]是隐私币Monero的底层方案。Cryptonote的设计比较简洁,其用到的主要密码工具就两个:一次性可链接环签名及匿名地址。Monero中的匿名地址方案实际上就是一个匿名公钥加密方案,该方案保证如果你是加密方案指定接收者,你就可以通过扫描分布式账本找到你的密文并解密密文,但除了你之外的任何人都无法知道这个密文是应该发给你的,这个就能保证交易接收者的匿名性了。
而一次性可链接环签名则是用于保证交易发起者匿名性的,环签名能做到用户利用自己的私钥和区块链上其他地址的公钥生成一个环签名,通过验证该签名你知道这是这群人中某个人生成的签名,但具体是这群人中的哪个人你是没法知道的,所以他保证交易发起者匿名性的基本思路就是把发起者隐藏在一群人中间。这个从零知识证明角度看相当于是个成员证明(membership proof)。
Monero后来又在环签名基础上又开发了环保密交易(ring confidential transacTIon),因为他们最初方案没有考虑如何隐藏交易金额,保密交易提出就是为了解决交易金额的隐私性问题。保密交易里涉及到的一个零知识证明是区间证明。区间证明能做到证明某个金额属于一个合理的范围,但又不透露这个金额具体是什么,区间证明也是一种特殊的零知识证明。
那么为什么这个证明是有必要的呢?这个原因是Monero所用的密码方案是在有限域上进行的,换句话说其所定义的运算是模q运算,这里q是个非常大的素数,那么如果交易输出结果是个很小的负数,在这个有限域里是和一个非常大的正数等价的,攻击者就有可能利用这点凭空打印Monero。区间证明后来成为所有隐私币方案的标配也是这个原因。
2. Beam和Grin
Mimblewimble[Elvis16]可以看作一种简化版的Monero。他把地址这个概念从区块链中去掉了,既然发送者没有了地址,该方案也把环签名去掉了。这个方案只留下了保密交易方案和区间证明。由于保密交易方案对应的签名方案具有同态性,他们可以把很多交易整合起来。这样做的好处在于整个账本变小,全节点挖矿时负担就变小很多。
需要可信初始化的隐私币
3. Zcoin
Zcoin[MGGR13]是学术界在去中心化隐私支付方面做的最早的尝试之一,其基本思路是用一个Pedersen承诺(Commitment)作为货币,承诺的消息是货币对应的序列号,这将被用来防止双花攻击,而承诺方案所使用的随机数则代表用户对该货币的所有权。
Zcoin使用了一个聚合器(Accumulator)来保证所使用的货币的匿名性。聚合器可以把系统中所有货币对应的承诺压缩成一个群元素,用户使用自己的货币时只需证明他知道其货币对应的随机数,以及该货币承诺是属于聚合器所包含元素中的一员即可。聚合器在功能上可以看作零知识证明中的或证明(Or proof)的一种推广。
Zcoin保护隐私的思路和1999年的一个隐私支付方案一脉相承[ST99],但有不少简化。这个简化带来的缺陷就是Zcoin金额固定不可分,这在实际中非常不方便。另外一个问题就是最初Zcoin的设计没有对货币金额做区间证明,这样导致攻击者有可能发起上述的凭空造币的攻击。这些问题在Zcash当中基本上都得到解决。
4. Zcash
Zcash是可以看作Zcoin的修正版,用了一个当时最新的零知识证明方案,把可审核性(auditability)和可追踪性(traceability)之类的性质都考虑进去了,他实际上相当于把1999年Sander和Ta-Shma两人提出的方案[ST99]运用到了区块链里。
Zcash使用的零知识证明是微软和IBM的密码学者开发的一个可验证计算的方案Pinnochio衍生出来的。Pinnochio最早提出的目的是用于云计算中的可验证计算,这个思路能支持通用计算,但最大的问题是需要可信初始化。可信初始化中涉及的一些陷门知识一旦被攻击者获得,则有可能以此对零知识证明的健全性发起攻击,从而无限量打印Zcash并无法被探测到。
针对可信初始化Zcash团队提出了些解决思路,如通过多方计算来分布式地初始化设置参数,但这个思路的问题在于首先他并没彻底解决这个问题,因为多方计算是由有限的几个参与方参与计算,大家还是得相信参与方没有合谋攻击这个计算过程,因为毕竟这里涉及的经济利益太大了,很难相信不会有人铤而走险。
另外,这个步骤本身还会带来一些潜在的安全隐患,信息安全里的一个基本原则是复杂性是安全性的天敌(complexity is the enemy of security),这和系统工程学上的Keep it simple and stupid, KISS原则,及哲学上的奥卡姆剃刀准则:如无必要勿增实体是一脉相承的。所以,如果有一个方案能够避免这一步骤且效率相比不差,那当然应该选择较简单的方案。
另外,Zcash的设计实际上还有其他一些冗余之处,比如他们的匿名性一部分是通过隐藏Zcash于系统中已有货币的membership来提供的,而双花攻击则通过检验序列号来防止的,Zcash本身实际上也是个承诺,Zcash持有权的转让则通过转让承诺内容来实现的。这里零知识证明对应的statement非常复杂,比如针对货币本身的合法性证明,就得通过证明承诺本身在Merkle tree上的membership proof 来证明。
这个方案非常复杂,因为首先需要用零知识证明的方案来证明哈希计算的正确性,这个本身涉及的电路就已经够复杂了,另外随系统中发行的货币量增加,对应的Merkle tree变大,需要验证的电路数目量随之增加。我认为Zcash系统的这种复杂性实际上和[ST99]本身设计的复杂性有关,因为这个方案最初设计是考虑了电子货币设计中的可追踪性和可审计性问题的,这个和反洗钱之类的政策考虑是有关的。
总结
上述几种隐私币各有千秋。目前看来,Zcash这条技术路线的设计纯粹从保密交易的角度看有点过度工程化(over-engineering),但是对通用零知识证明应用的一个很不错的尝试。
CryptoNote,保密交易这条技术路线中Mimblewimble是最简洁的隐私支付方案,但其使用的区间证明仍需要对数级别的交易大小,应该还有改进的空间,但我相信这条技术路线由于其所做的假设较弱,安全可靠性更高将会逐渐成为主流。我们还会在后续文章中继续介绍相关领域的最新进展。
Suterusu的尝试
目前来看,现有隐私保护区块链方案设计万变不离其宗,零知识证明始终是这个技术改革风暴的核心。
开发一个隐私保护区块链,尤其是开发一个基于最安全高效的零知识证明技术的隐私保护区块链不是件容易的事情,这件事的难度不仅在于设计上零知识证明需要很高深的数学,这对没有密码学背景的工程师而言已经是个很大的挑战了。密码学模块的实现及与区块链系统的整合也是山高路远坑深,实现一个安全可靠高效的隐私保护区块链方案往往需要众多密码学专家和安全系统工程师紧密配合通力合作才能完成。
Suterusu项目将基于目前最新的无需可信初始化设置的零知识证明方案,打造一个让开发者一键发布隐私保护区块链的发射平台。我们注意到现有的几种隐私币社区处于相对隔离的状态,Suterusu将为本生态系统中产生的匿名数字资产搭建一个跨链协议,保证这些匿名资产在本生态系统中的自由流动。
Suterusu将是一个模块化,动态的,可交互的生态系统,我们将与零知识证明研究一道共同进化,从而保证在我们生态系统中搭建的隐私保护区块链方案始终建立于最安全高效的基础之上。
关于Suterusu:
Suterusu实现和整合最新的无需可信初始化的零知识证明协议,在此基础上我们将打造可让开发者一键实现其所定义的隐私保护区块链方案的发射台。
Suterusu将为使用Suterusu生态系统技术的匿名数字资产实现隐私跨链协议,从而保证这些数字资产在生态系统中的高流动性和可交换性。Suterusu以社区自治为核心发展路径,高达76%的Suter token通过挖矿产生,且支持“投票即挖矿”。我们引入最新的流动性去中心化选贤机制(Liquid Decentralized Meritocracy)实现链上治理。与已有解决方案相比,本方案提供了更高的灵活性和参与者自主性。
关于SERO:
SERO是新一代隐私公链,支持智能合约,可以发行匿名币和匿名资产,被称为匿名版以太坊,SERO采用性能远超ZCash的零知识证明加密方式,并且默认所有交易匿名,是真正的匿名公链,采用最先进的POW+POS底层共识,网络安全性和性能高于纯粹的POW公链。SERO由前IDG合伙人章苏阳、LD和量子的早期投资,目前已和F2Pool等多家大型矿池对接。