ObliviousAI/dp-recorder

GitHub: ObliviousAI/dp-recorder

这是一个用于对差分隐私算法进行灰盒审计的 Python 框架,通过记录和重放执行轨迹来检测实现错误及敏感数据泄漏。

Stars: 12 | Forks: 0

# dp-recorder **dp-recorder** 是一个用于对差分隐私(DP)库进行**灰盒审计**的 Python 库。它实现了 **Re:cord-play** 框架,旨在检测 DP 算法中的实现错误、敏感度计算错误以及依赖于数据的控制流泄漏。 与传统的黑盒审计不同,`dp-recorder` 会检查算法的内部状态。它可以在单次执行对中确定性地标记隐私违规,或者对特定组件执行有针对性的统计审计。 ## 🚀 主要功能 * **灰盒检查**:对代码进行插桩,以检查隐私机制(例如 Laplace、Gaussian)的内部输入,而不仅仅是最终输出。 * **Re:cord-play(确定性测试)**:捕获数据集 $D$ 上的执行轨迹,并在邻居数据集 $D'$ 上重放它们。它“冻结”机制输出,以验证所有周围的控制流保持**不变**(与数据无关)。 * **敏感度验证**:自动验证隐私原语输入之间的距离不超过声明的敏感度($\Delta_{actual} \leq \Delta_{declared}$)。 * **Re:cord-play-sample(统计审计)**:对于不受信任或自定义的原语,该工具隔离组件并运行有针对性的分布审计(估计 PLD),而无需重新运行繁重的预处理逻辑。 * **混合组合**:无缝混合受信任的原语(分析 PLD)和不受信任的组件(经验 PLD),以获得端到端的隐私保证。 * **CI/CD 就绪**:设计为在标准开发流程中作为快速单元测试运行。 ## 📦 安装 此项目使用 [Poetry](https://python-poetry.org/) 进行管理。 ``` git clone https://github.com/oblivious-repos/dp-recorder.git cd dp-recorder poetry install ``` ### 🧠 工作原理 该框架基于这样一个见解:DP 算法将**依赖于数据**的调用(隐私机制)与**独立于数据**的逻辑(预处理、控制流)交织在一起。 1. **阶段 1 (Record/记录)**:在数据集 $D$ 上运行算法。记录 DP 原语的所有输入/输出,并记录 PRNG 状态。 2. **阶段 2 (Replay/重放)**:在邻居数据集 $D'$ 上运行算法。 * **冻结输出**:强制 DP 原语返回与阶段 1 *完全相同的输出*。 * **检查不变性**:由于机制输出是相同的,程序状态不应出现分歧。如果出现分歧,说明**私有数据已泄漏**到控制流中。 * **检查敏感度**:测量输入 $q(D)$ 和 $q(D')$ 之间的经验距离。如果它超过了开发者声明的敏感度,则标记为错误。 ### 🛠 用法 **1. 插桩你的原语** 使用 `@audit_spec` 标记添加噪声的函数。如果你想验证特定变量(如超参数或数据形状)不依赖于私有数据,请使用 `ensure_equality`。 ``` from dp_recorder.auditing.audit_primitives import audit_spec, ensure_equality from dp_recorder.auditing.metrics import l1_distance # 一个可信原语(我们验证输入,但信任噪声生成) @audit_spec( kind="laplace_mechanism", input_arg="data", sensitivity_arg="sensitivity", metric_fn=l1_distance ) def laplace_mechanism(data, sensitivity, epsilon): # Standard implementation... return data + np.random.laplace(0, sensitivity / epsilon, size=data.shape) # 您的复杂 DP 算法 def dp_algorithm(private_data, epsilon): # 1. Pre-processing # We must ensure params derived here don't leak privacy clipping_bound = 10.0 # 2. Invariance Check # Explicitly assert that this variable must be identical across neighbors ensure_equality(clipping_bound, name="clipping_bound") # 3. Mechanism Call clipped_data = np.clip(private_data, 0, clipping_bound) return laplace_mechanism(data=clipped_data, sensitivity=clipping_bound, epsilon=epsilon) ``` ### 2. 运行审计器 `Auditor` 管理“Record”和“Replay”阶段。 ``` from dp_recorder.auditing.audit_primitives import Auditor from dp_recorder.auditing.dataset_util import generate_neighbors import numpy as np # 1. 设置数据 data = np.array([1.0, 2.0, 3.0, 100.0]) # Contains an outlier neighbor_data = generate_neighbors(data, strategy="replace_one", rng=42) auditor = Auditor() # 2. 阶段 1:记录(原始数据) auditor.set_record() with auditor: # Run the algo. Traces are saved internally. result_d = dp_algorithm(data, epsilon=1.0) # 3. 阶段 2:重放(邻近数据) auditor.set_replay() with auditor: # Outputs of mechanisms are frozen to match Phase 1. # If control flow diverges here, Auditor raises an InvarianceError. result_dp = dp_algorithm(neighbor_data, epsilon=1.0) # 4. 确定性验证 # 检查经验输入敏感度 <= 声明的敏感度。 # 这可以捕获诸如“忘记裁剪”或“敏感度公式错误”等错误。 try: auditor.validate_records() print("✅ Deterministic checks passed.") except Exception as e: print(f"❌ Privacy Violation Detected: {e}") # 5. (可选)分布审计 # 如果您有未知 accounting 的自定义原语, # 请对这些特定组件运行统计测试。 auditor.run_distributional_audit(n_samples=10000) auditor.compute_overall_pld() ``` ### 项目结构 * `src/dp_recorder/` * `auditing/audit_primitives.py`:核心 `Auditor` 类和插桩钩子。 * `auditing/metrics.py`:用于敏感度检查的距离度量($L_1, L_2, L_\infty$)。 * `auditing/dataset_util.py`:生成邻居数据集的策略(Add/Remove、Replace-one)。 * `auditing/pld_*`:与 `dp-accounting` 集成以实现混合组合。 * `tests/`:集成测试,复现了在 Opacus、SmartNoise 和 Diffprivlib 等库中发现的真实错误。 ### 开发 要运行快速、确定性的测试套件: ``` poetry run pytest ``` 要运行较慢的统计测试套件: ``` RUN_DISTRIBUTIONAL_AUDIT=true poetry run pytest ``` ### 引用 如果您在研究或工作流程中使用 dp-recorder (Re:cord-play),请引用以下论文: ``` @inproceedings{recordplay2025, title={Privacy in Theory, Bugs in Practice: A Grey-Box Auditing Framework of Differential Privacy Libraries}, author={Tudor Cebere, David Erb, Damien Desfontaines, Aurélien Bellet and Jack Fitzimons}, booktitle={TODO}, year={2025}, } ```
标签:Atomic Red Team, Poetry, 单元测试, 差分隐私, 拉普拉斯机制, 敏感性分析, 数据泄露检测, 数据独立性, 灰盒测试, 算法审计, 统计审计, 网络安全, 逆向工具, 隐私保护, 隐私保证, 隐私审计, 隐私机制, 隐私预算, 高斯机制