蒲公英的隱私和實現複雜性之間的權衡是什麼(BIP156)
Dandelion是一種新的中繼協議,用於加密貨幣對等網路上的交易。它被譽為網路級別的加密貨幣的巨大隱私改進——我想知道這會帶來什麼成本。
- 蒲公英是否會在程式碼庫中引入更多複雜性?
- 蒲公英是否引入了可能的攻擊媒介?
- 在比特幣核心中實施蒲公英有什麼阻礙?
在我看來,與蒲公英一起制定的主要實現細節是確保沒有引入新的 DoS 向量。
在現有的比特幣核心交易中繼模型中,沒有進入節點記憶體池的交易——我們期望(最終)探勘的代理——不會被中繼到其他節點。
在蒲公英協議中,交易在被接受到節點的記憶體池之前被中繼(在主幹階段)。因此,如果交易可以通過蒲公英系統地中繼但最終不會被任何節點的記憶體池接受,則存在潛在的 DoS 向量——這可能會引入頻寬 DoS,比特幣網路的頻寬被用完,或者浪費中繼最終無用的數據; 或者 CPU 耗盡 DoS,如果驗證交易成本高昂,則可以在最終不被探勘的情況下進行中繼。[一般來說,攻擊者“支付”他們在中繼時消耗的網路資源的唯一方式是通過交易中的交易費;如果攻擊者可以生成最終不會被探勘的交易,
事實證明——在一個樸素的蒲公英實現中——生成在主幹階段傳播但永遠不會被記憶體池接受的交易並不是很困難(以非常低的成本)。這在很大程度上是由於記憶體池接受邏輯的複雜性造成的,而且考慮到記憶體池自身的反 DoS 限制,這似乎尤其不可避免。
現有的記憶體池接受邏輯試圖阻止或限制此類 DoS 攻擊的影響。直到在記憶體池接受之前,在滿足所有其他交易策略規則之後,交易才會檢查其簽名,以避免 CPU 耗盡攻擊。防止頻寬攻擊涉及更多:
- 交易只有在被我們自己的記憶體池接受後才會被轉發
- 如果我們的記憶體池滿了(這是一個記憶體有限的資料結構),那麼我們可以驅逐低費率交易為新交易騰出空間,但新交易需要支付更高的最低中繼費,旨在抵消/支付中繼費對於從記憶體池中驅逐的交易(因此在它們再次中繼之前將不再被探勘)。
簡而言之,為了防止 DoS,記憶體池接受邏輯相當複雜。所以在我看來,圍繞蒲公英實現的問題是:
(a) 我們是否需要像目前記憶體池邏輯一樣複雜的東西來避免使用蒲公英的 DoS 向量,或者我們可以做一些更簡單的事情嗎?
(b) 是否對蒲公英協議進行了可接受的修改,以簡化 DoS 分析並允許更簡單的實施,同時仍為網路提供顯著的隱私提升?舉個例子:在 DoS 場景下,我們只是回退到目前的中繼模型,是否可以接受蒲公英?
(c) 如果我們沒有更簡單的解決方案,是否值得實現類似於目前記憶體池邏輯的東西(在某些討論中稱為“stempool”)以便將蒲公英引入比特幣核心?程式碼複雜性是否值得蒲公英賦予的隱私利益?雖然改善網路隱私顯然是一件好事,但蒲公英的隱私優勢是有限的,那麼這種事情是值得花費大量精力去實施和維護的,還是應該將精力集中在其他地方?