VOSA: Verifiable and oblivious secure aggregation for privacy-preserving federated learning -- VOSA:可验证和遗忘安全聚合的适用于隐私保护的联邦学习
论文信息
名称 | VOSA: Verifiable and oblivious secure aggregation for privacy-preserving federated learning |
---|---|
作者 | Yong Wang , Graduate Student Member, IEEE, Aiqing Zhang , Member, IEEE, Shu Wu, and Shui Yu , Fellow, IEEE |
期刊 | TDSC 2023 |
摘要
VOSA(Verifiable and Oblivious Secure Aggregation),针对联邦学习(FL)中的 隐私泄露、结果可验证性和用户掉线 问题,提出了一种 高效、可验证且具备遗忘性 的安全聚合协议。该方案利用 聚合器遗忘加密(Aggregator Oblivious Encryption) ,使服务器能够在 不解密用户梯度 的情况下完成聚合计算,同时允许 用户验证聚合结果的正确性 ,并通过 动态组管理机制 支持掉线用户的灵活重新加入。实验结果表明,VOSA 在保障隐私安全的同时,具备较低的计算和通信开销,适用于大规模资源受限设备的 FL 场景。
背景
研究背景
联邦学习(Federated Learning, FL)是一种去中心化的机器学习范式,允许多个设备在不共享原始数据的情况下协作训练全局模型。然而,FL 仍然面临以下挑战:
- 隐私风险:共享的梯度可能会导致隐私泄露(如模型反演攻击和成员推理攻击)。
- 可验证性问题:中心服务器可能会伪造或篡改聚合结果,影响模型训练的可信度。
- 用户掉线问题:在大规模 FL 场景中,设备因资源受限可能在训练过程中掉线,影响模型更新。
研究目标
本文提出了一种 高效、可验证且具有遗忘性(Oblivious) 的安全聚合协议——VOSA(Verifiable and Oblivious Secure Aggregation),以解决 FL 过程中存在的隐私保护、可验证性和掉线容错性问题。
本文中的遗忘性(Oblivious)是指服务器和收集器的无知性,服务器和收集器在聚合和收集用户的梯度和辅助信息时无法获知用户的梯度信息,从而保证了用户的隐私。
系统与实体
系统模型
本文的系统模型如下图:
实体
VOSA包含四个实体:
- 密钥生成中心(KGC):KGC 主要负责初始化系统并生成公共参数。它将参数分发给用户和汇聚服务器。
- 用户(User):在每个周期中,每个用户 U i U_i Ui 使用本地私有数据训练模型以获得本地更新梯度。然后,对本地梯度进行加密并发送到聚合服务器。此外,在线用户将他们的密钥混淆为辅助信息发送给收集器,用来计算和验证聚合结果。
- 收集器(Collector):在每个周期中,从在线用户中随机选择一名收集者。该角色负责从参与当前迭代的在线用户处收集混淆的秘密密钥。之后,收集者将集合的辅助信息发送到聚合服务器。
收集器的产生是在 U 1 \mathcal{U}_1 U1 之后,但是在 U 1 \mathcal{U}_1 U1 中的用户仍可能在上传辅助信息之前意外掉线,所以系统可能并不完全可靠。
- 聚合服务器:聚合服务器在每个迭代周期内聚合所有在线用户上传的加密梯度。此外,它通过辅助信息生成其聚合结果的证明,然后将结果分发给在线用户。
威胁模型
- KGC 是一个值得信赖的第三方,不会与任何实体共谋。
- 所有用户被认为是诚实但好奇的。他们会提供有效的梯度并诚实地执行协议,但他们也试图推断其他用户的数据隐私。
- 由于收集者是在每次迭代中从在线用户中选择的,因此具有与用户相同的安全属性。
- 聚合服务器可能会被恶意实体捕获。这些实体可能会偏离协议或执行不同的计算来捕获诚实用户的私有梯度。同时,它可能会修改或伪造聚合结果和证明,以欺骗用户接受错误的全局参数。聚合服务器还可能与多个用户共谋以伪造聚合结果和证明。但在本文中,不允许聚合服务器与收集器共谋。
协议展开
VOSA 由五个阶段组成:建立(Set up)阶段、掩码和标记(masking and tag)阶段、收集(collection)阶段、去掩码和聚合(unmasking and aggregating)阶段以及验证(verification)阶段。
- 建立阶段
本文假设有 n n n 个用户参与联邦学习训练,表示为 U = { U i , i ∈ [ 1 , n ] } U=\{ \mathcal{U}_i,i\in[1,n]\} U={Ui,i∈[1,n]}。所有用户共享一个模型架构,并在他们的私有数据集 D i D_i Di 上本地训练模型。
- KGC 初始化模型参数 w 0 w_0 w0,然后选择两个大素数 p p p 和 q q q ,计算 N = p q N=pq N=pq。
- 设置 G 1 G_1 G1 和 G 2 G_2 G2是两个 p p p阶乘法循环群, g 1 g_1 g1和 g 2 g_2 g2是他们的生成元,KGC选择一个秘密值 a ∈ Z p ∗ a\in Z_p^* a∈Zp∗,计算 h 1 = g 1 a h_1=g_1^a h1=g1a、 h 2 = g 2 a h_2=g_2^a h2=g2a。
- KGC选择一个可计算的双线性对 e : G 1 × G 2 → G T e: G_1 \times G_2 \to G_T e:G1×G2→GT和两个安全哈希函数: H 0 : { 0 , 1 } ∗ → Z N 2 ∗ H_0:\{0,1\}^* \to Z_{N^2}^* H0:{0,1}∗→ZN2∗、 H 1 : { 0 , 1 } ∗ → G 1 H_1:\{0,1\}^*\to G_1 H1:{0,1}∗→G1。
- KGC将公共系统参数 p m = ( N , w 0 , g 1 , g 2 , h 1 , h 2 , G 1 , G 2 , G T , H 0 , H 1 ) pm=(N,w_0,g_1,g_2,h_1,h_2,G_1,G_2,G_T,H_0,H_1) pm=(N,w0,g1,g2,h1,h2,G1,G2,GT,H0,H1) 公开,然后离线。
- 聚合服务器随机地产生密钥 s k A ∈ Z N 2 ∗ sk_A \in Z_{N^2}^* skA∈ZN2∗。
- 每个用户 U i \mathcal{U}_i Ui 选择两个随机数 s k i ∈ [ 0 , N 2 ] sk_i \in [0,N^2] ski∈[0,N2]、 t k i ∈ Z N 2 ∗ tk_i \in Z_{N^2}^* tki∈ZN2∗分别作为他的加密密钥和标记密钥。
初始化后实体拥有的信息:
- 聚合服务器: p m = ( N , w 0 , g 1 , g 2 , h 1 , h 2 , G 1 , G 2 , G T , H 0 , H 1 ) pm=(N,w_0,g_1,g_2,h_1,h_2,G_1,G_2,G_T,H_0,H_1) pm=(N,w0,g1,g2,h1,h2,G1,G2,GT,H0,H1), e : G 1 × G 2 → G T e: G_1 \times G_2 \to G_T e:G1×G2→GT, s k A ∈ Z N 2 ∗ sk_A \in Z_{N^2}^* skA∈ZN2∗。
- 用户 U i \mathcal{U}_i Ui: p m = ( N , w 0 , g 1 , g 2 , h 1 , h 2 , G 1 , G 2 , G T , H 0 , H 1 ) pm=(N,w_0,g_1,g_2,h_1,h_2,G_1,G_2,G_T,H_0,H_1) pm=(N,w0,g1,g2,h1,h2,G1,G2,GT,H0,H1), e : G 1 × G 2 → G T e: G_1 \times G_2 \to G_T e:G1×G2→GT, s k i ∈ [ 0 , N 2 ] sk_i \in [0,N^2] ski∈[0,N2], t k i ∈ Z N 2 ∗ tk_i \in Z_{N^2}^* tki∈ZN2∗
- 掩蔽和标记阶段
- 损失函数
我们将一个神经网络表示为函数 f ( x , w ) = y ^ f(x, w) = \hat{y} f(x,w)=y^,其中 x x x是用户的输入, y ^ \hat{y} y^是通过函数 f f f得出的输出,模型参数为 w w w。用户 U i \mathcal{U}_i Ui 持有本地训练集 D i = { < x j ; y j > ∣ j = 1 , 2 , . . . T } D_i=\{<x_j; y_j>|j=1, 2, . . . T\} Di={<xj;yj>∣j=1,2,...T},其中 x j x_j xj是数据特征, y j y_j yj是数据标签, T T T是 D i D_i Di的大小。损失函数定义为:
L f ( D i , w ) = 1 T ∑ < x j , y j > ∈ D i l ( y j , f ( x j , w ) ) L_f(D_i,w)=\frac{1}{T}\sum_{<x_j,y_j>\in D_i}l(y_j,f(x_j,w)) Lf(Di,w)=T1∑<xj,yj>∈Dil(yj,f(xj,w))
训练神经网络的目标是找到一个最佳梯度参数 w w w,以最小化损失函数,每个用户执行随机梯度下降(SGD)算法来更新局部梯度 w i , t w_{i,t} wi,t:
w i , t + 1 ← w i , t − λ ∇ L f ( D i ∗ , w i , t ) w_{i,t+1} \gets w_{i,t}-\lambda \nabla L_f(D_i^*,w_{i,t}) wi,t+1←wi,t−λ∇Lf(Di∗,wi,t)
对于第 t t t 轮,每个用户 U i \mathcal{U}_i Ui 需要使用加密密钥 s k i sk_i ski 对其本地梯度进行加密,以生成梯度密文:
C i , t = ( 1 + w i , t N ) H 0 ( t ) s k i m o d N 2 C_{i,t}=(1+w_{i,t}N)H_0(t)^{sk_i}\ mod\ N^2 Ci,t=(1+wi,tN)H0(t)ski mod N2
用户 U i \mathcal{U}_i Ui 也使用其标签密钥 t k i tk_i tki 构建认证标签,并输出标签:
T i , t = H 1 ( t ) t k i h 1 w i , t T_{i,t}=H_1(t)^{tk_i}h_1^{w_{i,t}} Ti,t=H1(t)tkih1wi,t
在此之后, U i \mathcal{U}_i Ui 将 ( C i , t , T i , t ) (C_{i,t} , T_{i,t}) (Ci,t,Ti,t) 发送到聚合服务器。
- 收集阶段
当聚合服务器从用户 U i \mathcal{U}_i Ui接收到 ( C i , t , T i , t ) (C_{i,t} , T_{i,t}) (Ci,t,Ti,t)时,它将 U i \mathcal{U}_i Ui加入用户列表 U 1 \mathcal{U}_1 U1。服务器等待足够的用户并将用户列表 U 1 \mathcal{U}_1 U1给通知收集器。与此同时,聚合服务器生成其公钥:
p
k
A
,
t
=
(
p
k
A
,
t
1
,
p
k
A
,
t
2
)
pk_{A,t} = (pk_{A,t}^1, pk_{A,t}^2)
pkA,t=(pkA,t1,pkA,t2)
其中
p
k
A
,
t
1
=
H
0
(
t
)
s
k
A
pk_{A,t}^1 = H_0(t)^{sk_A}
pkA,t1=H0(t)skA、
p
k
A
,
t
2
=
h
2
s
k
A
pk_{A,t}^2 = h_2^{sk_A}
pkA,t2=h2skA。
并将其分发给 U 1 \mathcal{U}_1 U1中的用户,每个属于 U 1 \mathcal{U}_1 U1的用户 U i \mathcal{U}_i Ui都会混淆其私钥以生成辅助信息:
A
u
i
,
t
=
(
p
k
A
,
t
1
)
s
k
i
=
H
0
(
t
)
s
k
A
s
k
i
Au_{i,t}=(pk_{A,t}^1)^{sk_i}=H_0(t)^{sk_Ask_i}
Aui,t=(pkA,t1)ski=H0(t)skAski ,
V
k
i
,
t
=
(
p
k
A
,
t
2
)
t
k
i
=
h
2
s
k
A
t
k
i
Vk_{i,t}=(pk_{A,t}^2 )^{tk_i}=h_2^{sk_Atk_i}
Vki,t=(pkA,t2)tki=h2skAtki
用户 U i \mathcal{U}_i Ui生成辅助信息后将 ( A u i , t , V k i , t ) (Au_{i,t},Vk_{i,t}) (Aui,t,Vki,t)发送给收集器。
考虑一些用户会意外退出,不会向收集器发送辅助信息。收集器根据收到的信息建立一个动态用户组 U 2 \mathcal{U}_2 U2。然后,计算用户组 U 3 = U 1 ∩ U 2 \mathcal{U}_3 = \mathcal{U}_1 \cap \mathcal{U}_2 U3=U1∩U2 。在 U 3 \mathcal{U}_3 U3中的用户,即那些向聚合服务器发送有效的 ( C i , t , T i , t ) (C_{i,t} , T_{i,t}) (Ci,t,Ti,t) 并向收集器发送 ( A u i , t , V k i , t ) (Au_{i,t},Vk_{i,t}) (Aui,t,Vki,t) 的用户视为有效在线用户。为简化起见,本文假设在 U 3 \mathcal{U}_3 U3 中有 m m m 个有效在线用户。收集器根据 U 3 \mathcal{U}_3 U3提供的信息计算去掩码密钥:
A u t = ∏ i = 1 m A u i , t = ∏ i = 1 m H 0 ( t ) s k A s k i = H 0 ( t ) s k A ∑ i = 1 m s k i Au_t=\prod_{i=1}^{m}Au_{i,t}=\prod_{i=1}^{m}H_0(t)^{sk_Ask_i}=H_0(t)^{sk_A\sum_{i=1}^{m}sk_i} Aut=∏i=1mAui,t=∏i=1mH0(t)skAski=H0(t)skA∑i=1mski
以及验证密钥:
V k t = ∏ i = 1 m V k i , t = ∏ i = 1 m h 2 s k A t k i = g 2 s k A ⋅ a ⋅ ∑ i = 1 m t k i Vk_t=\prod_{i=1}^{m}Vk_{i,t}=\prod_{i=1}^{m}h_2^{sk_Atk_i}=g_2^{sk_A\cdot a \cdot \sum_{i=1}^{m}tk_i} Vkt=∏i=1mVki,t=∏i=1mh2skAtki=g2skA⋅a⋅∑i=1mtki
之后,收集器将 A u t Au_t Aut 和用户列表 U 3 \mathcal{U}_3 U3发送到聚合服务器,并将 V k t Vk_t Vkt分发给 U 3 \mathcal{U}_3 U3中的所有用户。
- 去掩码和验证阶段
在聚合服务器从收集器接收到解密密钥 A u t Au_t Aut 后,它进行聚合并生成相应的证明。聚合服务器首先计算聚合密文 C t C_t Ct:
C t = ( ∏ i = 1 m C i , t ) s k A m o d N 2 C_t=(\prod_{i=1}^{m}C_{i,t})^{sk_A}\ mod\ N^2 Ct=(∏i=1mCi,t)skA mod N2
,然后服务器通过聚合密文得到聚合明文 W t W_t Wt:
W t = s k A − 1 C t A U t − 1 N m o d N = ∑ i = 1 m w i , t m o d N W_t=sk_A^{-1}\frac{\frac{C_t}{AU_t}-1}{N}\ mod \ N=\sum_{i=1}^{m}w_{i,t}\ mod\ N Wt=skA−1NAUtCt−1 mod N=∑i=1mwi,t mod N
聚合值的正确性如下:
此外,聚合服务器聚合所有认证标签并输出证明 T t T_t Tt:
T t = ( ∏ i = 1 m T i , t ) s k A = ( ∏ i = 1 m H 1 ( t ) t k i h 1 w i , t ) s k A = H 1 ( t ) s k A ⋅ ∑ i = 1 m t k i g 1 s k A ⋅ a ⋅ ∑ i = 1 m w i , t T_t=(\prod_{i=1}^{m}T_{i,t})^{sk_A}=(\prod_{i=1}^{m}H_1(t)^{tk_i}h_1^{w_{i,t}})^{sk_A}\\ \ \ \\ \\=H_1(t)^{sk_A\cdot \sum_{i=1}^{m}tk_i}g_1^{sk_A\cdot a \cdot \sum_{i=1}^{m}w_{i,t}} Tt=(∏i=1mTi,t)skA=(∏i=1mH1(t)tkih1wi,t)skA =H1(t)skA⋅∑i=1mtkig1skA⋅a⋅∑i=1mwi,t
最终,聚合服务器将聚合后的梯度及相应的证明 ( W t , T t ) (W_t,T_t) (Wt,Tt) 广播给 U 3 \mathcal{U}_3 U3中的用户。
- 验证阶段
在收到聚合梯度 W t W_t Wt和证明 T t T_t Tt后,每个用户通过验证密钥 V k t Vk_t Vkt 验证聚合值的正确性,具体方法是检查以下等式:
如果方程成立,表示聚合梯度是正确的。用户接受聚合梯度并更新本地模型。否则,用户将丢弃聚合值并进入下一轮迭代。
验证的正确性源于双线性配对性质:
在这个阶段结束时,用户更新其本地模型参数:
w i , t + 1 = w i , t − λ W t ∣ U 3 ∣ w_{i,t+1} = w_{i,t} -\lambda \frac{W_t}{|U_3|} wi,t+1=wi,t−λ∣U3∣Wt
用户、聚合服务器和收集器反复运行整个协议,直到满足用户要求的终止条件。
总结
- VOSA 采用了 Paillier 同态加密、双线性对、秘密共享和 Diffie-Hellman 密钥交换 来保护梯度隐私,同时确保服务器计算的可验证性。基于这些加密技术,VOSA 实现了隐私保护、安全聚合、可验证性和掉线容错,适用于大规模联邦学习任务。
- 为了应对用户掉线问题,VOSA提出了一个动态组管理的方法,每一轮的联邦学习训练都会动态生成一个用户组 U 2 \mathcal{U}_2 U2 ,并进一步计算有效在线用户组 U 3 \mathcal{U}_3 U3 来计算聚合结果,保证了聚合结果的正确性。
优点 | 缺点 |
---|---|
✅ 强隐私保护:服务器无法解密梯度,防止隐私泄露 | ❌ 服务器计算量大:解密聚合梯度开销高 |
✅ 结果可验证:防止服务器作弊或篡改数据 | ❌ 未防范恶意用户:无法防止虚假梯度攻击 |
✅ 支持用户掉线:动态组管理机制,用户可重新加入 | ❌ 收集器掉线问题:可能影响训练流程 |
✅ 计算 & 通信开销低:用户端计算效率高,通信需求低 | ❌ 不支持异步 FL,需要所有用户同时上传数据 |
✅ 适用于大规模 FL 任务:无需中心化信任,适合 IoT 场景 | ❌ 仅支持梯度求和,无法支持复杂的联邦计算 |
实验结果
VOSA 论文的实验部分主要围绕模型准确性、计算开销和通信开销进行评估,并与现有方案(VerifyNet、VERIFL 和 Non-Interactive VFL)进行对比分析。实验在 MNIST 数据集上进行,并采用 MLP 和 CNN 作为联邦学习(FL)的本地模型。
实验设置
- 硬件环境
- 处理器:Intel Core i7-11700 CPU @ 2.50GHz
- 内存:16GB RAM
- GPU:NVIDIA GeForce RTX 3060(仅用于加速模型训练,密码学运算在 CPU 上执行)
- 编程语言:Python
- 密码学库:PBC(Pairing-Based Cryptography Library)
- 双线性对曲线:Type A pairing,基于有限域 F q F_q Fq( q q q为素数)
- 数据集
实验采用 MNIST 手写数字数据集:
- 训练集:60,000 张图片
- 测试集:10,000 张图片
数据分布方式:
- IID(独立同分布):训练数据被均匀随机分配给 100 个用户,每个用户 600 条样本。
- Non-IID(非独立同分布):将 MNIST 训练数据按照标签排序,划分成 200 个大小为 300 的数据块,每个用户随机分配 2 个数据块。
- 训练模型
-
多层感知机(MLP)
- 两层隐藏层,每层 200 个神经元,ReLU 激活函数
- 梯度参数数量:199,210
-
卷积神经网络(CNN)
- 两个 5×5 的卷积层(分别有 32 和 64 个通道,带 2×2 最大池化层)
- Dropout 层(丢弃率 0.2)
- 一个包含 512 个神经元的全连接层(ReLU 激活)
- 梯度参数数量:582,026
-
优化方法:
- 损失函数:交叉熵损失(Cross-Entropy Loss)
- 优化算法:随机梯度下降(SGD)+ 动量
-
学习率:
- CNN:0.01
- MLP:0.03
-
联邦学习训练过程:
- 每轮训练选择 10% 的用户(即 10 个用户)参与训练
- 选中用户执行 5 轮本地 SGD 训练,批量大小为 10
- 服务器使用 FedAVG(联邦平均) 聚合梯度并更新全局模型
实验结果分析
模型准确性
为了评估 VOSA 方案对模型训练效果的影响,论文比较了 VOSA 与 未加密的联邦平均(FedAVG) 在 IID 和 Non-IID 数据分布下的模型精度。
实验结果
-
IID 数据分布
- VOSA 方案的模型准确率与 FedAVG 基本一致
- CNN 最高准确率:98.5%(FedAVG),98.3%(VOSA)
- MLP 最高准确率:97.1%(FedAVG),96.8%(VOSA)
-
Non-IID 数据分布
- 由于数据不均衡,整体准确率较低,但 VOSA 仍与 FedAVG 结果接近
- CNN 最高准确率:97.4%(FedAVG),97.2%(VOSA)
- MLP 最高准确率:95.3%(FedAVG),95.1%(VOSA)
结论: VOSA 的安全聚合机制 不会影响 FL 模型的最终准确性,即隐私保护方案不会降低模型的学习能力。
计算开销
计算开销主要分为:
- 用户计算开销
- 收集器计算开销
- 服务器计算开销
-
用户计算开销
用户端计算主要包括:- KeyGen(生成密钥)
- MaskingTag(梯度加密 & 生成标签)
- Collection(计算辅助信息)
- Verify(验证聚合结果)
实验结果
-
加密时间(MaskingTag):
- MLP(199,210 个梯度):726ms
- CNN(582,026 个梯度):2512ms
-
验证时间(Verify): <10ms(固定开销,不随梯度增加)
结论:VOSA 的梯度加密时间 随梯度数量线性增长,但计算开销可接受。验证过程时间极低,对用户几乎无影响。
- 收集器计算开销
收集器计算任务:
- 计算解密辅助信息(unmasking key)
- 计算验证密钥(verification key)
实验结果
- 收集器计算时间 <1ms(100 个用户)
- 计算时间与梯度数量无关,仅与用户数量成线性关系
结论: 收集器的计算开销极低,可在资源受限设备上运行。
- 服务器计算开销
服务器计算任务:
- KeyGen(生成公私钥)
- Unmasking(解密聚合梯度)
- ProofGen(生成可验证证明)
实验结果
-
解密聚合梯度(Unmasking)
- MLP(199,210 个梯度):28.17s
- CNN(582,026 个梯度):197.4s
- 生成验证证明(ProofGen)<3ms(几乎无额外开销)
结论:解密过程是主要开销,但仍优于现有方案(如 VerifyNet)。验证过程开销极低,不会影响系统效率。
-
通信开销
通信开销评估:
- 用户通信成本
- 收集器通信成本
- 服务器通信成本
实验结果
- 用户通信
- MLP(199,210 个梯度):3.80MB
- CNN(582,026 个梯度):11.10MB
- 收集器通信
- 6.27KB(100 用户)
- 服务器通信
- 100 用户情况下,仅需 14.45KB 进行验证信息传输
结论: VOSA 显著降低了通信成本,尤其是比 VerifyNet 和 VERIFL 更高效。
VOSA 与现有方案对比
实验对比了 VOSA、VerifyNet、VERIFL 和 Non-Interactive VFL:
- VOSA 计算与通信开销最低。
- VOSA 保证可验证性,不影响模型准确性。
- VOSA 适用于大规模 FL 任务。