目录
三、FATE安全聚合(SecureAggregation)的实现
记录下联邦学习中的安全聚合机制SMPC。
一、背景
1.1 联邦聚合与FedAVG
《Advances and Open Problems in Federated Learning》给出了联邦学习的一个典型的流程:
- 客户端选择:服务器从一组符合资格要求的客户端中采样;
- 传播:选定的客户端从服务器下载当前模型权重和训练程序;
- 客户端本地训练: 每个选定的设备都通过执行训练程序在本地计算对模型进行更新;
- 聚合:服务器收集客户端的更新;
- 模型更新: 服务器根据聚合的结果更新模型;
对于聚合阶段,所有的梯度或者模型都会发给协调方(聚合服务器),由协调方统一进行FedAVG(梯度平均、模型平均等),此过程必然为联邦学习引入了效率和安全之类的问题。相应的存在一些优化机制,包括:增加隐私的安全聚合、为了通讯效率而对聚合进行有损压缩、使用差分隐私来增加噪声等。
本文主要关注的是联邦学习中的安全聚合算法。
1.2 FATE
联邦学习框架FATE中也使用了安全聚合机制。
例如,横向联邦中存在安全聚合(SecureAggregation),
目的:保证协调者只能拿到最终的模型,但不能获取特定Host的模型;
原理:上传模型时,增加随机数R;保证所有的随机数加起来的时候又能抵消;
例如,对于横向神经网络:
1.3 密钥协商(Key Agreement)
DH密钥交换的目的,是让想要通信的Alice、Bob双方,他们之间能够拥有一个私密的密钥,这个密钥只有A和B两个人知道。DH密钥交换包含如下步骤:
1.4 秘密共享(Secret Sharing)
秘密分享通过把秘密进行分割,并把秘密在n个参与者中分享,使得只有多于特定t个参与者合作才可以计算出或是恢复秘密,而少于t个参与者则不可以得到有关秘密。Shamir算法是秘密共享协议的一种实现。
对于sharmir(t,w)方案,就是指准备w把钥匙,至少要t把钥匙才能开启。
应用举例如下:
package main
import (
"fmt"
"github.com/SSSaaS/sssa-golang"
"os"
)
// sharmir(t,w):准备w把钥匙,至少要t把钥匙才能开启
func main() {
secret := "0y10VAfmyH7GLQY6QccCSLKJi8iFgpcSBTLyYOGbiYPqOpStAf1OYuzEBzZR"
w := 5
t := 3
// 分割秘密
secretShares, err := sssa.Create(t, w, secret)
if err != nil {
fmt.Printf("Create err: %v\n", err)
os.Exit(-1)
}
fmt.Printf("secretShares: %v\n", secretShares)
// 选择其中的3份
testShares := []string{
secretShares[0],
secretShares[1],
secretShares[2],
}
// 恢复秘密
combined, err := sssa.Combine(testShares)
if err != nil {
fmt.Printf("Combine err: %v\n", err)
os.Exit(-1)
}
if combined != secret {
fmt.Printf("Fatal: combining returned invalid data\n")
os.Exit(-1)
}
}
二、安全聚合SMPC
2.1 原理
谷歌的Bonawitz等人,在2017年的CCS中提出了一种安全聚合加密方案(SMPC),服务器只能看到聚合完成之后的梯度,不能知道每个用户的私有的真实梯度值。
2.2 单掩码方案
- 用户u和v之间通过DH建立秘密通信通道,他们之间知道一个秘密随机数Suv;
- 用户1发送给服务器的更新值y1=x1-(s12+s13);
- 服务器对收到的所有值进行聚合以后,它们正负才会抵消,相当于真实值的聚合,等同于FedAVG
存在问题:用户掉线后,服务端收到的数据就没用了;
可能的方案:增加恢复阶段,但会引入安全问题。
2.4 双掩码完整方案
详见:《Practical Secure Aggregation for Privacy-Preserving Machine Learning》
完整流程如下:
可以看到:
- 该算法原理是针对隐私数据Xu,增加一个mask操作,分为两部分,Pu和Puv,这个mask可以保证隐私数据不被服务器(协调方)所获取;
- 服务器没法通过欺骗客户端以套取某一客户端的信息:因为有第3轮的认证加密机制,会在第4轮被客户端发现从而发现发送的客户端集合不一致导致算法中止;
- 如果没有Pu,那么如果用户不是真的掉线,而是延迟较大,在服务器已经得到所有的Puv时,他就可以恢复出该用户的数据,有了Pu就难以恢复出数据;
三、FATE安全聚合(SecureAggregation)的实现
3.1 FATE的安全聚合机制
FATE采用的是单掩码方案,且没有采取秘密共享,如下如所示:
3.2 FATE安全聚合的实现
(1)每个客户端会先初始化一个uuid;
(2)通过dh,host和guest协商一个key作为相同的随机数;
(3)双方在权重传递给arbiter前加入数值大小相同符号相反的噪声,保证双方在arbiter方聚合后噪声可以相互抵消,在不影响最终结果的情况下使得arbiter方和其他攻击者无法获取真实的权重,符合安全聚合的设定;
公式为:w = w + r * 1 * amplify_factor或者w = w - r * 1 * amplify_factor;
四、总结
- 在联邦学习中,原始的FedAVG算法需要参与方发送真实的更新值,但这会对协调者暴露当前参与方的隐私数据(梯度/模型参数);
- 谷歌的安全聚合机制使得协调方只能看到聚合完成之后的梯度/模型,不能知道每个用户的私有的真实梯度值/模型;
- FATE实现了单掩码的SMPC;