是什麼阻止了這種對比特幣網路的攻擊?
我之前查看了比特幣的創世區塊,發現難度設置為 1。我猜這最初是設計的,所以中本聰在這個難度下的電腦挖礦會產生 10 分鐘的區塊。
但是,如果我在這個難度下將我的 GPU/ASIC 放在鏈的開頭,我可以非常快地找到塊。即使我可以在 10 毫秒內挖出每個區塊,我也需要大約 12 個小時才能達到目前的區塊高度。我意識到如此快速地找到塊也會在 2160 個塊之後增加難度,但我可以在塊上製造時間戳,這樣看起來它們都在 10 分鐘內出現。
然後,當我的鏈(基本上是空的,只有我的採礦地址充滿比特幣)與目前共識一樣長/長時,我可以廣播它並且節點/礦工應該採用更長的鏈,這將是我的。
比特幣實現中的什麼阻止了這種情況?
然後,當我的鏈(基本上是空的,只有我的採礦地址充滿比特幣)與目前共識一樣長/長時,我可以廣播它並且節點/礦工應該採用更長的鏈,這將是我的。
它不會。
為了比較鏈的“長度”以確定兩個有效鏈中的哪一個被接受,Bitcoin Core(我希望所有其他實現)查看進入它們的工作量。粗略地說,這意味著其中所有塊的難度之和。
與現有鏈相比,您獲得更多工作的唯一方法是在短時間內進行比現有鏈中更多的探勘。為了在您執行攻擊時不被現有網路超越,您需要(顯著)比網路中所有其餘部分加起來的雜湊值。所以,你說的是51%的攻擊。
也就是說,可能存在相關且嚴重程度較低的攻擊。你可以探勘數千個短的低難度分支,這些分支都是有效的,但永遠不會被接受,然後廣播它們。如果節點接受它們,它們最終會因儲存所有標頭而耗盡記憶體。對此的解決方案是 MCCCS 在他的回答中談到的客戶端檢查點。請注意,檢查點的範圍已經縮小了好幾倍,因為它們過去可以防止許多類型的攻擊,現在這些攻擊可以通過不依賴於網路硬編碼知識的措施來防止。
您正在尋找的是Block Checkpoints。為了防止您所說的,客戶端開發人員對客戶端中某些塊的雜湊進行硬編碼。例如,在撰寫本文時,Core 中最新的檢查點是295000塊,所以如果你想欺騙 Core,你應該從 295001 塊開始探勘。另外請注意,不同的客戶端有不同的塊檢查點。