Advertisement

Efficient Verifiable Protocol for Privacy-Preserving Aggregation in Federated Learning 论文总结

阅读量:

摘要

近年来,联邦学习因其无需从用户获取原始数据即可更新模型参数而受到广泛关注,使其成为各种设备之间协作分布式学习的可行的隐私保护机器学习模型。然而,由于对手可以从共享梯度中跟踪和推断有关用户的私人信息,联邦学习容易受到许多安全和隐私威胁的影响。在这项工作中,提出了一种联邦学习设置中模型参数安全聚合的通信高效协议,其中训练是在用户设备上完成的,而聚合训练的模型可以在服务器端构建,而不会泄露用户的原始数据。该协议对用户 dropout 具有鲁棒性,它使每个用户能够独立验证服务器提供的聚合结果。建议的协议在诚实但好奇的环境中是安全的,即使大多数各方都串通,隐私也会保持。讨论了所提出设置的实际场景。此外,评估了协议的模拟,结果表明它优于最先进的协议之一,尤其是当 dropout 数量增加时。

创新点

1、提出了一种高效、可验证的隐私保护聚合算法。它依赖于轻量级原语。

2、为了保证用户局部梯度的机密性,我们的方案中使用了单掩码协议,而不是大多数文献工作中使用的双掩码协议。

3、为了验证聚合结果,我们使用了双聚合的概念,与文献中大多数研究工作中使用的加密原语相比,它在计算上非常轻量级。

4、该算法在通信、计算和存储复杂度方面与现有算法进行了比较。

5、给出了通过改变辅助节点数量和退出百分比对所提出的算法进行性能评估和分析。

系统架构

辅助节点: 这些节点是一组节点,不能全部串通,并且热衷于用户数据的隐私,以便服务器无法揭示机器学习的局部模型参数并分析它们来学习用户的训练数据。这些辅助节点可以表示医院或医疗实体等组织,这些组织在银行领域或银行开展研究。它们是稳健的,不参与任何训练过程。他们的主要工作是与用作种子的共享键上的用户一致,以生成用于屏蔽梯度的随机数字。在每个协议轮中,每个辅助节点在不同的秘密随机密钥上与系统中的每个用户一致。这种关键协议通常不会发生,而无需与用户直接通信。然后,每个辅助节点都会计算其处理的所有随机数的总和,并将总和发送到服务器。

用户: 每个用户在不透露这些梯度的情况下向服务器安全地聚合其本地梯度,因为它们可以在逆向工程设置中用于跟踪用户数据。用户将使用与辅助节点共享的随机数来屏蔽它们的私有梯度。最后,每个客户端验证服务器已经计算了正确的聚合。

服务器: 云服务器聚合所有在线用户上传的掩码梯度和辅助节点上传的所有随机数的总和。因此,服务器将聚合所有局部梯度,而不会泄露每个用户的梯度

要解决的问题

1、保护用户隐私可能被泄露给用户的局部梯度。

2、在训练过程中消除用户退出的影响。

3、使用户能够验证服务器计算的结果

具体方案

所使用的方法

1、密钥协商(就是D-H协商密钥)

2、对称加密(用user与辅助节点的协商密钥来加密)

3、伪随机生成器。我们采用安全伪随机生成器 PRG,它以种子并产生随机数作为输出。PRG 必须保留两个属性:

•只要种子隐藏在区分器中,输出必须在计算上与从输出空间中采样的均匀元素无法区分。

•使用相同的种子生成相同的精确输出

协议过程

设置阶段

-各方同意安全参数λ,诚实生成的公共参数pp←K A.gen(λ)。

- 所有用户都有一个带有服务器的私有身份验证通道。

- 所有辅助节点都有一个带有服务器的私有认证通道。

密钥生成

用户n:

-生成3个密钥对(pk_n1,sk_n1)←KA.gen(pp),(pk_n2,sk_n2)←KA.gen(pp),(pk_n3,sk_n3)←KA.gen(pp)。

- 将公钥(pk_n1,pk_n2,pk_n^3)发送到服务器。

辅助节点m:

-生成3个密钥对(pk_m1,sk_m1)←KA.gen(pp),(pk_m2,sk_m2)←KA.gen(pp),(pk_m3,sk_m3)←KA.gen(pp)。

- 将公钥(pk_m1,pk_m2,pk_m^3)发送到服务器。

服务器端:

