spectreDAG技術評價

作者:扎克-赫斯, Zack Hess https://github.com/zack-bitcoin/amoveo-docs/blob/master/other%5Fblockchains/spectreDAG.md


關於spectreDAG的論文:https://eprint.iacr.org/2016/1159.pdf

spectreDAG的挑戰 #


Spectre有2個相互矛盾的問題要解決。他們想阻止人們祕密建造區塊來控制區塊鏈。

所以爲了阻止這種情況,他們需要拒絕那些沒有被其他最近的區塊引用的區塊。

另一個問題是,如果攻擊者建立了區塊並拒絕引用其他區塊,以努力審查它們,這也需要受到懲罰。

但任何防止第一種失敗模式的努力都會使第二種失敗模式更容易實現。而任何防止第二種故障模式的努力都會使第一種故障模式更容易被破壞。因此,當你想象可以幫助防止一種故障模式的功能時,你也需要考慮你是否在其他故障模式中創造了一個漏洞。

未被引用的區塊必然會被刪減 #

如果最優先的區塊沒有你的區塊作爲祖先,那麼你的區塊就被審查了。

想象一下,我做了一個與死區塊中的tx衝突的tx,而我的tx又被列入了最近的區塊。哪一個衝突的TXS獲勝?

如果死塊贏了,這意味着我可以在事後通過建造死塊來改寫歷史。

如果死區塊輸了,那麼其中的所有TXS就沒有價值。因爲他們總是輸。

因此,一個從未在上面建造過的區塊,可能根本就不存在。

軟分叉賄賂攻擊 #

賄賂一些礦工,讓他們增加一條新的規則,說明他們接受哪種類型的TXS。這些礦工不會在任何違反新規則的區塊上進行建設,但他們仍然立即發佈他們的區塊。

誠實的礦工會在攻擊者的區塊之上進行建設,因爲攻擊者遵守的是誠實的礦工所知道的整個規則集。

最終,足夠多的誠實的礦工區塊被遺棄,所以他們改用新的規則集,以便獲得更好的區塊獎勵。

在比特幣中,你只能通過在很長一段時間內支付至少50%的區塊獎勵來實現這一目標。

在DAG中,即使礦工審查了誠實礦工的區塊,他們仍然可以得到報酬。因此,賄賂的成本非常低。

Spectre的分叉選擇規則 #

如果spectre是一個嚴肅的區塊鏈共識的嘗試,他們要做的第一件事就是給出一個分叉選擇規則。要從任何給定的區塊中計算出鏈的權重。所以我們可以知道哪個區塊的優先級最高。區塊鏈設計者總是害怕承認分叉選擇規則,因爲那樣的話,它是如何被破壞的就很明顯了。

如果他們能夠掩蓋分叉選擇規則,那麼他們就可以祕密地對每個例子使用不同的分叉選擇規則,並欺騙人們認爲這是可以存在的。

這是區塊鏈設計中過度泛化的一個例子

Spectre輕節點在計算上是不可行的。 #

假設Spectre不強迫每個用戶運行一個完整的節點並同步每一個tx,那麼一定有辦法做輕度節點。如果有輕量級節點,那麼就需要有一種方法讓輕量級節點驗證Merkle證明,以確保他們的tx被包含在一個區塊中,不會被取消。

所以,每個區塊必須有一個merkle根,用於從該點開始的utxo集/賬戶數據庫。

但是,根據spectre論文,當新的區塊被開採時,衝突的TXS可以切換出哪一個具有最高的優先級。因此,這意味着一個完整的節點需要爲每一個區塊掃描整個UTXO集,爲每個輸出分配新的優先級,並可能切換出有效和無效的輸出。

誠實的假設 #

在第17頁C節,他們正在談論審查制度的攻擊。軟分叉的賄賂攻擊是一種審查攻擊。但他們並沒有很深入地討論細節。

但他們似乎在做一個假設,即大多數礦工會誠實地報告他們首先看到的是哪一個tx。

假設礦工會誠實地報告他們首先看到的是哪一個tx,即使沒有經濟激勵來強制他們誠實地報告,這也是基於我的信任理論模型的漏洞https://github.com/zack-bitcoin/amoveo-docs/blob/master/basics/trust%5Ftheory.mdhttps://fx-c.com/cn/trust%5Ftheory/ , 如果執行攻擊的成本爲零,那麼它就不安全。