Implementation

在不暴露列表的情況下安全地測試列表中項目的存在

  • August 24, 2016

甚至不確定哪些術語可以描述我正在尋找的內容,但總體構想是:

給定一個有限長度的字元串列表,確定一個測試字元串是否屬於該列表。然後,生成一個的字元串列表,其中包含原始列表和測試字元串的差異。

在虛擬碼中,這可能看起來像:

def list = envelope(["string1", "string2", "string3"])

def validate( collection, test ) {
   if ( contains( collection, test ) ) {
       return remove( collection, test )
   } else {
       throw Exception
   }
}

// In Use
validate( list, "string2")
-> envelope( ["string1", "string3"] )

validate( list, "string4")
-> Exception

有人告訴我,這聽起來像是區塊鏈的工作方式,但鑑於我讀過的所有內容以及我對區塊鏈的基本了解,我對此表示懷疑。是否有其他可用的流程或協議可用於實現上述功能?

您可以為此使用收斂加密

  1. 對於要插入的每個項目,計算其雜湊值,然後通過從該雜湊值派生密鑰對其進行加密。插入密文(丟棄散列/密鑰)。
  2. 要測試項目的存在,對其進行散列、加密、查找匹配的密文。

您可能希望使用雜湊表或搜尋樹(字典或集合)之類的東西,而不是平面列表,以避免 $ O(n) $ 查找項目時掃描。

請注意,使用者可以通過加密所選項目並根據列表檢查它們來暴力/字典攻擊該方案。

引用自:https://crypto.stackexchange.com/questions/39549