《Secure Analytics-Federated Learning and Secure Aggregation》论文阅读

news2024/11/16 3:42:53
背景

机器学习模型对数据的分析具有很大的优势,很多敏感数据分布在用户各自的终端。若大规模收集用户的敏感数据具有泄露的风险。
对于安全分析的一般背景就是认为有n方有敏感数据,并且不愿意分享他们的数据,但可以分享聚合计算后的结果。
联邦学习是一种训练数据在多方训练,然后聚合结果得到最终的中心化模型。其中的关键就是多方结果的安全聚合。

风险模型

有很多用户,假设用户都是诚实但好奇的,即会遵守协议规则,但会通过拼凑数据获取敏感信息。换句话说就是恶意的,很可能执行不好的行为。

安全聚合
问题的定义、目标和假设

风险模型假设用户和中心服务器都是诚实且好奇的。如果用户是恶意的,他们有能力在不被监测的情况下影响聚合结果。
安全聚合协议:

  1. 操作高维向量;
  2. 不管计算中涉及到的用户子集,通信是高效的;
  3. 用户dropout是robust;
  4. 足够安全
第一次尝试:一次填充掩码

对于所有的用户,通过每个用户对 u , v u,v uv构建一个secret,具体逻辑:对所有用户进行排序,当用户 u < v u < v u<v构建一个 + s u , v +s_{u,v} +su,v,相反则构建一个 − s v , u -s_{v,u} sv,u,如下图:
请添加图片描述
当聚合的时候
∑ i = 1 3 = x 1 + s 1 , 2 + s 1 , 3 + x 2 − s 1 , 2 + s 2 , 3 + x 3 − s 1 , 3 − s 2 , 3 \sum_{i=1}^3=x_1+s_{1,2}+s_{1,3}+x_2-s_{1,2}+s_{2,3}+x_3-s_{1,3}-s_{2,3} i=13=x1+s1,2+s1,3+x2s1,2+s2,3+x3s1,3s2,3

缺点:

  1. 二次通信,每个用户对 u , v u, v u,v都需要产生他们的秘钥 s u , v s_{u,v} su,v
  2. 如果任何一个用户drop out,对于 ∑ ∀ i y i \sum_{\forall i}y_i iyi都会变成垃圾数据,从而本次不能聚合。
利用Diffie-Hellman秘钥交换改进二次通信

所有的用户商定一个大素数 p p p和一个基本数 g g g。用户将自己的公钥( g a u m o d    p g^{a_{u}} \mod p gaumodp,其中 a u a_u au是用户的秘钥)发送给server,然后server广播一个公钥给其他的用户,其他用户使用自己的秘钥和该公钥进行计算,如:
u 1 : ( g a 2 ) a 1 m o d p = g a 1 a 2 m o d p = s 1 , 2 u_1:(g^{a_2})^{a_1}\quad mod \quad p = g^{a_1a_2}\quad mod \quad p=s_{1,2} u1(ga2)a1modp=ga1a2modp=s1,2
u 2 : ( g a 1 ) a 2 m o d p = g a 1 a 2 m o d p = s 1 , 2 u_2:(g^{a_1})^{a_2}\quad mod \quad p = g^{a_1a_2}\quad mod \quad p=s_{1,2} u2(ga1)a2modp=ga1a2modp=s1,2
Diffie-Hellman秘钥交换比上面的方法更简单、更高效。

第二次尝试:可恢复的一次性填充掩码

同上述方法类似,用户将他们加密后的向量 y u y_u yu发给server,然后server询问其他用户是否包含drop out的用户,是的话则取消他们的秘密绑定。如下图:请添加图片描述

该方法的缺点:

  1. 在recovery阶段发生额外的用户drop out,这将要求新drop out的用户也需要recovery,在大量用户的情况下,轮询次数将增加。
  2. 通信延迟导致server以为用户被drop out。因此,会想其他用户recovery秘钥,这导致server在接收到该用户的secret时,解密该用户的 x u x_u xu。如下图
    请添加图片描述
    因此,如果server是恶意的,则可以通过此方法获取用户的inputs

Shamir秘密分享
允许一个用户将秘密 s s s分享成 n n n个shares,然后任意 t t t个shares都能重构出秘密 s s s,而任意 t − 1 t-1 t1个shares都不能重构出秘密 s s s

第三次尝试:处理Dropped用户

