Verifiability
驗證集合中某個項目的成員資格,同時隱藏集合中的元素數量?
我想知道是否有可能實現以下場景:
假設你有一組名字 {Alice, Bob, Jake}。要驗證集合中是否存在名稱“Bob”,您可以簡單地將“Bob”與集合中的每個元素進行比較,並發現集合中的一個條目確實與名稱“Bob”匹配。
我需要一種方法來驗證集合中“Bob”的成員資格,但不暴露集合中元素的數量。
是否可以對集合 {Alice, Bob, Jake} 進行一些轉換,以便生成的實體可用於驗證“Alice”、“Bob”和“Jake”在集,但同時生成的實體不允許查看該集包含的元素總數?
非常感謝
你根本沒有提到多方,所以問題是:誰知道呢?誰一定不知道集合中元素的數量?
然後,最簡單的解決方案實際上不需要密碼學:
- 讓我們假設 Bob 有一組元素,而 Alice 想知道某個元素是否 $ x $ 在集合中。
- 愛麗絲發送 $ x $ 給鮑勃。
- Bob 用yes或no回答。
顯然,這並沒有隱藏 $ x $ 從鮑勃。如果我們使用一些雜湊值 $ h(x) $ 相反(Bob 也對所有元素進行雜湊處理,其餘元素相同),然後給出足夠的熵 $ x $ Bob 可能找不到 $ x $ - 如果它不在集合中(如果是,他也知道原像,因為你可以假設 Bob 沒有刪除原始元素)。
根據您想要的屬性,有各種結構。例如set members proofs,其中 Bob 實際上必須證明元素在集合中,而簡單的是或否是不夠的。如果您想實現 Bob 甚至不知道答案是yes還是no,這也可能是可能的——基於某種不經意的轉移。
另一個可能滿足您需求的有趣結構可能是 累加器- 這是我現在最好的猜測:Bob 將累加器交給 Alice,它不會自行暴露元素或它們的數量。但是他能夠證明某個元素實際上包含在累加器表示的集合中。