為什麼對手必須控制 50% 的算力才能雙花?
如果一個區塊中的交易是有效的,為了將該區塊添加到區塊鏈中,需要找到工作量證明。我讀過 Satoshi 的比特幣論文。
如果工作量證明的難度平均需要說 2^52 次計算(13 個十六進制零),並且由於網路上的每個節點都是獨立工作的,那麼強大的對手為什麼不能超過目前區塊鏈的長度並出現他的區塊鏈版本到網路?具體來說,當網路上的誠實節點不合作尋找工作證明時,為什麼攻擊者必須控製網路計算能力的 1% 或 x%?
如果對手能夠比最強大的誠實對等方更快地找到工作證明,他就可以計算出更長的區塊鏈並將其廣播到網路上。
讓我們假設網路上有 2^20 個節點,每個節點平均每秒計算 2^40 個雜湊值。然後每個節點需要 68 分鐘才能找到工作證明(嘗試 2^52 雜湊)。網路的總算力為節點數 * 每個節點的算力 = 2^20*2^40 = 2^60。
如果對手以每秒 2^45 個雜湊的速度執行,他只需要 2^7 = 2 分鐘即可找到工作證明(2^52 個雜湊)。
現在,網路的計算能力是 2^60,但是每個節點都在嘗試獨立地找到工作證明。與網路相比,對手的計算能力要小 32,000 倍。對手控制的算力是1/32000 = 0.00001%,但他仍然可以計算更長的區塊鏈。
如果我在這裡假設有問題,請幫忙。網路上的誠實節點不協作。因此,攻擊者不需要控製網路上 50% 的計算能力,而必須花費比誠實節點的平均計算能力更高的計算能力。
您的問題中有兩個假設並不完全正確。
1)然後每個節點需要 68 分鐘才能找到工作證明(嘗試 2^52 雜湊)。
尋找新區塊的過程並不是需要累積的線性工作任務。相反,它是一個隨機過程。您可以將其視為一場彩票,而不是您正在經歷的一堆固定大小的工作:每次嘗試都可以中獎,但平均需要 2^52 次嘗試才能中獎。這種區別非常重要,因為……
2)網路上的誠實節點不協同工作。
…它允許網路在不協調的情況下進行協作!
每個採礦實體都在嘗試確認不同的區塊。之所以如此,是因為每個人都試圖為自己索取區塊獎勵,因此至少有一個交易,即coinbase 交易,必須不同。¹
因此,既然我們已經確定我們正在查看一個隨機過程,並且每個人都在努力不同的數據,我們意識到誠實節點不會重複彼此的工作。因此,所有誠實節點一起經歷的輸入要比對手多得多,實際上是在合作尋找新區塊。
正如cpast在評論中指出的那樣,同樣重要的是要認識到沒有人會因為切換而失去進度。因此,只會失去該塊通過網路傳播所需的時間,每個人都會在收到新塊後立即切換到以剛剛找到的塊為父塊的新塊。最後,這意味著我們需要將誠實網路的算力與對手的算力進行比較,以確定誰可以創建更大的鏈。正如您自己所說,憑藉您的模範數字,網路的威力是對手的 2^15 倍。
¹此外,它們可以處理不同的交易集,不同礦工的交易順序不同,時間戳每秒都在變化,它們會添加更多隨機數據來嘗試不同的輸入。