HOME
基于MPC的隐私计算技术——隐私聚合

隐私聚合技术是专用于解决MPC安全多方求和问题的一种特殊协议。能够解决该问题的协议有很多种,包括基于加法同态加密的协议,线性秘密分享的协议等等。本文中的隐私聚合是指基于Google在CCS2017上提出的用于解决联邦学习中梯度安全聚合问题的协议在联邦场景下的优化[1]。

初 识

在联邦学习领域中,我们遇到的一个主要问题是,如何保证在分布式训练中梯度聚合时各客户端梯度的数据安全性。服务器若是直接拿到明文梯度进行聚合,虽然是对梯度进行操作,没有直接操作原数据并不会直接泄露隐私数据,但是对于攻击者来说,由于梯度本身就包含原数据的一些信息,通过梯度进行攻击,还是很容易攻击到客户端的隐私数据。

因此,保证各客户端在梯度聚合阶段自己梯度的安全就非常重要。

Google在CCS2017上提出了一种协议用来解决梯度聚合的安全问题,其核心思想是对于每一个客户端的梯度加上混淆项,由于混淆项是和其他客户端共同协商特殊构造的且只有自己知道,在聚合时,每个客户端传给服务器的梯度中的混淆项都可以消除掉,使得服务器可以在拿到真实的梯度聚合结果的前提下无法攻击到各客户端的真实梯度值。由于每一个客户端发来的都是混淆过的梯度,且梯度中的混淆项只有客户端自己知道,在其他客户端和服务器不合谋的前提下,可以保证各客户端梯度的隐私性。

隐私聚合协议

想要站在巨人的肩膀上,首先要学会攀爬。我们需要先学习一下Google是如何做的,概括学习《Practical Secure Aggregation for Privacy-Preserving Machine Learning》这篇会议论文。

▲ 相关概念

混淆公式:

聚合公式:

阈值秘密分享:

秘密分享(SS,Secret Sharing)是指数据拆散成多个无意义的数,并将这些数分发到多个参与方那里。每个参与方拿到的都是原始数据的一部分,一个或少数几个参与方无法还原出原始数据,只有全部参与方的数据凑在一起时才能还原出原本数据。阈值秘密分享则是将还原的条件放宽,参数方个数达到阈值时数据就可以还原。

▲ 协议流程

第0轮:客户端初始化相关安全参数,生成公私钥对用于后续流程,并发送公钥给服务器。服务器收集足够客户端的公钥数据,并记录这一阶段的存活客户端为u1。

第1轮:服务器广播收到的公钥给所有客户端。客户端拿到其他客户端的公钥,并随机生成生成混淆项bu;将自己的私钥su以及bu通过秘密分享生成客户端总数量的碎片,并使用碎片对应客户端的的公钥cu加密,返回给服务器。服务器收集足够客户端加密的碎片数据,并记录这一阶段的存活客户端为u2。

第2轮:服务器将收集到的客户端加密的碎片数据转发到对应的客户端。客户端收到后根据混淆公式对自己的数据进行混淆,并将混淆后的数据发送给服务器。服务器将u3广播给每个客户端,并记录这一阶段的存活客户端为u3。

第3轮:客户端收到u3,检查客户端个数是否大于等于安全参数t,小于则终止协议。若大于等于t则对u3进行签名将签名发送给服务器。服务器收集到足够客户端的签名,并记录这一阶段的存活客户端为u4。

第4轮:服务器向客户端广播收集到的签名列表。客户端收到签名列表,验证签名列表大于等于安全参数t,否则中止协议。如果大于等于安全参数t则进行验签。验签出错则中止协议。验签结束后,对于u2和u3的差集中的客户端,即离线客户端,向服务器发送离线客户端的私钥su的碎片,对于u2中的客户端,即在线客户端,向服务器发送在线客户端bu的碎片。服务器将收集到每个客户端的bu碎片进行还原,将收集到的离线客户端的su碎片进行还原,然后将收到的所有混淆数据根据聚合公式进行聚合,并使用恢复su减去离线客户端的混淆项,最终消去所有混淆项获得真实的聚合结果。具体的方式可参看原论文的详细协议流程。

Google这篇论文的背景是移动端作为客户端提供数据参与联邦学习的训练,因此每个客户端都是有很大的可能性随时离线的。由于每个客户端的梯度都在聚合之前进行了混淆,如果有客户端在梯度混淆后还未发给服务器就离线了,会导致在聚合阶段,其他客户端梯度中的混淆项无法被消除,服务器拿到的梯度聚合值是错误的,影响最终训练的结果。

为解决这个问题,协议引入了阈值秘密分享技术在聚合前,将自己混淆项的一部分分享给其他客户端,这样服务器可以在客户端离线后从其他在线客户端恢复离线客户端的混淆项。但如果服务器可以随意恢复任意客户端的混淆项从而拿到梯度的真实值,这样即使解决了离线客户端的问题,也失去了隐私保护的特性。为了防止服务器随意还原客户端梯度的混淆项,协议中引入了另一个随机生成的混淆项,并同样将新引入的混淆项通过秘密分享技术分享给其他客户端。

每个客户端在第4轮被请求某个客户端的碎片时,如果该客户端离线则只提供su的碎片,如果该客户端在线则只提供bu的碎片,对于离线客户端中会影响聚合结果的混淆项可以通过该客户端的su恢复出来,而对于在线客户端发来梯度中的两个混淆项无法都还原出来。通过设置秘密分享时的阈值大小为安全参数之上,使得就算服务器向一批客户端获取某个客户端的su,向另一批客户端获取这一客户端的bu,客户端的总数量使得服务器也无法同时获取su和bu,保证客户端真实梯度的安全性。

阈值的安全参数根据不同的敌手模型如下图所示:

优化和扩展

该协议主要是面向移动端联邦学习中的梯度聚合,因此在联邦场景下可以将解决离线客户端问题的第二个混淆项bu,秘密分享和还原的阶段去除,可以省去大幅的开销,并且更适合于联邦场景下的隐私计算。

由于该协议中的混淆项,是客户端与其他所有参与协议的客户端一起协商计算产生的,对于参与协议客户端较多的情况下整个协议的性能会大幅下降,针对于这种情况,Kalikinkar Mandal等人提出了新的方案[2]进行改进,方案引入了正则图和邻居用户的概念,每个客户端之和在他邻居中的客户端协商秘钥产生掩码以解决该问题。

基于上述协议解决了MPC中的多方加减法运算,但其实借鉴上述协议思路,可以改造出适用于乘法和除法运算的协议,即项协议中的混淆公式和聚合公式中的加减依次替换为乘除就可以解决MPC中的多方乘除运算,但由于对多个混淆项交替进行了乘除运算,在最终聚合时会产生一定的精度损失,针对精度损失的问题则可以修改混淆公式,避免直接做除法运算,而在最终聚合时进行除法计算抵消混淆项。

参考文献

[1] 原论文:《Practical Secure Aggregation for Privacy-Preserving Machine Learning》

[2]优化论文:《NIKE-based Fast Privacy-preserving High-dimensional Data Aggregation for Mobile Devices》

作者简介

刘敬

数据网格实验室算法工程师

致力于研究MPC通用和专用算法