使用Aijack的隐私机器学习 - 3:Paillier加密的联合学习
#python #安全 #machinelearning #deeplearning

这篇文章是我们使用Aijack系列的隐私机器学习的一部分。

第1部分:Federated Learning
第2部分:Model Inversion Attack against Federated Learning
第3部分:使用Paillier加密的联合学习
第4部分:具有不同隐私的联合学习
第5部分:稀疏梯度的联合学习
第6部分:对联邦学习的中毒攻击
第7部分:联合学习与傻瓜
第8部分:分裂学习
第9部分:针对分裂学习的标签泄漏

概述

the previous tutorials所示,Federated Learning是流行的分布式深度学习范式之一,可能会通过每个客户发送给服务器的本地梯度泄露私人信息。为了克服此问题,客户可以在上传之前对本地渐变进行加密。回想一下,联合学习中的服务器必须从客户端汇总梯度。如果服务器使用简单的平均值作为聚合函数,则服务器可以执行此类聚合,而不是在普通梯度上,而是在使用同态加密加密的梯度上执行。

同态加密是一种类型的加密方案,您可以在密码文本上执行一些算术操作。例如,Paillier加密方案具有以下属性;

d e x + e y = x + y d e x + y = x + y d e (态>) = x y \begin{align} &\mathcal{D}(\mathcal{E}(x) + \mathcal{E}(y)) = x + y \newline &\mathcal{D}(\mathcal{E}(x) + y) = x + y \newline &\mathcal{D}(\mathcal{E}(x) * y) = x * y \end{align}

, where E\mathcal{E} and D\mathcal{D} represent encryption and decryption, respectively.

Recall that the server in FedAVG averages the received gradients to update the global model (see Part 1

JAS CRLR CRACKOOKO QUMOMO > DOPOLY > PLOKS > PLOKINGS QRARKS QRAMKS QRAKELLY) SOLKOKOKOLKOLKOLKOLLY) SLOLKOLKOLLY) SLOLKOLLY) SLOLKOLLY) SLOLLY)) ol ylokes? What is/iday to Godals? Mogmental puides to/hal petts to sudiates umm mlohogh gaubɔ hba tubɔ zwe zwek )> hho uph hama> poacho hoo> harhhy hamholy onryyyyaghy yamyyyamyamabryyyyyyyyyyyyyyyy ana lepyyyy ana lepyyyyyyyyyyyyyyyyyy ana ana ana ana anpyyyyyyyyyyyyyyyyyy and anpy andpy anpy hwary ma hmms ma hmms) Lord和All Pubsubides和Secgion /AmidesZabɔ子subɛcde“,kubɔ?……UAHA> POACE HAME HHOP HAMEOPER> Yawyawyawearyas Leper Leper Leker Leker Leary A an 5 代码

我们还将使用AIJack使用Paillier加密来实施联合学习。您需要的只是通过PaillierGradientClientManager将加密和解密的能力附加到每个客户端。


from aijack.defense import PaillierGradientClientManager, PaillierKeyGenerator

keygenerator = PaillierKeyGenerator(64)
pk, sk = keygenerator.generate_keypair()

manager = PaillierGradientClientManager(pk, sk)
PaillierGradFedAVGClient = manager.attach(FedAVGClient)

clients = [
    PaillierGradFedAVGClient(Net().to(device), user_id=c, server_side_update=False)
    for c in range(client_size)
]
server = FedAVGServer(clients, Net().to(device), server_side_update=False)

# Same code as in Part 1

概括

在这篇文章中,我们了解到,联合学习中的客户可以通过同态加密加密梯度,以防止通过梯度侵犯隐私行为。但是,此方法使服务器无法检查和验证梯度,这可能会导致其他威胁,例如中毒攻击。我们将在下一个教程中研究这些风险。