当前位置:   article > 正文

联邦学习中的安全聚合SMPC

安全聚合

目录

 一、背景

1.1 联邦聚合与FedAVG

1.2 FATE

1.3 密钥协商(Key Agreement)

1.4 秘密共享(Secret Sharing)

二、安全聚合SMPC

2.1 原理

2.2 单掩码方案

2.4 双掩码完整方案

三、FATE安全聚合(SecureAggregation)的实现

3.1 FATE的安全聚合机制

3.2 FATE安全聚合的实现

四、总结


记录下联邦学习中的安全聚合机制SMPC。

 一、背景

1.1 联邦聚合与FedAVG

《Advances and Open Problems in Federated Learning》给出了联邦学习的一个典型的流程:

  1. 客户端选择:服务器从一组符合资格要求的客户端中采样;
  2. 传播:选定的客户端从服务器下载当前模型权重和训练程序;
  3. 客户端本地训练: 每个选定的设备都通过执行训练程序在本地计算对模型进行更新;
  4. 聚合:服务器收集客户端的更新;
  5. 模型更新: 服务器根据聚合的结果更新模型;

对于聚合阶段,所有的梯度或者模型都会发给协调方(聚合服务器),由协调方统一进行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把钥匙才能开启。

应用举例如下:

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/SSSaaS/sssa-golang"
  5. "os"
  6. )
  7. // sharmir(t,w):准备w把钥匙,至少要t把钥匙才能开启
  8. func main() {
  9. secret := "0y10VAfmyH7GLQY6QccCSLKJi8iFgpcSBTLyYOGbiYPqOpStAf1OYuzEBzZR"
  10. w := 5
  11. t := 3
  12. // 分割秘密
  13. secretShares, err := sssa.Create(t, w, secret)
  14. if err != nil {
  15. fmt.Printf("Create err: %v\n", err)
  16. os.Exit(-1)
  17. }
  18. fmt.Printf("secretShares: %v\n", secretShares)
  19. // 选择其中的3份
  20. testShares := []string{
  21. secretShares[0],
  22. secretShares[1],
  23. secretShares[2],
  24. }
  25. // 恢复秘密
  26. combined, err := sssa.Combine(testShares)
  27. if err != nil {
  28. fmt.Printf("Combine err: %v\n", err)
  29. os.Exit(-1)
  30. }
  31. if combined != secret {
  32. fmt.Printf("Fatal: combining returned invalid data\n")
  33. os.Exit(-1)
  34. }
  35. }

二、安全聚合SMPC

2.1 原理

谷歌的Bonawitz等人,在2017年的CCS中提出了一种安全聚合加密方案(SMPC),服务器只能看到聚合完成之后的梯度,不能知道每个用户的私有的真实梯度值。

2.2 单掩码方案

  1. 用户u和v之间通过DH建立秘密通信通道,他们之间知道一个秘密随机数Suv;
  2. 用户1发送给服务器的更新值y1=x1-(s12+s13);
  3. 服务器对收到的所有值进行聚合以后,它们正负才会抵消,相当于真实值的聚合,等同于FedAVG

存在问题:用户掉线后,服务端收到的数据就没用了;

可能的方案:增加恢复阶段,但会引入安全问题。

2.4 双掩码完整方案

详见:《Practical Secure Aggregation for Privacy-Preserving Machine Learning》

完整流程如下:

可以看到:

  1. 该算法原理是针对隐私数据Xu,增加一个mask操作,分为两部分,Pu和Puv,这个mask可以保证隐私数据不被服务器(协调方)所获取;
  2. 服务器没法通过欺骗客户端以套取某一客户端的信息:因为有第3轮的认证加密机制,会在第4轮被客户端发现从而发现发送的客户端集合不一致导致算法中止;
  3. 如果没有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;

四、总结

  1. 在联邦学习中,原始的FedAVG算法需要参与方发送真实的更新值,但这会对协调者暴露当前参与方的隐私数据(梯度/模型参数);
  2. 谷歌的安全聚合机制使得协调方只能看到聚合完成之后的梯度/模型,不能知道每个用户的私有的真实梯度值/模型;
  3. FATE实现了单掩码的SMPC;
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号