Practical Secure Aggregation for Privacy-Preserving Machine Learning

用于隐私保护机器学习的实用安全聚合(CCS 17'(CCF A))

摘要

我们设计了一种新颖的、通信高效的、抗故障的协议,用于高维数据的安全聚合。我们的协议允许服务器以安全的方式(即不学习每个用户的个人贡献)计算来自移动设备的大型用户持有数据向量的总和,并且可以在联邦学习设置中用于聚合用户提供的深度神经网络的模型更新。我们在诚实但好奇和活跃的敌手设置中证明了我们协议的安全性,并表明即使任意选择的用户子集随时退出,安全性也会得到维护。我们评估了协议的效率,并通过复杂性分析和具体实现表明,即使在大型数据集和客户端池上,其运行时和通信开销仍然很低。对于 \(16\) 比特输入值,我们的协议为 \(2^{10}\) 个用户和 \(2^{20}\) 维向量提供 1.73× 通信扩展,为 \(2^{14}\) 个用户和 \(2^{24}\) 维向量提供 1.98× 扩展,而不是以明文方式发送数据。

联邦学习的安全聚合

尽管每次更新都是短暂的,所包含的信息也不会比用户的隐私数据库多(通常会少很多),但用户可能仍然会担心哪些信息会被保留下来。在某些情况下,可以通过查看用户最近的更新来学习其输入的单个单词。不过,在 "联邦学习"(Federated Learning)设置中,服务器不需要访问任何单个用户的更新,就能执行随机梯度下降;它只需要得到随机用户子集的更新向量的元素加权平均值。使用安全聚合协议计算这些加权平均值将确保服务器只能了解到在这个随机选择的子集中有一个或多个用户写了一个给定的单词,而不能了解到是哪些用户

联邦学习系统面临着一些实际挑战。移动设备只能零星地访问电源和网络连接,因此参与每个更新步骤的用户集是不可预测的,并且系统必须对退出的用户具有鲁棒性。由于神经网络可能由数百万个值参数化,因此更新可能很大,这代表了按流量计费网络计划的用户的直接成本。移动设备通常也无法与其他移动设备建立直接通信通道(依靠服务器或服务提供商来调解此类通信),也无法对其他移动设备进行本地身份验证。

因此,联邦学习激发了对安全聚合协议的需求,该协议具有以下特点:

  1. 能够在高维向量上运算
  2. 通信效率很高,即使每次实例化都有一组新的用户集合
  3. 对用户掉线鲁棒性
  4. 以服务器为中介,未经验证的网络模式限制下,提供尽可能强的安全性

密码学原语(预备知识)

秘密共享

该方案在大小至少为 \(l > 2^k\) 的有限域 \(\mathbb{F}\) 上参数化(其中 \(k\) 是方案的安全参数),例如,对于某个公开的大素数 \(p\)\(\mathbb{F} = \mathbb{Z}_p\)。我们注意到需要设置如此大的域大小,是因为我们的方案要求客户端进行秘密共享(密钥长度必须与安全参数成正比,安全证明才能通过)。我们还假设整数 \(1, \cdots,n\)(在协议中将用来表示用户)可以与 \(\mathbb{F}\) 中不同的字段元素相识别。

给定这些参数,该方案由两种算法组成:

  • 秘密共享算法 \(\mathbf{SS}.\mathbf{share}(s,t,\mathcal{U})\to\{(u,s_u)\}_{u\in\mathcal{U}}\),输入一个秘密\(s\),一个表示用户 ID 的 \(n\) 个字段元素的集合 \(\mathcal{U}\),和阈值 \(t\leq|\mathcal{U}|\);它产生一组秘密共享份额 \(s_\mathcal{u}\),每个份额都与不同的 \(u\in\mathcal{U}\) 相关联。
  • 重构算法 \(\mathbf{SS.recon}(\{(u,s_u)\}_{u\in\mathcal{V}},t)\to s\) 将阈值 \(t\) 和对应于子集 \(\mathcal{V}\subseteq\mathcal{U}\) 的份额作为输入,使得 \(|\mathcal{V}|\geq t\),并输出一个字段元素 \(s\)

正确性要求:对于\(\forall s\in \mathbb{F},\forall t,n,且1 ≤ t ≤ n,\forall \mathcal{U} \subseteq \mathbb{F}\),其中 \(|\mathcal{U}|= n\), 如果\(\{(u,s_u)\}_{u\in\mathcal{U}}\leftarrow\mathbf{SS}.\mathbf{share}(s,t,\mathcal{U}),\mathcal{V}\subseteq\mathcal{U}\),那么\(\mathbf{SS}.\mathbf{recon}(\{(u,s_u)\}_{u\in\mathcal{V}},t)=s\)

安全性要求:对于\(\forall s,s' \in \mathbb{F}\)和任意\(\mathcal{V}\subseteq \mathcal{U}\),使得\(|\mathcal{V}|<t\)

\[\{\{(u,s_u)\}_{u\in\mathcal{U}}\leftarrow\mathrm{SS.share}(s,t,\mathcal{U}):\{(u,s_u)\}_{u\in\mathcal{V}}\}\equiv\\\{\{(u,s_u)\}_{u\in\mathcal{U}}\leftarrow\mathrm{SS.share}(s^{\prime},t,\mathcal{U}):\{(u,s_u)\}_{u\in\mathcal{V}}\} \]

其中 “\(\equiv\)” 代表两个分布相同(不可区分)。

密钥协商

密钥协商协议由一个三元组算法构成:\((\mathbf{KA.param},\mathbf{KA.gen},\mathbf{KA.agree}).\)

  • \(\mathbf{KA}.\mathbf{param}(k)\to pp\) 产生一些公共参数(我们的方案将通过这些参数进行参数化)
  • \(\mathbf{KA.gen}(pp)\to(s_u^{SK},s_u^{PK})\)允许任何一方 \(u\) 生成一对私钥-公钥。
  • \(\mathbf{KA}.\mathbf{agree}(s_u^{SK},s_v^{PK})\to s_{u,\upsilon}\) 允许任何用户 \(u\) 将其私钥 \(s_u^{SK}\) 与任何 \(v\) 的公钥 \(s_v^{PK}\)(使用相同的 \(pp\) 生成)相结合,从而获得 \(u\)\(v\) 之间的共享私钥 \(s_{u,v}\)

我们将使用的特定密钥协议方案是 Diffie-Hellman 密钥协议 [19],由一个哈希函数组成。
更具体地说:

  • \(\mathbf{KA}.\textbf{param}(k)\to(\mathbb{G'},g,q,H)\)采样素数阶为 \(q\) 的群 \(\mathbb{G'}\),以及一个生成元 \(g\) 和一个哈希函数 \(H^2\)
  • \(\mathbf{KA.gen}(\mathbb{G^{\prime}}g,q,H)\to(x,g^x)\) 采样一个随机数 \(x\leftarrow\mathbb{Z}_q\)。作为私钥 \(s_u^{SK}\),且 \(g^x\) 作为公钥 \(s_u^{PK}\)
  • \(\mathbf{KA}.\mathbf{agree}(x_u,g^{\boldsymbol{\chi}_\upsilon})\to s_{u,\upsilon}\),输出 \(s_{u,\upsilon}=H\left((g^{x_{\upsilon}})^{x_{u}}\right)\)

为了安全起见,在诚实但好奇的模型中,我们希望对于任何获得两个诚实生成的公钥 \(s_u^{PK}\)\(s_v^{PK}\)(但都不是相应私钥 \(s_u^{SK}\)\(s_v^{SK}\))的敌手,从这些密钥计算出的共享密钥\(s_{u,v}\)与均匀随机的字符串没有区别
这完全反映了决策 Diffie-Hellman(DDH)假设,我们在下面回顾一下:

定义 3.1(决策 Diffie-Hellman 假设(DDH))。设 \(\mathcal{G}(k) \rightarrow (\mathbb{G}^{\prime},g,q,H)\) 是一种高效算法,它可以采样阶数为 \(q\)、生成元为 \(g\) 的群 \(\mathbb{G'}\),以及函数 \(H:\{0,1\}^*\rightarrow\{0,1\}^k\)。考虑下面的概率实验,其参数包括一个 PPT 敌手 \(M\)、一个比特 \(\mathsf{b}\) 和一个安全参数 \(k\)
\(\mathbf{DDH-Exp}_{\mathcal{G},M}^b(k){:}\)
(1) \((\mathbb{G}^{\prime},g,q,H)\leftarrow G(k)\)
(2) \(a\leftarrow\mathbb{Z}_q;A\leftarrow g^a\)
(3) \(b\leftarrow\mathbb{Z}_q;B\leftarrow g^b\)
(4) 如果\(\mathsf{b}=1\)\(s\leftarrow H(g^{\boldsymbol{a}\boldsymbol{b}})\);否则\(s\stackrel{\$}\leftarrow \{0,1\}^k\)
(5) \(M(\mathbb{G}^{\prime},g,q,H,A,B,s)\to \mathsf{b}^{\prime}\)
(6) 如果\(\mathsf{b}=\mathsf{b'}\),输出 \(1\);否则输出 \(0\).
敌手的优势定义为:

\[Adv_{\mathcal{G},M}^{DDH}(k):=|\Pr[\text{ DDH-Exp}_{\mathcal{G},M}^1(k)=1]-\Pr[\text{DDH-Exp}_{\mathcal{G},M}^0(k)=1]| \]

如果对于所有 PPT 对手 \(M\),存在一个可忽略的函数\(\epsilon\),使得 \(Ad\upsilon_{\mathcal{G},M}^{DDH}(k)\leq\epsilon(k)\),我们就说DDH假设对 \(\mathcal{G}\) 成立。

注:为什么不采用原始的DDH,而是加上了哈希函数呢?
要从群 \(G′\) 的一个随机元素得到一个均匀随机字符串(这是用作 PRG 种子或其他原语的私钥样本所必需的),我们必须用一个安全的随机性提取函数(它与这一特定的密钥协议操作很好地结合在一起)来组成 \(g^{ab}\)。为简单起见,我们选择在假设中加入这样一个提取函数 \(H\)

为了证明对主动攻击者的安全性(定理 6.5),我们需要对密钥协议进行更强的安全保证,即敌手获得两个诚实生成的公钥 \(s_u^{PK}\)\(s_v^{PK}\),并且能够学习对于它选择的任意 \(s^{PK}\)(但不同于 \(s_u^{PK}\)\(s_v^{PK}\))的 \(\mathbf{KA}.\mathbf{agree}(s_u^{SK},s^{PK})\)\(\mathbf{KA}.\mathbf{agree}(s_{\upsilon}^{SK},s^{PK})\) 值,仍然无法将 \(s_{u,v}\) 与随机字符串区分开来。为了获得这个更强的属性,我们需要依赖 Oracle Diffie-Hellman 假设(ODH) [2] 的轻微变体,我们称之为两个 Oracle Diffie-Hellman 假设(2ODH):

定义 3.2(2 Oracle Diffie-Hellman 假设(2ODH))。设 \(G(k)\to(\mathbb{G'},g,q,H)\) 是一种有效的算法,它对具有生成元 \(g\)\(q\) 阶群 \(\mathbb{G'}\) 以及函数 \(H:\{0,1\}^*\rightarrow\{0,1\}^k\) 进行采样。考虑以下概率实验,由 PPT 敌手 \(M\)、一个比特 \(\mathsf{b}\) 和安全参数 \(k\) 作为参数。
\(\mathbf{2ODH-Exp}_{\mathcal{G},M}^\mathsf{b}(k){:}\)
(1) \((\mathbb{G}^{\prime},g,q,H)\leftarrow G(k)\)
(2) \(a\leftarrow\mathbb{Z}_q;A\leftarrow g^a\)
(3) \(b\leftarrow\mathbb{Z}_q;B\leftarrow g^b\)
(4) 如果\(\mathsf{b}=1\)\(s\leftarrow H(g^{\boldsymbol{a}\boldsymbol{b}})\);否则\(s\stackrel{\$}\leftarrow \{0,1\}^k\)
(5) \(M^{O_a(\cdot),O_b(\cdot)}(\mathbb{G}^{\prime},g,q,H,A,B,s)\to \mathsf{b}^{\prime}\)
(6) 如果\(\mathsf{b}=\mathsf{b'}\),输出 \(1\);否则输出 \(0\).

技术直觉

添加一次性掩码(单掩码方案)

假设用户有一个总顺序,并假设每对用户\((u,v),u < v\) 就某个随机向量 \(s_{u,v}\) 达成一致。如果 \(u\) 加上 \(x_{u,v}\)\(v\)减去\(x_{u,v}\),那么当他们的向量相加时,掩码将被抵消,但他们的实际输入不会被泄露。
每个用户\(u\)计算:

\[\boldsymbol{y}_{u}=\boldsymbol{x}_{u}+\sum_{v\in\mathcal{U}:\boldsymbol{u}<\boldsymbol{\upsilon}}\boldsymbol{s}_{u,\boldsymbol{\upsilon}}-\sum_{\boldsymbol{\upsilon}\in\mathcal{U}:\boldsymbol{u}>\boldsymbol{\upsilon}}\boldsymbol{s}_{\boldsymbol{\upsilon},\boldsymbol{u}}\quad\mathrm{(mod~R)} \]

并且将\(\boldsymbol{y}_{u}\)发送给服务器,服务器计算:

\[\begin{align*} \boldsymbol{z}& =\sum_{u\in\mathcal{U}}\boldsymbol{y}_{u} \\ &=\sum_{u\in\mathcal{U}}\left(x_{u}+\sum_{\upsilon\in\mathcal{U}:u<\upsilon}s_{u,v}-\sum_{\upsilon\in\mathcal{U}:u>\upsilon}s_{\upsilon,u}\right) \\ &=\sum_{u\in\mathcal{U}}x_{u}\quad(\mathrm{mod~}R) \end{align*} \]

这种方法有两个缺点:

  1. 如果每两个用户之间交换一个随机向量\(s_{u,v}\),会产生大量的通信开销
  2. 如果交换向量后提交加掩码的参数之前有一个客户端掉线,那么整个协议会失效(总和不会抵消)

高效通信和处理掉线用户(逐步改进方案,但都存在问题)

通过就伪随机数发生器的共同种子达成一致,而非整个掩码来降低通信量。这些共享种子将通过双方广播 Diffie-Hellman 公钥并达成密钥协议来计算(广播即可,不需要两两建立通信)。

第一个解决用户掉线问题的尝试(注意这个方法是存在问题的):
一个处理掉线问题的方法是通知幸存客户端,让每个幸存客户端发送他们与掉线客户端的共同种子
但这个过程可能会产生新的掉线用户(不可控,不能确保这一轮幸存下一轮通知的时候仍然幸存),为了恢复需要再通知其他幸存者……依此类推,最高通信轮次达到用户数量。

第二个解决恢复阶段掉线不可控问题的尝试(注意这个方法仍然是存在问题的)
再进一步地,我们通过使用阈值秘密共享来解决这个是否掉线不可控的问题。这样,即使在恢复过程中又有其他各方退出,只要有一定数量的各方(等于阈值)保持存活,并用退出用户的密钥份额做出响应,就能恢复成对种子。

但是这样仍然存在一个问题:如果有一个掉队的客户端,服务器认为它掉线了,通知其他客户端恢复了它的掩码,但是这时候该客户端的掩码延时到达,服务器就能获得其明文。

所以以上改进方案经过推敲,均存在一定的问题。作者最终提出了双掩码方案,有效解决了上述问题!

相当于是客户端在明文消息上加了一个由(自己知道种子)随机数生成器生成的掩码\(b_u\),之后再加上或减去可以抵消的所有掩码\(s_{u,v}\),这样即使延时到达,到达的也是加了掩码的明文,服务器不知道这个掩码\(\mathbf{PRG}(b_u)\)是多少。\(b_u\)\(s_{u,v}\)都需要秘密共享。

注意:其中\(b_u\)只与用户自己有关,而\(s_{u,v}\)则与两方有关,每个用户自己都是知道\(b_u\)的,并且每对用户\(u\)\(v\)都知道\(s_{u,v}\)。那为什么幸存用户既然知道自己的\(b_u\)还是需要恢复秘密共享呢?答案也是并不知道幸存用户在恢复的时候会不会掉线,因此只能用秘密共享来恢复。(这里我一开始还想偏了,想到会不会是因为\(b_u\)是个随机数然后用完用户自己就删了,只能靠恢复,其实并不是因为这个,答案都在文章中,不要瞎猜)

阅读到此,我提出了两个疑问(后来反思第一个疑问是因为前文没有理解通,第二个疑问也是对前文没有理解透彻且后文协议中有更明确的解答):
问题一:为什么不直接问幸存客户端\(b_u\)以及掉线客户端的\(s_{u,v}\)
解答一:因为直接问的话,这些幸存客户端在恢复阶段依然有掉线风险,导致协议失败 (因此要避免掉线不确定性,使用阈值秘密共享是唯一可行方案,本文所有使用阈值秘密共享的地方都是因为这个原因!!!
问题二:为什么可以保证提供两个掩码秘密份额的用户都达到了至少 \(t\) 个,会不会最终服务器接收到的掉线者的\(b_u\)份额多于\(t\)个导致掉线者的\(s_{u,v}\)\(b_u\)都泄露给服务器呢?
解答二:不会,首先根据后文协议如果任何一步中服务器接收到的用户秘密份额少于\(t\)份,协议都会立刻停止。不会,因为规定幸存用户只能提供掉线者\(u\)\(s_{u,v}\)份额,或者提供幸存者\(u\)\(b_u\)份额,而不能针对同一用户\(u\)同时提供两种份额

实用安全聚合协议

我们要强调的是,在图中,当我们说服务器 "从至少 \(t\) 个用户那里收集信息 "时,我们指的是服务器从所有在该轮中没有退出/中止的用户那里接收信息(请记住,我们是在同步设置中证明我们的结果的),如果接收到的信息数量少于 \(t\),则中止。在实际应用中,服务器会等待到指定的超时时间(认为所有没有及时回复的用户都已退出),如果在超时时间之前没有收到足够的信息,服务器就会自行终止。

为了证明主动对抗模式的安全性,我们还假设存在一个公钥基础设施,为了简单起见,我们假设所有客户端都从可信第三方那里接收了所有其他客户端的公开签名密钥作为输入,从而将其抽象化。

在诚实但好奇的情况下,由于所有各方都诚实地遵守协议,我们就可以避免使用签名和对 PKI 的需求(最明显的是,我们可以完全避免一致性检查回合)。

具体协议如下(协议翻译来自联邦学习中的安全聚合SMPC,感谢大佬):
img
img
img

读到这里时又有几个疑问,自己思考后解答如下:

问题一:为什么掉线客户端发送\(s_{v,u}^{SK}\)份额,正常客户端发送\(b_{v,u}\)份额?
解答一:因为是在\(\mathcal{U}_2\)集合中开始计算掩码,因此如果有客户端掉线的话\(\mathcal{U}_2\)集合中所有客户端的\(s_{u,v}\)都会受影响;而最后服务器聚合得到的集合是\(\mathcal{U}_3\),这说明有一些客户端掉线了,但是这里面有些\(s_{u,v}\)抵消不了,而\(b_u\)则可以通过正常客户端自己计算出来(通过秘密共享份额恢复的方式)。
问题二:为什么正常客户端要发送份额\(b_{v,u}\)计算\(b_u\)
解答二:因为最后发送份额的客户端集合是\(\mathcal{U}_5\)\(\mathcal{U}_5\)包含于\(\mathcal{U}_3\),所以说还可能会有客户端掉线,如果\(\mathcal{U}_3\)集合有客户端掉线,那么剩余客户端直接发送\(b_u\),仍然不能解决问题(不能保证服务器接收完全所有\(\mathcal{U}_3\)集合的\(b_u\)),这一点只能通过秘密共享保证,针对每个用户的\(b_u\)只需收到\(t\)个以上\(b_{v,u}\)份额即可)。

此外,服务器没法通过假装某一客户端掉线来欺骗客户端以套取某一客户端的信息:因为有第 3 轮的认证加密机制,签名会不一致,会在第 4 轮被客户端发现从而发现发送的客户端集合签名不一致导致算法中止。

posted @ 2024-03-18 20:53  Xmasker^_^  阅读(203)  评论(0编辑  收藏  举报