隱私集合求交(PSI)-0
在知乎上看到一篇文章,講解PSI的,很好,在這裡簡單摘抄一下學習。來自:隱私計算關鍵技術:隱私集合求交(PSI)原理介紹。對應的開源庫。對應的論文:Efficient Batched Oblivious PRF with Applications to Private Set Intersection
PSI
隱私集合求交(Private Set Intersection)是縱向聯邦學習中的關鍵前置步驟,用於在多家廠商聯合計算前,找到多家共有的資料樣本,並且不暴露每家廠商獨有的樣本。在本文中,我們詳細介紹一種使用不經意傳輸協議(Oblivious Transfer)實現的隱私集合求交方法,該方法在現有的PSI方法中,是速度最快的。
縱向聯邦學習
假設這樣一個場景,淘寶和知乎聯合起來訓練一個模型,預測一個使用者是否對科技類產品感興趣。淘寶有使用者A、B、C三個人的購買歷史資料,而知乎有B、C、D三個人的知乎文章瀏覽資料。使用縱向聯邦學習,在淘寶和知乎都不洩露各自的使用者資料前提下,我們可以整合B、C兩個人的淘寶和知乎資料特徵,共同訓練一個預測模型,由於使用到了兩類資料進行訓練,理論上來說得到的結果應該比淘寶或者知乎各自訓練出的模型更準確。
由於模型訓練需要同時使用淘寶和知乎的資料,我們發現使用者A僅僅有淘寶的資料,沒有知乎的資料,因此使用者A無法做為訓練樣本使用。同樣的,知乎的使用者D也無法參與訓練。因此在縱向聯邦學習之前,雙方需要計算出共有的樣本(資料對齊),也就是B、C兩人,後續的計算都圍繞BC兩人進行。而隱私集合求交就是雙方通過加密計算,得到B、C兩人這個集合,同時不暴露各自的原始集合的方法。
PSI+hash
PSI是指,參與雙方在不洩露任何額外資訊的情況下,得到雙方持有資料的交集。在這裡,額外的資訊指的是除了雙方的資料交集以外的任何資訊。
隱私集合求交在現實場景中非常有用,比如在縱向聯邦學習中做資料對齊,或是在社交軟體中,通過通訊錄做好友發現(好友推薦)。因此,一個安全、快速的隱私集合求交的演算法是十分重要的。
我們可以用一種非常直觀的方法來進行隱私集合求交,也就是樸素雜湊(simple hash)的方法。參與雙方A、B,使用同一個雜湊函式H,計算他們資料的雜湊值,再將雜湊過的資料互相傳送給對方,然後就能求得交集了。
這種方法看起來非常簡單、快速,但是,它是不安全的,有可能會洩露額外的資訊。如果參與雙方需要求交集的資料本身,資料空間比較小,比如說手機號、身份證號等,那麼,一個惡意的參與方,就可以通過雜湊碰撞
所以通過簡單hash實現的PSI,雖然簡單快速,但不安全。
現在已經有了很多種不同的方法來實現隱私集合求交,比如基於Diffie-Hellman金鑰交換的方法、基於不經意傳輸的方法等等。而截至目前,最快速的隱私集合求交方法,是基於不經意傳輸的。下面,我們介紹如何使用不經意傳輸,來實現一個隱私集合求交演算法。
目前最快的PSI還是基於OT的。
PSI+OT
OT
不經意傳輸是一種密碼學協議,實現了傳送將將潛在的許多資訊中的一個傳遞給接收方,但是對接收方所接收的資訊保持未知。
一種比較實用的不經意傳輸方案,被稱為1-2不經意傳輸。在1-2不經意傳輸中,傳送方持有兩個資料,接收方可以選擇獲取其中的一個,但是傳送方並不知道接收方選擇了哪一個資料。形式化描述如下:
傳送方A持有資料\(m_0\)和\(m_1\),接收方B持有一個位元\(b\),\(b\in{0,1}\),則1-2不經意傳輸可以描述為:
\[OT((m_0,m_1),b)=m_b \]其中,B只知道\(m_b\),不知道\(m_{1-b}\),而A也不知道\(b\)。
我們也可以將1-2不經意傳輸擴充套件為1-n不經意傳輸,即接收方能從n個數據中選擇獲取一個,且對傳送方保密。
不經意傳輸也有很多種實現方式,不過一般都需要使用公私鑰加密的方式來實現,比如RSA、橢圓曲線加密等。 在本篇文章中,我們不介紹具體的不經意傳輸協議,讀者們可以把不經意傳輸當作是一個黑盒子,我們接下來詳細介紹如何實用不經意傳輸,來構造一個隱私集合求交的方法。
使用OT
我們先從最簡單的情況開始。假設參與雙方A、B,都只有一個元素,這時隱私集合求交,就退化成了隱私比較, 即A、B比較持有的元素是否相等,同時不洩露自己持有的元素。
我們假設A持有資料x,B持有資料x。不失一般性,我們假設x與y的位元組長度相等,長度為\(l\),即\(|x|=|y|=l\)。 現在,A為資料x的每一位,都生成兩個隨機的二進位制串(服從均勻分佈),長度為\(n\),即\(K_{i,0},K_{i,1},i=(0,1,..,l-1),|K_{i,0}|=|K_{i,1}|=n\)。
現在,B作為接收方,A作為傳送方,開始執行1-2不經意傳輸協議。B根據y的每一位\(y_i\),選擇A持有的\(K_{i,0},K_{i,1}\)中的一個,即\(OT((K_{i,0},K_{i,1}),y_i)=K_{i,y_i},i=(0,1,..,l-1)\)。B將接收到的\(l\)個二進位制串進行異或,得到一個二進位制串\(K_y\),即\(K_y=\bigoplus K_{i,y_1},i=(0,1,..,l-1)\), 其中$\bigoplus $表示異或。
傳送方A也可以跟B一樣,根據x的每一位\(x_i\),選擇一個二進位制串\(K_{i,x_i}\),將這\(l\)個二進位制串進行異或,得到一個二進位制串\(K_x=\bigoplus K_{i,x_1},i=(0,1,..,l-1)\)。當然,A生成\(K_x\)的過程不需要使用不經意傳輸,因為x與K都在A的手中。
之後,A將\(K_x\)傳送給B,B即可判斷x與y是否相等。
這個隱私比較的方法,顯然是安全的。
B使用不經意傳輸獲得\(K_y\)的過程中,由於不經意傳輸的特性,A不會知道B的資料y;使用異或得到的\(K_x\)與\(K_y\),與一個隨機的n位二進位制串是無法區分的,所以B也無法通過\(K_x\)反推出x。A作為傳送方,不經意傳輸保證了A無法得到B的資料y(除非\(x=y\));只要B是誠實的,即不能通過不斷執行這個協議來碰撞A的資料,那麼B也無法得到A的資料x(除非\(x=y\))。
PSI+OPRF(OT)
OPRF
觀察隱私比較,我們可以發現,傳送方A持有一組二進位制串\(K_{i,0},K_{i,1},i=(0,1,..,l-1)\),我們可以將這些二進位制串整體當作一個隨機種子\(K\),由A持有。從B的角度來看,隱私比較的過程,就是B輸入資料y,得到一個隨機二進位制串\(K_y\),這個二進位制串由A持有的隨機種子\(K\)與輸入y來決定,同時A無法得知B的輸入y。這一過程,就可以看作是不經意偽隨機函式(Oblivious Pseudorandom Function, OPRF)。
不經意偽隨機函式是一種密碼學協議[3],傳送方可以選擇一個隨機種子\(s\),接收方可以選擇一個輸入\(r\)並得到一個偽隨機函式\(F(s,r)\)的輸出,同時傳送方不知道\(r\)。那麼,隱私比較中,接收方B就是執行了一個不經意偽隨機函式\(F(k,y)=K_y\),傳送方A可以執行一個普通的偽隨機函式\(F(k,x)=K_x\),通過比較\(K_x\)和\(K_y\),即可實現隱私比較。
這樣來看,我們就是使用不經意偽隨機函式,來構建了一個隱私比較演算法。接下來,我們要更進一步,看看如何使用不經意偽隨機函式,來構建隱私集合求交。
使用OPRF
這裡的OPRF實際上是使用的OT協議實現的
假設A持有一組輸入X,B持有一組輸入Y,\(|X|=|Y|=n\)。通過不經意偽隨機函式,我們可以構造出一個非常樸素的隱私集合求交演算法:
- A構造\(n\)個不經意偽隨機函式的種子\(k_i,i=(0,1,...,n-1)\)
- B為Y中的每一個元素y,執行一個對應不經意偽隨機函式,得到集合\(H_B=(F(k_i,y_i)|y_i\in Y)\)
- A為X中的每一個元素x,執行每一個不經意偽隨機函式,得到集合\(H_A=(F(k_i,x_i)|x_i\in X)\)
- A將集合\(H_A\)傳送給B,B求交集\(H_A\bigcap H_B\),再將交集映射回Y,即可得到X與Y的交集
這種方法簡單來講,就是B將每一個Y中的每一個元素,都與A的X中的每一個元素,通過不經意偽隨機函式進行隱私比較,進而得到X與Y的交集。
這種方法雖然直觀,但是開銷很大,因為集合\(H_A\)的大小是\(O(n^2)\),當集合大小n增長時,傳輸量增長很快。
單純使用OPRF,會使得開銷很大
那麼,我們有沒有辦法將集合大小限制在\(O(n)\)呢?答案是可以的。這需要使用到雜湊表的思想。這裡,我們使用布穀鳥雜湊(Cuckoo hashing)來解決這個問題。
PSI+OPRF(OT)+Cuckoo hash
Cuckoo hash
我們首先簡單介紹一下布穀鳥雜湊。
假設我們想要使用布穀鳥雜湊,將n條資料放入\(b\)個桶中,則我們首先選擇3個雜湊函式\(h_1,h_2,h_3:(0,1)*->[b]\),以及b個空的桶\(B[1,...,b]\)。要放入一條資料\(x\),首先檢視3個桶\(B[h_1],B[h_2],B[h_3]\)是否有空的,如果有空的,則將\(x\)放入空桶。如果沒有空桶,則從這三個桶中隨機選擇一個桶\(B[h_i],i\in(1,2,3\),踢出原來在這個桶中的元素\(x'\),並將x放進這個桶中,然後再繼續嘗試插入被踢出的元素\(x'\)。遞迴地執行這一過程,直到元素被放入一個空桶中。如果經過一定輪次後,仍然找不到空桶放入元素,那麼就將被踢出的元素放到一個特殊的桶中,這個桶被稱為儲藏桶。
使用Cuckoo hash
現在回到隱私集合求交的構建中,讓我們看看如何在隱私集合求交中使用布穀鳥雜湊。
首先,A、B雙方共同選擇三個雜湊函式\(h_1,h_2,h_3\)。然後,B將其持有的\(n\)個元素Y,使用布穀鳥雜湊,放入\(1.2n\)個桶與一個儲藏桶中,儲藏桶的大小為\(s\)。對B來說,現在每個桶中最多隻有一個元素,並且儲藏桶的中,最多有個元素。現在B可以構造假資料,將這些桶和儲藏桶都填滿,使每個桶中都有一個元素,且儲藏同中正好有\(s\)個元素。
然後,A可以生成\(1.2n+s\)個隨機種子\(k_i,i\in(1,2,..,1.2n+s)\),用作\(1.2n+s\)個不經意偽隨機函式的隨機種子。B作為接收方,為其桶中的每一個元素\(y\),計算不經意偽隨機函式。如果\(y\)被放在\(i\)號桶中,則計算\(F(k_i,y)\),如果\(y\)被放在了儲藏桶中的第\(j\)個位置,則計算F\((k_{1.2n+j},y)\)。
另一邊,A作為傳送方,可以任意地計算偽隨機函式\(F(k_i,x)\),那麼,A可以為其輸入X計算以下兩個集合:
\[H=(F(k_{h_i(x)},x)|x\in X,i={1,2,3}) \] \[S=(F(k_{1.2n+j},x)|x\in X,j={1,2,3,...,s}) \]A將集合\(H\)和集合\(S\)中的元素打亂,並將這兩個集合傳送給B。對於B來說,如果一個元素\(y\)被放到儲藏桶中,則B可以在集合\(S\)中查詢\(y\)對應的不經意偽隨機函式輸出;否則,就在集合\(H\)中查詢。通過查詢,就可以得到X與Y的交集。
通過計算,我們可以發現,集合\(H\)的大小為\(3n\),集合\(S\)的大小為\(ns\),\(s\)是一個常數,因此A需要傳輸的資料量為\(n(3+s)\),是\(O(n)\)的。通過結合布穀鳥雜湊,我們減少了協議所需要傳輸的資料量,加快了協議的執行速度。
顯然,使用不經意偽隨機函式構造的隱私集合求交演算法,是安全的。
由於不經意偽隨機函式的特性,傳送方A無法得知接收方B的輸入。同時,對於集合\(X-Y\)中的元素,其經過偽隨機函式的輸出,與一個隨機的二進位制串無法區分,因此B也無法從偽隨機函式的輸出中反推出輸入。在B是誠實的條件下(不能無限次地執行不經意偽隨機函式來進行碰撞),這個協議是安全的。
使用OPRF,能抵抗惡意的接收者,雖然安全,但是效率並不高。
現在,我們已經成功地通過OPRF(基於OT),構造了一個安全的隱私集合求交演算法。 但是這並不是結束,只是一個開始。因為我們構造的演算法雖然安全,但是並不快速。
OPRF的實現有兩種方式,一種是基於DH,一種是基於OT
在這裡,影響隱私集合求交演算法速度的主要因素,OPRF的執行速度。回顧上文的內容,在演算法中,我們需要執行\(1.2n+s\)次不經意偽隨機函式,而每個不經意偽隨機函式,需要執行\(l\)次1-2不經意傳輸,\(l\)為求交集的元素的長度,所以,我們一共需要\(O(nl)\)次不經意傳輸。而不經意傳輸,是個很慢的操作,因為不經意傳輸需要使用到公私鑰加密,公私鑰加密本身就很慢。
根據現在的隱私集合求交的演算法,演算法的速度取決於求交集的集合元素數量\(n\),以及每個元素的大小\(l\)。這導致了當集合大小變得很大,或者集合中的元素變得很長時,演算法的速度會越來越慢。
快速的OT,實現快速的OPRF,進而實現快速的PSI!
那麼,我們能不能進一步優化演算法呢?在下一篇文章中,我們將繼續這個話題,介紹如何構造大量快速的不經意傳輸,並使用這些快速的不經意傳輸,來實現快速的不經意偽隨機函式,以此來加快隱私集合求交演算法。
參考
[1] Kolesnikov V, Kumaresan R, Rosulek M, et al. Efficient batched oblivious PRF with applications to private set intersection[C]//Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. 2016: 818-829.
[2] Pinkas B, Schneider T, Segev G, et al. Phasing: Private set intersection using permutation-based hashing[C]//24th {USENIX} Security Symposium ({USENIX} Security 15). 2015: 515-530.
[3] Freedman M J, Ishai Y, Pinkas B, et al. Keyword search and oblivious pseudorandom functions[C]//Theory of Cryptography Conference. Springer, Berlin, Heidelberg, 2005: 303-324.