区块链匿名技术发展

摘要

这篇报告重点介绍学术界对区块链技术中匿名性技术的研究发展脉络。匿名性的研究,主要起源于比特币。比特币用户是化名的,但是没办法达到真正的匿名,随着对匿名性要求越来越高时,学者们开始研究为比特币增加匿名技术或者是创建一个全新的加密货币。这些匿名技术分别从最开始的混币服务到后来的零知识证明。下文会对这些加密学知识做一个大概的梳理。

比特币在匿名性方面的不足

比特币是去中心化的分布式账本,每个人都能自己生成一个比特币地址,因此,如果不借助其他外力,其他人是无法将一个比特币地址和某个人联系起来的。但是很多的比特币用户都信赖交易所,而每个用户在交易所注册时都会提供本人的身份信息,交易所作为中心化的机构,掌握这众多用户的地址和身份信息。可以说,交易所可以轻易的将每个用户和其比特币地址联系起来,如果利用地址聚类攻击,那么一个用户的所有地址都将有可能暴露。

在地址聚类分析中,可以认为比特币的一笔交易中的所有输入都里属于同一个实体[1,2]。一个用户,如果拥有多个比特币地址,那么在转账的时候,很有可能将这些地址都放在同一笔交易中以进行大额支付。目前,这种启发式聚类方法使用与很多加密货币,这种方法一直从2013年开始使用,直到现在,仍然是加密货币聚类方法分析中最终要的分析方法。

此外,另外一个比较有名的地址分析方法用于查找找零地址,如果一笔交易的输出中出现了唯一一个以前从未出现过的新的地址,那么这个地址很有可能是找零地址[2,3],但这种方法有可能存在虚警率,但是对分析早期的比特币交易,仍然非常管用。将上述两种启发式方法联合起来,就可以将比特币中绝大多数的比特币地址进行聚类,然后可以通过比特币论坛、矿池官网以及相关网页暴露的用户比特币地址联系起来,就有可能识别这些用户对应的所有账户信息。如果一旦将现实世界的身份信息和用户的某个比特币地址关联起来,用户在区块链上的整个交易记录就有可能全部暴露,这就是比特币在匿名性方面的不足之处。针对这些问题,工业界和学术界都作出了相关的努力,促使加密货币的匿名技术一直在发展。

第一代的匿名技术

比特币的匿名技术的发展,是为了克服相关针对匿名性的攻击方法,为了应付地址聚类方法,出现了类似与中继交易的服务。在比特币发展初期时,出现了“Bitcoin Fog”, “BitLaundry”以及“Bitmixer”等服务商。用户将自己的交易进行转账转至这些服务商手中,然后这些交易商在将相同价值的币转发给接收方。用户使用这些服务时,必须无条件的信任这些服务提供商,同时相信服务商不会记录他们的转账信息。除了服务商之外,没有人能保证服务商不会收到用户的转账之后会通过其他交易转发给接收方。

使用混币服务时除了用户的转账记录可能会被记录、也有可能发生丢失的情况外,还存在单点故障的问题,如果混币服务受到黑客的攻击而导致数据暴露,隐私暴露的风险更大。有人提议使用声誉系统,通过对服务商的服务进行评价然后建立声誉,用于偏向与使用声誉较高的服务商提供的服务,虽然想法不错,但是自始至终却没有人具体实现。

第二代匿名技术

相比于第一代的匿名技术,第二代的匿名技术致力于消除单点故障的问题。这些技术主要有混币、CoinJoin和stealth address以及零知识证明。

混币(Mixing)

混币背后的逻辑非常简单,如果想要匿名化,那就是用一个中介媒体,这看起来和第一代交易有点相似,但是又有一些不同。混币的主要思想是用户通过发送比特币给一个中介媒体,然后通过其他用户收回比特币,这就使得聚类方法失效,因为在混币交易中,一笔交易中的所有输入不再属于同一个用户。但是,这种混币仍然存在一些问题。首先,大多数混币服务不一定能保证实现混币功效,用户得不到保障,其次,和第一代技术相同,用户完成了混币,混币服务商内部也会保留一份记录用来匹配存入和提取。没人能够保证服务提供商本身是不是黑客或者会被黑客攻击。

