在縱向聯邦學習聯合建模過程中,兩家公司用戶群體不可能完全重疊,第一步需要找到相同的用戶ID集合。在不泄露數據前提下,找到雙方公共ID集合的技術稱為私有集交集(Private Set Intersection, PSI)。下面介紹一下基於散列和RSA算法的實現方案。
假設:
公司A的集合是UA={u1,u2,u3,u4}
公司B的集合是UB={u1,u2,u3,u5}
步驟1:公司B通過RSA算法生成公鑰對(n,e)和私鑰對(n,d),其中公鑰對(n,e)發送給公司A。
步驟2:公司A針對其本地的用戶集合UA中的每個元素ui,生成一個對應的隨機數ri。這時,通過公鑰對 對隨機數ri進行加密得到rie%n,將ui代入散列函數H中得到H(ui)。將兩者相乘,得到
H(ui)。將兩者相乘,得到
(YA)i=((ri)e%n).(H(ui))%n ,其中ui、ri與(YA)i三者之間是一一對應的。
將YA發送給公司B,同時公司A中保存YA與uA值的一一對應關系映射表。
步驟3:公司B 利用私鑰對(n,d),對YA進行解密,記為ZA,得到
(ZA)i=((YA)i)d%n=((ri)e%n)d.(H(ui))d%n =ri.(H(ui))d%n,
可見YA的元素與ZA的元素是一一對應的。同時公司B利用散列函數H作用與本地的用戶集合uB中的每一個元素得到H(uB),在利用私鑰(n,d)對H(uB)加密,重新輸入散列函數H中,得到ZB:
(ZB)i=H((H(ui))d%n),注意到uB的元素與ZB的元素是一一對應的關系,記為映射(uB->ZA),將ZA,ZB和映射一起發送給公司A。
步驟4,公司A首先將映射表(YA->UA)與映射表(YA->ZA)進行連接運算,得到新的映射表(ZA- >UA)。同時,(ZA)i除以隨機數ri,並代入散列函數H 中,得到
(DA)i =H((H(ui))d)
注意到ZA的元素與DA的元素是一一對應的關系,記為映射(ZA->DA),將(ZA->DA)與映射表進行連接運算得到新的映射表(DA->uA)。
步驟5,將DA與ZB執行相交運算,得到加密和散列組合狀態下的ID交易,記為I:
集合I中的元素是映射表(DA-》uA)中的key值,因此我們利用該映射表找出對應的明文集合,這樣公司A就得到了交集的結果。但我們不能直接發送明文結果給公司B,而是將集合I發送給公司B,由公司B利用自身的映射表單單獨求取明文結果。
步驟6:同理,集合I中的元素同樣是公司B本地映射表(DB-》UB)的Key值,利用該映射表,同樣能夠查出I對應的明文狀態下的交集,致辭公司A和公司B完成了在加密狀態下求取相交的用戶集合的任務