VERSA: Verifiable Secure Aggregation for Cross-Device Federated Learning
可译为“VERSA: 面向跨设备联邦学习的可验证安全聚合”
最近对模型可验证的文章比较感兴趣,就看了几篇,选一篇最新的文章读了读。这篇VERSA主要的贡献点在于,不需要强安全假设和昂贵的加密操作,即可完成模型的可验证性(后续文章证明是不可以完成验证的,并附上证明),并提出了一种模型恢复攻击(主要针对文章VerifyNet)。下面是边看边记录的一点笔记,也可能有理解错的地方,建议看原文。
一、背景介绍
摘要:在传统cross-device(跨设备)联邦学习中,提交加密的本地模型给不可信的中央服务器聚合以更新全局模型。先前的工作依赖强假设来验证聚合结果的正确性,如不可靠网络中所有用户之间的可信设置。或是遭受昂贵的加密操作,如双线性配对。
本文提出了一种模型恢复攻击,证明了大多数本地模型可以在合理时间内泄露。进一步,提出了一种可验证的跨设备联邦学习安全聚合协议VERSA。VERSA无需在用户之间进行任何可信的验证设置,同时允许中央服务器和用户使用轻量级伪随机生成器来证明和验证模型聚合的正确性,从而最大限度地降低了验证成本。
1.1 针对VerifyNet的两个问题
- 1)先前工作采用的可信设置在保护隐私的跨设备FL环境中安全吗?
- 2)是否可能在不依赖任何可信设置的情况下,为保护隐私的跨设备构建可验证的FL方案?
传统可验证FL用同态哈希,这在计算上很昂贵,它严重依赖双线性配对。当梯度为高维向量时,双线性配对使用是主要瓶颈,因为配对必须在向量中的每个条目中运行。但服务器和用户可以合谋,对受害者提交的哈希值进行暴力攻击,从而在合理时间内恢复输入向量的大多数条目。
目标:1)不依赖所有用户之间的任何可信设置下实现可验证性;2)验证过程应该是计算轻量级的。
VERSA通过伪随机生成器(PRG)采用秘密扩展来满足这些要求。具体而言,SA中用户共同为本地模型加密生成一组成对共享秘密。反之,共享密钥用作主密钥,通过PRG派生三个会话密钥。一个会话密钥将本地模型更新编码为模型验证代码。此代码对于验证模型聚合有用,因为单个代码的聚合编码单个本地模型更新的聚合。
主要贡献:
- 1)提出了基于VerifyNet的模型恢复攻击,并证明攻击者可以在合理时间内恢复受害者的模型更新;
- 2)提出了一种可验证且隐私保护的模型聚合方案VERSA。通过像PRG这样轻量级原语实现模型聚合的可验证性,最好地支持跨设备FL。
- 3)实验在三个数据集(MNIST、SVHN和CIFA100)证明了模型准确性,表明VERSA在不降低准确性的情况下实现了模型更新的隐私性和可验证性。
- 4)我们进行了性能分析SA和VerifyNet的VERSA。评估结果表明额外的成本运行SA之上的VERSA非常小,比VerifyNet快几个数量级。
1.2 可验证联邦学习两种场景
- 1)服务器扮演证明者的角色,证明它诚实地聚合了本地模型参数,用户为独立的验证者。(我理解的是用户验证全局模型的完整性)
- 2)用户扮演证明者的角色,证明他们没有偏离协议,而服务器是验证者。(我理解的是服务器验证局部模型的可用性)
本文关注第一种场景!
1.3 系统模型
- 1)所有n个参与者将本地模型更新发送到服务器;
- 2)服务器聚合本地模型更新;
- 3)将结果返回给每个参与者;
- 4)所有参与者将全局模型更新应用于他们的模型。
与传统FL的区别在于,可验证FL在启用SA的FL之上,其中服务器生成了一个证明其执行正确性的证明,并广播结果。最后,每个参与者验证全局模型更新。
VERSA使每个幸存用户能够验证聚合模型的正确性,并在SA上运行,使用与SA相同的轻量级加密原语实现可验证性。
- 1)发布和共享密钥:这与SA中的发布和共享密钥阶段相同;
- 2)掩蔽:对应于掩蔽相位SA,除了梯度屏蔽之外,用户还派生出一个公共评估密钥和一个私有验证密钥,这两个密钥在后续阶段分别由服务器和用户使用;
- 3)解码并生成模型聚合的证明:对应于SA的解除屏蔽阶段,除了模型聚合之外,服务器还使用评估生成证明,以证明聚合梯度的正确性。服务器广播证明和聚合梯度。
- 4)验证模型聚合:用户使用验证密钥验证模型聚合的正确性,若验证成功,则接受聚合梯度,否则拒绝。
二、模型恢复攻击
描述了基于同态哈希的可验证安全聚合VerifyNet的模型恢复攻击,并证明了攻击的可行性。为了更好理解攻击过程,我们简要解释了使用同态哈希在聚合梯度上实现可验证性的一般方法。
2.1 同态哈希
同态哈希允许对一组哈希值 ( H ( m 1 ) , ⋯ , H ( m t ) ) (H(m_1),\cdots,H(m_t)) (H(m1),⋯,H(mt))的输入求值一个算术函数 F F F,使得求值算法返回 H ( f ( m 1 , ⋯ , m t ) ) H(f(m_1,\cdots,m_t)) H(f(m1,⋯,mt)),更准确地说,一组单向键控同态哈希 H H H由以下三种算法组成:
- k ← H . g e n k\leftarrow H.gen k←H.gen:这是一个密钥哈希函数 H k H_k Hk的私钥 k k k生成算法。
- H k ( m ) ← H H_k(m)\leftarrow H Hk(m)←H:这是一个哈希计算算法,对输入 m m m返回 H k ( m ) H_k(m) Hk(m)。
- H k ( f ( m 1 , ⋯ , m t ) ) ← H . e v a l H_k(f(m_1,\cdots,m_t))\leftarrow H.eval Hk(f(m1,⋯,mt))←H.eval:这是一个函数求值算法,输入一组哈希值 H k ( m 1 ) , ⋯ , H k ( m t ) H_k(m_1),\cdots,H_k(m_t) Hk(m1),⋯,Hk(mt),返回 H k ( f ( m 1 , ⋯ , m t ) ) H_k(f(m_1,\cdots ,m_t)) Hk(f(m1,⋯,mt))。
单向键控哈希函数 H H H的安全性保证了从 H k ( m ) H_k(m) Hk(m)反转到恢复 m m m实际上是不可行的,应用到SA当中:
- 1)所有用户 u u u共享同态哈希 H H H的秘密密钥 k k k;
- 2)每个用户计算梯度的哈希值 H k ( x u ) H_k(x_u) Hk(xu),并提交一对 ( S A . m a s k ( x u ) , H k ( x u ) ) (SA.mask(x_u), H_k(x_u)) (SA.mask(xu),Hk(xu))给服务器,其中 S A . m a s k ( x u ) SA.mask(x_u) SA.mask(xu)表示已掩盖的梯度 x u x_u xu。
- 3)服务器聚合所有的 { S A . m a s k ( x u ) } u ∈ U \{SA.mask(x_u)\}_{u\in U} { SA.mask(xu)}u∈U,返回 z z z。服务器计算从用户 u u u接收到的所有哈希值,返回 z ^ = H k ( ∑ u ∈ U x u ) \widehat{z}=H_k(\sum_{u\in U} x_u) z =Hk(∑u∈Uxu),服务器广播一对 ( z , z ^ ) (z,\widehat{z}) (z,z )。
- 4)在这个阶段,用户在 z ^ \widehat{z} z 的协助下验证 z = ? ∑ u ∈ U x u z=^?\sum_{u\in U} x_u z=?∑u∈Uxu。为此,每个用户计算 z z z的哈希值,然后当且仅当 H k ( z ) = z ^ H_k(z)=\widehat{z} Hk(z)=z 时,用户接受 z z z作为正确聚合的模型更新,否则终止。
2.2 我们的攻击
利用观察到的两个特征在VerifyNet上的模型恢复攻击:
- 1)模型参数的分布是高度偏置的。使得SGD规则生成的梯度项在零附近形成钟形分布。若没有这种观察我们将别无选择,只能在非常大的范围内发动brute-force攻击,比如 ( − ∞ , ∞ ) (-\infty, \infty) (−∞,∞)在计算上不可行的。
- 2)为了在VerifyNet中对梯度进行编码并验证聚合梯度,所有用户必须共享用于同态哈希的相同秘密参数。很容易受到恶意用户与服务器勾结发动的暴力攻击,这样编码的梯度可以对受害者同态哈希输出的暴力攻击中恢复。这种用户服务器勾结是包含个人梯度机密性的最重要的安全问题。
2.2.1 攻击场景
在每个用户的本地设备上使用SGD规则在MNIST数据集上运行TensorFlow,并使用同态哈希对梯度进行编码,并将结果发送给服务器。服务器通过与恶意用户串通获取所有同态哈希参数,对受害者提交的同态哈希输出进行暴力攻击。
2.2.2 实施步骤
使用了两种同态哈希算法:DRV哈希和KFM哈希。前者是VerifyNet中使用,后者是证明本攻击可行性不依赖于编码梯度的任何特定同态哈希。对于DRV哈希,使用MNT224曲线,这是基于配对的加密库中实现的配对的Type-III曲线。由于KFM哈希,使用256、512和1024位质数,每个质数实例化三个独立的KFM哈希,并使用这三种KFM哈希来衡量我们对各种长度质数的攻击的可行性。
2.2.3 处理浮点型梯度
由于DRV哈希和KFM哈希都以整数值为输入,所以训练得到的浮点参数需要在范围内缩放 { − p − 1 2 , ⋯ , 0 , ⋯ , p − 1 2 } \{-\frac{p-1}{2},\cdots,0,\cdots,\frac{p-1}{2}\} { −2p−1,⋯,0,⋯,2p−1},其中 p p p是用于哈希的大素数。根据浮点数到整数的转换方法,对浮点值 v v v进行量化为整数 ⌊ v ⋅ α ⌋ \lfloor v\cdot \alpha \rfloor ⌊v⋅α⌋,其中 α \alpha α是放缩因子,其中 α \alpha α值越大,量化误差越小。设置 α = 2 p r e c \alpha=2^{prec} α=2prec,其中 p r e c prec prec指的是神经网络用来表示梯度值的位精度。
研究表明,16位精度足以不影响模型精度的情况训练神经网络,从而有利于提高能源效率和降低精度表征。因此,我们使用32位精度和16位精度的MNIST训练数据集,以获得两个独立的梯度集。我们对后一组的攻击测量了对基于同态哈希的可验证SA的暴力攻击降低降低的影响。
2.2.4 攻击过程
假设两个梯度集中每个都包含750个梯度,其中每个梯度形成一个包含10个entries的向量(是10维度的意思吗?)。由于预计分布将高度偏向于0,因此大多数参数将驻留在一个短对称区间内,如 ( − x , x ) (-x,x) (−x,x)。图2绘制了这些entries的分布,表明它们形成了以零为中心的窄钟形曲线,该图表明,即使我们将 x x x设置为一个小值,例如 x = 0.2 x=0.2 x=0.2,大多数参数也可以恢复。最后,使用 D R V 、 K F M − 256 、 K F M − 512 DRV、KFM-256、KFM-512 DRV、KFM−256、KFM−512和 K F M − 1024 KFM-1024 KFM−1024为每个entries分别获得了四个哈希值。
令 h ( ⌊ v ⋅ α ⌋ ) h(\lfloor v\cdot \alpha \rfloor) h(⌊v⋅α⌋)是浮点型梯度项 v v v哈希的对应项。令 0 < r < 1 0<r<1 0<r<1是一个浮点型值,使得存在一个整数 n n n满足 ⌊ v ⋅ α ⌋