前言
本文从数据流的角度详细介绍样本融合的实现原理
场景
弊端
用户隐私数据放在第三方存在泄漏的风险
接下来咱聊聊如何多方安全隐私计算
整体流程图
数据交互过程
以上图为依据 用实际数据来验证
guest等待host发送密钥
密钥包含 e和n
guest原始数据集
原始数据集的id列
对id列添加随机数(python代码)
pd.DataFrame(dfaid).assign(a=dfaid.apply(lambda v:random.SystemRandom().getrandbits(128),axis=1))
得到id和对应的随机数r
对每一行数据进行处理
reh=dfaidr.apply(lamdba idr: int(self.hash(idr[0]),16)*gmpy2.powmod(int(idr[1]),self.e,self.n))
idr[0]就是id值
idr[1]就是随机数r的值
对id hash计算得到int值
r ^ e mod n即随机数r的e次幂取模n
两者乘积
结果是
将上面结果命名为结果B 该值传给host
将id和r和上面结果整合在一起得到结果命名为结果A
接下来介绍下host方
host方的数据集
获取id列
对每一个id进行处理
pd.DataFrame(dfbid).apply(lambda vv: sefl.ff2(vv,self.d,self.n),axis=1)
ff2函数:
gmpy2.powmod(int(self.hash(x[0]),16),d,n)
即
int(hash(id)) ^ d mod n
得到结果如下 命名为结果C
host将结果C发送给guest
host得到guest发送过来的结果B
对每一行数据进行处理
froma.apply(lambda vv: self.ff1(vv,self.d,self.n),axis=1)
gmpy2.powmod(x[0],d,n)
即id加密值 ^ d mod n
得到结果命名为结果D
host将结果D发送给guest
guest得到host发送过来的结果D
guest将结果D和本身的id和随机数r整合在一起 命名为结果F
对每一行数据进行处理
dfajoin.apply(lamdba vv:self.ff3(vv,mpz(slef.n)),axis=1)
gmpy2.divm(mpz(x[2]),mpz(x[1]),n)
结果命名为结果E
guest将结果E和F整合在一起命名为结果G
- 前半部分数据
- 后半部分数据
guest取交集
pd.DataFrame(merge(za,pd.DataFrame(toa2,columns=['z']),on='z')[self.columnId])
za就是结果G
toa2就是结果E
两个数据集取交集即可得到结果H
guest将融合数据集H发送给host即可
截止目前 上面的流程图结合实际的数据 你应该对整个样本融合的流程清晰了 接下来咱们看看其中涉及到的数学知识
上述过程涉及到的数学知识点
后记
接下来会揭秘特征分箱算法