文章:Privacy-Preserving Byzantine-Robust Federated Learning via Blockchain Systems
- 背景原因
- 解决方案
- 工作贡献成果
- 预备知识
- 联邦学习
- 投毒攻击
- 投毒攻击分类
- 数据投毒和模型投毒攻击
- 同态加密
- 系统模型
- 威胁模型
- 核心系统算法
- 局部计算
- 局部梯度
- 归一化判断
- 梯度权重
- 聚合算法
会议来源:IEEE TRANSACTIONS ON INFORMA TION FORENSICS AND SECURITY , VOL. 17, 2022
背景原因
1.分布式机器学习在海量数据上实现了更大模型的训练,但仍然容易受到安全和隐私泄露的影响
2.保护隐私的联邦学习方案之一是使用同态加密方案(如Paillier),对局部梯度进行加密,但局部梯度难以计算和传输,开销大(由于Paillier只能对整数进行加密,支持对单个数据进行加密,因此需要先对梯度进行量化,然后逐个加密,这大大增加了计算和通信开销)
3.保护隐私的FL(联邦学习)方案仍然容易受到中毒攻击
4.保护隐私的FL(联邦学习)方案遭受恶意服务器聚合和单点故障威胁
解决方案
我们提出了一个基于区块链的隐私保护拜占庭鲁棒联邦学习(PBFL)方案。具体来说,我们采用余弦相似度作为惩罚恶意客户端的方法。与之前使用余弦相似度机制的方案不同,我们的方案要求服务器收集一个小而干净的根数据集,并为数据集维护一个模型。在确定恶意梯度之前,服务器会考虑本地更新和服务器模型更新,这依赖于可信根,而不是像前面的工作那样只依赖本地更新。与FLTrust一致。在此基础上,采用同态加密技术,在此基础上增加了隐私保护机制。此外,我们使用区块链来促进透明的流程。
工作贡献成果
我们采用全同态加密(FHE)方案CKKS提供了一种隐私保护训练机制,不仅大大减少了计算和通信开销,还防止了攻击者窥探客户端的本地数据。
1.我们提供了一个可信的全局模型,通过余弦相似度去除恶意梯度,从而抵抗中毒攻击。
2.我们使用区块链促进透明的流程和法规的执行。服务器进行链下计算,并将结果上传到区块链,实现了效率和可信度。
3.我们使用两个著名的数据集演示了广泛的实验,并将我们的方案与以前最先进的方案进行了比较。结果表明,该方案具有良好的鲁棒性和效率。
预备知识
联邦学习
在标准的联邦学习设置中,假设我们有一个中央服务器和n个客户端{C1, C2,……Cn},本地数据集D j , j = 1, 2, 3, . . . , n, D = {D1, D2,…Dn}表示联合数据集, 客户的目标是在不泄露本地数据的情况下合作训练一个全局模型。
投毒攻击
投毒攻击: 在投毒攻击中,攻击者通过控制κ客户端来操纵局部模型,最终影响全局模型的准确性
投毒攻击分类
投毒攻击分类:定向攻击,非定向攻击
1.定向攻击: 有针对性的攻击,如缩放攻击,只针对数据集中的一个或多个数据类别,而保持其他类别数据的准确性
2.非定向攻击: 无目标攻击,如Krum攻击、Trim攻击,是一种无差别攻击,目的是降低所有数据类别的准确性。
数据投毒和模型投毒攻击
1.在数据毒害攻击(即标签翻转攻击)中,攻击者通过毒害设备的本地数据间接地毒害全局模型
标签反转攻击:改变样本的标签(给样本使用我们规定的)
标签干净标签攻击:改变样本的输入(将样本的内容修改,标签不变)
2.模型投毒攻击: 在模型投毒攻击中,攻击者可以直接操纵和控制设备与服务器之间通信的模型更新, 直接影响全局模型的准确性
同态加密
同态加密是一种基于数学计算的加密技术。HE满足对明文的加法或乘法等价于对密文的相应运算的性质。完全同态加密是一个既满足加性同态又满足乘性同态的加密函数,可以进行任意次的加法和乘法运算。
本文应用的全同态加密技术ckks(Homomorphic Encryption for Arithmetic of Approximate Numbers),因为该文其中一个实验结果表明,CKKS算法更有效,更适合处理大尺度向量和多参数网络模型
系统模型
请注意,求解器、计算器和客户需要向智能合约支付定金,我们省略了图中的过程
模型设计:
1.KGC (Key Generation Center):为客户端和服务器生成和分发公私钥对的可信机构。
2.客户端:作为数据所有者,客户端拥有KGC提供的公钥/私钥对(pkx, skx),并旨在从通用的全球模型中受益。
3.求解器:一个拥有小型干净数据集D0的中央服务器负责聚合客户端提交的所有梯度。
4.Verifier:一个非合谋的中央服务器,并与求解器合作执行计算。Verifier有一对KGC生成的公钥/私钥(pkv, skv)。
5.区块链系统:为了避免自私行为,中心服务器需要在SC上存入押金以获得潜在的惩罚。此外,还需要将结果上传到区块链,以便进行透明的计算过程。
威胁模型
1.投毒攻击:恶意客户端的目标是在不被检测的情况下影响全局模型的性能。恶意客户端可以通过多种方式发起投毒攻击。例如,他/她改变了数据的标签,并上传了在有毒数据上训练的梯度。
2.数据泄露:由于梯度是客户端本地数据的映射,如果客户端直接上传明文梯度,攻击者可以在一定程度上推断或获取诚实客户端的原始信息,从而导致客户端数据泄露。
3.推理攻击:在我们的方案中,Solver和Ve交换一些中间结果进行协作,以完成本地更新的聚合。因此,他们可能试图从中间结果中推断敏感信息
核心系统算法
PBFL由局部计算、归一化判断和模型聚合三个过程组成
局部计算
局部梯度
归一化判断
我们的聚合规则基于余弦相似度策略。为了使聚合规则适用于密文,在加密前对局部梯度进行归一化处理
因为用ckks加密所以本文向量内积:
向量[[ g~i j] ] p k v =[[ p 1, p 2,….., p n∗ ] ] p k v 向量 [[ \widetilde g^{j}_{i}]]_{pk_{v}} = [[p_{1},p_{2},…..,p_{n^{*}}]]_{pk_{v}} 向量[[g ij]]pkv=[[p1,p2,…..,pn∗]]pkv
首先将两个加密向量相乘:[[ p 1 2, p 2 2,….., p n∗2] ] p k v 首先将两个加密向量相乘 : [[p^{2}_{1},p^{2}_{2},…..,p^{2}_{n^{*}}]]_{pk_{v}} 首先将两个加密向量相乘:[[p12,p22,…..,pn∗2]]pkv
旋转向量[[ p 1 2, p 2 2,….., p n∗2] ] p k v −>[[ p 2 2, p 3 2,…. p n∗2, p 1 2] ] p k v 旋转向量 [[p^{2}_{1},p^{2}_{2},…..,p^{2}_{n^{*}}]]_{pk_{v}}->[[p^{2}_{2},p^{2}_{3},….p^{2}_{n^{*}},p^{2}_{1}]]_{pk_{v}} 旋转向量[[p12,p22,…..,pn∗2]]pkv−>[[p22,p32,….pn∗2,p12]]pkv
重复( n ∗−1)次重复(n^{*}-1)次 重复(n∗−1)次
可以得到[[ r 1, r 2, r 3,…. r n∗ ] ] p k v r1= p 1 2+ p 2 2+,…..,+ p n∗2可以得到 [[r_{1},r_{2},r_{3},….r_{n^{*}}]]_{pk_{v}} \quad\quad r1=p^{2}_{1}+p^{2}_{2}+,…..,+p^{2}_{n^{*}} 可以得到[[r1,r2,r3,….rn∗]]pkvr1=p12+p22+,…..,+pn∗2
最后我们两个向量相乘[[ r 1] ] p k v =[[ r 1, r 2, r 3,…. r n∗ ] ] p k v 乘[1,0,0,….,0]最后我们两个向量相乘 [[r_{1}]]_{pk_{v}}= [[r_{1},r_{2},r_{3},….r_{n^{*}}]]_{pk_{v}} 乘[1,0,0,….,0] 最后我们两个向量相乘[[r1]]pkv=[[r1,r2,r3,….rn∗]]pkv乘[1,0,0,….,0]
[[ r 1] ] p k v =[[ g~i j] ] p k v ⊙[[ g~i j] ] p k v [[r_{1}]]_{pk_{v}}= [[ \widetilde g^{j}_{i}]]_{pk_{v}} \odot [[ \widetilde g^{j}_{i}]]_{pk_{v}} [[r1]]pkv=[[g ij]]pkv⊙[[g ij]]pkv
梯度权重
具体来说,我们的聚合规则依赖于可信根数据集D0及其对应的模型w0,它们用于确定全局模型更新的更“有希望”的方向。局部模型更新,更类似于g的方向,有更高的权重,而被聚合。与前面的工作一样,Solver可以通过手动标记收集可信的根数据集D0。例如,谷歌可以招募其员工输入Gboard在下一个单词预测的联邦任务中创建根数据集。在第VII节中,我们展示了我们只需要一个小的根数据集D0(例如200个数据点),并且数据集的分布可以与客户端的分布不同。因此,对于Solver来说,收集可信根数据集D0和手动标记的成本通常是负担得起的。
方法:余弦相似度
Solver在数据集D0上训练得到梯度更新 gi0 g^{0}_{i}gi0,然后使用
g~i 0= g i 0/∣∣ g i 0∣∣\widetilde g^{0}_{i} = g^{0}_{i} /|| g^{0}_{i}|| g i0=gi0/∣∣gi0∣∣
对 gi0 g^{0}_{i}gi0进行归一化。求解器加密它得到梯度 [ [g ~i0] ] p kv[[ \widetilde g^{0}_{i}]]_{pk_{v}}[[g i0]]pkv 然后我们计算这两个向量之间的余弦相似度,其中客户端 Cj C_{j}Cj得到 g~i j=[ p 1, p 2,….., p n∗ ]\widetilde g^{j}_{i}=[p_{1},p_{2},…..,p_{n^{*}}] g ij=[p1,p2,…..,pn∗], g i 0=[ q 1, q 2,….., q n∗ ]g^{0}_{i} =[q_{1},q_{2},…..,q_{n^{*}}] gi0=[q1,q2,…..,qn∗]加密后的梯度为
[[ g~i j] ] p k v =[[ p 1, p 2,….., p n∗ ] ] p k v ,[[ g~i 0] ] p k v =[[ q 1, q 2,….., q n∗ ] ] p k v [[ \widetilde g^{j}_{i}]]_{pk_{v}}=[[p_{1},p_{2},…..,p_{n^{*}}]]_{pk_{v}}, [[ \widetilde g^{0}_{i}]]_{pk_{v}}=[[q_{1},q_{2},…..,q_{n^{*}}]]_{pk_{v}} [[g ij]]pkv=[[p1,p2,…..,pn∗]]pkv,[[g i0]]pkv=[[q1,q2,…..,qn∗]]pkv
[[c s i j] ] p k v =[[ g~i 0] ] p k v ⊙[[ g~i j] ] p k v =[[ p 1 q 1+ p 2 q 2+….+ p n∗q n∗ ] ] p k v [[cs^{j}_{i}]]_{pk_{v}}= [[ \widetilde g^{0}_{i}]]_{pk_{v}} \odot [[ \widetilde g^{j}_{i}]]_{pk_{v}}=[[p_{1}q_{1}+p_{2}q_{2}+….+p_{n^*}q_{n^*}]]_{pk_{v}} [[csij]]pkv=[[g i0]]pkv⊙[[g ij]]pkv=[[p1q1+p2q2+….+pn∗qn∗]]pkv
s.t.,∣∣ g~i 0∣∣=∣∣ g~i j∣∣=1s.t., || \widetilde g^{0}_{i}||=|| \widetilde g^{j}_{i}||=1 s.t.,∣∣g i0∣∣=∣∣g ij∣∣=1
由于归一化,两个向量之间的余弦相似度可以转化为内积。
c sij cs^j_{i}csij的负值意味着局部梯度g ~ij \widetilde g^{j}_{i}g ij的方向与g ~i0 \widetilde g^{0}_{i}g i0的方向相反,这对全局模型产生了负面影响。一个典型的解决方案是在聚合期间丢弃恶意梯度,从而尽可能减少这些梯度的影响。因此,在第i次迭代中,客户端 Cj C _{j}Cj的评分 Sij S ^j_{i}Sij由如下定义:
S i j=ReLU(c s i j)S ^j_{i}=ReLU(cs^j_{i}) Sij=ReLU(csij)
ReLU= { x,ifx>00,ifx0 \\ 0 , ifx<0 \end{cases} ReLU={x,ifx>00,ifx<0
ReLU函数是明文情况下使用的,在密文情况下不适用
下列算法给出了在[0,1]范围内同态密码比较的一种数值方法。两个向量的余弦相似度为[−1,1],这使得我们不能直接将比较方法应用于 [ [ c sij] ] 和 [ [ 0 ] ][[cs^j_{i}]]和[[0]][[csij]]和[[0]] 。解决方法之一是将余弦相似度转换为允许的范围。要做到这一点,我们首先加 [ [ 1 ] ] 到 [ [ c sij] ][[1]]到[[cs^j_{i}]][[1]]到[[csij]],使结果的明文落在[0,2]上,然后我们将结果乘以 12 \frac{1}{2}21。因此,最终结果满足要求。请注意,通过我们的转换,值0对应于值 12 \frac{1}{2}21。因此,我们将ReLU函数转换为ReLU’。我们在算法4中调用Max来描述同态比较方法。
ReL U ′([[c s i j]])= {1 2([[c s i j]]+[[1]]),if1 2([[c s i j]]+[[1]])>[[ 1 2]][[ 1 2]], if1 2([[c s i j]]+[[1]])[[\frac{1}{2}]] \\ [[\frac{1}{2}]] , \quad \quad \quad \quad \quad if \quad \frac{1}{2}([[cs^j_{i}]]+[[1]])<[[\frac{1}{2}]] \end{cases} ReLU′([[csij]])={21([[csij]]+[[1]]),if21([[csij]]+[[1]])>[[21]][[21]],if21([[csij]]+[[1]])<[[21]]
聚合算法
在获得客户端的所有分数后,Solver与Verifier一起工作,以获得模型聚合所需的值,而不会泄露隐私。具体来说,为了获得分数的原始值,求解器设置 [ [ Sij] ] p kv ′= 2 ⋅ [ [ Sij] ] p kv − [ [ 1 ] ] p kv[[S^j_{i}]]_{pk_{v}}’ = 2·[[S^j_{i}]]_{pk_{v}}−[[1]]_{pk_{v}}[[Sij]]pkv′=2⋅[[Sij]]pkv−[[1]]pkv。求解器计算 [ [ s u m ] ] p kv = ∑ f = 1 ∣ C ∣[[ S i j] ] p k v′ [[sum]]_{pk_{v}}=\sum_{f=1}^{|C|}{[[S^j_{i}]]_{pk_{v}}’ }[[sum]]pkv=∑f=1∣C∣[[Sij]]pkv′ ,然后Solver随机选择一个 n∗ {n^*}n∗维向量 V n ∗和 V~ V^{n^*}和\widetilde VVn∗和V ,得到 V n ∗⋅ [ [g ~ij] ] p kv 和 V~⋅ [ [ Sij] ] p kv ′ V^{n^*}· [[ \widetilde g^{j}_{i}]]_{pk_{v}}和\widetilde V·[[S ^j_{i}]]’_{pk_{v}}Vn∗⋅[[g ij]]pkv和V ⋅[[Sij]]pkv′。最后,求解器发送 [ [ s u m ] ] p kv , V n ∗⋅ [ [g ~ij] ] p kv 和 V~⋅ [ [ Sij] ] p kv ′ [[sum]]_{pk_{v}} ,V^{n^*}· [[ \widetilde g^{j}_{i}]]_{pk_{v}}和\widetilde V·[[S ^j_{i}]]’_{pk_{v}}[[sum]]pkv,Vn∗⋅[[g ij]]pkv和V ⋅[[Sij]]pkv′到区块链。Veifier得到它们并用skv解密,然后Veifier用pkx加密 V n ∗⋅g ~ij和 V~⋅S i j′ V^{n^*}· { \widetilde g^{j}_{i}}和\widetilde V·{S ^j_{i}}’Vn∗⋅g ij和V ⋅Sij′ ,并发送求和(sum), [ [ V n ∗⋅g ~ij] ] p kx 和 [ [ V~⋅S i j′] ] p kx[[V^{n^*}· { \widetilde g^{j}_{i}}]]_{pk_{x}}和[[\widetilde V·{S ^j_{i}}’]]_{pk_{x}}[[Vn∗⋅g ij]]pkx和[[V ⋅Sij′]]pkx到区块链。
该文章大概内容就是这样
其他以后有时间再补