google/differential-privacy

GitHub: google/differential-privacy

Google 开源的差分隐私库集合,提供多语言支持和端到端框架,用于在数据分析中添加可量化的隐私保护噪声。

Stars: 3291 | Forks: 411

# 差分隐私 本代码库包含用于在数据集上生成 ε- 和 (ε, δ)-差分隐私 (DP) 统计数据的库。它包含以下工具: * [Privacy on Beam](privacy-on-beam) 是一个基于 [Apache Beam](https://beam.apache.org/documentation/) 构建的 Go 端到端差分隐私框架。它的设计初衷是易于使用,即使是非专家也能轻松上手。 * [PipelineDP4j](pipelinedp4j) 是一个用于 JVM 语言(Java, Kotlin, Scala)的端到端差分隐私框架。它支持不同的数据处理框架,例如 [Apache Beam](https://beam.apache.org/documentation/) 和 [Apache Spark](https://spark.apache.org/)。它的设计初衷是易于使用,即使是非专家也能轻松上手。 * 三个“DP 构建块”库,分别是 [C++](cc)、[Go](go) 和 [Java](java)。这些库实现了基本的噪声添加原语和差分隐私聚合。Privacy on Beam 和 PipelineDP4j 使用了这些库。 * 一个[随机测试器](cc/testing),用于帮助捕获可能导致差分隐私特性失效的回归问题。 * 一个[差分隐私核算库](python/dp_accounting),用于追踪隐私预算。 * 一个[命令行界面](examples/zetasql),用于使用 [ZetaSQL](https://github.com/google/zetasql) 运行差分隐私 SQL 查询。 * [DP Auditorium](python/dp_auditorium) 是一个用于审计差分隐私保证的库。 除了上面列出的工具外,值得一提的是 [OpenMined](https://www.openmined.org/) 开发的两个相关项目,它们利用了我们的库: * [PipelineDP](https://pipelinedp.io/) 是一个用于 Python 的端到端差分隐私框架。它是 PipelineDP4j 的 Python 版本,是 Google 与 OpenMined 之间的合作成果。其源代码位于 [OpenMined 代码库](https://github.com/OpenMined/PipelineDP)中。 * [PyDP](https://github.com/OpenMined/PyDP) 是我们 C++ DP 构建块库的 Python 封装。 DP 构建块库、Privacy on Beam、PipelineDP4j 和 PipelineDP 适用于研究、实验或生产用例,而其他工具目前处于实验阶段,可能会发生变化。 ## 入门指南 如果您是差分隐私的新手,可能需要阅读 ["差分隐私的友好、非技术性介绍"](LINK_URL_17/>)。了解基础知识很有帮助,即使是在使用 Privacy on Beam 和 PipelineDP4j 等高级工具时也是如此。如果您计划使用更低级别的库(例如 DP 构建块库或其他实验性工具),则可能需要对差分隐私有更深入的了解。您可以查阅 [Joseph P. Near 和 Chiké Abuah 编写的程序员综合指南](https://programming-dp.com/cover.html) 或 [Damien Desfontains 博客上的其他博文](https://desfontain.es/privacy/archives.html)。 ### 探索工具 除 DP 构建块库外,所有工具的文档都位于其各自的目录中。例如,Privacy on Beam 在 [privacy-on-beam 目录](privacy-on-beam) 中有 README,[pipelinedp4j 目录](pipelinedp4j) 也是如此。 由于 DP 构建块库有许多共同点,因此其高级文档在下方列出。特定语言的文档可以在各自的目录中找到。 还有一个 ["examples"](LINK_URL_22/>) 目录,您可以在其中找到有关如何使用工具和库的示例。工具目录中的文档引用了这些示例。 ### 如何构建 要构建工具和库,请遵循其各自目录中的说明。构建过程假定您已经克隆了 Git 代码库。大多数工具和库使用 [Bazel](https://bazel.build/) 作为构建系统,请参阅下面的说明进行安装。 #### Bazel 要使用 Bazel,您需要安装 Bazelisk,这是一个管理 Bazel 版本并安装正确 Bazel 版本的工具。 [在 Bazelisk GitHub 页面上按照适用于您平台的说明进行操作](https://github.com/bazelbuild/bazelisk?tab=readme-ov-file#installation)。 ## DP 构建块库 本文档适用于所有 DP 构建块库。目前,这些库支持以下算法: 算法 | C++ | Go | Java :------------------------------- | :-------: | :-------: | :-------: Laplace 机制 | 支持 | 支持 | 支持 Gaussian 机制 | 支持 | 支持 | 支持 计数 | 支持 | 支持 | 支持 求和 | 支持 | 支持 | 支持 平均值 | 支持 | 支持 | 支持 方差 | 支持 | 支持 | 支持 分位数 | 支持 | 支持 | 支持 自动边界逼近 | 支持 | 计划中 | 支持 截断几何阈值 | 支持 | 支持 | 支持 Laplace 阈值 | 支持 | 支持 | 支持 Gaussian 阈值 | 支持 | 支持 | 支持 预阈值 | 支持 | 支持 | 支持 Laplace 机制和 Gaussian 机制的实现使用了 [secure noise generation]。这些机制可用于执行我们库中实现的算法未涵盖的计算。 ### DP 构建块库的注意事项 差分隐私要求对每个用户可以对单个聚合做出的最大贡献数量进行某种限制。DP 构建块库不执行此类限制:它们的实现假定每个用户仅向每个分区贡献固定数量的行。该数量可由用户配置。该库既不验证也不强制执行此限制;调用者有责任预处理数据以强制执行此操作。 我们选择不在 DP 构建块级别实现此步骤,因为它需要对数据进行一些 *全局* 操作:按用户分组,并在将每个用户的贡献传递给 DP 构建块聚合器之前对其进行聚合或子采样。考虑到可扩展性限制,此预处理必须由基础结构的更高级别部分完成,通常是分布式数据处理框架:例如,Privacy on Beam 依赖 Apache Beam 执行此操作,而 PipelineDP4j 依赖 Apache Beam 或 Apache Spark。因此,建议尽可能使用端到端工具:用于 Go 的 Privacy on Beam,用于 Kotlin/Scala/Java 的 PipelineDP4j 和用于 Python 的 PipelineDP。 有关我们构建可扩展端到端差分隐私框架的方法的更多详细信息,我们建议阅读: 1. [数据管道中的差分隐私计算参考文档](https://github.com/google/differential-privacy/blob/main/common_docs/Differential_Privacy_Computations_In_Data_Pipelines.pdf),其中描述了如何使用任何数据管道框架(例如 Apache Beam 或 Apache Spark)构建此类系统。 2. 我们[关于差分隐私 SQL 的论文](https://arxiv.org/abs/1909.01917),其中描述了这样一个系统。尽管 Privacy on Beam 和 PipelineDP4j 的接口不同,但它在概念上使用了与本文所述相同的框架。 ### 已知问题 我们的浮点实现受限于 [Casacuberta 等人发表的“差分隐私库中普遍存在的敏感度低估及其修复方法”](https://arxiv.org/abs/2207.10635) 中描述的漏洞(特别是舍入、重复舍入和重排序攻击)。当攻击者可以控制数据集的某些内容及其顺序时,这些漏洞尤其令人担忧。我们的整数实现不受论文中描述的漏洞的影响(但请注意,Java 没有整数实现)。 请参阅我们的[攻击模型](common_docs/attack_model.md)以了解有关如何以安全方式使用我们库的更多信息。 ## 联系我们 ### 加入我们的 Slack 社区 与 Google 差分隐私团队和其他 DP 爱好者联系的最佳方式是加入我们的 Slack 社区。这是提问、获得支持、讨论新功能以及了解与我们开源 DP 库相关的所有最新信息的理想场所。 点击 [此处](https://join.slack.com/t/dp-open-source/shared_invite/zt-35hw483tz-nS5YOtGjxCHk3Ek7WiXvlg) 加入! 进入后,请查看这些关键频道: * #introductions:打个招呼,告诉我们您对差分隐私的兴趣! * #support:获取有关我们 DP 库的帮助,提出问题并排除故障。 * #development:供贡献者和开发者讨论代码、pull request 和项目路线图。 * #general:官方公告、项目新闻和更广泛的社区更新。
加入我们的 Slack

