Encryption

客戶端如何私下查詢數據庫的子集?

  • March 4, 2020

我正在嘗試為以下問題建構解決方案,我認為它與加密有關:

甲方有一組索引M,比如一組人的ID;乙方擁有更多人的資訊,我們將該組的集合命名為 N。假設 M 是 N 的子集。乙方同意提供 A 出於商業目的請求的人的資訊。甲方雖然想從乙那裡得到M的所有資訊,但在這個過程中,它不想將M中的任何ID透露給乙方。

有誰知道這是否可能?

謝謝。

您正在尋找PIR、Private Information RetrievalOT、Oblivious Transfer以及可能還有PSI、Private Set Intersection

PIR 使客戶端能夠向伺服器查詢 $ i $ - 沒有伺服器學習查詢的數據庫條目。但是,客戶端也可以學習其他索引的值。

OT 是沒有這種洩漏的更強大的 PIR。

PSI 使客戶端能夠找到他們的秘密集和伺服器的秘密集的交集。您可能希望在 PIR 之前執行 PSI 以在嘗試查找非成員之前過濾掉它們,以降低通信成本。可能對RePSI 感興趣,Reactive PSI降低了惡意客戶端列舉伺服器集的能力。


一個更弱的替代方案也可能引起人們的興趣。如果數據庫很大,但分區合理,並且客戶端願意透露他們正在查詢的區域,那麼您可以使用 k-匿名。

前任。Have I Been Pwned 的密碼查找通過獲取密碼雜湊的前 5 個十六進製字元來辨識大型密碼雜湊數據庫的分區。然後,您將較小但仍然較大的分區過濾到您的確切雜湊/鍵並讀取其值。

儘管伺服器不會獲知使用者的密碼,但如果使用者有多個與共同使用者名或電子郵件地址相關聯的洩露密碼,則相關查詢可以唯一地辨識使用者。即可能只有一個使用者的兩個密碼雜湊以“12345”和“abcde”開頭。

如果客戶端搜尋“Bobby Smith”和“Carol Smith”的資訊,並且這兩個人存在於不同的分區中,那麼伺服器可能會連結這兩個查詢以恢復您的查詢。即使所有查詢都是獨立的,沒有任何關係,k-匿名仍然顯示客戶感興趣的大型數據庫的微小子集。

我為這個問題提出的一個好方法如下:

  1. A 部分請求 B 部分的所有內容(例如 json 文件);
  2. 一旦 A 部分擁有 N,則 A 部分可以過濾並從 N 中提取一個較小的子集;
  3. 最後,Part A 只需要將過濾後的子集放入 M 中。

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