部分技术点原理介绍
数据对齐两种实现方式
密码学基础知识
不经意间传输加密OT
概念
不经意传输(oblivious transfer)是一个密码学协议 在这个协议中,消息发送者从一些待发送的消息中发送一条给接收者 但事后对发送了哪一条消息仍然oblivious(不知道) 这个协议也叫茫然传输协议
举例说明
1.发送者Alice生成两对rsa公私钥,并将两个公钥puk0、puk1发送给接受者Bob 2. Bob生成一个随机数,并用收到的两个公钥之一加密随机数(用哪个秘钥取决于想获取哪条数据,例如如果想要得到消息M0 就用puk0加密随机数,如果想要得到M1就用puk1加密随机数),并将密文结果发送给Alice 3. Alice用自己的两个私钥分别解密收到随机数密文,并得到两个解密结果k0,k1,并将两个结果分别与要发送的两条信息进行异或(k0异或M0,k1异或M1),并将两个结果e0,e1发给Bob 4. Bob用自己的真实随机数与收到的e0、e1分别做异或操作,得到的两个结果中只有一条为真实数据,另外一条为随机数
RSA算法和哈希机制配合
为了解决加密样本对齐
首先,宏观上来说要想保证自己的数据不会被对方获取 A和B都需要针对数据采取只有自己了解的操作 以保证对方无法反推出数据 对于A而言,保密操作由哈希机制和随机产生的Ri来实现 对于B而言,保密操作由哈希机制和自己产生的d来实现 第一步:B由RSA算法产生n、e、d,并发送包含n、e的公钥给A 第二部:A对自己拥有的用户数据进行加密操作,哈希+Ri来实现,再将加密后的数据YA发送给B 第三步:B得到YA后,由于哈希机制的原理和Ri未知,很难反推出A的用户数据。B对YA取d次幂得到ZA,再对自己的用户数据进行加密操作,取哈希再d次幂再哈希,得到ZB,接着将ZA、ZB发送给A 第四步:A得到ZB后,同理也反推不出B的用户数据,再对自己的用户加密数据ZA除Ri再哈希,得到DA 第五步:DA和ZB本质上是对数据进行相同操作后得到的数据,所以如果源数据相同,操作后的数据也相同,所以根据DA,ZB求交集的结果,A可以判断出A和B的共同数据有哪些,最后再将结果I发送给B,样本对齐结束
- 思考为什么这么做
首先要明白求交集,必须将数据放到一起 放到一起的话那就必须要对自己的数据进行加密 我们还要明白共同用户数据经过加密操作之后必须仍然相同,暂且称之为要求1 那我们先假设对双方用户数据只进行一次哈希操作 这样虽然可以保证要求1,但是安全性不高,用户有可能反推用户数据 因此引入随机变量 我们再考虑能否只有一方发送数据另一方接收数据 假设B对自己的用户数据加密,用到了随机变量d和哈希,发送给A 接收方A接收后,A需要对自己的数据进行操作 使得自己的公共数据和B传来数据中的公共数据相等来满足要求1 但是由于A不知道d,所以A做不到公共数据相等,也就做不到样本对齐 接下来考虑双方互相发送数据 A先用随机变量Ri和哈希对自己的数据加密后发送给B B在A发来的密文上操作,此时该密文就有了因素d B再对自己的数据进行加密,接着将两部分数据发送给A A接收到两份密文后,对自己的密文进行转换 此时自己的密文已经包含了因素d 所以理论上A把自己加在自己数据上的“锁”解开后 能够转化为与B数据相同的形式,此时就可以完成样本对齐了 在这过程中双方都不可能反推对方的数据
模型训练加密过程
同态加密
纵向的模型训练有用到同态加密中的加法同态加密
第一个式子表示损失函数loss 第二个等式表示梯度 下面两个式子表示加法同态加密的性质——和的密文等于密文的和 由于加法同态加密中只支持加减乘除,不支持指数运算,所以loss需要在零点处二次泰勒展开 右图表示实际工作过程,UA将加密后的ua和ua^2发送给UB,ua=wx,即己方数据的权重和特征值的乘积 UB计算己方数据的权重和特种值的乘积,再和ua相加,得到样本的所有特征的w*x 然后结合自己拥有的样本标签y计算d d就是梯度表达式中除去x的部分 UB将d加密后发送给UA,此时UA、UB都可以用己方的特征值x乘d来计算出自己的梯度 UA、UB计算出梯度后,加密上传给arbiter,arbiter接收后解码、更新梯度,再将更新后的梯度分发下去,UAUB接收后完成模型的一次更新 不断迭代上述过程,直到loss低于预期值才停止 当数据提供方host较多时,为减少通信成本,不在计算loss,通过两次迭代之间梯度更新的幅度来判断是否结束,幅度很小时,训练结束
结语
后面会陆续介绍
- 几亿级别的数据量架构如何设计且如何实现
- 数据处理过程用一些大数据处理框架来做比如spark、flink
- python的优势在于算法 如何支持几亿级别的数据进行模型训练
- 核心:后端Python 每一个阶段的介绍
- 其他联邦学习技术点介绍