VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning -- VCD-FL:可验证可抵抗共谋攻击的动态联邦学习
来源
论文名称 | VCD-FL: Verifiable, collusion-resistant, and dynamic federated learning |
---|---|
链接 | 2023 TIFS |
作者 | Sheng Gao; Jingjie Luo; Jianming Zhu; Xuewen Dong; Weisong Shi |
背景介绍
传统的联邦学习存在一些问题:
- 用户隐私泄露
- 服务器伪造聚合结果
- 客户端与服务器进行共谋 :窃取隐私、跳过验证
- 客户端在训练过程掉线
相关工作
本文贡献
- 抵抗共谋的验证 。本文提出了一种轻量级的承诺方案,利用不可逆梯度变换来保护客户的隐私。为了防止服务器使用伪造的聚合结果以通过验证,本文设计了一种基于优化拉格朗日插值的高效验证机制。与仅考虑抵抗共谋的隐私保护的现有工作相比, VCD-FL 还可以实现抵抗共谋的验证。
- 识别恶意行为 。尽管现有研究可以检测聚合结果是否被伪造,但它们对揭示服务器恶意行为的帮助非常有限。为了使安全预防措施更具针对性,本文建立了恶意行为检测规则,这可以帮助用户判断服务器是否涉及共谋攻击以通过验证,或者它只是一个懒惰的服务器返回伪造的聚合结果以节省计算开销。
- 支持联邦动态 。考虑到由于网络异常、崩溃和断电等原因,一些客户可能会离线,本文将提出的验证机制与 Shamir 门限秘密共享方案 结合起来,以容忍一定数量的客户掉线。
- 降低计算和通信开销 。本文通过设计一种新的方法来生成拉格朗日插值的插值点,从而减少了 VFL 中的计算和通信开销。此外,本文通过引入梯度压缩算法进一步减少了计算开销。
预备知识
-
拉格朗日插值
拉格朗日插值是指一种可以通过所有给定数据点准确构造多项式的方法。给定有 n 个点的集合 { ( x i , y i ) } i = 1 n \{(x_i,y_i)\}_{i=1}^n {(xi,yi)}i=1n ,我们可以使用这 n 个点拟合一个唯一的 n-1 阶多项式:L ( x ) = ∑ i = 1 n y i L i ( x ) L(x)=\sum_{i=1}^n y_iL_i(x) L(x)=∑i=1nyiLi(x)
其中基础多项式 L i ( x ) L_i(x) Li(x)定义如下:
L i ( x ) = ∏ j = 1 , j ≠ i n x − x j x i − x j , i ∈ { 1 , 2 , . . . , n } L_i(x)= \prod_{j=1,j\ne i}^{n} \frac{x-x_j}{x_i-x_j},i \in \{1,2,...,n\} Li(x)=∏j=1,j=inxi−xjx−xj,i∈{1,2,...,n}
显然, L i ( x ) L_i(x) Li(x)满足以下关系:
L i ( x j ) = { 1 , j = i 0 , j ≠ i L_i(x_j)=\begin{cases} 1,j=i \\ 0,j \ne i \end{cases} Li(xj)={1,j=i0,j=i
也就是说,当我们拟合了一个拉格朗日多项式后, L ( x ) L(x) L(x) 依然是一个 y i y_i yi关于 x i x_i xi的函数:
L ( x i ) = y i L(x_i)=y_i L(xi)=yi
系统模型
- TA :主要负责系统初始化,使用PRG作为伪随机生成器,并向客户端分发 VCD-FL 使用的参数,包括一对种子、一维平方矩阵、伪随机向量序列和整数序列。它被认为是值得信赖的,不会参与联邦训练,也不会泄露相关的私人信息。
- 客户端 :具有某种共同利益的客户可以一起参与特定模型。每个客户首先从聚合服务器(AS)下载全局参数,然后在其拥有的私有数据集上执行本地模型训练,最后将分组的拉格朗日多项式的 系数 作为密文上传到AS。一旦AS返回聚合结果,每个客户都可以验证其正确性,并决定是否接受或拒绝该更新。
- 聚合服务器(AS) :负责密文的收集和聚合,然后将每次迭代的聚合结果分发给客户端进行验证。
威胁模型
- TA:完全可信。
- 客户端:诚实但好奇。在训练期间对其他客户端的数据感兴趣;与服务器共谋来帮助服务器通过(pass)验证。
- 聚合服务器:恶意的。它对客户端的数据感兴趣;服务器可能会为了节省计算资源而伪造聚合结果,返回错误的聚合;服务器可能会与客户端共谋,来通过(pass)客户端的验证机制。将服务器按恶意程度分为两类:
- 弱攻击模型。具有弱能力的攻击服务(AS)仅充当一个懒惰的服务器,只是聚合部分收集的梯度以节省计算开销。它会发起推理攻击以确定原始训练数据集中是否包含某些特定数据,甚至重构敏感属性。
- 强攻击模型。具有强能力的攻击服务(AS)会尽力隐藏对聚合结果的修改。它会与一些客户端共谋,伪造聚合结果以欺骗其他客户端。更糟的是,它可能通过使用精心设计的聚合结果引诱客户端泄露更多私人信息。
具体实现
初始化
- 为了减少初始化的开销,VCD-FL 中的TA直接生成两个客户端 P i P_i Pi 和 P j P_j Pj 之间的一对种子 s i , j s_{i,j} si,j ,用于梯度掩码。
- 为了应对客户端掉线问题以实现动态,TA首先为 P i P_i Pi 生成一个额外的随机种子 ρ i \rho_i ρi,然后使用沙米尔门限秘密分享方案将 ρ i \rho_i ρi 的份额分发给每个客户端。
- 为了提高插值精度,利用
P
R
G
(
ρ
i
)
PRG(\rho_i)
PRG(ρi) 生成的用于验证的序列集
A
i
\mathbb{A}_i
Ai 应该被标准化:
- VFL 方案将客户端的梯度拆分,而VCD-FL是将梯度分组,具体如下:每个维度为 d d d 的梯度 g i g_i gi 被分成 ⌈ d / M ⌉ ⌈ d /M ⌉ ⌈d/M⌉ 个组,每组 M M M 个梯度元素。如果最后一组中的梯度元素数量少于 M M M ,使用 0 0 0 填充其余部分。
- 为了使 VCD-FL 可验证,TA 需要生成一个随机整数序列 Z = { a i ∣ i = 1 , 2 , ⋅ ⋅ ⋅ , ⌈ d M ⌉ ( M + 1 ) } \mathbb{Z} = \{a_i |i = 1, 2, · · · , ⌈ d M ⌉(M + 1)\} Z={ai∣i=1,2,⋅⋅⋅,⌈dM⌉(M+1)} 作为插值点集,以及一个大小为 M × M M × M M×M 的方阵 U U U 用于承诺生成。
伪代码如下:
本地训练
梯度加密
每个客户端 P i P_i Pi 训练结束得到梯度 g i g_i gi ,然后使用加密算法:
- 首先使用单遮掩协议来盲化每个客户端
P
i
P_i
Pi 的本地梯度
g
i
g_i
gi :
- 为了抵御共谋攻击,防止服务器跳过验证,将盲化后的梯度
g
i
′
g_i'
gi′ 按相同的策略进行分组:每个客户端
P
i
P_i
Pi 生成第
k
k
k 组的拉格朗日插值集合,其中前
M
M
M 个点为
{
(
a
(
k
−
1
)
(
M
+
1
)
+
j
,
g
i
′
(
(
k
−
1
)
M
+
j
)
)
∣
j
=
1
,
2
,
.
.
.
,
M
}
\{ (a_{(k-1)(M+1)+j} , g_i'((k-1)M+j)) |j=1,2,...,M\}
{(a(k−1)(M+1)+j,gi′((k−1)M+j))∣j=1,2,...,M} ,第
(
M
+
1
)
(M + 1)
(M+1) 个点为
(
a
k
(
M
+
1
)
,
A
i
(
k
)
)
(a_{k(M+1)}, A_i(k))
(ak(M+1),Ai(k)),其中
k
∈
1
,
2
,
⋅
⋅
⋅
,
⌈
d
/
M
⌉
k \in {1, 2, · · · , ⌈ d/M ⌉}
k∈1,2,⋅⋅⋅,⌈d/M⌉。因此,函数
f
i
,
[
k
]
f_{i,[k]}
fi,[k] 是在第
k
k
k 组拉格朗日插值集合上计算的:
其中:
- 最后,
P
i
P_i
Pi 将系数向量
B
i
B_i
Bi 作为梯度密文上传给服务器,
其中每个 B i , [ k ] B_{i,[k]} Bi,[k] 表示从 f i , [ k ] ( x ) f_{i,[k]}(x) fi,[k](x) 中提取的这 M + 1 M + 1 M+1 个系数,按 x x x 的次数降序排列:
承诺生成
为了验证聚合结果,实现验证机制,本文使用不可逆变换的轻量级承诺方案。
- 先将梯度
g
i
g_i
gi 进行分组,每组包含
M
M
M 个元素,
g
i
=
(
g
i
,
[
1
]
,
g
i
,
[
2
]
,
.
.
.
,
g
i
,
⌈
d
/
M
⌉
)
g_i=(g_{i,[1]},g_{i,[2]},...,g_{i,\left \lceil d/M \right \rceil })
gi=(gi,[1],gi,[2],...,gi,⌈d/M⌉) ,其中
g
i
,
[
k
]
=
(
g
i
(
k
−
1
)
M
+
1
,
g
i
(
(
k
−
1
)
M
+
2
)
,
.
.
,
g
i
(
k
M
)
)
T
g_{i,[k]}=(g_i(k-1)M+1, g_i((k-1)M+2),..,g_i(kM))^T
gi,[k]=(gi(k−1)M+1,gi((k−1)M+2),..,gi(kM))T
- 然后
P
i
P_i
Pi 对
g
i
,
[
k
]
g_{i,[k]}
gi,[k] 进行承诺:
其中 U U U 是一个 M × M M×M M×M的不可逆矩阵,以确保梯度隐私,而 g i , [ k ] g_{i,[k]} gi,[k] 是第 k k k 个梯度组的 M M M 维列向量。 - 随后, P i P_i Pi 将 C i = ( C i , [ k ] ) k = 1 ⌈ d / M ⌉ C_i=(C_{i,[k]})_{k=1}^{\left \lceil d/M \right \rceil } Ci=(Ci,[k])k=1⌈d/M⌉广播 ,并在上传 B i B_i Bi 到 AS 之前接收其他客户端的承诺。
插值优化
- 为了减少插值频率而不影响模型准确性,引入深度梯度压缩来获得优化的梯度。
- G i G_i Gi 的初始值为0,使用动量因子为 0.5 来扩张。
- 随后,每个客户端 P i P_i Pi 从 G i G_i Gi 中选择绝对值最大的前 p p% p 元素放在梯度 g i g_i gi 的相同位置,其余元素在 g i g_i gi 中被设置为 0。为了避免信息丢失, G i G_i Gi 中每个未被选择的元素将在本地累积,直到其绝对值足够大。 G i G_i Gi 中被选择的元素将被重置为 0。
- 显然,优化后的梯度 g i g_i gi 将大大减少插值计算的开销。因为那些满足 g i ′ ( j ) = 0 g_i' (j) = 0 gi′(j)=0 的插值点不会对 B i , [ k ] B_{i,[k]} Bi,[k] 产生影响, P i P_i Pi 只需要计算 g i ′ ( j ) ≠ 0 g_i' (j) \ne 0 gi′(j)=0 时的 L j , [ k ] ( x ) L_{ j,[k]}(x) Lj,[k](x) 。
伪代码见算法2:
密文聚合
-
AS 只有接收到所有 B i B_i Bi 后才会进行聚合操作 (这里产生了强假设问题)
-
AS 计算 B B B :
-
聚合后服务器将 B B B 发送给所有客户端。请注意,由于密文 B i B_i Bi 是通过 g i ′ g_i' gi′ 和 A i A_i Ai 计算得出的, VCD-FL 可以确保原始梯度 g i g_i gi 不被推断,只要 AS 只与不超过 N − 2 N − 2 N−2 个客户端进行共谋。
伪代码如下:
聚合结果验证
梯度解密
- 为了获得梯度的聚合结果,
P
i
P_i
Pi 首先以
B
[
k
]
B[k]
B[k] 为基础重构第
k
k
k 组的聚合插值函数
f
[
k
]
(
x
)
f_{[k]}(x)
f[k](x):
其中 B [ k ] ( m ) B_{[k]}(m) B[k](m) 表示 B [ k ] B_{[k]} B[k] 中的第 m m m 个元素,且 k ∈ { 1 , 2 , . . . , ⌈ d / M ⌉ } k \in \{1, 2, . . . , ⌈ d/M ⌉\} k∈{1,2,...,⌈d/M⌉}。
- 然后,
P
i
P_i
Pi 通过将整数序列
Z
Z
Z 作为输入,重构梯度的聚合结果
g
g
g 与
f
[
k
]
(
x
)
f_{[k]}(x)
f[k](x) ,并去除插入的序列
A
i
A_i
Ai 和在
⌈
d
/
M
⌉
⌈ d/M ⌉
⌈d/M⌉ 组中的填充0。也就是说,
其中 k ∈ { 1 , 2 , . . . , ⌈ d / M ⌉ } k \in \{1, 2, . . . , ⌈ d/M ⌉ \} k∈{1,2,...,⌈d/M⌉}
结果验证
为了验证聚合结果 g g g 的正确性,同时保护梯度隐私,基本思路是判断以下方程是否成立:
其中
R
R
R 是一个
d
d
d 维向量,然而,这样的验证方法并不能抵御共谋,这是因为在这种情况下,
R
R
R 不是随机生成的,那些共谋的恶意客户端可以巧妙地设计
R
R
R 或操纵
R
⋅
g
i
R·g_i
R⋅gi,以帮助恶意AS通过验证。
- 本文在先前生成的承诺基础上设计了一种高效的验证机制。具体来说,
P
i
P_i
Pi 首先向其他客户端发送
A
i
A_i
Ai 和一个行向量
R
i
=
(
r
i
,
1
,
r
i
,
2
,
.
.
.
,
r
i
,
M
⋅
⌈
d
/
M
⌉
)
R_i = (r_{i,1}, r_{i,2}, . . . , r_{i,M·⌈ d/M ⌉})
Ri=(ri,1,ri,2,...,ri,M⋅⌈d/M⌉) 。然后,
P
i
P_i
Pi 可以计算
R
R
R 为
- 每个半诚实客户端同时广播 R i R_i Ri 且不参与共谋,所以 R R R 是不可预测的。
-
P
i
P_i
Pi 以与梯度
g
i
g_i
gi 相同的方式对
R
R
R 进行分组,并计算一个随机行向量
S
S
S 作为验证系数向量:
- 其中第
k
k
k 个组向量
S
[
k
]
S_{[k]}
S[k] 被计算为
S
[
k
]
=
R
[
k
]
⋅
U
S_{[k]} = R_{[k]}·U
S[k]=R[k]⋅U,
U
U
U 是相同的
M
×
M
M × M
M×M 大小的方阵。
- 为了实现高效验证,
P
i
P_i
Pi 并行计算每个组的校验和
v
i
,
k
v_{i,k}
vi,k 。对于第
k
k
k 组,
v
i
,
k
v_{i,k}
vi,k 可以计算为
- 最后, P i P_i Pi 计算 V i V_i Vi 为 V i = ∑ k = 1 ⌈ d / M ⌉ v i , k V_i = \sum_{k=1}^{⌈ d/M⌉ } v_{i,k} Vi=∑k=1⌈d/M⌉vi,k,并发布 A i = { A i ( k ) } k = 1 ⌈ d / M ⌉ A_i = \{ A_i (k)\}_{k=1}^{⌈ d/M⌉} Ai={Ai(k)}k=1⌈d/M⌉ 以供验证。
恶意行为检测规则
- f [ k ] ( a ( M + 1 ) k ) f_{[k]}(a(M+1)k) f[k](a(M+1)k) 和 g ( m ) = f [ ⌈ m / M ⌉ ] ( a m + ⌈ m / M ⌉ − 1 ) g(m) = f_{[⌈m/M⌉}](a_{m+⌈m/M⌉−1}) g(m)=f[⌈m/M⌉](am+⌈m/M⌉−1) 是通过来自AS的返回密文 B B B 计算得出的,而 S ( m ) S(m) S(m) 表示 S S S 中的第 m m m 个元素。简而言之,Eq(18)可以用作验证聚合结果正确性的第一步,而Eq(19)则进一步验证AS是否与客户端共谋。因此,VCD-FL定义了以下规则:
- 规则 1:如果Eq (18) 和Eq (19) 同时成立,则 AS 被认为是可信的。
- 规则 2:如果Eq (18) 和Eq (19) 同时不成立,则 AS 被认为是一个弱攻击者。
- 规则 3:如果Eq (18) 成立而Eq (19) 不成立,则 AS 被认为是一个强攻击者。
验证算法伪代码如下:
动态验证支持
- 由于网络异常、崩溃和停电等原因,某些客户在训练过程中可能会掉线。现有的方案在梯度聚合之前根据双重掩蔽协议减去掩蔽。然而,他们是在假设任何客户端不会同时透露同一客户的在线和离线份额的基础上保证了梯度隐私。在 VCD-FL 中,这将是不可行的,因为某些客户端可能会与AS串通。如果没有超过 N − 2 N-2 N−2 个客户端与AS串通, VCD-FL 可以保证隐私。
- 在 VCD-FL 中, f [ k ] ( a k ( M + 1 ) ) f_{[k]}(a_k(M+1)) f[k](ak(M+1)) 和 g g g 是使用 AS 返回的 B B B 进行计算的,这不受离线客户端的影响。
- 梯度承诺 C i C_i Ci 在聚合之前分发,而 R R R 可以使用来自在线客户端的随机向量进行计算 , S S S 和 V i V_i Vi 的计算过程不会受到影响。
- 使用 Shamir 门限秘密共享方案以 T -out-of-N 的形式共享 P i P_i Pi 的 ρ i \rho_i ρi。每个客户端 P j ∈ P P_j \in \mathbb{P} Pj∈P 获得一个份额 ρ i , j \rho_{i,j} ρi,j 。这使得当 P i P_i Pi 退出时 ρ i \rho_i ρi 能够被恢复,即使在验证过程中 P i P_i Pi 退出,只要剩余的在线客户端的数量不小于 T T T , 也可以恢复。
总结
- 这篇论文在先前工作(VerfyNet、VeriFL、VFL)的基础上,优化了TA的参数分发,去掉了密钥协商的过程,可以一定程度抵御客户端之间的共谋,也可以减少通信开销;VCD-FL又对拉格朗日插值进行了优化,从VFL的梯度拆分优化为梯度分组,这样就减少了插值的次数,减少了多项式的最高次数;同时VCD-FL还引入深度梯度压缩技术,使用本地累计+tok-k技术来选择重要的参数,保留一些重要性低的参数,减少了用于插值的数量,即减少了通信和计算开销。
- VCD-FL的动态性是指允许一定数量的客户端在训练过程中掉线,如果将假设修改为允许新的客户端中途加入联邦学习训练,那么要怎么实现呢?
- 我们可以将 TA 只在系统开始时初始化参数改为每一轮初始化新的参数,这样就能支持新客户端的加入,但是这样无疑增加了通信开销。。。