breaching
统一平台复现联邦学习梯度逆向攻击,支持视觉/文本双模态,提供27个Jupyter Notebook覆
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
统一平台复现联邦学习梯度逆向攻击,支持视觉/文本双模态,提供27个Jupyter Notebook覆
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
2022年,马里兰大学的博士生Emma在参与一项多家医院联合的医学影像分类模型训练项目。她所在医院的患者影像数据从未离开过本地服务器——至少她以为是这样。直到她和同事们发现,一款名为"Breaching"的开源工具,可以在仅知道梯度更新的情况下,从模型参数中精确还原出某位患者的胸部X光片。
这不是科幻,而是真实发表在顶会上的研究。
Breaching 正是这样一个框架:它将近年来针对联邦学习(Federated Learning)的隐私攻击系统化、工程化,让研究者和安全工程师能够在一个统一平台上复现、对比和改进各类梯度逆向攻击。
联邦学习自2016年由Google提出以来,一直被视为解决"数据孤岛"问题的明星方案。核心逻辑很简单:数据不动,模型动。各方在本地训练模型,只将梯度或参数更新上传到中央服务器,由服务器聚合后下发新模型参数。各方始终掌握着自己的原始数据,隐私似乎得到了保障。
然而这层保护远比想象中脆弱。
2019年,Zhu等人在NeurIPS上发表了开创性的"深度泄漏梯度"(Deep Leakage from Gradients,DLG)工作,证明了在某些条件下,仅凭梯度更新就能精确还原训练数据。这一发现如同打开了潘多拉魔盒:后续研究不断扩展攻击面——标签推理、模型逆向、甚至直接获取其他参与方的原始数据。
Breaching框架的作者们在论文中指出,这些攻击分散在不同论文、不同代码仓库中,实验设置五花八门,缺乏统一的评估基准。研究者很难判断某项防御是否真的有效,也很难比较不同攻击在真实场景下的表现差异。这正是Breaching诞生的直接原因。
Breaching的架构设计极为清晰,分为两大核心子系统:breaching.attacks(攻击模块)和breaching.cases(场景模块)。
攻击模块包含两大类实现路径:
优化类攻击(Optimization-based Attacks):以DLG及其后续改进为代表,将数据恢复建模为一个优化问题。攻击者从随机初始化开始,通过迭代优化使得重建数据在前向传播后产生的梯度尽量接近截获到的真实梯度。这类攻击的代表包括:
分析类攻击(Analytic Attacks):利用梯度与输入之间的数学关系直接计算恢复数据,无需迭代优化,速度极快但适用范围受限。代表工作包括:
所有攻击都继承自base_attack._BaseAttacker接口,统一了reconstruct方法的签名:输入截获到的梯度payloads和共享数据shared_data,返回重建的输入数据和标签。这种设计使得新增攻击变得极为简单——只需继承基类实现重构逻辑,无需了解任何场景细节。
场景模块定义了联邦学习系统的各个组件:
场景和攻击的解耦是Breaching最重要的设计决定:实现新攻击不需要了解任何场景细节,实现新场景也不需要改动攻击代码。
Breaching的依赖管理颇为务实。核心依赖只有PyTorch、SciPy、Hydra-core和LPIPS,其他均为按需安装的可选依赖:
# 必需
pytorch, torchvision, scipy
hydra-core, lpips
# 视觉攻击可选
torchvision(已在必需中)
# 语言攻击可选
transformers, datasets
# TensorFlow联邦数据集可选
tensorflow, tensorflow-federated
这种"懒加载"策略避免了一次性安装全部依赖的负担。安装方式也有两种选择:
pip install breaching:安装为Python包,适合集成到其他项目git clone:克隆完整仓库,包含所有notebook示例和测试脚本配置系统基于Hydra,所有可调参数(攻击超参数、模型选择、数据集划分方式、服务器威胁模型等)都通过YAML配置文件管理,通过命令行覆盖特定参数即可切换设置:
from breaching.cases.construct_case import construct_case
from breaching.attacks.prepare_attack import prepare_attack
cfg_case = breaching.get_case_config(case="1_single_imagenet")
cfg_attack = breaching.get_attack_config(attack="invertinggradients")
user, server, model, loss = construct_case(cfg_case)
attacker = prepare_attack(model, loss, cfg_attack)
shared_user_data, payloads, true_user_data = server.run_protocol(user)
reconstructed_user_data, stats = attacker.reconstruct(payloads, shared_user_data)
Breaching在硬件需求上有一个关键分界线:分析类攻击可以在CPU上运行(如Decepticons的攻击核心是CPU上的分配问题),但优化类攻击强烈依赖GPU。
作者在README中明确建议:优化类攻击在单块GTX 2080上运行完整基准测试需要约1天时间,而分析类攻击则不到30分钟。对于需要运行大批量ImageNet实验的研究者来说,高端GPU几乎是必选项。
CPU用户也并非完全无法使用——分析类攻击提供了足够的研究价值,但优化类攻击的完整威力只能在GPU上释放。
Breaching不只是一个"攻击合集",它实际上填补了联邦学习安全研究的方法论空白。
对研究者而言,Breaching提供了统一的实验环境和评估指标体系。27个Jupyter Notebook覆盖了从最基础的ConvNet on CIFAR-10到大规模ResNet50 on ImageNet的全谱系场景,研究者可以在相同条件下直接对比不同攻击的效果差异,而不是在不同论文的不同设置下"模糊比较"。
对工程师而言,Breaching是红队演练的实用工具。在部署联邦学习系统之前,系统评估者可以用它来验证隐私保护措施的实际效果——而不是仅凭理论上的差分隐私保障就认为高枕无忧。
对安全社区而言,Breaching揭示了一个令人不安的事实:联邦学习的隐私承诺远非无懈可击。从最初的梯度反演到恶意模型注入,攻击面在不断扩大,而Breaching让这个不断演进的过程变得透明和可复现。
Breaching本质上是学术研究工具,而非生产级渗透测试平台。框架中的攻击在真实联邦学习系统上可能受到通信压缩、差分隐私噪声、梯度扰动等防御措施的干扰。框架本身也明确表示不包含防御实现——防御工作应由专门的框架(如Princeton的GradAttack)来处理。
此外,重建数据的质量评估指标(如PSNR、SSIM、CW-SSIM)只能部分反映隐私泄露的实际严重程度。一张语义正确但像素模糊的重建图像,是否比精确复现但语义错误的数据更危险?这仍然是学界争论的问题。
| 项目 | 说明 |
|---|---|
| 编程语言 | Python |
| 深度学习框架 | PyTorch |
| 配置管理 | Hydra + OmegaConf |
| 支持攻击类型 | 优化类、分析类、递归类、元攻击 |
| 支持模态 | 图像(ImageNet、CIFAR)/ 文本(Wikitext、Shakespeare) |
| 主要模型 | ConvNet、ResNet、ViT、BERT、GPT-2 |
| 许可协议 | MIT |
| 主要贡献者 | Jonas Geiping、Liam Fowl、Yuxin Wen(马里兰大学) |