google的横向联邦聚合论文解读

论文:Practical Secure Aggregation for Privacy-Preserving Machine Learning

背景介绍

在使用机器学习训练模型的时候,我们经常会碰到一些敏感数据。这些数据的价值高,但由于其敏感性让我们无法使用这些数据。然而随着近些年技术的发展,联邦学习和多方安全计算的概念因运而生。通过这些技术,我们可以在保护用户隐私的前提下进行更丰富的数据探索,在不获取用户隐私数据的前提下将这些数据纳入到模型之中,从而实现更好的为用户提供优质服务的目的。

针对如何联合各用户在隐私保护的前提下建模的方案,我们以google发表的论文为基准,结合隐私保护技术实现了名为安全聚合的方案来保护我们的数据安全。

目的

实现模型参数的安全聚合

优点

  • 解决了在隐私保护下的数据聚合问题
  • 可以支持任意不超过阈值数的参与方在任意计算节点掉线

主要解决以下信任为题:

  1. 参与方与参与方之间不能互相通信(因为每次用于的参与方均为随机抽取)
  2. 签名的验证是为了让参与方在不能互相通讯的前提下,仍然能相信其余参与方是真实存在(不是中心节点虚拟生成)且数据没有被篡改。所以,签名与验签的操作均仅发生在参与方这边。
  3. 每个参与方不能模拟其他参与方的行为(把自己伪装成其他人)。这要求参与方只能拥有自己的签名秘钥和所有参与方的签名公钥,来保证只有自己能签名。其余参与方使用相对应的公钥进行验签来证明参与方的真实性。
  4. 可信第三方必须存在,这是国家监管要求必定存在的。
  5. 尽可能减少中心节点获取的信息内容。
  6. 为了解决掉线的问题,秘密分享需要实施,但是秘密还原的时刻需要进行严格限定。具体来说就是,只有当一个参与方掉线且没有上传数据的时候,他的随机数秘密才能还原。这保证了即使还原秘密,也没有泄露数据,因为还原的是随机数的秘密。
  7. 验证签名的操作是所有参与方共享的操作。这是为了所有人都能验证身份的正确性。后续的身份验证是通过对称加密的方式实现的。这个对称加密的加密钥匙只有参与该加密的两个参与方之间可以知道(因为密钥协商里面包含了一方的私钥信息)。该信息之所以保密严格是因为其明文信息包含了秘密还原时候的涉及这两方的随机数的信息。
  8. 中心节点的作用仅限于代替各个参与方进行信息通讯、最终的混淆后的数据加总和秘密还原。

相关涉及技术

秘密分享

这里设计的秘密分享主要以诚实但有好奇心的shamir协议进行分享。
其特点在于当总参与方个数为 n 的时候,提前确定好阈值 t 。可以实现只要 任意 t 个参与方同意对秘密进行还原的时候即可还原秘密。任意少于 t 个参与方均不能实现秘密的还原。

密钥协商(Key Agreement)

该算法习惯简称为 K.A,实现方案有 DH 算法等

包含三个内容 KA.param,KA.gen,KA.agree

  • 根据随机数 k 生成参数 pp 的算法 KA.param
    即:KA.param(k) ——> pp  (G',g,q,H)
  • 根据参数 pp 生成 公钥和私钥的算法 KA.gen
    即:KA.gen(pp) ——> (s_u^{SK} ,s_u^{PK})即:(x,g^x)
  • 根据公钥和私钥得到协商后的密文 KS.agree(x_u, g^{x_v}) \to s_{u,v}$ $s_{u,v} = H((g^{x_v})^{x_u})其中H()代表哈希函数

身份验证加密(对称加密)

  • AE.enc
    代表加密
  • AE.dec
    代表
    AE.dec(c, AE.enc(c,x)) = x
    c 为密钥
  • 该加密方案需要具有两个性质
    • IND-CPA(选择明文攻击下的不可区分性)
    • IND-CTXT(密文完整下的不可区分性)

伪随机数生成器

这里使用的为 PRG 算法通过设定随机种子生成伪随机数。
保证在随机种子一致的时候生成的伪随机数是一致的。

签名验证

  • 生成公私钥 SIG.gen
    SIG.gen(k) \to (d^{PK}, d^{SK})
  • 加签名
    SIG.sign(d^{SK},m) \to \sigma
  • 验证签名
    SIG.ver(d^{PK},m,\sigma) \to \{0,1\}

通过验证内容是否一致来判断签名是否正确

实现要求

  • 可信第三方服务器,须具有以下功能
    • 安全的信息交互通道
    • 为所有参与方提供注册渠道,并可以进行身份签名验证
    • 保证每个参与方在可以通过签名验证其余参与方的真实性同时不能模拟其他参与方(唯一标识符可以解决)

安全聚合实现步骤

 

整体步骤要注意以下几点:

  • 计算的核心内容是(发生在Round2)
    \pmb{y_u} \gets \pmb{x_u} + \pmb{p_u} + \sum_{v \in u_2}\pmb{p_{u,v}}
    其中 向量\pmb{x_u}为目标聚合向量,其余两项混为了加总时候对\pmb{x_u}​进行混淆,保证数据隐私安全
    向量为 \pmb{p_u}b_u​ 为随机种子 通过 PRG算法生成的伪随机数向量
    向量\pmb{p_{u,v}}是疫通过密钥协商获取到的 s_{u,v}​为种子通过下式得到的
    \pmb{p_{u,v}} = \Delta_{u,v} * PRG(s_{u,v})

     \Delta_{u,v} = \left\{ \begin{aligned} -1 && u < v \\ 0 && u = v\\ 1 && u > v\\ \end{aligned} \right.

  • 身份验证模块(每次完整的一个聚合中包含两次)

    • 第一次(Round0Round0加签,Round1Round1验签)
      • 加签名
        \sigma_u \gets SIG.sign(d_u^{SK}, c_u^{PK}||s_u^{PK})
      • 验证签名
        SIG.ver(d_v^{PK},c_u^{PK}||s_u^{PK}, \sigma_u)=1
    • 第二次(Round3Round3加签, Round4Round4验签)
      • 加签名
        \sigma'_u \gets SIG.sign(d_u^{SK},u_3)
      • 验证签名
        SIG.ver(d_v^{PK}, u_3, \sigma'_v) = 1
  • 秘密协商+秘密分享
    目的在于对于后续掉线的用户的随机数进行还原,保证聚合结果的正确性

    • 秘密分享+加密阶段(Round2Round2)

    • 秘密还原+解密阶段(Round4Round4)

  • 通信与流程校验

    • 每轮通讯或是广播是有超时时间的,达到阈值设定的时间之后进行判定
    • 存在以下情形直接终止迭代
      • 参与用户数不足
      • 身份验证不通过
      • 代码报错或执行失败

    以上逻辑每个round均会进行校验

具体流程图请查看链:

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值