为了克服在通信轮次之间,新dropped用户增加recovery阶段,用户Shamir秘密分享的阈值。每个用户发送他们DH秘钥的shares给其他用户,只要符合阈值条件,允许pairwise secrets被recovered,即使是recovery期间新dropped用户。协议可以总结如下:

  1. 每个用户 u u u将他的DH秘钥 a u a_u au分享成n-1个部分 a u 1 , a u 2 , . . , a u ( n − 1 ) a_{u1},a_{u2},..,a_{u(n-1)} au1,au2,..,au(n1),并发送给其他 n − 1 n-1 n1个用户。
  2. server接收来自在线用户的 y u y_u yu(记为: U o n l i n e , r o u n d 1 U_{online,round 1} Uonline,round1)。
  3. server计算dropped用户集,表示为 U d r o p p e d , r o u n d 1 U_{dropped,round 1} Udropped,round1
  4. server向 U o n l i n e , r o u n d 1 U_{online,round 1} Uonline,round1询问 U d r o p p e d , r o u n d 1 U_{dropped,round 1} Udropped,round1的shares。在第二轮通信中假设至少还有t个用户在线
  5. server对 U d r o p p e d , r o u n d 1 U_{dropped,round 1} Udropped,round1的秘钥进行recover,并在最后聚合时,remove掉他们。

该方法依然没有解决恶意server因为通信延迟问题获取用户的数据问题。

最后一次尝试:双重掩码

双重掩码的目标就是为了防止用户数据的泄露,即使当server重构出用户的masks。首先,每个用户产生一个额外的随机秘钥 a u a_u au,并且分布他的shares给其他的用户。生成 y u y_u yu时,添加第二重mask:
y u = x u + a u + ∑ u < v s u , v − ∑ u > v s v , u m o d e R y_u = x_u+a_u+\sum_{u<v}s_{u,v}-\sum_{u>v}s_{v,u}\quad mode \quad R yu=xu+au+u<vsu,vu>vsv,umodeR
在recovery轮次中,对于每个用户,server必须作出精确的选择。从每个在线的成员 v v v中,请求 u u u s u , v s_{u,v} su,v或者 a u a_u au。对于同一个用户,一个诚实的 v v v通过这两种shares不能还原数据,server需要从所有dropped的用户中聚合至少t个 s u , v s_{u,v} su,v的shares或者所有在线用户中t个 a u a_u au的shares。之后,server便可以减去剩余的masks还原数据。
该方法整个过程中的计算和通信数量级还是 n 2 n_2 n2,n表示参与计算的用户数。一个新的问题:当 t < n 2 t<\frac{n}{2} t<2n时,server可以分别询问用户的 s u , v s_{u,v} su,v a u a_u au,来解密用户的数据

参考文献:
[1] K. Bonawitz. ”Practical Secure Aggregation for Privacy-Preserving Machine Learning”. 2017.
[2] J. Konecny. ”Federated Learning: Strategies for Improving Communication Efficiency”. 2017.
[3] H. B. McMahan. ”Communication-Efficient Learning of Deep Networks from Decentralized Data”. 2016.
[4] A. Shamir. ”How to Share a Secret”. 1979.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1060676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go语言面经进阶10问

1.Golang可变参数 函数方法的参数&#xff0c;可以是任意多个&#xff0c;这种我们称之为可以变参数&#xff0c;比如我们常用的fmt.Println()这类函数&#xff0c;可以接收一个可变的参数。可以变参数&#xff0c;可以是任意多个。我们自己也可以定义可以变参数&#xff0c;可…

【Leetcode】二分查找合集

二分查找合集 二分模板leetcode 704.二分查找题目思路代码 Leetcode 34.在排序数组中查找元素的第⼀个和最后⼀个位置题目思路代码 35. 搜索插入位置题目思路代码 69.X的平方根题目思路代码 852. 山脉数组的峰顶索引题目代码 162.寻找峰值题目思路代码 153. 寻找旋转排序数组中…

CUDA C编程权威指南:1-基于CUDA的异构并行计算

什么是CUDA&#xff1f;CUDA&#xff08;Compute Unified Device Architecture,统一计算设备架构&#xff09;是NVIDIA&#xff08;英伟达&#xff09;提出的并行计算架构&#xff0c;结合了CPU和GPU的优点&#xff0c;主要用来处理密集型及并行计算。什么是异构计算&#xff1…

基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度(matlab代码)

目录 1 主要内容 系统结构图 P2G-CCS 耦合模型 其他算例对比 2 部分代码 3 下载链接 1 主要内容 该程序复现《基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度》模型&#xff0c;以碳交易和碳封存成本、燃煤机组启停和煤耗成本、弃风成本、购气成本之和为目标…

嵌入式系统中C++内存管理基本方法

引言 说到 C 的内存管理&#xff0c;我们可能会想到栈空间的本地变量、堆上通过 new 动态分配的变量以及全局命名空间的变量等&#xff0c;这些变量的分配位置都是由系统来控制管理的&#xff0c;而调用者只需要考虑变量的生命周期相关内容即可&#xff0c;而无需关心变量的具…

