旁路攻击
即使没有发生直接的关联,因为侧面渠道或者一些间接的信息泄露,你的匿名身份也可能会被暴露 (deanonymized)。举个例子,某个人看过一个匿名的比特币交易记录,并且注意到了这个比特币交易的活跃时间,那么他就可以将这个时间信息与其他公开可获得的信息关联到一起。可能他会注意到在同一个时间某一个推特用户也出于活跃状态,那么就可以建立一个匿名的比特币资料和一个真实世界的用户(至少是一个推特账号)之间的关联。很显然,这样的匿名性并不能保障隐私或者绝对匿名。要想做到绝对匿名,我们需要更强的无关联性属性。
无关联性
为了更扎实地理解比特币范畴中的无关联性特征,我们可以列举一些在比特币交易中无关联性所需要的关键属性:
- 同一个用户的不同地址应该不易关联;
- 同一个用户的不同交易应该不易关联;
- 一个交易的交易双方应该不易关联。
上述第一条和第二条很容易理解,但第三条比较微妙。如果你把一笔“支付”诠释成一个比特币交易,那么第三条属性很明显就是一个伪命题。每一笔交易都有输入和输出,这些输入和输出都不可避免地会记录在区块链网络中,并且公开地关联在一起。然而,我们所指的支付并不仅仅是一笔比特币交易,而是指任何一种从发送者到接收者的传输比特币的行为,这种行为可能会涉及一系列的间接迂回交易。我们需要确保,通过查询区块链上的信息将发送者和最终的接收者关联在一起,是不可行的。
匿名集
即使我们对支付做出更加宽泛的定义,第三条属性看起来也比较难以实现。比如说,你支付一定数量的比特币来购买某个商品,并且通过迂回曲折的形式发送了这些比特币,其他人通过查看区块链上的信息,还是可以推断出某个比特币地址上减少了一定数量的比特币,而另外一个地址上增加了差不多相同数量的比特币(可能会扣除相应的交易费用)。此外,尽管传输是通过迂回曲折的路径,初始发送方发送比特币和最终接收方接受比特币基本上发生在同一个时间段,因为商家不太愿意接受延迟付款。
基于这样的困难,我们通常并不试图在系统中,对所有可能的交易或者地址都实现完全的无关联性,而是去实现更有限度的无关联性。想象一个特定的攻击者的情况,你的交易匿名集(anonymity set)是指该攻击者无法把你的交易从其中分辨出来的交易集合。即使该攻击者知道你完成了一个交易,但是他也仅仅知道这个交易是某一个合集中的一个,但并不能确定是哪一个。我们只需要努力去最大化这个匿名合集就可以了——在这个合集中,我们可以隐藏我们的地址或交易。
统计匿名集是很微妙的,由于这样的匿名集是针对某一个或者一组攻击者而定义的,所以你首先需要具体定义你的对手模型是怎样的。你必须要仔细思考对手已知和未知的内容,以及我们需要隐藏的内容——也就是说,如果要达到匿名性目标,交易中的那些信息是不能被对手知道的。没有成熟的公式告诉你该怎么做,需要根据每一个具体情况仔细分析相对应的协议和系统。
污点分析
在比特币社区中,人们通常根据直觉推断匿名性,而非严格的定义。污点分析就是一种非常流行的方式:这是一种推算两个地址相关性的方法。如果地址S发送出的比特币总是地址R接收,那么不管是直接抵达,还是经过了多少中间地址,S和R则被定义为具有高分污点。污点分析的计算公式,适用于多个输入和(或)输出的交易,并且确定如何分配污点的规则。
遗憾的是,污点分析也不是一个衡量比特币匿名性的好方法。它只是简单地认定对手在使用相同的计算方式在关联成对的地址。稍微聪明一点的对手会使用不同的技巧,比如查询交易时间,或者本章后面我们会讲的利用钱包软件的特性。所以,污点分析可能只会显示你在某种特定情况下具备的匿名性,而事实上可能并不准确。
网友评论