作者:Pieter Wuille
來源:https://bitcoinmagazine.com/print/the-v2-transport-bitcoin-p2p-traffic-goes-dark
接近 15 年以來,比特幣網絡上的節點之間的所有通信,都是以完全透明的形式傳輸的,沒有任何加密。改變出現在 2024 年,這是因為採用了 BIP 324,它為節點之間的溝通引入了 “‘V2’ 傳輸協議”。這種新協議實現了伺機加密(opportunistic encryption)特性,使得沒有能力監控節點間消息的敵手無法閱讀它們的流量。自從 Bitcoin Core 26.0 為它添加了支持、並且在 27.0 版本默認開啟它以來,它已經用在了比特幣全網大部分點對點流量中。
但退一步說,一個比特幣節點的主要功能是交換本質上公開的信息:區塊鏈上的區塊、交易池裡的交易、其它比特幣節點的 IP 地址。因為這些都不是秘密信息,似乎看不出流量加密有什麼好處。但更近距離的觀察會發現,與比特幣流量相關聯的大量 元數據,是值得保護的。如果一個大視野的敵手能夠看到某一筆交易在何時轉發、經過哪個 IP 地址來轉發,他就能猜測哪個節點可能是傳播的源頭 —— 因此是該交易的發起人。除此之外,看到節點之間的連接,可能會曝光特定的某個節點屬於某個人,從而讓某一家公司或者礦工的節點可以被攻擊者瞄準。對於一些在專制政體下生活的用戶來說,可能透露自己在運行比特幣節點本身就是沒好處的。
在中本聰設計的 P2P 協議中,節點彼此連接,在這些連接上發送消息,比如 “inv”(“我有你不知道的新 區塊/交易”)、“addr”(“這是另一個節點的 IP 地址”),等等。這些消息以及各節點所支持的特性的集合,已經發生了顯著的改變,比如支持早期的 SPV 客戶端(BIP 37)、緻密區塊轉發(BIP 152)、Tor v3 地址(BIP 155),等等。但這些消息編碼成字節、通過這些連接來傳送的方式 —— 我們稱之為 “傳輸協議” —— 自 2009 年來本質上從未變過。唯一的例外是 2010 年 5 月為這個協議引入了校驗和。BIP 324 是此後首次進行此類變更。
注意,雖然這可以說是 “比特幣協議” 的一部分進行的根本性變更,但它也完全是可選的。它並不是一項共識變更,也並不需要任何協調和激活機制。它只會在都支持這項特性的兩個節點之間使用,但當一個支持 BIP 324 的節點與不支持它的節點通信時,它們會回到舊的傳輸協議(即 “v1”)。這就是為什麼,在支持它並且默認打開它的客戶端發佈之後,兩年中,比特幣節點之間的絕大部分流量就都悄悄用上了這種加密的 v2 傳輸協議。
加密比特幣節點流量的想法並不新奇。早在 2016 年,Bitcoin Core 開發者 Jonas Schnelli 就提出了 BIP 151 ,它允許升級後的節點間連接切換到一種加密模式。這個提案並沒有走太遠,而且因為這種方法並不能隱藏兩個節點之間的初始化握手,2019 年出現的 BIP 324 決心徹底改造傳輸協議。這種更加新穎的方法引入了一組全新的連接,從一開始就是加密的。進展持續累積,直到 2021 年,Dhruv Mehta 主動撿起它,並跟 Tim Ruffing 和我將它轉化成了一個完整的提案,還加入了少量新特性,比如一種完全偽隨機的字節流、 流量塑形特性(affordances for traffic shaping)以及可選插件。2022 年,我們在 bitcoin-dev 郵件組中宣佈了它,並在收穫幾個評論之後,在 2022 年和 2023 年期間實現了它。完整的特性在 2023 年合併到了 Bitcoin Core 。在進一步測試之後,在 2024 年,它被默認為所有連接啟用(只要對等節點支持)。
新協議所提供的完全偽隨機字節流特性,意味著通過這一傳輸協議發送的字節沒有可識別的模式。舉個例子,TLS 協議,用在與安全網站(“https://” 網頁)的通信中,它會加密網站的內容,但不會隱藏使用了 TLS 的事實,以及請求該站點的主機名(hostname)(至少在 2020 年使用 “加密的客戶端招呼(ECH)” 之前)。在 BIP 324 實現之前,v1 傳輸協議會在每一個連接的開頭髮送固定的 16 個字節,這是極為容易識別的,所以,嘗試審查的防火牆可以輕鬆阻攔使用這一模式的任何連接。相反,v2 傳輸協議完全沒有這樣的模式;每一個字節,從第三方的角度看,都是均勻隨機的,因此是完全無法預測的。任何嘗試基於流量模式來阻攔比特幣流量的實體,都需要攔截所有看起來隨機的流量,這可能在政治上更有難度(相比只是攔截比特幣這樣的軟件的流量)。讓整個協議偽隨機化最難的部分來自於握手 —— 在加密建立以前,節點需要交換公鑰,而公鑰並不是隨機字節。感謝一個非常新的密碼學技術,叫做 “Elligator”(2013),以及它的一個叫做 “ElligatorSwift”(2022)的變種,它可以將橢圓曲線公鑰編碼成看起來隨機的字節,從而有可能在握手期間出現可識別的模式。
值得指出的是,由於比特幣網絡的公開特性,節點間的加密傳輸層可以提供的隱私保護面臨很大的侷限性。比特幣節點並不信任自己的對等節點,因此也並不十分在乎這些對等節點是誰。比特幣節點也沒有公開的公鑰,這也是為什麼 v2 傳輸協議所提供的加密是伺機的、無身犯認證的;雙方都會為每一個連接使用一個新的臨時密鑰。這意味著,主動的敵手(例如你的互聯網運營商)可以執行 “中間人攻擊”:與嘗試建立連接的兩個節點都使用 v2 傳輸協議,然後解密來自一方的消息、重新加密之後再發給另一方;也就是依然允許間諜,並且有可能同時篡改或審查信息。然而,重點在於,相比於能夠直接檢查未加密的單條消息(就像 v1 傳輸協議允許的那樣),要大範圍發動上述中間人攻擊會昂貴很多。而且,當然,因為絕大部分比特幣節點連接都是任意向隨機的、不受信任的節點發起的,一個想要大規模打探其它節點的敵手總是可以啟動大量的節點,然後讓其他大量節點連接到這些節點。就像中間人攻擊一樣,做起來也比直接檢查 v1 包裹更加昂貴。
因此,最好不要把 BIP324 自身當成一種隱私性提升,而是更大的動作的一部分:提高大規模監視比特幣網絡的成本,同時不要依賴於替代性網絡(比如 Tor 和 I2P,它們都有自身的犧牲,比如增加時延或拒絕式服務的風險,整個網絡的所有節點無法都接受這些風險)。BIP 324 的一些特性截至目前尚未實現,比如流量塑形,可以防止他人通過觀察加密包裹的體積來發現關於被轉發的交易的信息。希望這些特性會在未來幾年中利用起來。
(完)