- 收集每个用户发送的键数 u≤ |U1|,其中 U1 表示该轮中的用户集。

- 从所有辅助节点 |M| 收集键,其中 M 设置为所有辅助节点。

-广播到 U1 中的所有用户,列表 {(pk_m1,pk_m2,pk_m^3 )}m∈M。

- 广播到 M 中的所有辅助节点,列表 {(pk_n1,pk_n2,pk_n^3)}n∈U1。

密钥协商

辅助节点m:

-从云服务器接收密钥列表(pk_n1,pk_n2,pk_n^3)n∈U1。

- 对于每个用户 n ∈ U1,计算 Kn,m ← KA.agree(pk_m3,sk_m3)。

- 计算 Km ← um_{nn U_1}K_{n,m}

- 对随机元素 αm ← F 进行采样。

- 对于每个用户 n ∈ U1,计算 ct_{n,m} ← AE.enc(KA.agree(pk_n1,sk_m1 ), αm ||Km )。

- 将所有密文 {ct_{n,m} }n∈U1 发送到服务器

用户 n:

- 从云服务器接收密钥列表 (pk1m , pk2m , pk3m )m∈M。

- 接收密码文本集 {ct_{n,m} }m∈M。- 对于每个用户 n ∈ U1,计算 α||K ← ∑m∈M AE.dec(KA.agree(pk_m1,sk_n1 ), ct_{n,m} )。

- 对于每个用户 n ∈ U1,计算 Kn ← um _{mn M} KA.agree(pk_m1,sk_n1)。

服务器端:

- 收集每个辅助节点发送的密文{ct_{n,m}}n∈U1。

- 将 m ∈ M {ct_{n,m} }m∈M 发送给每个用户 n ∈ U1

加密梯度

假设用户数为|N |,辅助节点数为|M|,参与当前轮的在线用户数为|U |其中每个用户n∈U都有一个已知服务器和辅助节点的唯一ID。每个用户 n ∈ U 都有一个私有梯度 xn 并且需要将其隐藏到所有其他方。每个辅助节点 m ∈ M 将同意每个用户 sn,m 的共享密钥(数字 n,m 是辅助节点数 m 和客户端数 n 之间的共享密钥)。通过这些种子,在每一轮 i 中,每个客户端 n 和每个辅助节点 m 生成一个商定随机数,表示为 PRG(sn,m , round(i))。因此,每个用户都可以加密他们的局部梯度,如下所示。

解密阶段

辅助节点 m:

- 接收代表在线用户的 U2 列表。

- 计算每个用户 n ∈ U2 sn,m ← K A.agr ee(sk_m^2,pk_n^2 ) 的共享密钥,并使用 PRG 将该值扩展为随机向量 Pn,m ← PRG(sn,m )。- 计算 Pm ← um {nn U_2}P{n,m}

- 将值 Pm 发送到服务器。

服务器端:

- 从辅助节点接收值 Pm。

- 计算所有用户 n ∈ U2 的聚合梯度为 X=um_{N}{n=1}x_n=\sum_{N}{n=1}at{x_n}-um_{M}^{m=1}P_m

- 计算所有用户 n ∈ U2 的聚合 MAC 为 MAC=um _{nn U_2}MAC_n

- 向每个用户 n ∈ U3 广播 (X, M AC)

验证阶段

用户 n:

- 如果 M AC ′ = M AC,则接收对 (X,MAC) 并计算 M AC ′ = K + α X

一些思考

•服务器可以与多达|N |−2个用户串通。(假设整个过程有10个用户,当服务器与9个用户勾结时,聚合之后的梯度X减去其他9个用户的梯度就可以得到没有勾结用户的梯度,若与8个用户勾结,最后减出来是2个用户的梯度和,得不到用户的隐私)

•服务器可以与多达|M|−1个辅助节点串通。(当服务器与全部辅助节点勾结时,就可以得到任意用户与辅助节点的协商密钥,进而获得随机数,最后获得用户的梯度隐私)

•使用的是单掩码协议,就是增加了一些辅助节点,之前的聚合是双掩码协议,类似如下的公式,at{x_n}=x_n+PRG_{i<n}-PRG_{i>n}

•为了验证聚合结果,使用双聚合概念,更轻量级(第一个聚合用于计算聚合梯度,第二个聚合用于证明第一个聚合的正确性)

全部评论 (0)

还没有任何评论哟~