Security

全節點能否向 Neutrino 節點提供虛假的塊布隆過濾器?

  • January 18, 2019

當使用 BIP157/BIP158 (Neutrino) 的瘦客戶端請求最新塊的塊過濾器時,服務該請求的完整節點是否有可能通過提供忽略某些交易的虛假塊過濾器來攻擊 Neutrino 節點?

塊過濾器是否包含使瘦客戶端能夠驗證它是相應塊內容的準確表示的機制?當瘦客戶端已經知道正確的最新塊的標頭時,是否有可能以一種通過遺漏變得不可能的方式構造塊過濾器?

提供此請求的完整節點是否有可能通過提供忽略某些交易的虛假塊過濾器來攻擊 Neutrino 節點?

是的。實際上,該協議實際上指定數據載體輸出(OP_RETURN輸出)始終從過濾器中排除。

塊過濾器是否包含使瘦客戶端能夠驗證它是相應塊內容的準確表示的機制?

BIP157/158 使用的哥倫布編碼集(不是布隆過濾器)的屬性是保證誠實的預設過濾器與用於生成過濾器的區塊鏈數據中包含的任何錢包數據相匹配,但它有時也可能匹配不屬於過濾器數據的錢包數據。例如:

  • Alice 的錢包地址為 bc1abcd…wxyz
  • 如果塊 123 包含地址 bc1abcd…wxyz 並且節點向 Alice 發送誠實過濾器,則保證為她生成匹配
  • 如果塊 456 不包含地址 bc1abcd…wxyz,它可能仍然會意外匹配 Alice 的錢包

這就產生了一個非常簡單的情況,只要輕客戶端至少有一個誠實的對等點——假設輕客戶端(SPV 客戶端)依賴於獲得最多 PoW 鏈——保證愛麗絲總是下載塊她的錢包感興趣的交易,因為 Alice 下載的過濾器之一將是誠實的。這在安全性上類似於 BIP37。

與 BIP37 不同,BIP157/158 可以讓 griefer (Mallory) 填充一個充滿無關數據的過濾器,從而導致比 BIP157/158 誤報率(我認為大約是 1-in-20-百萬)。由於 Alice 可能從另一個節點下載塊,而不是她用來獲取過濾器的節點(以增加隱私),這可能會對誠實節點產生弱 DoS 頻寬漏洞,例如 DNS 放大攻擊。

令人高興的是,由於 BIP157/158 過濾器的誤報率如此之低,Alice 可以通過注意到 Mallory 的過濾器導致的誤報率比預期的高得多,從而很快檢測到 Mallory 正在使她傷心。

cfheaders此外,BIP157/158 過濾器是確定性的,可以使用小消息分發對特定過濾器的小雜湊承諾。這使得 Alice 在大量節點中查詢相同塊高度的過濾器時,頻寬效率非常高。如果他們中的任何一個不同意,Alice 可以下載所有不同的過濾器和相應的塊,檢查遺漏或高誤報率,禁止欺騙性的同行,並繼續相對幸福。這比 BIP37 要好得多,後者需要相當多的頻寬(甚至更多的節點 CPU 週期)來查詢大量對等點。

當瘦客戶端已經知道正確的最新塊的標頭時,是否有可能以一種通過遺漏變得不可能的方式構造塊過濾器?

有點。共識規則更改(可能作為軟分叉)可能需要將塊送出到該塊的過濾器。礦工仍然可以使用虛假過濾器創建無效塊,但由於礦工可以使用虛假交易輕鬆創建無效塊,因此創建虛假過濾器沒有任何優勢。

引用自:https://bitcoin.stackexchange.com/questions/83792