“比特币是一种安全而匿名的数芓货币”
“比特币不会把你从NSA的窥视中隐藏起来”
比特币最有争议的事情之一就是它的匿名性首先,比特币是匿名的吗从上面相互矛盾的引用可以看出,这有些混乱其次,我们想要一个真正匿名的加密货币吗匿名的利弊,导致了一些基本的问题:匿名的加密机制有利于利益相关者吗这对社会有好处吗?有没有办法隔离匿名的积极方面同时消除负面部分?
这些问题很难因为它们部分取决于人的倫理价值观。本章我们不会回答虽然我们将会对匿名的论据进行研究。大多数情况下我们将坚持研究各种技术——一些已经存在于比特币和其他被提出加入的技术——旨在提高比特币的匿名性。我们还将看看具有与Bitcoin不同匿名属性的替代加密货币的提案这些技术提出了噺的问题:他们工作的有多好? 他们被采取有多么困难 采用它们有什么折衷方案?
定义匿名在我们可以正确地讨论(或在什么程度上)仳特币是否匿名之前我们需要定义匿名。我们必须明白我们口中的匿名是什么意思以及匿名和类似术语之间的关系,如隐私
顾名思義,匿名的意思是“没有名字”当我们尝试将此定义应用于比特币时,有两种可能的解释:在不使用真实姓名的情况下进行交互或者茬不使用任何名称的情况下进行交互。这两个解释导致了比特币是否是匿名的结论是非常不同的比特币地址是公钥的哈希。你不需要使鼡你的真实姓名来与系统进行交互但你将使用你的公共密钥哈希作为你的身份。因此针对第一个解释,比特币是匿名的因为你不使鼡你的真实姓名。但是通过第二个解释,它不是;你使用的地址是伪身份在计算机科学的语言中,使用的不是你的真实姓名的身份的这個中间地位称为假名
回想一下,你可以随意创建任意数量的Bitcoin地址考虑到你可以创建尽可能多的这些假名,你可能会想知道Bitcoin地址是否真嘚是伪身份我们将看到,这仍然不能使Bitcoin匿名
侧边栏。你可以从各种其他背景中熟悉匿名和纯假名之间的区别一个很好的例子是在线論坛。在像Reddit这样的论坛上你可以选择一个长期的假名,并在一段时间内用这个假名互动你可以创建多个假名,甚至为每个评论创建一個新的但这将是乏味和烦人的,大多数人都不会这样做所以在Reddit上交互通常用的是假名,但不是很匿名相比之下,4Chan是一个在线论坛鼡户通常以匿名的方式发布——完全没有归因。
在计算机科学中匿名性是指假名与无关联性。无关联性是针对特定对手性能定义的属性直观上,无关联性意味着如果用户反复与系统进行交互这些不同的交互应该不能从对手的角度来看到彼此的联系。
比特币使用的是假洺但如果你的目标是实现隐私,则假名是不够的回想一下,区块链是公开的任何人都可以查找涉及给定地址的所有比特币交易。如果有人能够将你的比特币地址与你的真实世界身份相关联那么所有的交易(过去,现在和将来)都将与你的身份相关联
让事情更糟的昰,将比特币地址与真实世界的身份联系起来往往很容易如果你与比特币业务(无论是在线钱包服务,交易还是其他商业)互动他们通常都会想要你现实生活中的身份,以便你与他们进行交易例如,交易所可能需要你的信用卡详细信息而商家将需要你的送货地址。
戓者你去咖啡店用比特币支付。由于你本人在那咖啡师知道你的身份,即使他们不要求你的真实姓名你的物理身份也将因此绑定到伱的一个Bitcoin交易上,使得所有涉及该地址的其他交易都可以链接到你这显然不是匿名的。
侧面通道即使没有直接联系,你伪造的个人资料也可能由于侧面渠道或信息的间接泄露而使匿名性失效例如,有人可能会看到一个匿名的比特币交易的配置文件并在该用户处于活躍状态的当天注意到他。他们可以将此信息与其他公开信息相关联也许他们会注意到一些Twitter用户在大致相同的时间间隔内是活跃的,从而創建匿名的比特币简档和真实世界身份(或至少一个Twitter身份)之间的链接明确的假名不能保证隐私或匿名。要实现这些目标我们需要更強的不相关性。
无关联性为了更好地了解比特币上下文的不可链接性,让我们列举Bitcoin活动不可链接所需的一些关键属性:
1.很难将同一用户嘚不同地址链接在一起
2.很难将同一用户进行的不同交易链接在一起。
3.很难将付款发送方连接到收件人
前两个属性是直观的,但第三个屬性有点棘手如果你将“付款”解释为比特币交易,则第三个属性显然是错误的每个交易都有输入和输出,这些投入和产出必然会在區块链中并且公开连接在一起然而,我们所说的付款方式并不是一个单一的比特币交易而是任何具有将比特币从寄件人转移到接受者嘚效应。它可能涉及一个迂回的交易系列我们想确保的是,通过查看区块链链接发送方和付款的最终收件人是不可行的。
匿名集即使在我们广义的付款定义下,第三财产似乎也很难实现假设你为一个产品支付了一定数量的比特币,并通过迂回的交易方式发送了该支付看着区块链的人仍然可以推断出一些事实,即一定数量的比特币离开了一个地址大致相同数量的比特币(可能减去交易费用)最终茬其他地址出现。此外尽管存在迂回的路线,初始发送和最终接收将发生在大致相同的时间段因为商家将希望在没有太多延迟的情况丅接收付款。
由于这个困难我们通常不会试图在系统中的所有可能的交易或地址之间实现完全的无关联,而是更有限的东西给定一个特定的对手,你的交易的匿名集是一组交易集合对手不能从你的交易中区别开来。即使对手知道你进行了一个交易他们也只能告诉你這是集合中的一个交易,而不是它是哪一个我们尝试最大化匿名集合的大小——可以隐藏其他地址或交易的集合。
计算匿名集是棘手的由于匿名集是针对某个对手或一组对手而定义的,因此你必须首先具体定义你对手的模式你不得不认真对待对手知道什么,他们不知噵什么以及我们正在试图从对手中隐藏什么,也就是说对手从交易中不知道的东西就被认为是匿名的。没有这样做的通用公式它需偠在个案的基础上仔细分析每个协议和系统。
污点分析在比特币社区,人们经常对匿名服务进行直观的分析而不是严格的定义。污点汾析特别受欢迎:它是一种计算两个地址“相关”的方式如果由地址S发送的比特币总是在另一个地址R处,无论是直接地还是经过一些中間地址则S和R将具有较高的污点分数。该公式涉及具有多个输入和/或输出的交易并指定如何分配污点。
不幸的是污点分析并不是比特幣匿名的一个很好的衡量标准。它隐含地假设对手正在使用相同的机械计算来链接地址对一个稍微聪明的对手可能会使用其他技术,例洳查看交易时间甚至利用钱包软件的特性,我们将在本章后面看到所以污点分析可能表明你在某种情况下有很高的匿名性,但实际上伱可能不会
为什么我们需要匿名。看到匿名意味的意思后让我们回答一些关于匿名的元问题,然后再进一步说明:为什么人们需要匿洺匿名货币的伦理含义是什么?
在基于块链的货币中所有交易都记录在分类帐上,这意味着它们被公开和永久地追溯到相关联的地址所以你的比特币交易的隐私可能比传统的银行业务差得多。如果你在真实世界的身份与Bitcoin地址相关联那么你将完全失去了与该地址相关聯的所有交易(过去,现在和将来)的隐私由于区块链是公开的,从字面上任何人都可以执行这种类型的脱离语言甚至无需你意识到巳被识别。
考虑到这一点我们可以确定使用匿名加密货币的两种不同动机。第一种是简单地实现我们已经习惯从传统银行开始的隐私水岼并减轻公有链带来的脱离风险。第二种是超越传统银行业的隐私级别开发货币,使其技术上无法跟踪参与者
匿名伦理。我们认为傳统货币理所当然地有许多重要的(虽然经常被忽视)匿名的理由。大多数人不喜欢与他们的朋友和同事分享薪水如果个体的地址在區块链中很容易被识别,并且他们通过比特币获得工资那么通过寻找一个大的、定期每月支付就可以很容易地推断出他们的工资。组织吔有重要的财务隐私问题例如,如果一个视频游戏机制造商通过区块链支付给制造虚拟现实眼睛的分包商则可能提示公众(及其竞争對手)他们正在准备推出新的产品。
然而人们有理由担心真正的匿名加密货币可以用于洗钱或其他非法活动。好消息是尽管加密货币茭易本身可能是匿名或匿名的,但是数字现金和法定货币之间的接口不是事实上,这些流程受到高度监管正如我们将在下一章中看到嘚那样。所以加密货币不是洗钱或其他金融犯罪的灵丹妙药
然而,人们可能会问:“难道我们不能以这样一种方式来设计技术只有匿洺的良好使用是允许的,而坏的用法是被禁止吗”这实际上是对计算机安全和隐私研究人员的反复呼吁。不幸的是它从来没有被证明昰可能的。原因是我们以道德的角度来归类好或者坏在技术上是相同的在比特币方面,我们不清楚我们如何能够对矿工做出关于哪些交噫包含的道德决定
我们认为,通过使用匿名加密货币来保证其存在的潜在好处我们应该将系统的技术匿名属性与我们在使用货币时所使用的法律原则进行分离。这不是一个完全令人满意的解决方案但它也许是实现有利权衡的最佳途径。
侧边栏:Tor如何应对具有良好的囷坏的用途的技术的道德困境并不是Bitcoin独有的。匿名的另一个系统是Tor一个匿名的通信网络。
一方面Tor被希望保护自己免受在线追踪的普通囚使用。它被记者、活动家和持不同政见者用来自由的说话而不用担心受到压迫政权的影响。执法机构也会使用这些来监控嫌疑人而鈈会透露他们的IP地址(毕竟,分配给不同组织包括执法机构的IP地址范围或区块往往是众所周知的)。显然Tor有很多应用可以在道德上得箌批准。然而它也有明显的坏用途:僵尸网络运营商使用它们来控制受感染机器,并用于分发儿童性虐待图像
在技术层面区分这些用途基本上是不可能的。Tor开发商和Tor社区广泛地解决了这个难题真个社会也在某种程度上进行努力。我们似乎得出结论总的来说,技术存茬的世界更好事实上,Tor项目的主要资金来自美国国务院他们对Tor感兴趣,因为它可以在压迫政权中为异议人士在线免费发表言论与此哃时,执法机构似乎也勉强地接受了Tor的存在并且开辟了解决方法。FBI经常设法破坏分发儿童性虐待图像的“黑网”网站尽管这些网站隐藏在Tor之后。通常这是因为操作员跳起来了我们必须记住,技术只是一种工具犯罪者生活在现实世界中,在于技术相互作用的情况下怹们可能留下实际证据或犯下全部人都会犯下的人为错误。
匿名化与权力下放我们将在本章中看到一个反复出现的主题,即匿名化和权仂下放的设计标准通常彼此冲突如果你从序言中回忆起了Chaum的ecash,它在某种意义上实现了完美的匿名性但要通过与中央机构——银行的交互式盲签名协议。你可以想象这样的协议很难分散。其次如果我们分散化,那么我们必须保持一些机制来跟踪交易并防止双重支付這种公开的交易可追溯性是对匿名的威胁。
在本章的后面我们将看到匿名分散的加密货币Zerocoin和Zerocash,与Chaum的ecash有一些相似之处但是由于这两个限淛,它们必须解决棘手的加密挑战
6.2如何对比特币进行匿名化
我们已经说过多次,比特币只是匿名的所以你的所有交易或地址都可能会被链接在一起。我们来仔细看看实际可能发生的情况
图6.1显示了维基解密捐赠页面的一个片段(包括本章开头的引文)。注意捐赠地址旁邊的刷新按钮如你可能期望的,点击按钮将用新生成的地址替换捐赠地址同样,如果你刷新页面或关闭它并稍后访问它,它将有另┅个从来没有见过的地址那是因为维基解密希望确保他们收到的每一笔捐款都会发给他们创建的新公钥。维基解密正在利用创建新假名能力的最大优势这实际上是Bitcoin钱包使用匿名的最佳做法。
图6.1维基解密捐赠页面的片段注意Bitcoin地址旁边的刷新图标。维基解密遵循Bitcoin最佳做法为每次捐款生成新的接收地址。
起初你可能会认为这些不同的地址必须是无法链接的。维基解密分别收到每笔捐款想必他们也可以汾别支付这些捐款。但事情很快就崩溃了
链接。假设爱丽丝想买一个8比特币的茶壶(按2015年汇率计算更可能是8厘比特币)。另外假设她在不同的比特币地址分别有3、5和6三个独立的未使用的输出。爱丽丝实际上没有一个地址有8个比特币在那所以她必须将她的两个输出作為输入组合成一个单一交易,付给商店
但这揭示了一些东西。交易永久记录在区块链中任何看到它的人都可以推断出交易的两个输入朂有可能在同一用户的控制之下。换句话说共享支出是联合控制不同输入地址的证据。当然也可能有例外也许爱丽丝和鲍勃是室友,並同意通过提供一个交易输入共同购买茶壶但总的来说,联合投入意味着共同控制
图6.2为了支付茶壶,Alice必须创建一个具有两个不同地址嘚输入交易一旦这样做,爱丽丝就透露了这两个地址是由一个实体控制的
但它不会就此止步。对手可以重复这个过程并将整个交易集群连续地链接成属于一个实体。如果另一个地址以这种方式链接到Alice的任何一个地址那么我们知道所有三个地址都属于同一个实体,我們可以使用这个观察集群地址一般来说,如果新地址的输出与集群中任何地址的输出一起使用则该新地址也可以添加到集群中。
在本嶂的后面我们将研究一种名为CoinJoin的匿名技术,它通过违背这一假设而起作用但是现在,如果你假设人们常规使用的比特币钱包软件没有任何特殊的匿名技术那么这种集群往往是非常强大的。我们还没有看到如何将这些集群与现实世界的身份联系起来但我们很快就会得箌。
侧边栏:更改随机化地址bitcoin-qt库的早期版本有一个错误,它始终将更改地址作为具有两个输出交易中的第一个输出这意味着在许多交噫中确定变更地址是微不足道的。这个错误在2012年修复但突出了重要的一点:钱包软件在保护匿名方面发挥了重要的作用。如果你正在开發钱包软件你应该注意到许多陷阱;特别是你应该随时选择更改地址的位置,以避免给对手太多的空间
回到我们的例子,假设茶壶的價格从8比特币上升到8.5比特币爱丽丝不能再找到一套有效的未使用输出,她可以结合来产生茶壶所需的零钱相反,爱丽丝利用了交易可鉯有多个输出的事实如图6.3所示。其中一个输出是商店的付款地址另一个是她自己拥有的“更改”地址。
现在从对手的角度来考虑这个茭易他们可以推断出两个输入地址属于同一用户。他们可能会怀疑其中一个输出地址也属于该用户但无法确定哪一个是。0.5输出较小的倳实并不意味着这是变更地址爱丽丝可能会有在交易中有一万个比特币,她可能在茶壶上花8.5比特币并将剩余的9,991.5比特币送回自己身边。茬这种情况下更大的输出实际上是改变地址。
图6.3:更改地址为了支付茶壶,爱丽丝必须创建一个交易一个输出到商家,另一个输出發回到自己
一个更好的猜测是,如果茶壶的成本只有0.5比特币那么爱丽丝就不必用两个不同的输入创建一个交易,因为3个比特币输入或6個比特币输入本身已经足够了但这种启发式的有效性完全取决于常用钱包软件的实现细节。即使没有严格的必要条件也不会阻止钱包(或用户)组合交易。
惯用语这种实现细节被称为“使用习语”。2013年一组研究人员发现大多数钱包软件都是一种习惯用语,并且导致叻一种强大的启发式来识别变更地址具体来说,他们发现每当需要更改地址时,钱包通常会生成一个新的地址由于使用习惯用语,哽改地址通常是从未出现在区块链中的地址另一方面,非变化输出通常不是新的地址并且可能以前在区块链中出现过。对手可以使用這些知识来区分更改地址并将其与输入地址相链接
利用习语可能会很容易出错。事实上更改地址是新鲜的地址,恰好是钱包软件的一個功能研究人员在2013年测试时确实如此。也许这是真的但也许不是。用户可以选择废除此默认行为最重要的是,知道这种技术的对手佷容易规避它即使在2013年,研究人员发现它产生了很多假阳性他们最终把不属于同一实体的地址集中在一起。他们报告说他们需要进荇重大的手工监督和干预,以消除假阳性
图6.4:地址的聚类。在2013年的一篇“一群比特币:表征男性无名称付款”的论文中研究人员将共享消费启发式和新鲜变化地址启发式组合到集群比特币地址。这些圆圈的大小代表流入这些集群的货币数量每个边缘代表一笔交易。
将現实世界的身份附加到集群中在图6.4中。我们看到Meiklejohn等人如何使用用作启发式的基本习语的集群比特币地址但图形没有标注——我们还没囿附加身份到集群。
我们可能会根据对比特币经济的了解做出一些有根据的猜测。早在2013年Mt. Gox是最大的比特币交易所,所以我们可能会猜箌大的紫色圆圈代表了他们所控制的地址。我们也可能会注意到尽管拥有最多的交易数量,但是Bitcoins中左侧的棕色集群的数量很小这适匼赌博服务Satoshi骰子的模式,这是一个流行的游戏你发送少量的比特币作为下注。总的来说这不是识别集群的好方法。它需要知识和猜测且只能为最突出的服务工作。
通过交易标记只访问每个交易所或商家的网站,并查找他们为接收比特币做广告的地址会怎么样然而,这并不奏效因为大多数服务将为每个交易发布一个新的地址,并且向你展示的地址尚未在区块链中这没有任何等待的意义,因为这個地址永远不会展示给其他人
推断地址的唯一可靠的方法是与该服务提供商实际交易——存放比特币,购买物品等当你向服务提供商發送比特币或从服务提供商接收比特币时,你现在将知道其中的一个地址这些地址将很快在区块链(以及其中一个群集)中结束。然后你可以使用服务提供商的身份标记整个集群。
这正式“一群比特币”的研究人员(和其他人)完成的他们购买了各种各样的东西,加叺采矿池使用比特币交易所,钱包服务和赌博网站并以各种其他方式与服务提供商进行互动,折中了344笔交易
在图6.5中,我们再次显示叻图6.4的集群但是这次与标签相连。虽然我们对Mt. gox和Satoshi骰子的猜测是正确的研究人员能够识别许多其他服务提供商,但不与这些服务提供商茭易将很难识别他们
图6.5。标签集群通过与各种Bitcoin服务提供商进行交易,Meiklejohn等人 能够将真实世界的身份附加到他们的集群中
识别个人。下┅个问题是:我们可以为个人做同样的事情吗也就是说,我们可以将对应于个人的小集群连接到他们的现实身份吗
直接交易。任何与個人交易的人——在线或离线商家交换,或使用Bitcoin分享晚餐帐单的朋友——至少知道一个属于他们的地址
通过服务提供商。在几个月或幾年内使用比特币的过程中大多数用户将最终与交易所或另一个集中式服务提供商进行互动。这些服务通常要求提供者向用户询问他们嘚身份——通常他们在法律上需要我们将在下一章中看到。如果执法机构想要识别用户他们可以转向这些服务提供商。
疏忽人们经瑺在公共论坛上发布他们的比特币地址。一个常见的原因是被要求捐赠当有人这样做时,它会创建他们的身份和他们的地址之间的链接如果他们不使用我们将在以下部分中看到的匿名服务,那么他们有可能使所有的交易脱离匿名
事情变得越来越糟。历史表明随着越來越多的研究人员研究问题并发现新的攻击技术,数据可公开获得去匿名算法通常会随着时间的推移而改善。此外攻击者可以使用更哆的辅助信息来将身份附加到集群。如果你关心隐私这是值得担心的。
迄今为止我们所研究的去匿名技术都是基于分析区块链中交易嘚图形。它们统称为交易图分析
网络层去匿名。有一种完全不同的方式用户可以不依赖于交易图去匿名。回想一下为了将交易发布箌区块链,一个通常将其广播到Bitcoin的对等网络其中发送的消息不一定永久地记录在区块链中。
在网络术语中区块链被称为应用层,对等網络是网络层Dan Kaminsky在2011年黑帽会议上首次指出了网络层去匿名。他注意到当节点创建一个交易时,它同时连接到许多节点并广播交易如果網络上足够多的节点相互勾结(或由同一对手运行),则他们可以计算出第一个节点来广播任何交易想必,这将是创建交易的用户运行嘚节点然后对手可以将交易链接到节点的IP地址。一个IP地址接近真实身份;有很多方法可以尝试使IP地址后面的人员露出真相因此,网络層去匿名是隐私的严重问题
图6.6:网络层去匿名。正如丹·卡明斯基在2011年黑帽谈话中指出的那样“通知你一个交易的第一个节点可能是咜的源头”。当多个节点合作并识别相同的源时该启发式被放大。
幸运的是这是通信匿名的一个问题,这已经成为相当大的研究课题正如我们在6.1节早些时候看到的,有一个广泛部署的名为Tor的系统可用于匿名通信。
使用Tor作为比特币的网络层匿名解决方案有几个注意事項首先,Tor协议和覆盖在其上的任何协议之间存在微妙的交互导致新的方式来破译匿名。事实上研究人员发现使用Bitcoin-over-Tor的潜在安全问题,所以这一点必须特别小心其次,可能还有其他匿名通信技术更适合在比特币中使用Tor的目的是用于“低延迟”活动,如网络浏览您不想坐在等待太久。它做了一些妥协以达到低延迟实现匿名。相比之下比特币是一种高延迟系统,因为交易需要一段时间才能在区块链Φ得到确认在理论上,至少你可能希望使用一种替代的匿名技术,例如混合网络但目前,Tor具有大量用户群并且其安全性被深入研究的实际系统的优点。
到目前为止我们已经看到,不同的地址可能会通过交易图分析联系在一起并且它们也可以链接到真实世界的身份。我们也看到一个交易或地址可以链接到基于对等网络的IP地址后一个问题比较容易解决,即使不能完全解决前一个问题更棘手,我們将在本章的其余部分讨论如何解决这个问题
有几种机制可以使交易图的分析效率降低。一种这样的技术是混合其背后的直觉非常简單:如果你想匿名,使用中介这个原理并不是比特币特有的,在许多以匿名为目标的情况下都是有用的混合如图6.7所示。
图6.7:混合用戶向中介人发送硬币,并拿回其他用户存放的硬币这使得难以在区块链上追踪用户的硬币。
在线钱包混合如果你回想起我们在线钱包嘚讨论,他们可能似乎适合作为中介在线钱包是你可以在线存储你的比特币的服务,稍后将其退回通常,你提取的硬币将不会与你存叺的硬币相同在线钱包是否提供有效的混合?
在线钱包确实提供了一种无关联性的措施可以掩盖交易图分析的尝试——在一种情况下,杰出的研究人员不得不收回已经收到的大量公开的索赔因为他们认为他们发现的链接是由一个在线钱包造成的虚假链接。
另一方面使用在线钱包进行混合有几个重要的限制。首先大多数在线钱包实际上不承诺混合用户的资金;相反,他们这样做是因为它简化了工程伱不能保证他们不会改变他们的行为。第二即使他们混合资金,他们几乎肯定会在内部保存记录这样他们就可以将你的存款与你的退款挂钩。由于安全和合法合规的原因这是一个谨慎的钱包服务选择。因此如果你的威胁模式包括服务提供商本身跟踪你或被黑客入侵戓被迫交出记录的可能性,那么你将回到原点第三,除了在内部保存记录之外信誉良好和受监管的服务还将要求记录你的身份(我们將在下一章中更详细地讨论监管)。你将无法用用户名和密码创建帐户所以在某种意义上说,它使你比不使用钱包服务更糟糕这就是為什么我们在上一节中提到中央集权和匿名之间的紧张关系。
在线钱包提供的匿名性与传统银行系统所提供的类似有集中的中间人了解峩们的交易,但是从一个没有特权信息的陌生人的角度来看我们有一个合理程度的隐私。但是正如我们所讨论的那样块链的公共性质意味着如果出现问题(比如钱包或交换服务遭到黑客攻击,记录被暴露出来)隐私风险就会比传统的系统更严重。此外大多数以比特幣匿名的人倾向于这样做,因为他们不满意传统系统的匿名属性并希望有更好的(或不同种类的)匿名保证。这些是专门的混合服务背後的动机
专用混合服务。与在线钱包形成鲜明对比的是专门的混合承诺不保留记录,也不需要你的身份你甚至不需要使用用户名或其他化名来与混合进行交互。你把你的比特币发送到混合提供的一个地址你告诉混合目的地地址来发送比特币。希望混合将很快发送你嘚(其他)比特币在你指定的地址它本质上是一个互换。
虽然专门的混合承诺不保留记录是件好事但你仍然不得不相信他们履行承诺。你不得不相信他们会把你的硬币意义送回来由于混合不是存储你比特币的地方,与钱包不同你需要相对快速地恢复你的硬币,这意菋着你的其他硬币池与你即将混合的存款将小得多——那些存放在大致相同的时间
侧边栏:术语。在本书中我们将使用术语“混合”來代指专用混合服务。一些人喜欢的等同词是混合器
你也可能会遇到洗礼一词。我们不喜欢这个术语因为不必要将道德判断附加在一個纯技术概念上。如我们所见有很好的理由解释为什么你可能想保护你在比特币中的隐私,并在日常隐私中使用混合当然,我们也必須承认有不良用途但是使用洗礼术语可以促进消极的内涵,就像它意味着你的硬币时脏的你需要清理它们。
还有一个翻滚术语不清楚这是指滚筒的混合作用还是其清洁效果(在宝石等上)。无论如何我们将坚持“混合”一词。
一组研究人员包括本教科书的五位作鍺中的四位,研究了混合物并提出了一套改进混合方式运行的原则,无论是增加匿名性上还是委托你的硬币给混合物的安全性上。我們将看看这些准则
使用一系列混合物。第一个原则是一个接一个地使用一系列混合而不是单一的混合。这是一个众所周知和公认不错嘚原则——例如Tor,我们将稍后看到使用一系列3路由器进行匿名通信。这减少了对任何单一组合可信赖性依赖只要系列中的任何一个混合物都保持其承诺并删除其记录,你就有理由期望没有人能够将你的第一个输入链接到你收到的最终输出
图6.8.混合系列。我们从拥有一個硬币或输入地址的用户开始我们假定对手已经设法链接到它们。用户通过各种混合发送硬币每次提供新产生的输出地址到混合。只偠这些混合物中至少有一个破坏了其输入到输出地址映射的记录并且没有信息的侧信道泄漏,则攻击者将无法将用户的原始硬币连接到朂终的硬币
统一交易。如果不同用户的混合交易具有不同数量的比特币则混合不会很有效。由于进入混合和混合出来的值不得不被保留它将使用户的硬币在流过混合时链接,或者至少大大减少匿名集的大小
相反,我们希望混合交易具有统一的价值以便最小化可链接性。所有混合均应符合标准块大小即输入混合交易必须具有固定值。这将增加匿名集因为所有通过任何混合的交易将看起来相同,並且不会根据其价值区分此外,在所有混合上具有统一的尺寸可以轻松地使用一系列混合而不必拆分或合并交易。
实际上很难就单個块大小对所有用户的工作达成一致。如果我们选择它太大想要混合少量钱的用户将无法实现。但是如果我们选择它太小,那么想要混合大量资金的用户将需要将其分成大量的块这可能是无效率的和成本高昂的。多个标准块大小会提高性能但也可以通过块大小拆分匿名集。也许一系列的两个或三个增加的块大小将提供一个合理的效率和隐私之间的权衡。
客户端应自动化除了尝试基于交易价值链接硬币之外,一个聪明的对手可以尝试各种其他方式进行匿名化例如通过观察交易的时间。这些攻击可以避免但是对于用户而言,必偠的预防措施太复杂和繁琐相反,用于与混合进行交互的客户端功能应该是自动化的并且内置在隐私友好的钱包软件中。
费用应该是铨有或全无混合是企业,并希望得到报酬混合收费的一种方式是对用户发送的每笔交易进行削减。但这对于匿名是有问题的因为混匼交易不再是标准的块大小。(如果用户尝试将稍微更小的块拆分并合并回原始块大小则会引入了严重且难以分析的匿名风险,因为引叺的硬币之间有新的联系)
不要混淆混合费用和矿工收取的交易费用。混合费用与此类费用是分开的
为了避免这个问题,混合费用应該是全有或者全无并且概率地应用。换句话说混合应该以很小的概率吞下整个块,或者将其全部返回例如,如果混合要收取0.1%的混匼费用那么每1000次混合中的一次就可以吞下整个组块,而1,000个组合中的999次应该返回整个组块而不收取混合费用
这是一个棘手的事情。混合必须做出概率决定并说服用户它没有作弊:它没有偏倚其随机数发生器,因此它(例如)以1%的概率保留块作为费用而不是0.1%。密码學提供了一种方法我们将在进一步阅读部分中介绍Mixcoin论文的详细信息。文中还谈到混合可以提高其可信度的各种方式
在实践中混合。截臸2015年没有一个功能齐全的混合生态系统。有很多混合服务但是它们的体积很小,因而具有很小的匿名集更糟糕的是,据报道许多混合被报告过偷盗比特币。也许“引导”这样一个生态系统的困难是它从来没有进展的原因之一考虑到混合的欺诈性声誉,没有多少人想要使用它们导致交易量低,因此匿名性差有一个古老的说法,匿名爱公司也就是说,使用匿名服务的人越多它就可以提供更好嘚匿名性。此外由于缺乏提供广告服务的资金,混合运营商可能会试图窃取资金从而延续不可信度的混合循环。
今天的混合不符合我們制定的任何原则每个混合操作独立并且通常提供web界面,用户通过该界面手动地交互以指定接收地址和任何其他必要的参数用户可以選择他们想要混合的量。 该混合将以每笔交易的方式将其作为混合费用并将其余费用发送到目的地址。
我们认为混合(和钱包软件)有必要移动到我们提出的模型以实现强大的匿名性,抵御聪明的攻击提供可用的界面,并吸引大量声音但是,如果一个强大的混合生態系统将不断发展还有待观察。
分散混合是摆脱混合服务并用一组用户可以混合其硬币的对等协议替换它们的想法。可以想象这种方法与比特币相比更符合哲学原则。
权力下放也具有更多的实际优势首先,它没有引导问题:用户不必等到有信誉的集中式混合才能存茬第二,在分散混合中盗窃是不可能的;协议确保当你将比特币混合时你将得到相同价值的比特币。正因为如此即使一些中央协作茬分散混合中是有帮助的,所以人们更容易建立这样的服务因为他们不必说服用户信任他人。最后在某些方面,分散混合可以提供更恏的匿名性
Coinjoin。分散混合的主要方案称为Coinjoin在这个协议中,不同的用户共同创建一个组合它们所有输入的比特币交易使Coinjoin工作的关键技术原则是:当一个事务具有来自不同地址的多个输入时,对应于每个输入的签名彼此分离并且彼此独立所以这些不同的地址可以由不同的囚控制。你不需要一方收集所有私钥
这允许一组用户将他们的硬币与单个交易混合。每个用户提供输入和输出地址并且一起形成这些地址的交易输入和输出地址的顺序是随机的,因此局外人将无法确定输入和输出之间的映射参与者检查他们的输出地址是否包含在交易Φ,并且它收到与他们输入的相同数量的比特币(减去任何交易费用)一旦他们确认了这一点,他们签署交易
有人在区块链上看这个茭易——即使他们知道它是一个Coinjoin交易——将无法确定输入和输出之间的映射。从局外人的角度来说硬币是混合的,这是Coinjoin的精髓
到目前為止,我们所描述的只是一轮混合但我们之前讨论的原则仍然适用。你想和不同的用户组重复这个过程(大概是)你还需要确保标准囮的块尺寸,以便不要引入任何侧面通道
我们现在深入了解Coinjoin的细节,可以分为5个步骤:
1.寻找想要混合的对等体
2.交换输入/输出地址。
4.发送交易每个对等体在验证其输出之后进行标志。
寻找对等体首先,一群想要混合的对等体需要找到对方这可以通过作为“浇水孔”嘚服务器来促成,从而允许用户连接和分组在一起与集中混合不同,这些服务器无法窃取用户资金或泄露匿名资料
交换地址。一旦对等体组合已经形成对等体必须彼此交换他们的输入和输出地址。参与者以这样一种方式交换这些地址非常重要即使对等组的其他成员吔不知道输入和输出地址之间的映射。否则即使你执行的是一个随机的对等体组合的coinjoin交易,一个对手也许可以将它们移入组中并注意輸入到输出的映射。以不可链接的方式交换地址我们需要一个匿名通信协议。我们可以使用我们前面提到的Tor网络或者称为解密混合网絡的专用匿名路由协议。
收集签名和拒绝服务一旦输入和输出被传达,其中一个用户——不管是谁——将构建与这些输入和输出相对应嘚交易未签名的交易将被传递;每个对等体将验证其输入和输出地址是否正确且包含签名。
如果所有的对等体遵循这个协议这个系统运荇良好。任何对等体可以组合交易任何对等体可以将该交易广播到网络。他们中的两个人甚至可以独立广播;当然它将只发布一次到区塊链。但是如果一个或多个对等体想要破坏性,那么他们很容易发起拒绝服务攻击从而阻止协议的完成。
特别的对等体可以参与协議的第一阶段,提供其输入和输出地址然后拒绝登录第二阶段。另外在签署交易之后,一个破坏性的对等体可以尝试将其提供给它的對等体的输入并将其花费在其他交易中。如果备用交易在网络上赢得比赛它将首先被确认,Coinjoin交易将被作为双重支付拒绝
在Coinjoin中,有几項预防拒绝服务的建议一个是通过工作证明(类似于采矿)或通过燃烧证明来强加协议的参与成本,一种用来证明破坏你拥有的少量比特币的技术我们在第3章中研究过。另外存在用于识别不合规参与者并将其从群组中踢出的加密方式。有关详细信息请参阅进一步阅讀部分。
高层次流动我们较早提到了侧通道。现在我们来仔细看看侧通道有多巧妙(棘手)让我们说,爱丽丝收到一个特定数量的比特币比如说43.12312
BTC,每周一个特定的地址也许是她的薪水。假设她有一个习惯自动将5%的金额转入退休账户,这是另一个比特币地址我們称这种传输模式为高层次流程。在这个场景中没有混合策略可以有效地隐藏这两个地址之间存在关系的事实。想一想在这个区块链上鈳以看到的模式:具体的数量和时间及不可能地偶然发生了
图6.10:合并回避。爱丽丝希望买一个价值8比特币的茶壶商店给她两个地址,她支付5个到一个地址3个到另一个地址,与她可用的输入资金相匹配这样可以防止透露这两个地址都属于爱丽丝。
Hearn提出一种技术可以幫助恢复在高层次流动性存在的情况下重新获得无关联性,称为合并回避一般而言,为了进行付款用户创建一个单独的交易,它将所需的硬币组合在一起以将整个金额支付给单个地址。如果他们可以避免合并的需求从而连接所有的输入呢?合并回避协议通过允许接收方付款提供多个输出地址(根据需要)来实现这一点发送者和接受者同意一组面值,来将付款分解并执行多个交易,如图6.10所示
假設商店最终将这两笔付款与它收到的其他付款的许多其他输入相结合,那么这两个地址彼此关联就不那么明显了商店应避免在收到这两個输入之后重新组合,否则它们由同一实体制造的将仍然是清楚的此外,爱丽丝可能希望避免在同一时间发送两笔付款这可能会同样揭示这些信息。
一般来说合并回避可以帮助缓解高层次流动的问题:如果它被分解成许多较小的彼此没有链接的流动,对手可能无法辨別流流动它还克服了依赖于单个交易共同使用硬币的地址聚类技术。
没有哪个加密货币的匿名解决方案引起了如Zerocoin一样的兴奋和如Zerocash一样的荿功这既是因为他们使用的巧妙密码学,也是因为他们所承诺的强大匿名性尽管我们迄今为止所见到的所有匿名增强技术在核心协议の上增加了匿名性,但是Zerocoin和Zerocash在协议级别都包含匿名性我们将在这里介绍协议的高级视图,并且简化一些细节你也可以在“进一步阅读”部分找到对原始论文的参考。
兼容性正如我们将看到的,Zerocoin和Zerocash的强大匿名保证是有代价的:与集中混合和Coinjoin不同现在这些协议与Bitcoin不兼容。在技术上可以使用软叉将Zerocoin部署到比特币,但是实际的困难足够严重使得这不可行。对于Zerocash分叉甚至是不可能的,而altcoin是唯一的选择
加密保证。Zerocoin和Zerocash包含了协议级的混合它的匿名属性具有加密保证。这些保证在质量上优于我们讨论的其他混合技术你不需要信任任何人——混合体,对等体或中间人甚至是矿工和协商一致的协议——以确保你的隐私。匿名的承诺只取决于对手的计算能力限制与大多数加密保证一样。
Zerocoin为了解释Zerocoin,我们将首先介绍Basecoin的概念Basecoin是比特币式的altcoin,而Zerocoin是这种altcoin的延伸提供匿名性的关键功能是,你可以将basecoin转化为Zerocoins并重噺回收当您这样做时,它会打破原始basecoin和新的basecoin之间的联系在这个系统中,Basecoin是你所处理的货币Zerocoin只是提供一种机制来交易你的新basecoin,而与旧嘚不相关
你可以查看你拥有的每个zerocoin,作为一个令牌你可以使用它来证明你拥有一个basecoin并使其无法使用。证明并不揭示你拥有哪个basecoin只是說明你拥有一个basecoin。你可以稍后通过向矿工提供此证明来兑换新的basecoin一个比喻是就像进入一个赌场,并将你的现金交换成扑克筹码这些服務作为你存入现金的证明,你可以随后在退出赌场时兑换相同价值的不同现金当然,与扑克筹码不同的是除了持有它,你不可能做任哬事情除了保留它,然后就只能将它兑换为一个basecoin
为了使这个工作以加密的方式运行,我们用密码学的方式实现这些证明我们需要确保每次证明只能使用一次来赎回basecoin。否则你可以通过将basecoin转化为zerocoin,然后多次赎回来免费获得basecoins
零知识证明。我们将使用的关键加密工具是一種零知识证明这是一种方法,可以让某人证明(数学)语句而不会透露导致该声明成立的任何其他信息。例如假设你已经做了很多笁作来解决哈希谜题,并且你想要说服某人也这样做换句话说,你想证明这个说法
当然,你可以通过揭示x来做到这一点 但是,零知識证明可以让您以这样一种方式来做到这一点:另一个人在看到证明之后对于x的价值并不比以前更清楚。
你也可以证明一个声明如“峩知道x,使得H(x)属于以下集合{...}”该证明将不会显示x,也不会显示该集合的哪个元素等于H(x)Zerocoin至关重要地依赖于零知识证明,事实上Zerocoin證明的陈述与后一个例子非常相似在这本书中,我们将把零知识证明视为黑盒子我们将介绍通过零知识证明实现的属性,并会显示他們在协议中是如何的必要但是我们不会深入研究这些证明实现的技术细节。零知识证明是现代密码学的基石也是许多协议的基础。再佽如读者你有兴趣可查看进一步阅读部分,以获得更详细的处理
铸造Zerocoins。Zerocoins通过铸造而存在任何人都可以铸造Zerocoins。他们有标准的面额为叻简单起见,我们假定只有一个价值为1.0的zerocoins而且每个zerocoin都值一个basecoin。虽然任何人都可以铸造zerocoin只是铸造不会自动赋予它任何价值——你不能得箌免费的钱。只有当你把它放在区块链上才能获得价值这样做就需要放弃一个basecoin。
要铸造zerocoin你要使用加密承诺。回顾一下第1章承诺方案昰将信封中的价值密封并将其放在桌子上的加密模拟。
图6.11:提交序列号加密承诺的真实世界模型是在信封内密封一个值。
铸造一个zerocoin分三個步骤完成:
1.生成序列号S和随机密码r
2.计算并提交(Sr),对序列号进行承诺
3.将承诺发布到区块链上如6.12所示。这会烧伤一个basecoin使其无法使鼡,并创造出一个zerocoin现在对S和r保密。
图6.12:把一个zerocoin放在区块链上要将一个zerocoin放在区块链上,你需要创建一个特殊“造币厂”交易其输出“哋址”是zerocoin序列号的加密承诺。造币厂交易的输入是一个basecoin已经在创造zerocoin中花费掉。这个交易不显示序列号
要花费一个zerocoin兵兑换一个新的basecoin,你需要证明你以前铸造了一个zerocoin你可以通过打开你以前的承诺,即揭示S和r来做到这一点但是,这使得你的旧basecoin和新的basecoin之间的联系显而易见 峩们如何打破链接?
这就是零知识证明的来源在任何时候,块链上都会有很多的承诺-让我们称之为cc,...c。
以下是使用带序列号S的zerocoin赎回┅个新的basecoin的步骤:
·创建一个包含S的特殊“支出”交易以及零知识证明的声明:
·矿工将验证你的零知识证明,确定你是否有能力在区块链上开启一个
zerocoin承诺,而无需实际打开它
·矿工还将检查序列号S从未在任何以前的支出交易中使用(因为这将是双
·你的支出交易的输出现在将作为一个新的basecoin。对于输出地址你应该使用一个你拥有的地址。
图6.13:花费一个zerocoin支出交易显示了早起造币厂交易提交的序列号S,鉯及S对应的一些较早的造币厂交易的零知识证明与造币厂交易(或正常的比特币/basecoin交易)不同,支出交易没有投入因此没有签名。相反零知识证明可以确定其有效性。
一旦你花了一个zerocoin序列号将变成公开的,你将永远无法再次兑换这个序列号由于每个zerocoin只有一个序列号,这意味着每个zerocoin只能花费一次正如我们所要求的那样安全。
匿名注意到r在整个过程中保持秘密;造币厂和消费交易都不会显露出来。这意味着没有人知道哪个序列号对应于哪个zerocoin这是Zerocoin匿名的关键概念。在提交序列号S的造币厂交易和后来显示S兑换basecoin的支出交易之间的区块链上沒有链接这是一个可以通过加密技术实现的神奇属性,但是我们不会进入一个物理的基于信封的系统。就好像在桌子上有一堆具有不哃序列号的密封信封你可以证明一个特定的序列号是其中之一,而不必揭示哪一个也不必打开任何信封。
效率回顾在支出交易中证奣的陈述:
这听起来像执行效率太低,因为零知识证明的大小会随着n的增加而线性增长这是曾经被铸造zerocoins的数量。值得注意的是Zerocoin设法使這些证明的大小为n的对数。注意即使要证明的语句有一个线性长度,但也不需要连同证明一起包含声明是隐含的;这可以由矿工推断出來,因为他们知道区块链上的所有zerocoins的集合证明本身可以更短。然而与比特币相比,Zerocoin仍然增加了相当可观的开销其证明大小有50
信任的建立。用于构建Zerocoin(RSA累加器)的加密工具之一需要一次性的信任建立。具体来说可信方需要选择两个大素数p和q,并发布N = p·q这是每个人將在系统的使用寿命期间使用的参数。想像N像一个公钥除了所有的Zerocoin,而不是一个特定的实体只要信任方破坏了p和q的任何记录,系统就被认为是安全的特别地,这取决于广泛认可的假设即将数字分解为两个大素数的乘积是不可行的。但是如果有人知道p和q的秘密因素(稱为“陷门”)那么他们可以为自己创建新的zerocoins而不被检测到。因此这些秘密输入必须在生成公共参数时使用一次,然后被安全地销毁
这里有一个有趣的社会学问题。不清楚实体如何选择N并说服大家他们已经安全地销毁了在设置过程中使用的因素p和q已经有了各种各样嘚建议去探索如何实现这一点,包括允许一组代表联合计算N的这种“阈值加密技术”只要它们中的任何一个删除其秘密输入,系统将保歭安全
也可以使用稍微不同的加密结构来避免可信设置。具体地说已经表明,简单地生成非常大的随机值N是高可靠性的因为这个数量可能不能被完全考虑。不幸的是这带来了巨大的效率打击,因此不被认为是实际的
Zerocash。Zerocash是一种基于Zerocoin概念的不同的匿名加密机制但将加密技术提升到了一个新的水平。它使用称为零知识SNARK(zk-SNARKS)的加密技术这是一种使零知识证明更加紧凑和高效验证的方式。结果是整个系统的效率达到了一个可以在不需要一个basecoin的情况下运行整个网络的程度。所有交易都可以以零知识的方式完成正如我们所看到的,Zerocoin支持瑺规事务当你不需要非连接性时,增加了仅用于混合的计算上昂贵的交易混合交易是固定面额,价值的分割和合并只能在Basecoin发生在Zerocash中,这个区别已经消失了交易金额现在在承诺的范围内,且在区块链上不再可见加密证明确保分裂和合并正确发生,用户不能凭空创建zerocash
分类帐公开记录的唯一事项是这些交易的存在,以及允许矿工验证系统正确运行所需的所有属性的证据在任何一点上,区块链都不会顯示地址和值需要知道交易金额的唯一用户是该特定交易的发件人和接收者。矿工不需要知道交易金额当然,如果有交易费用矿工們需要知道这笔费用,但这并不真正影响你的匿名性
在匿名和隐私方面,zerocash作为一个完全不可追踪的交易系统的运行能力它独自归类。甴于公共分类帐不再包含交易金额Zerocash不受侧面渠道的混合攻击。
创建Zerocash在其技术性能方面,Zerocash听起来可能太好了而显得不真实。确实有一個陷阱就像Zerocoin一样,Zerocash需要“公共参数”来建立零知识证明系统但是,与Zerocoin不同Zeroco只需要一个数字N,只有几百个字节Zerocash需要一大堆公共参数——超过一千兆字节。再次为了产生这些公共参数,Zerocash需要随机和秘密的输入如果有人知道这些秘密输入,它会通过启用不可检测的双偅支付来破坏系统的安全性
我们不会在这里深入研究建立zk-SNARK系统的挑战。 它仍然是一个积极的研究领域但截至2015年,我们并不知道如何以充分可靠的方式在实践中建立该系统迄今为止,zk-SNARKs在实践中还没有被使用
把它们放在一起。现在我们来比较我们已经看到的解决方案無论是在他们提供的匿名性质方面,还是在实践中如何部署它们
表6.14:本章中介绍的匿名技术比较
我们从已经部署的Bitcoin本身开始,是“默认”系统但它只是匿名,我们已经看到强大的交易图分析是可能的我们研究了大量分组地址族群的方法,以及如何有时将真实身份标识附加到这些集群
匿名的下一个级别是以手动方式使用单个组合,或者通过手动查找对等体来执行Coinjoin这掩盖了输入和输出之间的链接,但茬交易图中留下了太多潜在的线索此外,组合体和同伴可能会恶意被黑客入侵或强制暴露其记录。虽然在匿名方面还不完美但混合垺务存在,因此今天可以使用此选项
我们看到的第三个层次是一连串混合或Coinjoins。匿名性改进来自于对单个组合或同一对等体的较少依赖性嘚事实诸如标准化块大小和客户端自动化等功能可以最大限度地减少信息泄漏,但是一些侧面的通道仍然存在还有一个对手控制或串通多个混合或同伴的对手的危险。实现混合链的钱包和服务今天可以部署和采用但据我们所知,安全的混合链解决方案尚不容易获得
接下来,我们看到Zerocoin直接将密码学加密到协议中并提供匿名性的数学保证。我们认为一些侧面渠道仍然是可行的但它肯定优于其他混合解决方案。然而Zerocoin必须作为altcoin推出。
最后我们看了一下Zerocash。 由于Zerocash效率的提高Zerocash可以作为一种完全不可追踪的方式运行——而不仅仅是匿名的——加密货币。不过像Zerocoin一样Zerocash并不与比特币兼容。 更糟糕的是它需要一个复杂的设置过程,社区仍然在弄清楚如何最好地完成它
本章巳经介绍了很多技术。现在让我们退一步比特币的匿名(和匿名的潜力)是强大的,并与其他技术特别是匿名通信结合获得力量正如峩们将在下一章中看到的,该强大组合体现在丝绸之路和其他匿名在线市场上
尽管它的力量,匿名是脆弱的一个错误可以创建一个不需要的,不可逆的链接但是匿名是值得保护的,因为它除了明显的不良之外还有许多好的用途虽然这些道德差异很重要,但我们发现洎己无法在技术层面上表达他们匿名技术似乎在深刻而内在的道义上是模棱两可的,作为一个社会我们必须学会生活在这个事实中。
仳特币匿名是技术创新和道德辩论的积极领域我们仍然不知道比特币的哪个匿名系统(如果有的话)会变得突出或主流。这是一个伟大嘚机会无论对于开发人员,决策者还是用户——去参与和做贡献希望你在本章中学到的东西给你正确的背景去做这些。