如何在 Windows 上安装 ONLYOFFICE 协作空间社区版

ONLYOFFICE 协作空间是一个在线协作平台&#xff0c;帮助您更好地与客户、业务合作伙伴、承包商及第三方进行文档协作。今天我们来介绍一下&#xff0c;如何在 Windows 上安装协作空间的自托管版。 ONLYOFFICE 协作空间主要功能 使用 ONLYOFFICE 协作空间&#xff0c;您可以&a…

【彩色图像处理GUI】各种颜色映射、重新调整大小和更改分辨率、伽玛校正,对比度,反转颜色(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【洛谷 P1216】[USACO1.5] [IOI1994]数字三角形 Number Triangles 题解(动态规划)

[USACO1.5] [IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中&#xff0c;从 7 → 3 → 8 →…

Linux系统编程系列之POSIX信号量

一、什么是POSIX信号量 POSIX信号量是一种用于线程之间同步和互斥的机制&#xff0c;它是由POSIX标准定义的一种IPC&#xff08;进程间通信&#xff09;机制&#xff0c;可以用于进程间或线程间的同步操作。POSIX信号量分成两种&#xff0c;POSIX匿名信号量和POSIX具体信号量。…

S-Clustr(影子集群)可控制嵌入式设备和个人电脑的僵尸网络工具

公告 项目地址:https://github.com/MartinxMax/S-Clustr/tree/V1.0.0 1.成功扩展3类嵌入式设备,组建庞大的"僵尸网络" |——C51[开发中] |——Arduino |——合宙AIR780e[开发中] 2.攻击者端与服务端之间通讯过程全程加密,防溯源分析 3.Generate一键自动生成Arduino…

deterministic=True requires SQLite 3.8.3 or higher

文章目录 出错来源解决方法 出错来源 在我的centos服务器执行Django网站 python manage.py runserver报错&#xff1a; deterministicTrue requires SQLite 3.8.3 or higher解决方法 pip3 install pysqlite3 pip3 install pysqlite3-binary找到下载的模块路径&#xff0c;修…

十天学完基础数据结构-第二天(数据结构简介)

什么是数据结构&#xff1f; 在计算机科学中&#xff0c;数据结构是一种组织和存储数据的方式。它定义了数据的布局&#xff0c;以及对这些数据执行的操作。你可以把数据结构看作是计算机内存中的特定组织方式&#xff0c;就像图书馆中书籍的排列一样。 数据结构可以是各种形…

STM32复习笔记(一):软件配置工程创建

目录 Preface&#xff1a; Hardware-Configuration & Software-Environment&#xff1a; &#xff08;一&#xff09;新建项目工程 &#xff08;二&#xff09;工程配置 &#xff08;三&#xff09;配置外设 &#xff08;四&#xff09;项目管理 &#xff08;五&…

qml保姆级教程二:qml基本数据类型

&#x1f482; 个人主页:pp不会算法v &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 QML系列教程 QML教程一&#xff1a;布局组件 文章目录 boolrealdouble…

Jmeter如何做压力测试

1.哪些业务需要做压力测试&#xff1f; 比较常用的业务场景或功能模块 单业务场景或多业务场景 项目要求做的业务场景 2.压力测试的并发数是多少&#xff1f; 有预期的数值&#xff1f;100 200 300一次性达到还是逐次增加&#xff1f;参照上次性能测试的结果 3.关注哪些参…

【代码随想录】LC 704. 二分查找

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 三、知识风暴 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 704. 二分查找 2、题目描述 二…

cmake安装

Windows下安装Cmake教程 注意下载二进制版本的&#xff1a;

将3D MAX设计模型导入NX1988

将3D MAX设计模型导入NX1988 概述导入流程导出喜欢的模型对模型进行修改模型贴图 概述 一般家装设计都不会用NX之类的产品设计软件&#xff0c;也没有通用的文件格式可以互相转换&#xff0c;本文的目的是将从网上下载的一些设计较好的3D MAX模型导入到NX软件中借用&#xff0…

【11】c++设计模式——>单例模式

单例模式是什么 在一个项目中&#xff0c;全局范围内&#xff0c;某个类的实例有且仅有一个&#xff08;只能new一次&#xff09;&#xff0c;通过这个唯一的实例向其他模块提供数据的全局访问&#xff0c;这种模式就叫单例模式。单例模式的典型应用就是任务队列。 为什么要使…

Java新特性中的Preview功能如何运行和调试

在每个Java新版本发布的特性中&#xff0c;都会包含一些Preview&#xff08;预览&#xff09;功能&#xff0c;这些功能主要用来给开发者体验并收集建议。所以&#xff0c;Preview阶段的功能并不是默认开启的。 如果想体验某个Java版本中的Preview功能&#xff0c;您还需要做一…