(一)匿名支付
比特币早期被作为一种“匿名”的跨国界支付手段得到了广泛的关注,例如著名的“棱镜计划”揭露者爱德华·斯诺登就曾通过比特币募集援助资金。然而,人们很快发现单纯依靠比特币的“假名”,如果不与现实世界产生联系尚可以保持一定程度的匿名,一旦与现实世界关联(如进行线下支付、进入交易所交易等)其匿名性微乎其微。无论是通过分析特定地址和交易模式,或是通过KYC地址顺藤摸瓜,甚至节点在交易广播时泄漏的IP信息,比特币的匿名性都能被轻易瓦解。例如,曾经猖獗一时的“丝绸之路”就被美国联邦调查局根据蛛丝马迹缉拿归案,并因此查获了26000枚比特币(按照当前市场价格,折合价值约2亿美元)。
如今,大多数交易加密数字货币的用户都曾在中心化交易所完成注册和KYC,因此,基于比特币的转账在掌握了个人KYC信息的交易所眼里,无异于在闹市中裸奔,毫无隐私可言。例如,Elliptic公司就专门从事比特币交易的监视,其开发的一款名为Bitcoin Big Bang exporer的交互式区块浏览器就能够清晰的显示和追踪中本聪地址、交易所、论坛、交易市场、博彩服务、慈善基金、名人和其他服务之间的资金流,其中包含了著名的矿池、Mt.Gox和丝绸之路市场之间的联系(如图4-2-1)。
区块链匿名技术作为区块链隐私保护技术的重要组成部分,有效地保护了用户的隐私,避免了个人隐私信息被恶意利用。在比特币的基础上,匿名支付技术一直处于飞速发展中,以下将简单介绍几种典型的匿名支付项目及其背后的隐私匿名技术。
图4-2-1 Elliptic对2010前后比特币转账资金流的可视化分析图
(数据来源:Bitcoin Big Bang exporer)
1.Zcash(零知识证明)
Zcash源自比特币,采用同样的POW共识机制,其核心的匿名支付技术是零知识证明。零知识证明又名“零知识简介非交互式知识证明”,缩写为zk-SNARKs或ZKPs,最初由S.Goldwasser、S.Micali及C.Rackoff在1985年的论文《互动证明系统的知识复杂性》提出来,并第一次大规模实践应用于匿名支付币Zcash。该技术是指在不泄露关于秘密本身的任何信息的前提下,使验证者相信某个论断为真。假定一个人(证明者)拥有一个密钥,那么通过零知识证明,他将可以向验证方证明自己拥有该密钥,而验证方却不必知道任何关于密钥本身的信息,同时在证明者和验证者之间也无须发生任何交互。
目前,简单的零知识证明验证时间可在数毫秒内,证据长度仅数百字节,在最新的非交互式版本中,已经不需要证明者和验证者之间反复传递多轮,仅需要证明者向验证者发送单轮信息即可。目前所知的最高效、简洁地实现非交互式零知识证明的方法是:通过产生一个在证明者和验证者之间共享的公共字符串来完成初始设置(即系统的公共参数)。以Zcash为例,零知识证明的简要实现逻辑如图4-2-2所示。
图4-2-2 零知识证明的简要实现逻辑
(数据来源:Zcash项目资料)
(1)函数分解。将待验证的交易验证函数分解为尽可能小的逻辑步骤,即分解成由加减乘除组成的基本运算电路Arithmetic Circuit(尽量避免分解成除法),图4-2-3所展示的即为一个简单的运算电路。
图4-2-3 零知识证明运算电路示意图
(数据来源:Zcash项目资料)
(2)创建Rank 1约束系统(Rank 1 Constraint System,R1CS)。下一步将基于逻辑电路创建R1CS来检验所有约束条件以确认输入被正确地进行运算。如图4-2-3所示,R1CS将会检验输入值b和c后的乘法门gate 3数值是否为b×c(即b与c的乘积)。如果将复杂运算电路的每一个约束条件都进行检验,R1CS将不得不检查大量的约束条件。
(3)在此基础上,为了进一步减少验证运算工作量,提高效率,2012年,Gennaro,Gentry,Parno和Raykova提出了一种“将所有约束捆绑成一个约束”的方法。这种方式通过使用二次运算程序(Quadratic Arithmetic Program,QAP)将所有的约束转变为多项式的约束,从而验证者只需要随机选择检查点(检查点通过上文提到的公共参数随机产生)检查两个多项式是否匹配即可,如果匹配,则说明该验证很大概率正确。当然,如果证明者提前知晓检查点,那么有可能会通过算法伪造合格的检查点,因此,产生检查点的公共参数会以加密的方式共享(可采用同态加密或椭圆曲线配对进行加密),证明者和验证者都无法获得公共参数的真实数值。
目前,Zcash系统中存在四种不同的交易类型,但实际的交易数据显示,Zcash中大多数交易仍然是透明交易,匿名交易占比不足10%,其中一个原因在于虽然对匿名交易的验证时间很短(毫秒级),但发起匿名交易的证明者必须承担主要的预先计算工作,这一时间可以长达40秒钟。(图4-2-4)
图4-2-4 Zcash的转账方式
(数据来源:Zcash项目资料)
2.DASH(Coin Join混币技术)
DASH创建于2014年1月,其最初的名字为Xcoin,后来改名为Dark Coin,为了规避涉嫌地下黑市交易,再度进行品牌重塑为DASH。其核心代码同样来自比特币,并进行了大量代码优化和二次开发,其网络采用二层架构,底层由普通矿工组成,采用POW共识进行挖矿,其上层为主节点构成的第二层网络,主要负责治理和管理Instant Send和Private Send两种支付功能。主节点组成的第二层网络采用Proof of service共识,成为主节点时需要抵押1000DASH(当前折合价值约145000美元),并根据贡献度获取约45%的区块奖励(主节点的奖励是动态调整的)。
DASH的匿名支付功能为Private Send,其基本原理是Coin Join协议,简要过程如下:
(1)首先将发送方的交易输入拆解成标准面额,0.001,0.01,0.1,1和10DASH的面额,类似于法币现金中的标准面额;
(2)发送方的钱包向主节点发送请求混币需求,主节点将收到某个地址有意向进行一定金额的混币,但并不知晓该地址的身份信息;
(3)当另外两个用户也向主节点发送了进行相同面额的换币请求时,混币进程启动,主节点将交易输入进行混合后命令三方的钱包将混合后的“已转换交易输入”以一个不同的地址发送回自身;
(4)为了充分隐匿资金信息,交易发送方需要将每个面额的交易输入执行多轮混币,每轮Private Send混币过程都将会是资金源头的发现难度呈指数级上升,一般推荐进行1—16轮混币;
(5)混币过程在后台自动执行,并不需要用户的参与,当用户需要发送匿名交易时,交易输入已经处于完全混币后的备用状态,而无须任何额外的时间等待。
DASH在商业落地上相当成功,仅2018年Q4其支付交易额已超过14亿美元,日活跃地址数超过42500个,日交易数超过9300笔。然而,从匿名性而言,DASH的匿名支付功能比较简单,匿名性也相对较弱,只需要足够强大的计算机经过足够的时间,理论上可以穷举出真正的资金来源。
3.Monero(环签名技术)
与其他从比特币衍变而来的加密货币不同,Monero(初始名为BitMonero)源于CryptoNote协议,是一种安全、隐私且无法追踪的加密数字货币,主要通过以环签名技术和环机密交易技术为核心的匿名技术来强化隐私特性。
在Monero的匿名解决方案中,综合采用了如下的匿名技术,分别是:环签名(Ring signatures)、隐形地址(Steath address)、环机密交易(Ring CT)、防弹协议(Bullet proofs)和Kovri(去中心化I2P技术),下面简单介绍一下:
(1)隐形地址(Steath address)
在Monero中存在数种不同的地址,分别是私钥、公钥(主地址、子地址和一次性地址),其中主地址和子地址均为可重复使用的地址,而一次性地址(one-time address)是一种通过钱包私钥结合随机数产生的,可抛弃的一次性收款地址。其主要用于实现隐形地址(Steath address)的功能,以避免收款方的真实钱包地址被记录在公共区块链数据内,从而保护收款方的身份信息。
(2)环签名技术
环签名技术是Monero的标志性技术,主要用于混淆门罗币(XMR)的源头来保护发送方的隐私。所谓环签名技术是指发送方在发送交易前,其钱包会伴随机选数个已存在交易输出的公钥地址(彼此互为Ring member)进行混合形成一个环(Ring),然后通过群组签名的方式来发送交易。在此过程中,实际上其他Ring member充当了“诱饵”的角色,观察者能够确定是某个Ring member签署了交易,但无法确认具体的签署地址。为了防止交易双花,每笔交易会伴随产生一个唯一的Key images(同样无法确认环成员Ring members中的签署交易者),一旦出现相同的Key images则可以判定该交易出现了双花。为了升级整个交易系统的匿名性,2016年Monero系统强制性要求至少需要两个地址组成环签名,2017年提升到要求至少5个签名地址组成环签名,而2018年提高到了最少要求7个地址才能组成环签名。此外,用户可以增加环签名个数,从而增强隐私性。
(3)环机密交易RingCT(Ring Confidential Transactions)
RingCT是一种能够隐藏交易中的转账金额的隐私技术,其主要依靠Pesersen Commitments和Range proof两个密码学技术手段的结合来保证实现隐藏金额的交易能够正确地进行。其中,Pesersen Commitments是一种同态加密技术,通过特定的致盲因子和Diffie-Hellman秘密共享技术来确保接收方能够在不知道交易金额的前提下对交易金额进行验证,防止欺诈消费,而Range proof则是一种能够在不泄露交易具体信息的基础上,实现证明交易发送方承诺的交易金额必然大于零,小于某个特定数额的技术,可有效防止发送方承诺一个负数或者过分高的交易金额来实施交易欺诈。
(4)防弹协议(Bullet proofs)
防弹协议(Bullet proofs)是Rang proof的升级版,其本质上是一种不需要可信设置且只需要很小的证明文本(证据)的新型非交互式零知识证明协议。2018年,Monero将Ring CT中的Range proof升级为了Bullet proofs,包含Single-output和Multi-output两个版本,其中一个带Multioutput的交易可以包含多个独立的Single-output,也可以包含一个Multioutput(体积比独立的Single-output之和更小)。根据Monero的公告估算,使用Range proof时,一个交易文件大小约为13.2kB,而使用Singleoutput防弹协议的交易文件体积将缩小到2.5KB,将交易文件体积缩小了接近80%(交易手续费也降低了80%)。
(5)Kovri(去中心化I2P技术)
在互联网数据传输中,设备通过IP地址作为身份识别被接入互联网,通过成熟的流量分析技术已经足够定位到设备所在地(即用户所在地)的物理地址和身份。同样,在区块链中同样存在通过网络活动和节点IP地址之间的联系来定位物理地址和身份的可能性。因此,为了进一步确保网络安全和隐私,Monero将基于去中心化I2P规范(Invisible Internet Project)开发一种隐私保护方案——Kovri,该方案旨在通过加密技术和复杂的路由技术打造一个分布式网络(也可被用于支持其他项目和应用)。在该项目成熟前,Monero建议对互联网的流量分析感到担忧的用户采用VPN或Tor技术隐藏IP地址。
4.Grin和Beam(Mimble Wimble技术)
Mimble Wimble一词源于小说《哈利波特》系列,是一种结舌咒,可让施展黑魔法诅咒的人口齿不清或发不出声音,从而阻止对手准确施咒反击。在区块链隐私匿名技术中,Mimble Wimble指代一种能提高用户隐私(不泄漏发送方地址、交易金额和接收方地址等交易信息)和可扩展性的新型协议,该协议可以使所有人结舌(因为信息匿名,其他人不可见)。Mimble Wimble最初被提出的目的是为了提高比特币的隐私性,然而由于一些区块链社区政治目的,其不太可能在近期被集成到比特币中。目前,已经有独立团队推出基于该协议的区块链系统实现——Grin和Beam,其中Grin采用与比特币类似社区化匿名开发(依靠社区捐款),而Beam则采用与Zcash类似的公司为主体(可从挖矿奖励中获得收益)进行项目开发。下文将简单介绍Mimble Wimble的基本原理。
在介绍Mimble Wimble协议前需要简单介绍一下椭圆曲线密码学(ECC)的基本特性以帮助理解。这也是比特币的基础加密学原理。
密码学中的椭圆曲线C是一大组点的集合,这些点可以与整数(也叫标量)进行加法、减法或乘法运算,其中乘法运算的结果依然是曲线C上的点。同时,椭圆曲线上的点与标量之间的加法和乘法运算满足交换律和结合律,即给定两个整数k和j,对于曲线C上的给定点H,则满足:(www.xing528.com)
(k+j)×H=k×H+j×H
以k和j为私钥,k×H和j×H为对应的公钥,则该公式表明私钥的和所获取的公钥等价于私钥单独获取的公钥的和,且乘法运算后的公钥仍然是曲线C上的点。在椭圆曲线中,只要k和j足够大,将满足乘法运算很简单,因式分解很难的属性(即逆向运算只能通过穷举法,然而由于运算量太大以至于在一定时间内,如今的计算机运算能力无法求解)。
在Mimble Wimble交易中主要根据两个操作来进行交易确认:
(1)零和验证,交易输出减去交易输入等于0,但不显示真实金额。
在此过程中,为了掩饰真实的交易金额,Mimble Wimble引入了Pedersen Commitment,即假定vil和vi2分别表示一笔转账交易的两个交易输入,vo3表示交易输出,引入三个对应的私钥ri1,ri2和ro3作为致盲因子(三者满足ri1+ri2=ro3),同时引入两个曲线上的点H和G来分别对交易输入或输出数值处理后得到如下结果:
vi1+vi2=vo3⇒(ri1×G+vi1×H)+(ri2×G+vi2×H)=(ro3×G+vo3×H)
此外,Pedersen Commitment也需要搭配Range proof来证明交易金额为正数且不会远高于真实金额。
(2)拥有私钥即拥有交易输出的所有权,但并不通过直接签署来证明。
假设Alice给Bob转账了3个币,Bob选择20作为致盲因子(注意,实际转账交易中致盲因子是一个很大的数,此处选择20仅做示例),则该笔交易在区块链上显示的交易输出为:
X=20×G+3×H
其中,X对所有人可见,值3转账双方都知晓,而致盲因子20则仅接收方Bob知道。为了表明Bob具有对交易输出X的所有权,这笔交易需要附加一个公钥20×G的签名(对应的私钥为致盲因子20,仅Bob掌握该私钥)。
假定Bob此后需要向第三人Carol同样转账3个币,那么将进行如下简单交易:
Xi⇒Y
为了保证交易的零和验证,则必然会出现:
Y-Xi=O,等价于(y×G+3×H)-(20×G+3×H)=0,也即y=20,
Y=20×G+3×H
则此时Carol证明该交易输出的私钥为20,与Bob的私钥一样,存在资产被Bob盗取的可能性。为了防止这种现象发生,MimbleWimble提出了以下解决方案,即每笔交易的接收方需要自行添加一个随机的致盲因子,假设Carol选择120作为致盲因子,则上述交易变成:
Y-Xi=(120×G+3×H)-(20×G+3×H)=100×G+0×H
此时,交易不再归零,存在一个剩余值100×G,其中的100仅Carol可知。为了证明该交易的有效性,Carol只需要在交易中附加100×G的签名即可。原因在于,已知x=100,对于y=0时,x×G+y×H才可能是椭圆曲线C上的有效公钥,也间接证明了交易中的真实金额归零,属于有效交易。
(二)智能合约的隐私性
截至目前,匿名支付技术已经发展得相当成熟,非常成功地解决了交易领域的隐私和匿名问题,但也面临着应用领域窄,功能单一,同质化竞争严重的难题。随着以太坊智能合约平台的崛起,智能合约凭借功能多样性、灵活性和定制化等方面的优势,极大地拓宽了去中心化应用的使用场景,其在去中心化交易所、去中心化组织、游戏、预测市场、去中心化金融等领域显示出了巨大的应用潜力。然而,由于以太坊公开透明的特点,且智能合约中的数据人人可见,致使智能合约技术在许多依赖于隐私的商业领域无法得到施展,例如,涉及商业机密的金融应用和投票系统等。
为了有效地拓展智能合约的应用场景,帮助去中心化应用完成商业化落地,人们提出了一系列隐私解决方案来完善或弥补智能合约的隐私性缺陷。以下简要描述了一些隐私解决方案。
1.区块链的隐私和权限控制(Layer 1和Layer 2)
区块链可根据访问权限控制分为三类,分别是公有链、联盟链和私有链。其中,公有链的访问权限控制最少,任何人均可以自由参与和退出网络,而且区块链网络上的数据完全公开透明,人人可见;联盟链则对网络参与者存在一定限制,仅限于联盟成员可以参与和访问网络,但联盟链同样在效率和成本上进行了优化,适用于多方联盟之间的交互合作;私有链是权限控制程度最高的区块链类型,其网络参与者、记账人均可以自定义,因此可以方便地对网络中的参与者范围和权限进行限定,保证区块链网络的信息仅对一定范围内的人可见,主要适用于个人或企业内部。
此外,在混合链结构中,主链的区块数据一般只会包含侧链或子链的区块头,而不是全部区块数据,因此可以一定程度的提升侧链或子链的隐私性。同理,在分片网络中,分片之间的数据并未进行完全同步,一般仅跨片交易数据会进行同步,因此,分片内也可以提供一定的隐私性保护。
链下状态通道和链下计算也是一种有效的隐私保护技术,以链下状态通道为例,参与的双方或多方通过开辟链下通道进行交互,最终返回到链上进行清结算。状态通道不仅能极大提高数据和交易处理能力,也能够有效保护隐私,因为通道内的数据仅参与者能够获取,从而可以有效避免数据泄漏,同时也能通过状态通道的开启与关闭灵活更改交易参与方和事务内容(事务完成关闭状态通道即可,新事务可再次组织开启新的状态通道)。
2.P2P网络层的隐私保护
P2P网络本身的隐私保护主要包括数据加密传输、IP地址隐藏和动态路由等方面,其中,数据加密传输是指敏感数据通过加密的方式进行网络传输,通过密钥管理系统进行数据访问权限控制;IP地址隐藏和动态路由技术本质上都是为了切断网络中的节点与物理位置或身份信息之间的联系,从而保护参与者各方的隐私信息,典型采用的技术包括VPN和Tor技术。
3.事务层的隐私保护
事务层的隐私保护主要是指具体事务执行过程中的隐私保护技术,如同态加密技术、安全多方计算技术、零知识证明技术等。
(1)同态加密技术
同态加密技术是指用户首先将隐私数据进行加密后发送到云计算机或第三方进行计算(数据始终处于加密状态),计算完成后的数据返回用户,只有用户可以解密获得计算结果,其要义是保证对加密状态数据的处理与对未加密的数据处理状态保持一致,然而这种技术的计算数据大,速度慢,实现难度很大,所以在当前并不适用。
(2)安全多方计算(sMPC)
安全多方计算是指在进行秘密计算事务时,可以首先将计算任务本身按照特定的规则进行切割(数据和计算程序等)并分配给互不相关的第三方进行独立计算,计算完成后的数据碎片返回后按照一定规则可以组合还原获得完整的计算结果。
理论上,只要能通过安全多方计算完成加法和乘法则可以进行任意的计算任务,但这种隐私计算方式依然存在计算速度慢、计算成本昂贵的缺点。此外,在安全多方计算过程中,虽然第三方在利用数据碎片进行计算时因为无法得知整个数据的全貌,而能够实现隐私保护,但是也存在第三方恶意使用错误数据替换真实计算结果,从而破坏整个多方计算结果的可能性,因此,如何准确的检验和惩罚第三方的作恶行为显得至关重要。
(3)零知识证明
零知识证明并非指代一种具体的技术,而是指代一种基于概率的验证原理,即证明者通过向验证者提供一系列证据,向验证者证明自己已经知道某消息或者拥有某消息,但同时又不能透露任何关于消息本身的信息。网上有个非常形象的故事来说明零知识证明的基本原理,源自阿里巴巴和四十大盗的故事。
阿里巴巴被强盗抓住之后,为了保命,他需要向强盗证明他知道打开宝库大门的咒语,但又不能让强盗知道咒语。于是,他想出一个办法来证明,他先让强盗离开一箭之地,距离足够远到让强盗无法听见咒语,也足够近到让强盗相信他无法逃出弓箭的射程范围。于是阿里巴巴就在这个距离下,向强盗演示了石门的打开和关闭。
在以上的故事中,阿里巴巴就采用了零知识证明原理,即在不泄露秘密(开门和关门咒语)的前提下,使他人相信了某一个论断的真实性(使强盗相信阿里巴巴拥有打开石门的能力)。在区块链领域,零知识证明存在多种实现形式,包括Zcash所采用的zk-SNARKS,后期的改进版本zk-STARKS以及Range proof和Bullet proofs等,尽管他们实现方式各不相同,但都基于零知识证明原理。
(4)可信执行环境(TEE)
TEE是Trusted Execution Envirenments的缩写,其指代在设备处理器中的一块隔离安全区,该安全区基于软件和硬件,确保安全隔离于设备主操纵系统之外。TEE的存在能够确保数据在存储、处理和保护过程中处于一个可信的安全环境,典型的实现是集成在很多英特尔芯片中的Intel SGX。借助TEE,智能合约或其他应用程序可将敏感数据的存储和处理移到链下的节点处理器中的TEE环境中进行,仅需要返回加密的计算结果即可,通过这种方式,不仅能提高数据隐私和安全性,还能够提高数据处理效率。然而,由于目前市面上的TEE环境基本是均为Intel SGX,这也意味着必须承担来自英特尔公司这一中心化机构的风险(包括技术风险和信任风险)。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。