混币准则

  • 如果使用混币,则应该进行多轮的混币,一环套一环,而不应该是使用一次,这是一个已被广泛接受的原则。
  • 在混币服务中,如果不同用户使用了不同数量的比特币,这样的混币不一定有效,因为外部用户可以通过观察不用数量比特币在混币中的流入流出,可能建立起关联。因此,最好的情况下,应该使得没个混币交易中,所有的输入都相同,所有的输入都相同,使用一个固定的混币输入值,可以增强所有通过混币服务的交易的匿名性。
  • 混币手续费全有或者全无。如果在混币交易中收取手续费,有可能损坏用户的匿名性,因为收取手续费后的输入不再符合混币的格式,那么用户就会尝试合并其他的输出,这会暴露用户的隐私。

实际上,截至到2015年,还不存在一个正常运作的混币生态系统。市场上有很多混币服务,但都具有比较低的交易量,并且许多混币服务提供商被报告有盗币行为,这种事件的发生,是对整个混币服务行业极大的打击,基于这种无保证性的服务,一般用户宁愿牺牲隐私,也不愿意损失比特币。

CoinJoin(合币)

相比与一般的混币,CoinJoin[3]是一种分布式的混币,指的是用一种用户点对点模式实现混币交易的协议,这种理念与比特币创立的初衷更加契合。分布式的混币服务不会存在自举的问题,用户不需要等待一个具有公信力的集中式混币服务商,而且盗币行为在分布式情况下难以发生,而且分布式的混币服务能够提供更好的匿名性。

CoinJoin作为分布式混币的典型代表,在CoinJoin中,不同用户创立一个单一的交易,交易包含所有用户的输入和输出。这个交易中每个输入,都是分离的并且相互独立,这样就可以让一组用户通过使用单一的交易来进行混币交易,每个用户提供一个输入和输出地址,人那后组合起来就行成了一笔交易。在组织过程中,将输入和输出的顺序随机打乱,使得外部攻击者无法建立输入和输出的匹配关系。每个参与者在对交易签名时,检查输出地址是否已经包含在输出中并且和他们的输入具有相同的比特币,就可以确认并且签名。CoinJoin交易的一般步骤如下:

  1. 找到其他想混币的用户,组织在一起
  2. 获取不同用户的输入和输出,建立交易
  3. 将交易发送给用户,用户确认交易合法性并且签名
  4. 广播交易

在分布式系统下,所有的节点遵循这个协议,那么这个系统就可以正常工作。任何一个节点都可以组装并广播交易。

实际上,Dash中的PrivateSend正是CoinJoin技术的典型实现方法,在Dash中,CoinJoin交易前用户需要将Dash拆分长符合CoinJoin交易的面额,然后才能进行CoinJoin交易。

Stealth Address (隐匿地址)

在比特币中,当某人需要接收比特币时,需要发布其收款地址,而一旦收款地址公布出去,那么任何人都可以看到这个地址的相关的交易,即使这个地址没有发布出去,那么也有可能收到聚类分析攻击而暴露。Stealth Address[5]使得用户不需要公布接收地址,而是公布一个公共的标识符,任何想要发送给该用户的人,可以使用公布的标识符以及若干随机数来生成一个地址,然后将欠款发往这个地址。而接收方可以根据自己的账户私钥和随机数在区块中检查到相关的接收地址,从而核实一笔转账交易。但是对于外部账户来说,即使能确定在那个区块中,也难以根据随机数和标识符判定发送给接收方的具体是那一笔交易。

Stealth Address的具体实现

如果 Alice 要给 Bob 发送比特币,除了 Alice,应该没人任何人知道 Bob 就是这笔钱的接收者。为了做到不可追踪性,Alice利用Bob的public view key 和public send key来随机生成一个一次性的公钥地址,叫做Stealth public Address。假设Bob的view key的公私钥对是 ( A , a ) (A, a) , spend key 的公私钥对是 ( B , b ) (B,b) , 其中 A = a G , B = b G A = aG, B = bG , G是一个密码学常数,的生成过程如下:

  • 随机产一个 r r [ 1 , l ] l r,r∈[1, l], l 是G的一个素数阶。
  • R = r G , P = H s ( r A ) G + B H s ( ) R = rG, P = H_s(rA)G+B, H_s() 是Monero中使用的Keccak哈希算法。
  • 生成的Stealth public Address 即为P。

