兩種主要的比特幣啟發(fā)式介紹
有兩種主要的比特幣啟發(fā)式: 共同輸入所有權(quán)啟發(fā)式和變更地址檢測(cè)啟發(fā)式。
在單個(gè)交易中,共同輸入-所有權(quán)啟發(fā)式假設(shè)輸入地址都來自一個(gè)實(shí)體。然而,在某些情況下,輸入地址可以是多個(gè)實(shí)體。這叫做coinjoin,它會(huì)打破這個(gè)假設(shè)。(例如下圖中的地址3)
更改地址檢測(cè)啟發(fā)式利用了UTXO的特性。由于很難向接收方發(fā)送準(zhǔn)確的指定金額的資金,其余的資金將通過更改地址返回給實(shí)體。 因此,更改地址檢測(cè)是必要的,因?yàn)樗菍?shí)體的一部分。在這篇文章中,我們將重點(diǎn)介紹更改地址檢測(cè)啟發(fā)式。
更改地址檢測(cè)啟發(fā)式
我們公司主要致力于研究最可靠的啟發(fā)式檢測(cè)集群。以下是我們?cè)陂_發(fā)啟發(fā)式時(shí)偶然發(fā)現(xiàn)的一些方法,以及我們對(duì)它們的見解。
地址重用
此方法通過檢查輸出地址來檢測(cè)更改的地址。如果存在一個(gè)以前從未被觀察到的地址,那么它很可能是一個(gè)更改地址。這是因?yàn)樵诮灰字袆?chuàng)建新地址的目的是返回剩余的資金。
要使用這種啟發(fā)式,它必須匹配以下條件。
1. 這個(gè)地址以前一定沒有被注意到
2. 它必須是唯一一個(gè)以前沒有被注意到的地址
該啟發(fā)式相當(dāng)簡(jiǎn)單,但它是最常用的啟發(fā)式之一。我們相信這種方法能夠在很多情況下檢測(cè)到地址的變化。
十進(jìn)制數(shù)檢測(cè)
更改地址值中的小數(shù)位數(shù)的長(zhǎng)度假定比任何其他輸出地址長(zhǎng)得多。這是可能的,因?yàn)楝F(xiàn)在每筆交易都要收取交易費(fèi),而且交易中指定的金額往往會(huì)降低精確度,以便于快速的人為解釋注釋(例如,您只需向您的朋友發(fā)送5美元,而不是發(fā)送4.93美元)。
需要注意的是,在過去,有相當(dāng)數(shù)量的交易降低了更改地址的精度值,但是現(xiàn)在所有的輸出地址都包含小數(shù)。因此,找到正確的參數(shù)對(duì)于正確檢測(cè)更改地址是至關(guān)重要的。
在我們的實(shí)現(xiàn)中,首先搜索一個(gè)十進(jìn)制長(zhǎng)度大于7的地址。如果所有其他輸出值的十進(jìn)制長(zhǎng)度都小于2,則接受該地址作為更改地址(可以調(diào)整這兩個(gè)參數(shù)以提高性能)。盡管這種啟發(fā)式由于其簡(jiǎn)單性而有許多例外,但只要兩個(gè)參數(shù)之間的差異較大,它就可以很好地執(zhí)行。
平等的輸入混幣原理
如前所述,混幣原理是一種輸入地址來自多個(gè)實(shí)體的情況。這些實(shí)體將確切數(shù)額的資金發(fā)送到多個(gè)地址,提高了匿名性。
在上圖中,地址21和地址32具有相同的輸出值。這使得很難區(qū)分是哪個(gè)實(shí)體把基金送到了地址21和地址32。然而,可以通過簡(jiǎn)單地計(jì)算輸出值與輸入值子集 (eg(0.006 + 0.005) - 0.01 = 0.001)?;鞄旁淼膯栴}是我們必須從一個(gè)交易中處理兩個(gè)或多個(gè)實(shí)體。
我們的實(shí)現(xiàn):
1. 通過檢查兩個(gè)或多個(gè)輸出值是否相等來確定交易是否為混幣原理
2. 如果條件1為真,則增加要集群的實(shí)體數(shù)量
3. 目前,我們假設(shè)實(shí)體的數(shù)量等于具有相同值的輸出的數(shù)量。
必須實(shí)現(xiàn)輸入的數(shù)量不等于具有相等值的輸出的數(shù)量的情況,以便準(zhǔn)確地估計(jì)實(shí)體。
腳本類型
一個(gè)實(shí)體很可能在整個(gè)交易中只使用一種腳本類型。這意味著,如果所有輸入地址都具有相同的腳本類型,而輸出地址不是,那么腳本類型與輸入地址相同的輸出地址就是更改地址。
在上面的圖中,我們可以推斷地址 4是更改地址,因?yàn)樗俏ㄒ痪哂邢嗤_本類型的輸出地址。
整數(shù)
這種啟發(fā)式假設(shè)支付金額通常是某個(gè)精度較低的數(shù)字,例如$5.50或$19.00。在此假設(shè)下,具有不降低精度值的輸出地址被認(rèn)為是更改地址。這種方法的問題是,數(shù)字可能以某種形式在不同貨幣(如美元)的精度降低。因此,我們需要導(dǎo)入交易發(fā)生時(shí)的匯率,但是資源成本超過了性能。
不必要的輸入啟發(fā)式
這種啟發(fā)式是基于“什么不需要花費(fèi),什么保留”的邏輯。例如,我們有:
2 + 3→4 + 1,其中左:輸入量,右:輸出量
如果我們想發(fā)送1BTC,我們只需要發(fā)送兩個(gè)輸入地址中的一個(gè)。但是,因?yàn)槲覀儼l(fā)送了4BTC,所以我們需要這兩個(gè)地址。
這種方法的問題在于,有些錢包使用的代幣選擇算法不符合這種邏輯。
由于上述問題,沒有使用這種啟發(fā)式。此外,該方法本身的性能較低。
結(jié)論
我們探索了一些最廣為人知的比特幣實(shí)體集群?jiǎn)l(fā)式。根據(jù)我們使用這些技術(shù)的經(jīng)驗(yàn),我們能夠發(fā)現(xiàn)這些方法中的許多缺陷,從而使集群變得不可靠。因此我們公司致力于開發(fā)能夠進(jìn)行有效集群實(shí)體的健壯算法。