1703866970
1703866971
1703866972
图6.2 多地址输入交易
1703866973
1703866974
注:为了支付购买茶壶的钱,爱丽丝从两个不同的比特币地址创建了一个单一交易。这样爱丽丝就暴露了一个事实,即一个个体控制了两个不同的地址。
1703866975
1703866976
还不仅仅如此,攻击者可以重复上述过程,从而一步一步将这个个体所进行的所有交易关联起来。如果另外一个地址也关联到了爱丽丝用于交易的两个地址之一,那我们就知道所有三个地址都属于同一个个体,我们可以因此建立一个地址簇(clustering of addresses)。一般来说,如果一个新地址的输出,和该地址簇中的任何一个已知地址被一起花费,那么这个新的地址也将会被加到该地址簇中去。
1703866977
1703866978
在本章6.4节,我们将会探讨一种叫合币(CoinJoin)的匿名技术,该技术的工作原理打破了上述设想。但是到目前为止,对没有使用特别匿名技术的普通比特币钱包用户,这种簇技术还是非常有效的。接下来,我们很快将会讨论如何把这种地址簇关联到现实世界的身份。
1703866979
1703866980
1703866981
零钱地址(change address)的随机化
1703866982
1703866983
早期版本的比特币类库[Bitcoin-Qt library,现在又称为比特币中心(Bitcoin Core)]存在一个缺陷,对有两个输出地址的交易,它总把存放零钱的输出地址放在第一个,这意味着很容易分辨出很多交易中的零钱地址。这个缺陷在2012年得到了修复,但是重点在于:钱包软件在保护匿名性中扮演着非常重要的角色,如果你正在开发钱包软件,你需要格外注意很多陷阱,尤其是你需要保证零钱地址的位置应该永远是随机的,以避免为攻击者留下太多信息。
1703866984
1703866985
再回头看一下我们的例子。假设这个茶壶的价格从8个比特币上涨到了8.5个比特币,爱丽丝发现,未用完的支出账号里无法再组合生成恰好可以支付这个茶壶所需要的金额了。取而代之的方案是,爱丽丝利用交易可以有多重支出的特性,如图6.3所示,支出的其中之一就是茶壶店铺的接收地址,而另外一个则是爱丽丝自己的“找零”地址。
1703866986
1703866987
现在从其他人的视角来看这笔交易,他们可以推断出这两个输入地址都属于同一个用户,他们甚至可能怀疑其中一个支出地址也属于这个用户,但是无法知道具体是哪一个。事实上0.5个比特币虽然比其他的支出小,但是并不意味着这是一个零钱地址,爱丽丝可能有10 000个比特币参与了交易,其中她支付了8.5个比特币用于购买茶壶,而把剩余的9 991.5个比特币找零退回给了自己。在这样的场景中,更大的输出才是实际上的找零地址。
1703866988
1703866989
1703866990
1703866991
1703866992
图6.3 零钱地址
1703866993
1703866994
注:为了支付购买茶壶的钱,爱丽丝创建了一个交易,这个交易中的一部分比特币去了商家的钱包,而剩余的部分作为零钱退回给了她自己。
1703866995
1703866996
另外一种更好的解释是,如果茶壶只需要花费0.5个比特币,由于不管是3个比特币还是6个比特币的输入地址,都足够用来支付了,爱丽丝根本不需要创建两个不同输入组成的交易。但是,选择哪种交易方式完全取决于通常使用的钱包软件的特性,即使不是非常有必要,钱包(或者是用户)还是可以随意组合不同交易地址中的比特币来完成支付的。
1703866997
1703866998
惯用法则
1703866999
1703867000
这种类型的实施细节被称为“惯用法则”(idioms of use)。2013年,一组研究人员发现了大多数钱包软件都在使用的惯用法则,并推导出一种用来鉴定零钱地址的强大方法。具体而言,钱包在有需要的时候都会生成一个全新的地址,因为这种惯用法则的使用,这些新的地址通常都是从来没有在区块链网络出现过的。换句话说,非零钱地址通常都不是新地址,而是已经在区块链网络里出现过的,那么其他人就可以利用这个特性去分辨零钱地址,并把它和输入地址相关联。
1703867001
1703867002
依赖惯用法则来推测零钱地址可能会出错。事实上,零钱地址是新地址这一特性不过恰巧是钱包软件的一个特性。在2013年研究者测试的时候发现确实是这样,现在可能还是,但也有可能不再如此了。用户可以选择覆盖掉原来的默认设定,最重要的是,当对手了解了这种技术的时候就可以很容易回避,即使是在2013年,研究者也发现这种特征也会经常产生误报,按照这种规则可以归到一个簇的地址,不一定是属于同一个个体的。研究者声称,他们需要大量的人工监督和干预才能去除这些误报。
1703867003
1703867004
关联真实世界的身份到地址簇
1703867005
1703867006
在图6.4中,我们可以看到,米克尔·约翰(Meikle John)等人是如何利用惯用法则这样的启发式算法来聚类比特币地址的,但是这种簇没有标签——也就是说,我们还没有关联一个真实的身份到这个簇。
1703867007
1703867008
1703867009
1703867010
1703867011
图6.4 地址簇
1703867012
1703867013
注:摘自2013年的一篇论文“一把比特币:寻找支付特征”。在一组没有姓名的用户中,研究者将联合支付的地址和全新的零钱地址归类到一个比特币地址簇。图中,圆形的大小表示流入这些地址簇里的货币数量,每一条线则代表一个交易。
1703867014
1703867015
我们可以根据所了解的比特币经济情况来做一个合理的推测。回到2013年,门头沟公司曾经是最大的比特币交易所,所以我们可以猜测图中较大的圆圈代表的就是该交易所控制的地址,我们可能也注意到,图中左侧的深色的圆圈代表了很小的比特币总量,但同时又有非常大的交易量,这个特性很符合叫作中本聪之骰(Satoshi Dice)的在线比特币博彩游戏,这个游戏中,你可以发送微小量的比特币作为赌注。总的来说,这并不是一个很好的方法来辨识地址簇,这需要很多背景知识和推测,可能仅仅对特征比较显著的案例有效。
1703867016
1703867017
利用交易进行标记
1703867018
1703867019
如果仅仅是通过访问交易所或者商家的网站,以查询其公布的接收比特币的地址,会怎么样呢?这其实没有实际意义。因为大多数服务提供商都会针对每一个交易公布一个新的地址,而这个新地址还没有公布在区块链网络上,等待这些地址发生交易没有意义,因为这些地址通常不会再显示给其他人。
[
上一页 ]
[ :1.70386697e+09 ]
[
下一页 ]