比特币仅仅是一个化名系统,所以你所有的交易记录或者交易地址很有可能被关联在一起。
下图展示了维基解密的捐款页面上的一个片段,请注意那个在比特币地址旁边的刷新按钮。可能你会期望通过点击这个刷新按钮,就会把接收捐款的地址换成一个全新生成的地址。类似地,如果你刷新页面或者关闭这个页面,重新再打开的时候,这个地址也会重新生成,而且是之前没有出现过的。这是因为,维基解密需要保证每接收一笔新的捐款,都会对应一个新创设的仅用于此笔捐款的公钥。维基解密这么做就是最大限度地利用了可以创建新化名功能的作用。这事实上就是比特币钱包实现匿名性的最好途径。
维基解密的捐款页面的一个片段.jpg你可能觉得这些不同的地址一定是无法关联的,维基解密收到的不同的捐款是完全分开的,并且推测它们可以分开使用每一笔捐款,但事实并非如此。
关联性
假设员外想要去买一个宋朝古董茶壶,价格是8个比特币。进一步假设,员外的比特币分在三个不同的地址里面,分别有3、5和6个比特币。实际上,员外没有一个比特币地址有足够的8个比特币,员外必须要把两个输出合并成一个单体输入,以支付给店铺。
那么问题来了,这笔交易会在区块链网络里有一个永久的记录,任何看到这个记录的人都可以推断,这两个输入型交易很有可能是由同一个用户控制的。换句话说,共享型消费,成为不同输入地址联合控制的证据。当然也可能存在例外,有可能员外和死柯侠是朋友,决定一起联合购买这个茶壶,并且分开付款。但是,大体来说,共同输入基本上意味着共同控制。
还不仅仅如此,攻击者可以重复上述过程,从而一步一步将这个个体所进行的所有交易关联起来。如果另外一个地址也关联到了员外用于交易的两个地址之一,那我们就知道所有三个地址都属于同一个个体,我们可以因此建立一个地址簇。一般来说,如果一个新地址的输出,和该地址簇中的任何一个已知地址被一起花费,那么这个新的地址也将会被加到该地址簇中去。
再回头看一下我们的例子。假设这个茶壶的价格从8个比特币上涨到了8.5个比特币,员外发现,未用完的支出账号里无法再组合生成恰好可以支付这个茶壶所需要的金额了。取而代之的方案是,员外利用交易可以有多重支出的特性,支出的其中之一就是茶壶店铺的接收地址,而另外一个则是员外自己的“找零”地址。
现在从其他人的视角来看这笔交易,他们可以推断出这两个输入地址都属于同一个用户,他们甚至可能怀疑其中一个支出地址也属于这个用户,但是无法知道具体是哪一个。事实上0.5个比特币虽然比其他的支出小,但是并不意味着这是一个零钱地址,员外可能有10 000个比特币参与了交易,其中员外支付了8.5个比特币用于购买茶壶,而把剩余的9991.5个比特币找零退回给了自己。在这样的场景中,更大的输出才是实际上的找零地址。
另外一种更好的解释是,如果茶壶只需要花费0.5个比特币,由于不管是3个比特币还是6个比特币的输入地址,都足够用来支付了,员外根本不需要创建两个不同输入组成的交易。但是,选择哪种交易方式完全取决于通常使用的钱包软件的特性,即使不是非常有必要,钱包(或者是用户)还是可以随意组合不同交易地址中的比特币来完成支付的。
网友评论