现在对P进行如下的推导:
P = H s ( r A ) G + B = H s ( r a G ) G + b G = G ( H s ( r a G ) + b ) = G ( H s ( R a ) + b ) P =\\ H_s(rA)G+B =H_s(raG)G+bG \\=G(H_s(raG)+b)=G(H_s(Ra)+b)

Alice告诉Bob这笔转账所在的区块号和交易号,Bob利用R、private view key a 和 private spend key b计算 P = G ( H s ( R a ) + b ) P = G(H_s(Ra)+b) 找到交易中的所有output,然后寻找相应的output中是否存在某个输出地址为P,如果存在,则可以证明Alice确实给Bob转账了.

注意: 对于其他人来说,由于不知道Bob的private view key 和private spend key,其他人无法知晓Alice给Bob转账的地址是哪里。

StealthAddress的典型代表是Monero币,但是Monero中不仅仅使用了Monero技术,同时还使用了额外的环形签名和机密交易技术。

零知识证明

在零币和零钞[6、7]陆所实施的密码学原理非常高妙,也因为它们承诺可以达到的匿名性非常强大有效。到目前为止,上述介绍的匿名加强技术,都是在原来的核心技术协议之上加载匿名化处理,而零币和零钞则是在协议层就融合了匿名化处理。

零币和零钞在协议层已经融入了混币功能,其匿名属性来自加密学的保证,从性质上说,这些保证比我们之前讨论的其他匿名技术更好。在隐私保护方面,你不需要信赖任何人,比如,混币服务提供商、混币节点,或其他任何形式的中介,甚至是矿工和共识机制协议。和大多数密码学保证一样,这种匿名性的保证仅仅依赖于攻击者的计算能力上限。

这里主要以零钞为代表介绍匿名技术。零钞是一种不同的匿名性加密数字货币,它建立在零币的概念之上,但将加密技术提高到了更高的层次。零钞使用的是一种被称为zk-SNARKS[8]的密码学技术,这种技术可以使得零知识验证更加简洁、更加有效率,要点就在于,系统的整体效率可以达到某一定程度,使得整个网络可以不需要依赖一种基础币而运行,所有的交易都可以以零知识验证的方式进行。在零钞系统中,交易金额的大小被封装在一个承诺中,在区块链上不再可见,密码学证据确保了拆分与合并的正确性,用户并不能凭空创造出零钞。

账本公开记录的唯一内容就是交易的存在性,以及矿工们用来验证系统正常运行所需要的关键属性的证明。区块链网络上既不显示交易地址,也不显示交易价值。唯一需要知道交易金额的用户,是本次交易的发送方和接收方,矿工们是不需要知道的。当然,如果其中存在交易费用,矿工们则需要知道的仅仅是手续费,这点也不会影响匿名保护。

就匿名性和隐私性来说,零钞这种完全不可追踪的交易系统自成门派。因为公开账本并不包含交易金额,零钞对针对混币服务的旁路攻击是免疫的。

零钞系统

按照技术属性来说,零钞看起来好得有点不真实。其实它确实也有自己的命门。就像零币,零钞也需要一个“公开参数”来设置这个零知识验证系统。但是不同于只需要一个几百个字节长度的数字N的零币,零钞需要的是一个很大的公开参数集——其大小超过1G字节。要再次强调的是,为了生成这些公开参数,零钞需要一组随机并且秘密的输入。如果任何人知道了这些秘密输入,就会产生无法监测的双重消费问题,从而危及整个系统的安全性。

在这里,我们不会过多地深入探讨设置一个zk-SNARKs系统所面临的挑战,这个问题也是一个比较活跃的研究方向,截至2015年,并不知道如何在实际操作中以足够稳妥的方式建立这个系统,不过幸运的是,目前的最新的ZCash区块链中,已经成功应用了zk-SNARKs技术。

