比特幣如何確定對等方是否在謊稱擁有有效鏈?
我對比特幣如何拒絕“虛假”鏈的確切細節感興趣。假設我創建了數千個任意的低 POW 鏈並在 BTC 網路上啟動對等點,客戶端將(以一定的機率)連接到這些對等點。如果我製造了足夠多的這些假對等點,那麼機率將非常高(甚至可能足以讓許多客戶得到所有 8 個隨機對等點都是假的)。
從這些假對等點接收數據的客戶端如何確定所提供的鍊是假的?
針對您描述的場景有多種不同的防線。
當節點相互連接時,它們會交換有關它們所知道的最佳鏈提示的資訊。然後,節點的目標是趕上在總累積難度中工作最多的那個。相比之下,低工作鏈很容易被解僱。這意味著當一個節點有一個擁有最好鏈的對等點時,它最終會在最好的鏈上。
當節點連接到網路時,他們首先嘗試從之前的連接中找到他們已經知道的對等點。如果他們沒有以前的連接,為了找到網路上的第一個節點,他們會聯繫 DNS 種子。這些 DNS 種子提供了來自他們在網路上看到的節點的長長的潛在對等點列表。然後該節點與其中八個進行出站連接。DNS 種子由社區成員執行並且非常可靠。該節點將詢問更多的對等點,並不斷檢查是否存在與它所聽到的地址相關聯的實際比特幣節點,以建立潛在對等點列表。
然而,如果攻擊者操作 DNS 種子,他們可以通過僅提供自己節點的 IP 來使新的節點受害者黯然失色。如果此攻擊針對連接到此 DNS 種子的每個人,則可能會很快注意到此類攻擊,並修復/刪除 DNS 種子。如果它是針對特定個人的,那麼受害者極不可能專門連接到攻擊者的 DNS 種子,並且攻擊者需要提前知道受害者的 IP 地址。此外,受到 eclipse 攻擊的節點運營商可以通過手動連接到單個誠實節點來輕鬆突破。如果節點操作員發現有什麼奇怪的地方(例如,最新的區塊與公開記錄的區塊鏈不對應),<https://bitnodes.io/>並手動連接到它。一旦他們有了一個誠實的聯繫,這個聯繫就會讓更多的人對他們說閒話。
節點主動管理它們的對等點。他們更願意與為他們提供有用資訊的節點保持聯繫。當他們連接到一個新的對等點時,他們會丟棄最長時間沒有提供新的有用資訊的對等點。如果一個節點同時擁有誠實節點和低 POW 攻擊節點,則攻擊節點將首先被丟棄。這將導致攻擊者節點實際上被驅逐出網路:沒有人會八卦他們,他們不會在 DNS 種子列表中,也沒有人會連接到他們。
比特幣還有一些其他的功能,比如從不同的 IP 空間中選擇對等點、僅塊連接、觸角連接等,但這可能有點過於深入雜草。