Practical Secure Aggregation for Privacy-Preserving Machine Learning
以下所有内容均为随问题的逐渐深入作为发展主线🤠 参见大佬此文
我的参考文件全部在这里
一、为什么是Federating Learning?
旧有的CHML方法直接传递用户隐私数据,这样远不如FL只传递训练后的模型梯度向量好
二、Secure Aggregation方案 (依赖 两个Mask)
(一)、Antiparticles(Public Mask)
简单来讲就是,两两client交换一个随机数,最后在server端正负相加抵消随机数
缺点:
- 通信复杂度较高
- 用户掉线不可行
- 无认证
1、DH+PRNG Expansion(随机数是标量,如何解决梯度向量维数大的问题?)
系统参数:g(生成元)p(模数 大素数)
用户参数:各用户保有一个秘密数,在这里对应 a、b 、c。用户分别计算:
使用时,用户将其发布到server端,由server分发到各个用户
这样两两用户之间就有了他们唯一的会话密钥。配合PRNG Expansion可以轻松的实现随机数的秘密交换。
这样做的好处是:
- 随机数生成器十分高效
- 更少的秘密因素-更简洁的秘密恢复
- 手机这样的移动端一般不支持端到端通信
2、k-out-of-n Threshold Secret Sharing(用户突然掉线怎么办?)
k-n门限秘密共享可通过多种方式实现,好处是可以从理论上保证安全。 任意少于k个用户的秘密份额都无法恢复出秘密S。
在这里每一个用户都运行一个k-n门限秘密共享,将自己的g^a作为秘密进行秘密共享,每个用户都得到了一份其他用户的秘密份额。
这样如图中所示,Bob突然掉线后,Alice和Carol可以通过自己手中Bob的秘密份额对Bob的g^b进行恢复,这样通过,server就可以求出public mask。
(二)、Individual Mask
但要是有用户迟了怎么办?server知道了Antiparticles,那么就可以恢复Bob的秘密,Bob信息就不再安全了。
每个用户还生成一个Individual Mask :Ia Ib Ic,对其进行秘密共享,每个用户都拿到了这样的一个秘密份额。当server发现无法进行安全聚合时,会向在线用户征集Public Mask Individual Mask的秘密份额。
通过秘密重构算法,我们可以恢复出public mask,individual mask值各为多少,这样我们就解决了用户迟到后所带来的隐私泄露风险。
三、算法具体实现
(一)、算法的核心部分包括
- DH密钥交换协议
- 基于多项式或中国剩余定理的k-n门限秘密共享算法
- hash算法(用作随机数生成)
- Mac算法(用作数字签名)
(二)、算法核心步骤
- 系统参数协商
- 密钥共享
- 梯度向量信息加密上传
- 梯度信息安全聚合解密
(三)、论文中具体步骤
1、Setup
- 所有参与训练的client,server都会收到安全参数,各个client诚实的用来生成DH的相关参数
- 参数和,,如就是模型梯度向量.
- 规定秘密分享协议中的数值和阈值。
- 每个客户端和服务器有一个经过身份验证的通道。
- 所有客户端从可信第三方针获得一个签名私钥和一个验证密钥用来绑定个人身份
PS:这里的安全参数应该就是安全素数,是生成元,应该就是DH密钥交换协议中的之类
2、AdvertiseKeys
-client
- 生成两对公私钥,并且对这两个公钥进行签名
- 将生成的两个公钥,连同签名结果即,通过经过验证的通道发送给服务器。
-server
- 收集至少条信息,并将这些clients集合称为,否则,中断.
- 广播和签名信息
PS:时刻检查client数量是否小于.使用CA认证和签名算法是为了防止伪造信息.
3、ShareKeys
-client
- 收到列表信息,对列表长度进行检验,小于或者签名算法验证不通过则中断,即 and .
- 使用随机数发生器,用作为随机数种子,生成随机数。
- 通过秘密共享算法生成和的分享内容(shares):
-server
- 收集至少个用户的加密文本信息,并将参加此次过程的用户集合称为
- 将加密文本列表加密传送给
PS:这里的应该就是public mask,就是individual mask
4、MaskInputCollection
-client
- 用户从服务器接收(并存储)密文列表(并推断集合)。如果列表大小小于t,则中止。
- 对于其他用户,计算并使用将该值扩展为随机向量,其中当时,当时(注意)。另外,定义。
- 计算用户自己的私有掩码向量。然后,计算屏蔽输入向量
- 如果上述任何操作(密钥协商,)失败,则中止。否则,将发送到服务器并移动到下一轮。
-server
从至少个用户收集(用表示这组用户)。向中的每个用户发送列表。
5、ConsistentCheck
-client
从服务器接收至少由个用户(包括其自身)组成的列表。如果小于,则中止。
- 发送到服务器。z’d
-server
从至少个用户处收集(用表示这组用户)。向中的每个用户发送集合。
6、Unmasking
-client
- 从服务器接收一个列表。验证,和信号版本表示所有(否则中止)。
- 对于中的每个其他用户,解密密文,并断言。
- 如果任何解密操作失败(尤其是密文未正确验证),则中止。
- 向服务器发送共享列表,其中包括用户的和用户的。
-server
- 收集至少个用户的响应(用表示这组用户)。
- 对于中的每个用户,重构并使用它(连同在AdvertiseKeys中接收的公钥)使用重新计算所有的。
- 对于每个用户,重构,然后使用重新计算。
- 计算并输出为。