在纵向联邦学习联合建模过程中,两家公司用户群体不可能完全重叠,第一步需要找到相同的用户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完成了在加密状态下求取相交的用户集合的任务