Herman

Herman

比特幣(BTC)的匿名性

常見誤區:BTC 的匿名性很好,能夠保護隱私。

BTC 在一定程度上確實是匿名的。
因為在鏈上帳本中,你沒有用自己的名字,而是用「化名」替代了。
這個「化名」值得就是一串難以記憶的哈希地址。

但我們要知道我們追求的匿名性究竟是為了什麼。
實際上,匿名是為了保護「隱私」。讓別人不知道這個名字下面對應的是誰。
BTC 的地址就像是上網的時候,我們可以開很多個帳戶,用很多個網名。
這裡的網名在 BTC 中就是一個一個地址。
在很多錢包應用中,也會根據 BTC 白皮書中的推薦,每筆交易用的都是不同的地址。
這樣,所有的錢都在不同的地址中,看起來像是匿名了。
但這樣的匿名,真的保護了自己的隱私嗎?

紙幣、黃金之類的實體貨幣,實際上是最保護隱私、最匿名的。
紙幣上印的,是面值,或者編號之類的,但上面不可能印上和你有關的信息。
假設你拿著 100 元面值的 RMB,你把這張紙幣交易出去之後,後面轉了很多手。
最終持有紙幣的人,幾乎沒法從紙幣上找到你曾經持有過這種紙幣的證據。

銀行如果可以使用化名註冊帳號,實際上也比 BTC 要更保護隱私。
因為你所有的交易記錄都沒有被公開,你用一個化名的帳戶,不論怎麼存怎麼取,只有銀行會知道。
而銀行又只持有你的化名信息,只要我請一個人用化名註冊一個銀行帳戶,銀行是不可能知道這個帳戶是我在用,它知道的只有我的化名信息。
當然,現實中銀行是不可能讓你用化名註冊的,基本都是實名註冊。不存在所謂隱私了。

為什麼 BTC 反而比前兩種的「隱私保護」能力要更弱呢?
白皮書中有提到過一種保護自身安全的方式,就是每次交易都用不一樣的地址,防止被追蹤。
現代的錢包,其實都自帶的這樣的功能,所有的錢實際上都打散到了不一樣的地址。
但 BTC 的一大特性,就是帳本是完全公開的,所有人都知道。
在帳本上紀律的每一次交易,都在洩漏地址和地址之間的聯繫,暴露你在鏈上發生的所有交易。

例如,現在有一筆交易,是將 8 個 BTC 轉給你的朋友 B。
你的帳戶有 6 和 4 的 UTXO 單子,分別放在不同的地址上。
這個交易單子就會構成這樣:
inputs: addr1(6), addr2(4)
outputs: addr3(8), addr4(2)

我很容易就能推測出來,addr1 和 addr2 是同一個人持有的地址。
因為為了構造交易,發起交易的人必須要持有私鑰搞出簽名。
發起交易的人都知道私鑰了,這個證據多半已經能證明地址是同一個人在持有了。

通過輸出,也很容易判定 addr4 跟 addr1 和 addr2 是同一個人的地址。
因為要找零,如果 addr3 是找零的地址,完全沒有必要用到兩張 utxo,只用一張就好了。
我可以馬上推測出來,addr4 和 addr1、addr2 大概率是同一個人持有的地址。

所以不難看出,通過多地址分開存放 BTC,希望通過多地址達到匿名的效果是不好的。
很容易通過分析交易的 UTXO,分析出地址之間的關聯,得出這些地址是不是都是同一個人在控制的結論。

在這個基礎上,帳本又是公開的。
假設我是一個線上的商家,你找我買東西,並打算用 BTC 支付。
你支付給我錢之後,你必須告訴我交易的哈希在哪,我去驗證交易是否真的被節點 confirmed 了。
這個時候,我馬上就知道你用了那些 inputs,哪些 outputs。
我把礦工的地址,我自己的地址排除掉,剩下的地址多半都和你相關。
我再把所有跟這些地址相關的交易全部找出來,把關聯的地址全部揪出來,我馬上就知道,你跟誰交易了,每筆交易是交易了多少錢,現在你的帳戶還剩多少錢。
你發現了嗎,你的隱私一覽無餘,我什麼都能知道,只要你跟鏈上的地址發生任何一筆交易。
「公開的帳本」非但不能保護隱私,還會讓你跟裸奔一樣,所有信息都對外公開,一覽無餘。

這種線上的交易系統,如果不跟現實世界發生交互還好。你可以永遠用哈希地址代表自己,即使知道所有的帳本,也不知道是你在持有,你在操作。
但如果一旦跟現實世界發生了交互,地址和現實世界的人很容易就產生關聯。

比如你在一家星巴克使用 BTC 支付,買了一杯冰美式。我在後面排隊。
我知道你點了一杯冰美式,花了大約多少錢,並且花錢的時間點,因為我就在你後面。
接著我也買一杯咖啡,也用 BTC 支付,就能得知星巴克的哈希地址。(或者別的辦法也行,總之商家的哈希地址很容易就能獲取)。
接著,我僅僅需要根據價格和時間,篩選出最有可能是你發生交易的交易單,就能反推出幾個可能的哈希地址。
後續只要多確認一次到兩次你的消費,你現實中的人馬上就能跟 BTC 的哈希地址聯繫上。

實際上所有的線上交易系統都有這樣的通病。只要你跟現實世界發生交互,想將你跟帳戶聯繫起來,很容易。
即使是可以化名註冊的銀行也一樣。
只不過 BTC 直接讓所有人都能知道你的消費記錄,而銀行就銀行知道。
也就看銀行會不會洩露信息了。

如何保護隱私

  1. 在網絡層上做匿名。
    BTC 是運行在「網絡層」上的「應用層」,通過 p2p 連接節點。
    既然想匿名保護隱私,那麼至少從網絡層的匿名做起。
    IP 是最容易洩露個人信息的東西。通過 IP 定位你人在哪是很簡單的。
    所以如果真的需要匿名,在「網絡層」上就要做好匿名。比如多路轉發,用洋蔥瀏覽器之類的。
  2. 在應用層上做匿名
    coin mixing。所有人的錢混在一起,inputs 和 outputs 全部打亂。
    這樣就很難將地址跟你聯繫起來。
    這當然需要一個中心化的服務提供商來專門做這個事,把需要這項服務的人的錢全部放一次搞。
    但因為這種服務提供商本身他自己也需要是匿名的。隱患就是如果它幹到一半中途圈錢跑路,你一點辦法都沒有。
    交易所也能做到一定的 coin mixing 的作用,因為所有的錢都混在一起了。
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。