Proof-of-Stake

遠端攻擊中,‘秘鏈’是如何追上真鏈的?

  • January 14, 2018

我正在嘗試深入研究 Casper,其中不斷出現的事情是 PoS 中的遠端攻擊。我理解高水平的攻擊 - 基本上你會回到你在網路中擁有大量股份的大量區塊並開始鍛造區塊,這樣當你到達主鏈的高度時,你會持有大量數量的貨幣並接管鏈。

我在這裡看到了一個關於攻擊的類似問題,其答案引用了乙太坊部落格的以下摘錄:

在一個簡單實現的權益證明中,假設在創世區塊或在創世區塊之後不久,有一個攻擊者擁有所有硬幣的 1%。然後該攻擊者啟動他們自己的鏈,並開始探勘它。儘管攻擊者會發現自己被選中生產區塊的機率只有 1%,但他們可以輕鬆生產 100 倍的區塊,並以這種方式簡單地創建更長的區塊鏈。

我對這句話的疑問是秘密鏈究竟會如何超過父鏈?據我了解,在 PoS 3 中探勘區塊的一般方法是求解這個方程:

hash(kernel) ≤ target × balance of UTXO

其中核心來自以下內容:

  • nTimeTx :目前時間戳(每秒遞增)
  • nTxPrevTime:UTXO 的時間戳
  • nPrevoutNum:UTXO的輸出編號
  • nTxPrevOffset:塊內UTXO的偏移量
  • nTimeBlockFrom:提供 UTXO 的區塊的時間戳
  • nStakeModifier :從區塊鏈播種的 64 位字元串

你如何操縱它來比父鏈**更快地探勘區塊?**會是時間戳嗎?

謝謝!

編輯:在考慮了更多之後,我不確定這種攻擊是否真的可行……這似乎純粹是理論上的。我的邏輯如下:假設攻擊者創建了自己的鏈,甚至使用了總“主鏈”硬幣的 50%。由於他在自己的鏈上,他將擁有 100% 的總質押硬幣在自己的鏈上。憑藉他自己鏈上總硬幣的 100%,他肯定會成為秘密鏈上唯一的鑄幣者,並將被選中獲得鏈上所有可能的“鑄幣機會”的一半。

確實,因為他是自己鏈中唯一線上的質押者,他會鑄造每個區塊,但問題是攻擊者仍然受制於每秒每個 UTXO 的 1 筆交易,因此他無法更快地產生區塊。他當然可以生產出比主鏈大得多的大型區塊鏈,因為他在模擬中加速幾年的時間可能只有幾秒鐘,但問題是頭部時間戳可能是主鏈的兩倍(可能是一年),客戶根本不會接受一個未來幾年的連鎖店。

如果有人有任何額外的見解或有另一種思考問題的方法,我將不勝感激!我發現這個來源非常好。

經過漫長的研究之路,我現在對這種攻擊有了更清楚的了解。我首先要指出的是,這種攻擊不適用於乙太坊,因為乙太坊是工作量證明,它也不適用於覆蓋了 Casper FFG 的乙太坊,因為它實際上仍然是工作量證明作為提案機制.

首先,要更清楚一點,問題中描述的遠端攻擊是一種特定類型的遠端攻擊。最好將其稱為“使用舊私鑰修改歷史”攻擊。還有其他涉及“遠端”的攻擊,例如 NeuCoin 白皮書中描述的預程式遠端攻擊,但這是對實際未來的遠端攻擊——這是過去的一次。

攻擊的實際步驟如下:

  1. 攻擊者在過去的某個高度獲得了對區塊鏈中舊私鑰的控制權,N-1000000攻擊者持有的硬幣總價值只是目前在主鏈上質押q的硬幣總量的一小部分。是主鏈的目前高度。N
  2. N-1000000攻擊者修改她的客戶端以切換到她自己的過去開始的秘密區塊鏈。她禁用任何傳入或傳出的客戶端連接。
  3. 攻擊者開始鑄造塊,按順序從主鏈複製每個塊的交易。這個想法是歷史將完全相同,因為每個塊將具有完全相同的交易,但她將探勘每個塊,因為鏈上沒有其他人。請注意,她可以包括她自己的新交易,但實際上這沒有任何意義,因為無論如何她不能獲得超過q總硬幣的收益。所以她要做的是從主鏈N-1000000+1中的區塊中取出所有交易,將它們放入她N-1000000+1在秘密鏈上的區塊中,並嘗試通過嘗試時間來鑄造它t+1,其中t是 UNIX 中的時間戳記塊N-1000000。如果時間t+1沒有用,她會嘗試t+2等等。請參閱問題中的方程式,了解她要解決的問題。
  4. 最終,她會在秘密鏈上找到一個分t+s塊薄荷糖的時間秒數。N-1000000+1她將從中獲得硬幣獎勵。
  5. 對每個塊重複步驟 3,直到超過主鏈頭部N+nn一些塊的高度(這是可能的,因為她可以將待處理的交易放在主鏈記憶體池中並將其放入她的秘密鏈中)。此時,她將獲得鑄造所有 1000000 個區塊的所有硬幣獎勵。她現在可以將她的秘密區塊鏈送出回網路,只要客戶接受它,這條鏈就會有效,她將有效地“改寫歷史”。

