權益證明如何防止過去的區塊被更改?
我有一個關於權益證明的問題。
是否有任何保護措施可以防止使用者創建一條全新的鏈,因為創建一條非常長的鏈沒有計算懲罰,惡意行為者不能創建一個大於大多數節點同意的具有完全不同歷史的鏈嗎?還是輕鬆刪除過去的交易?Casper 或其他 PoS 實施是否只是讓節點檢查其現有鏈以檢查它們是否沒有被完全改變?
因為工作量證明通過使更改一個塊變得非常混亂來防止這種情況發生,因為您必須為它前面的每個塊重做所有證明,但是如果您不需要做大量的 CPU 工作來改變歷史,節點不能給新節點一個缺少區塊或交易的區塊鏈嗎?
這被稱為Nothing at Stake攻擊。您說得對,建構分叉要容易得多。當某人擁有所有硬幣的 50% 以上時(不太可能),這是一個問題。
但是另一個問題是,在權益證明中,節點沒有什麼可以在其他分叉上計算的。這意味著理論上一個想要最大化其利潤的節點總是會在所有分叉上進行計算。鑑於所有節點的行為都如此,這導致攻擊者只需 1% 的股份即可成功攻擊。
乙太坊將對所有分叉上的節點計算進行處罰。這就是為什麼你需要質押 32 ETH 才能成為驗證者。另請參閱https://medium.com/coinmonks/understanding-proof-of-stake-the-nothing-at-stake-theory-1f0d71bc027。
對於不同的 PoS 實現,它的工作方式不同,但通常是這樣的:
- 當一個擁有更多權益的節點向區塊鏈添加一個區塊時,您說這會增加區塊鏈的更多“難度”(類似於找到一個區塊所需的挖礦能力)
- 一個質押很少的節點,無論它在自己的鏈上建構多少塊,總是比擁有大部分股份的節點正在建構的鏈具有更低的“累積難度”
- 與 PoW 一樣,節點總是接受“累積難度”較高的鏈作為“真實”鏈,如果找到更長的則切換到它
- 因此,除非您擁有 51% 以上的股份,否則無論您私下製作了多少塊(如果您建構的鏈包含進入未來增加累積難度,其他節點有規則不接受)。
但是有兩件事可以做。其中之一是“無風險”攻擊,其中一個節點同時在 2 條(或更多)鏈上創建塊,每條鏈都使他有可能製作更好的鏈。但是,如果每個人都這樣做,那就是一種爭奪,隨機誰會脫穎而出,無論如何可能與賭注成正比。
可以做的另一件事是“遠端”攻擊,你去找一些曾經擁有他們之間 50% 股份的人,用便宜的錢購買他們的舊私鑰(因為他們的賬戶現在是空的,他們為什麼關心?)。在 PoS 中,如果您擁有在鏈歷史的任何時間點控制 51% 權益的密鑰,那麼您可以從該歷史點返回並建構比“真實”鏈更長的鏈,並導致所有其他節點接受它是真實的
例如,如果我購買了使用了一年的賬戶的私鑰,這些賬戶一起控制了 51% 的股份(即使他們不再擁有這些資金),那麼我可以秘密地(並且有效地)建立一個新鏈過去一年的“累積難度”高於網路其他部分。當我將這條鏈展示給其他節點時,他們會接受它作為“真正的”鏈並切換到它。
大多數 PoS 鍊為此使用一種創可貼解決方案:與目前的分叉相比,他們只是從不考慮超過 X 時間之前的分叉。所以大多數正在執行的節點都會拒絕遠端攻擊。但是,任何加入網路並與攻擊者連接的新節點都會選擇遠端攻擊鏈而不是“誠實”鏈。所以這是對問題的一種表面修復。