[论文阅读:Efficient Verifiable Protocol for Privacy-Preserving Aggregation in Federated Learning——联邦学习中的高效可验证的隐私保护聚合协议]
来源
题目 | Efficient Verifiable Protocol for Privacy-Preserving Aggregation in Federated Learning |
---|---|
来源 | TIFS |
作者 | Tamer Eltaras* , Farida Sabry , Member, IEEE, Wadha Labda , Khawla Alzoubi , and Qutaibah Malluhi , Member, IEEE |
单位 | Computer Science and Engineering Department, Qatar University, Doha, Qatar、Engineering Technology Department, Community College, Qatar University, Doha, Qatar. |
摘要
- 由于敌手可以通过共享的梯度追踪并推断出用户的敏感信息,联邦学习容易受到许多安全和隐私威胁。
- 本文提出了一种在联邦学习环境中用于安全聚合模型参数的高效通信协议,其中训练在用户设备上进行,梯度的聚合发生在服务器端并且不会泄露用户的敏感信息。
- 本文所提出的协议对用户的退出具备鲁棒性,并且允许每个用户独立验证服务器提供的聚合结果。
- 本文提出的协议在诚实但好奇的环境中是安全的,并且即便多数方勾结也可保持隐私。
创新点
- 提出了一种高效、可验证的梯度聚合方案,并且是一个轻量级操作。
- 为了保证用户本地梯度的保密性,本文使用单掩码协议而不是常用的双掩码协议。
- 为了实现验证机制,本文借鉴双聚合的概念,与密码学协议相比较是一个轻量级操作。
- 本文提出的方案在通信效率、计算效率、存储开销等方面优于以前的方法。
- 本文提出的方案在性能评估、安全分析上都是可行的。
先验知识
- 本文的大体结构如图1所示:
密钥协商
一种密钥协商算法允许任何一方 u u u 将他们的私钥 s u S K s_u^{SK} suSK与任何一方 v v v 的公钥 s v P K s_v^{PK} svPK 结合,以获得 u u u 和 v v v 之间的私有共享密钥 s u , v s_{u,v} su,v 。本文在协议中使用Diffie-Hellman密钥协议,在每个用户和每个辅助节点之间生成共享密钥(种子)。具体而言,给定一个素数阶为 q q q 的群 G G G ,其中 g g g 是群 G G G 的生成元,每个用户可以与每个辅助节点就一个秘密共享达成一致,如下所示:
- 每个用户选择一个秘密密钥 U S K U_{SK} USK ,并生成其公钥为 g U S K m o d p g^{U_{SK}} \ mod \ p gUSK mod p,并与服务器共享公钥。
- 每个辅助节点选择一个秘密密钥 A S K A_{SK} ASK ,并生成其公钥为 g A S K m o d p g^{A_{SK}} \ mod\ p gASK mod p ,并将公钥与服务器共享。
- 服务器向各方广播公钥。
- 共享密钥现在计算为 k e y = ( g A S K ) U S K m o d p = ( g U S K ) A S K m o d p key = (g^{A_{SK}})^{U_{SK}}\ mod\ p = (g^{U_{SK}})^{A_{SK}} \ mod \ p key=(gASK)USK mod p=(gUSK)ASK mod p。
对称加密
对称加密是一种传统算法,只使用一个密钥进行加密和解密。给定密钥 S K SK SK 和要加密的信息 x x x,加密信息可以通过算法 A E . e n c ( S K , x ) → X ^ AE.enc(SK , x) → \hat{X} AE.enc(SK,x)→X^获得。密文 X ^ \hat{X} X^ 可以通过算法 A E . d e c ( S K , X ^ ) → x AE.dec(SK , \hat{X} ) → x AE.dec(SK,X^)→x 解密。在本文的模型中,使用对称加密通过服务器在辅助节点和用户之间传递消息,而不违反消息的保密性。依靠这种技术来避免为每个用户和每个辅助节点之间建立私密通道以交换消息。
伪随机生成器
本文使用一个安全的伪随机生成器(Pseudo-Random Generator,PRG),它接收一个种子并生成一个随机数作为输出。PRG 必须保持两个性质:
- 只要种子对辨别器隐藏,输出在计算上必须与从输出空间采样的均匀元素无法区分。
- 使用相同的种子生成完全相同的输出。
系统模型
系统模型
- 本文的系统模型如图2所示,论文以医疗保健系统为示例:
实体和威胁模型
如图1所示,本文的系统模型由三个实体组成:辅助节点、用户(客户端)和中央聚合服务器。
- 辅助节点:这些节点是一组无法全部串通在一起的节点,它们非常关注用户数据的隐私。这些辅助节点可以代表诸如医院或医疗实体等在医疗领域进行研究的组织,或银行业的银行。它们具有鲁棒性,不参与任何训练过程。它们的主要工作是与用户就共享密钥达成一致,该密钥用作生成用于掩盖梯度的随机数的种子。在每一轮协议中,每个辅助节点与系统中的每个用户就一个独特的秘密随机密钥达成一致。该密钥协议通常在不直接与用户通信的情况下进行。然后,每个辅助节点计算其可用的所有随机数之和,并将总和发送给服务器。
- 用户:每个用户将其本地梯度发送到服务器进行安全聚合,而不会泄露这些梯度。用户将使用与辅助节点共享的随机数来掩盖其私有梯度。最后,每个客户端验证服务器是否正确计算了聚合。
- 服务器:服务器聚合所有在线用户上传的盲化梯度以及辅助节点上传的所有随机数的总和。因此,服务器将在不透露每个用户梯度的情况下聚合所有本地梯度。
本文的威胁模型假设如下:
- 所有参与者将遵循协议步骤,但他们可能会尝试推断其他用户的私人数据。
- 服务器可以与至多 ∣ N ∣ − 2 |N | − 2 ∣N∣−2 个用户串通。
- 服务器可能与最多 ∣ M ∣ − 1 |M| − 1 ∣M∣−1 个辅助节点串通。
- 服务器可以向用户返回修改后的聚合结果。
方法展开
系统建立
在系统建立阶段,每个客户端和辅助节点产生三个密钥对: { ( p k n 1 , s k n 1 ) , ( p k n 2 , s k n 2 ) , ( p k n 3 , s k n 3 ) } \{(pk_n^1,sk_n^1),(pk_n^2,sk_n^2),(pk_n^3,sk_n^3)\} {(pkn1,skn1),(pkn2,skn2),(pkn3,skn3)} 和 { ( p k m 1 , s k m 1 ) , ( p k m 2 , s k m 2 ) , ( p k m 3 , s k m 3 ) } \{(pk_m^1,sk_m^1),(pk_m^2,sk_m^2),(pk_m^3,sk_m^3)\} {(pkm1,skm1),(pkm2,skm2),(pkm3,skm3)} ,
密钥共享
客户端和辅助节点产生密钥对之后,将其三个公钥上传给服务器,服务器收到后将其广播。
- 第一组密钥对用于加密和解密;第二组密钥对用作产生同步随机数的种子;第三组密钥对用验证。
- 当客户端与辅助节点收到对方的公钥后,后产生相应的密钥:
- s n , m = K A . a g r e e ( s k n 2 , p k m 2 ) = K A . a g r e e ( s k m 2 , p k n 2 ) s_{n,m}=KA.agree(sk_n^2,pk_m^2)=KA.agree(sk_m^2,pk_n^2) sn,m=KA.agree(skn2,pkm2)=KA.agree(skm2,pkn2) ;
- k n , m = K A . a g r e e ( s k n 3 , p k m 3 ) = K A . a g r e e ( s k m 3 , p k n 3 ) k_{n,m}=KA.agree(sk_n^3,pk_m^3)=KA.agree(sk_m^3,pk_n^3) kn,m=KA.agree(skn3,pkm3)=KA.agree(skm3,pkn3);
- r n , m = P R G ( s n , m ) r_{n,m}=PRG(s_{n,m}) rn,m=PRG(sn,m);
- 其中 n n n 是客户端的索引, m m m 是辅助节点的索引。
- 辅助节点:
- 辅助节点 m m m 产生随机数 α \alpha α.
- 将 K n , m K_{n,m} Kn,m 做累加产生 K m K_m Km: K m ← ∑ n ∈ U k n , m K_m \gets \sum_{n \in U} k_{n,m} Km←∑n∈Ukn,m.
- 利用 α m \alpha_m αm 和 K m K_m Km 计算 c t n , m ct_{n,m} ctn,m: c t n , m ← A E , e n c ( K A . a g r e e ( s k m 1 , p k n 1 ) , α ∣ ∣ K m ) ct_{n,m}\gets AE,enc(KA.agree(sk_m^1,pk_n^1),\alpha||K_m) ctn,m←AE,enc(KA.agree(skm1,pkn1),α∣∣Km)
- 将 c t ct ct 发送给服务器。
- 客户端:
- 得到辅助节点发来的 c t ct ct 并解密: α ∣ ∣ K ← ∑ m ∈ M A E . d e c ( K A . a g r e e ( s k m 1 , p k n 1 ) , c t n , m ) \alpha||K \gets \sum_{m \in M} AE.dec(KA.agree(sk_m^1,pk_n^1),ct_{n,m}) α∣∣K←∑m∈MAE.dec(KA.agree(skm1,pkn1),ctn,m)
- 计算 K n K_n Kn: K n ← ∑ m ∈ M K A . a g r e e ( s k n 1 , p k m 1 ) K_n \gets \sum_{m \in M} KA.agree(sk_n^1,pk_m^1) Kn←∑m∈MKA.agree(skn1,pkm1)
- 计算完之后客户端与辅助节点都保存一个矩阵:
请注意图中的错误:在users中缺少省略号、 x i x_i xi 应该与索引值为 ( i , 1 ) (i,1) (i,1) 到 ( i , m ) (i,m) (i,m) 的r相加、k同理;在辅助节点中缺少省略号。
客户端梯度保护
- 各个客户端将自己的本地梯度与自己保存的矩阵中的 r r r 累加作盲化操作: x n ^ = x n + ∑ m = 1 M P R G ( s n , m ) \hat{x_n} = x_n +\sum_{m=1}^{M} PRG(s_{n,m}) xn^=xn+∑m=1MPRG(sn,m)。
- 同样的,各个辅助节点将自己保存矩阵的 r r r 累加: P m = ∑ n = 1 N P R G ( s n , m ) P_m =\sum_{n=1}^{N} PRG(s_{n,m}) Pm=∑n=1NPRG(sn,m)
- 然后各方将结果发送给服务器,服务器根据得到的参数做安全聚合,得到真正的聚合结果 X X X: X = ∑ n − 1 N x n = ∑ n = 1 N − ∑ m = 1 M P m X=\sum_{n-1}^{N}x_n=\sum_{n=1}^{N}-\sum_{m=1}^{M}P_m X=∑n−1Nxn=∑n=1N−∑m=1MPm。
可验证
- 客户端收到来自服务器的聚合结果 X X X 后,计算 K + α X K+\alpha X K+αX ,如果结果等于MAC,说明结果正确,接受结果,否则丢弃。
总体协议如下:
总结
- 这篇论文提出了高效可验证的安全聚合策略,并且支持客户端退出。
- 本文的协议不依赖于可信第三方,也无需加密硬件支持,具有较高的可拓展性与通用性。
- 本文虽然可以解决用户掉线问题,但是只是简单丢弃,有着可改进的可能。
- 本文的协议比较复杂,参与协议的实体过多,是否可以去掉辅助节点实现。
- 本文的实验环境仅写CPU,不知是否适合复杂的神经网络训练。