布隆過濾器是一種資料結構,可用來通知使用者特定項目是否為集合的一部分。雖然它不能肯定地說某個元素是否在集合中,但它可以肯定地說該元素是否不在集合中。
布隆過濾器由Burton Howard Bloom 於1970 年創建,對於一系列應用來說是一個有吸引力的產品。應用程式由於其空間利用效率。在某些加密貨幣(尤其是比特幣)中,它們在簡化支付驗證(SPV)中發揮著不可或缺的作用。
在使用SPV 用戶端時,用戶無需運行完整節點即可與比特幣網路互動。全節點具有一定的儲存和運算要求,這使得它們難以在智慧型手機等低功耗設備上運作。另一方面,SPV 用戶端只需查詢全節點以獲取與用戶錢包相關的資訊。
將此資料轉發給用戶的最直接的解決方案是讓全節點了解客戶端的金鑰,以便僅將相關事務發送給他們。顯然,這是一個較差的解決方案,因為會犧牲客戶的隱私。另一方面,下載所有交易卻丟棄其中的大部分會浪費頻寬。輸入布隆過濾器。
讓我們舉例說明。假設客戶 Alice 有一筆高價值交易,她不希望運行完整節點的 Bob 知道。她建構了一個布隆過濾器,我們將其表示為10x1 網格:
她透過兩個不同的雜湊函數傳遞她感興趣的交易數據,這兩個函數輸出0 到9 之間的兩個數字。我們稱它們為4 和7。她將過濾器發送給Bob 。
看著這個網格,你不知道Alice 傳遞給過濾器的數據是什麼。如果您有一個包含資料的集合,您將能夠對其進行散列並將其與過濾器進行比較 -如果存在匹配,則有可能是 Alice 請求的資訊。
同時,可能有許多輸入將映射到 4 和 7,因此Bob 無法確定Alice 對資料的哪一部分感興趣。他只是返回所有匹配項,然後Alice 在她的一端對它們進行過濾。
當然,這過於簡單化了,但它演示了這樣一個概念:布隆過濾器混淆了客戶端的真正利益。這不是一個完美的方法(仍然存在對其隱私的擔憂),但它是對節點的未屏蔽請求的改進。