Privacy-Preserving Byzantine-Robust Federated Learning via Blockchain Systems
可译为“利用区块链实现隐私保护的拜占庭鲁棒性联邦学习”
这篇是今年八月份被TIFS2022(CCF A)收录的文章,写的利用全同态加密和区块链技术解决联邦学习中隐私问题和可信问题(虽然区块链仅仅只是存储的作用,也稍微提了一下)。精读完这篇文章,整体感觉还不错,毕竟是CCF A类期刊。下面是自己读后感,根据自己的语言来做了一些笔记,也相当于回顾。其中,有理解不到位的地方望指正,建议读者还是看原文。
一、文章背景
1.1 摘要和简要内容
摘要:由于中心化的联邦学习(Federated Learning,FL)框架和不可靠的用户,传统FL容易遭受恶意客户端和服务器的投毒攻击。本文设计了一个通过区块链系统实现隐私保护拜占庭鲁棒性联邦学习(PBFL)方案,来减轻中央服务器和恶意客户端的影响。利用余弦相似度来判断恶意客户端上传的恶意梯度。然后,采用全同态加密来提供安全的聚合。最后,使用区块链系统来促进透明的流程和法规的实施。形式化分析证明了本方案能达到收敛和提供隐私保护。
主要内容:
- 利用全同态加密(CKKS17)提供了一种隐私保护训练机制,减少了计算和通信开销,防止了攻击者窥探客户端的本地数据。
- 通过余弦相似度去除恶意梯度(感觉并没有去除,而是降低了“恶意梯度”的权重),提供了一个可信的全局模型,抵御了投毒攻击。
- 使用区块链来促进透明的流程,服务器链下计算(区块链实现去中心化的存储,不是去中心化训练,故还有服务器),将结果上传到区块链,实现了高效和可靠性。
1.2 联邦学习现存问题
(1)最常用的隐私保护联邦学习使用paillier同态加密算法来加密本地梯度,然而作者通过做实验比较了CKKS和paillier加密和解密向量所花的时间(CKKS: Homomorphic Encryption for Arithmetic of Approximate Numbers)。结果表明,CKKS算法效率更高,更适合处理大尺度向量和多参数网络模型。因此,本文使用CKKS加密局部梯度,以提高计算效率。
(2)隐私保护联邦学习(PPFL)仍受到投毒攻击。如经过训练的模型会对一个特定的类做出错误的预测,或全局模型对大量类做出错误预测。
(3)PPFL容易受到服务器恶意聚合和单点故障威胁。现有的FL方案在提高安全性和高效率的适合,无法抵抗客户端毒化攻击和避免服务器恶意行为,且在实践中扩展性不强。
1.3 CKKS全同态加密
本文主要用到的是全同态加密(CKKS)技术,自己也在看这篇文章前,花了三四天读CKKS论文,结合他人对CKKS的介绍才懂了这个全同态加密方法。可以参考全同态CKKS方案解析.
注意以下几个点:
- 全同态加密满足加同态性质,即两个明文分别加密后相加等于明文先相加再加密的结果( E ( m 1 ) + E ( m 2 ) = E ( m 1 + m 2 ) E(m_1)+E(m_2)=E(m_1+m_2) E(m1)+E(m2)=E(m1+m2))。
- 全同态加密满足乘同态性质,即两个明文分别加密后相乘等于明文先相乘再加密的结果( E ( m 1 ) ⋅ E ( m 2 ) = E ( m 1 ⋅ m 2 ) E(m_1)·E(m_2)=E(m_1·m_2) E(m1)⋅E(m2)=E(m1⋅m2))。
具体流程如下:
二、主要内容
将原联邦学习中的服务器扩展为两个“诚实且好奇”的服务器,分别为Verifier和Solver,它们不共谋。
由Solver服务器设置一个小而干净的根数据集 D 0 D_0 D0,并基于它维护一个模型 w 0 w_0 w0,根据算出来的梯度 g i 0 g^0_i gi0和Clients上传的梯度 g i j g^j_i gij的余弦相似度,以此来去除恶意的梯度。
本篇文章只有一个框架图,具体发送什么并不是很清晰,为了便于自身理解,画了一个流程图如下:

首先初始化,密钥生成中心为Verifier和Client生成公私钥对,分别为 ( p k v , s k v ) (pk_v,sk_v) (pkv,skv), ( p k x , s k x ) (pk_x,sk_x) (pkx,skx)。
(1)本地计算
- 1)局部训练: g i j = ∇ L ( w i j , D j ) g^j_i=\nabla L(w^j_i,D_j) gij=∇L(wij,Dj)。假设第 i i i次迭代,每个客户端 C j C_j Cj用本地数据集 D j D_j Dj和局部模型 w i j w^j_i wij对损失函数求导,算出局部梯度 g i j g^j_i gij。
- 2)归一化: g ~ i j = g i j ∣ ∣ g i j ∣ ∣ \widetilde{g}^j_i =\frac {g^j_i}{\vert \vert g^j_i \vert\vert} g ij=∣∣gij∣∣gij。由于聚合规则基于余弦相似度策略,需要对局部梯度进行归一化处理,将余弦相似度转化为向量的内积。另外,将向量归一化减轻了恶意梯度的影响。
- 3)全同态加密: [ [ g ~ i j ] ] p k v [[\widetilde{g}^j_i ]]_{pk_v} [[g ij]]pkv。客户端使用Verifier的公钥 p k v pk_v pkv加密本地归一化后的梯度 g ~ i j \widetilde{g}^j_i g ij,将其上传给Solver。
- 4)模型更新: w i ← w i − 1 − α g i j w_i\leftarrow w_{i-1}-\alpha g^j_i wi←wi−1−αgij。客户端 C j C_j Cj从区块链下载最新的全局模型,并用自己的私钥 s k x sk_x skx解密得到明文(感觉这里存在一点点问题,在最后我会说明),再进行模型更新。
(2)归一化判断
很自然,当客户端上传归一化的梯度后,需要Solver判断收到的梯度是否真的进行了归一化处理,防止恶意客户端行为。所以,当Solver收到 [ [ g ~ i j ] ] p k v [[\widetilde{g}^j_i ]]_{pk_v} [[g ij]]pkv后,计算其内积,再发送给Verifier,即 [ [ 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}⊙[[\widetilde{g}^j_i ]]_{pk_v} [[r1]]pkv=[[g ij]]pkv</