### Google 网上论坛 如果您不使用 Slack,可以加入我们的[公开讨论组](https://groups.google.com/g/dp-open-source-users)。 ### 电子邮件 发送电子邮件至 dp-open-source@google.com,私下讨论您的特定用例以及我们如何更好地为您提供帮助。 请避免分享任何个人身份信息。如果您需要删除以前的消息,请联系我们。 ## 支持 我们正在积极维护和改进这些库。我们欢迎对此项目做出贡献。对于 pull request,请查看我们的[贡献指南](CONTRIBUTING.md),并考虑加入 [我们的 Slack 工作区](https://join.slack.com/t/dp-open-source/shared_invite/zt-35hw483tz-nS5YOtGjxCHk3Ek7WiXvlg) 中的 #development 频道。 我们将回复在此项目中提交的问题。如果我们计划停止主动维护和问题回复,我们将提前至少 3 个月在此处发出通知。 ## 许可证 [Apache License 2.0](LICENSE) ## 支持免责声明 这不是一个官方支持的 Google 产品。 ## 相关项目 - [OpenDP](https://opendp.org),围绕敏感私有数据分析工具的社区工作。 - [JAX Privacy](https://github.com/google-deepmind/jax_privacy),一个用于以差分隐私训练机器学习模型的库。 - [TensorFlow Privacy](https://github.com/tensorflow/privacy),一个先于 JAX Privacy 的 TensorFlow 库。
标签:Apache Beam, Apache Spark, C++, CISA项目, EVTX分析, EVTX分析, Google安全, Go语言, JS文件枚举, JVM, Kotlin, Python, Scala, ZetaSQL, 噪声添加, 审计, 密钥泄露防护, 差分隐私, 开源库, 提示词模板, 搜索引擎爬虫, 数据匿名化, 数据合规, 数据擦除, 数据脱敏, 无后门, 日志审计, 机器学习安全, 程序破解, 统计分析, 网络安全, 联邦学习, 逆向工具, 随机测试, 隐私保护, 隐私计算, 隐私预算