zkSNARKs的过程

zkSNARKs减少了证明的大小和验证它们所需的计算量。它的过程可以简述为:

  1. 将要验证的程序拆解成一个个逻辑上的验证步骤,将这些逻辑上的步骤拆解成由加减乘除构成的算数电路。
  2. 通过一系列的变换将需要验证的程序转换成验证多项式乘积是相等的,如证明t(x)h(x)= w(x)v(x)。
  3. 验证者预先随机选择几个检查点s,检查在这几个点上的等式是否成立。
  4. 通过同态编码/加密的方式使得验证者在计算等式时不知道实际的输入数值,但是仍能进行验证。
  5. 在等式左右两边可以同时乘上一个不为0的保密的数值k,那么在验证(t(s)h(s)k)等于(w(s)v(s)k)时,就无法知道具体的t(s)、h(s)、w(s)、v(s),因此可以使得信息得到保护。

总结

这篇报告中对目前区块连中的匿名技术进行了阐述和分析,比特比匿名性增强技术从2013年开始发展直到今天,从最初的简单的中继交易、混币、CoinJoin、Stealth address以及零知识的证明,匿名性技术持续发展,也变得越来越复杂,但是可以看出,每种匿名性技术仍然尤其不足甚至缺陷,匿名性技术的发展仍然是未来区块连安全领域的研究热点。

截至目前,区块连匿名性技术的评价方面,仍然没有一个统一的评价标准,只有建立了一个统一的评价标准,才能更好的指出匿名性技术的发展方向和拓展方式。

匿名化有一些显而易见的有害应用,但同时也存在很多有益的应用,所以是值得保护的。虽然道德层面上的区分很重要,我们还是无法在技术层面清楚地辨识。匿名技术看起来具有深入的和固有的道德模糊性,作为人类社会的一员,我们必须学会怎么面对这个现实。

参考文献

  1. Fergal Reid and Martin Harrigan. “An Analysis of Anonymity in the Bitcoin System”. In: Security and Privacy in Social Networks. Ed. by Y. Altshuler, Y. Elovici, A.B. Cremers, N. Aharony, and A. Pentland. New York: Springer, 2013, pp. 197–223.
  2. Dorit Ron and Adi Shamir. “Quantitative Analysis of the Full Bitcoin Transaction Graph”. In: Financial Cryptography and Data Security. Ed. by Ahmad-Reza Sadeghi. Vol. 7859. Lecture Notes in Computer Science. Berlin Heidelberg: Springer, 2013, pp. 6–24.
  3. Maxwell, Gregory.“CoinJoin: Bitcoin Privacy for the Real World.” Bitcoin Forum, 2013. https://bitcointalk.org/index.php?topic=279249.0.
  4. Elli Androulaki, Ghassan O. Karame, Marc Roeschlin, Tobias Scherer, and Srdjan Capkun. “Evaluating User Privacy in Bitcoin.” In: Financial Cryptography and Data Security. Ed. by Ahmad-Reza Sadeghi. Vol. 7859. Lecture Notes in Computer Science. Berlin Heidelberg: Springer, 2013, pp. 34–51.
  5. Peter Todd. Stealth Addresses. 2014. URL: https : / /lists.linuxfoundation.org/pipermail/bitcoin - dev/2014-January/004020.html (visited on 2017-02-10).
  6. Miers,Ian,Christina Garman,Matthew Green,and Aviel D.Rubin.“Zerocoin:Anonymous Distributed E-Cash from Bitcoin.”In Proceedings of the 2013 IEEE Symposium on Security and Privacy .Washington,DC:IEEE,2013.
  7. Sasson E B , Chiesa A , Garman C , et al. Zerocash: Decentralized Anonymous Payments from Bitcoin[C]// 2014 IEEE Symposium on Security and Privacy. IEEE, 2014.
  8. Christian Reitwiessner,《zkSNARKs in a nutshell》,https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell/

猜你喜欢

转载自blog.csdn.net/t46414704152abc/article/details/93040668