步驟 3 到 5 的實際執行在腳本中可能只需要幾分鐘,老實說可能更少。但問題是這種攻擊是不可行的,因為攻擊者仍然受制於每秒一個雜湊值/UTXO-per-second 規則。儘管她可以在幾分鐘內模擬整個事情,但一旦她被阻止N+n,她很可能會在非常大的時間t+T,並且比現在的時間要遠得多。就她的鏈頭的時間戳而言,它可能會提前兩年,並且客戶在未來 2 小時內不接受區塊的時間漂移規則將拒絕該鏈。T``t+T

為了對此有更多的直覺,請考慮是否q=1/3,即她擁有目前在主鏈上質押的所有代幣的三分之一。在這種情況下,她將鑄造秘密鏈上的每個區塊,但速度僅為主鏈速度的三分之一。因此,她將1/3有機會在她的秘密鏈上進行質押,僅此而已。實際上,她將失去2/3通過每秒一個 UTXO 的雜湊規則在她的秘密鏈上質押的機會。t+T從機率上看,對於她來說,在T少於 2 小時的時間內趕上主鏈實際上是零,並且隨著時間延遲的增加而接近零,即,在時間延遲為2000000.

正如引用文章的作者自己指出的那樣:

本來我認為這個問題是根本問題,但實際上這是一個可以解決的問題。例如,一種解決方案是注意每個塊都必須有一個時間戳,並且使用者拒絕時間戳遠遠早於他們自己的鏈。因此,遠端攻擊必須適應相同的時間長度,但因為它涉及的貨幣單位數量要少得多,所以它的得分會低得多。

所以你關於“秘密鏈”不可能只有 1% 的股權超過主鏈的結論是正確的,因為客戶驗證了區塊時間戳(他們不能在未來走得太遠)。


長期攻擊一詞可以指代不同的事物,具體取決於加密貨幣和所選算法。您在問題中包含的公式

hash(kernel) ≤ target × balance of UTXO

不適用於乙太坊和 Casper,因為那裡沒有 UTXO。

NeuCoin 白皮書中描述的預程式遠端攻擊源於給定權益的權益修改器是靜態的,並且由於在採礦方程式中使用硬幣年齡,因此也不適用於乙太坊。


我絕不是 PoS 方面的專家,但我將嘗試概述V. Buterin 在 On Stake中描述的遠端攻擊背後的邏輯,即使在“非秘密”鏈上少於 50% 的股份也將起作用:

  1. 如果我們給出最簡單的 PoS 算法,每個賬戶每秒都有一定的機會生成一個有效塊。這個機會用以下公式描述:

SHA256(prevhash + address + timestamp) <= 2^256 * balance / diff

  1. “沒有任何風險”問題:一個理性的礦工只要有機會就會選擇在 2 條或更多鏈上進行挖礦,以最大化他的預期價值。
  • 僅在單鏈上開采的礦工被稱為利他型礦工。在盡可能多的鏈上挖礦(理性)的礦工被稱為非利他主義者。
  • 攻擊者只需要超過利他礦工就可以進行攻擊,因此即使擁有少於 50% 的權益也有可能執行此攻擊(只要非利他礦工和攻擊者的權益加起來達到 51%)。
  1. 為了克服這個問題,可以使用Slasher算法。如果礦工在 2 條鏈上創建一個塊,他將受到懲罰。為此,任何人都可以將另一條鏈的區塊送出到原鏈中,以竊取挖礦獎勵並懲罰雙重投票者。
  • 礦工必須繳納保證金,以便在雙重投票的情況下進行處罰
  • 礦工最終必須有權提取保證金,一旦提取保證金,就不再有任何動機不使用這些硬幣在很久以前開始的遠端分叉上投票(參考)。例如,在 1000 個區塊之後,礦工將有權提取他的存款。
  1. 遠端攻擊是指礦工開始探勘側鏈 1000 或更多塊。
  • 其他非利他礦工也將在該鏈上挖礦,因為沒有懲罰並且預期價值更高。
  • 事實上,甚至預計會看到人們出售舊私鑰的黑市,最終攻擊者單槍匹馬地獲得對歷史上某個時間點控制超過 50% 貨幣供應的密鑰的訪問權並執行攻擊(參考)。

作者指出的解決方案是在每個客戶端中引入一條規則,不接受超過 1000 個塊的分叉。然而,問題是當新使用者進入圖片時會發生什麼。然後他認為混合 PoW/PoS 和社交圖系統是一種可能的解決方案。


使用Mauve Paper中描述的確定性小工具:

即使是多數合謀也無法在不破壞所有乙太的情況下進行中程或遠端 51% 攻擊。

引用自:https://ethereum.stackexchange.com/questions/34439