14.3 差分隐私、敏感度与预算:噪声只是机制的一部分
研究者需要查询不同地区的健康事件统计。只隐藏行级记录仍可能被相邻查询相减,推断某位新加入参与者的情况。数据平台决定给计数加噪,却发现同一人可以贡献上千条事件,分析者也能无限重复查询取平均;“加过噪”听起来像保护措施,却还没有形成可证明保证。
差分隐私(DP)是一套关于随机机制、相邻数据集和隐私损失的数学约束。正确实现还需要贡献界限、预算会计、随机数安全和发布系统。
本课目标
- 理解
-DP 的相邻数据集定义; - 计算计数/和/均值查询的全局敏感度;
- 解释 clipping、composition 与 privacy accounting;
- 识别“随手加拉普拉斯噪声”为什么不足以上生产。
1. 保证针对输出分布
对选定保护单位定义相邻关系
这里
控制两种输出分布的可区分程度; 是不等式中的加性松弛项,应严格约束,不能直接解释为某人的泄露概率; - “相邻”可定义为加入/删除一个人,或替换一个人的全部数据,必须在报告中说明;
- 保护单位应是人、设备还是事件,由风险模型决定。
DP 不是“攻击成功率为零”,也不隐藏数据集本身的总体事实。它限制的是单个保护单位对发布的额外影响。
2. 敏感度决定噪声尺度
查询
若每人最多贡献一行,计数敏感度通常为 1。若一人可贡献 1000 条事件,事件计数的 person-level 敏感度可高达 1000;必须限制每人的贡献。
敏感度由相邻关系和整个发布范围共同决定,不能只写一个“每行上限”:
| 查询 | 相邻关系 | 强制条件 | 全局 L1 敏感度 |
|---|---|---|---|
| 不同人数 | 加入/删除一个人 | 稳定个人 ID 去重 | |
| 事件条数 | 加入/删除一个人 | 每人在本次发布范围内至多 | |
| 总时长 | 加入/删除一个人 | 每人一个值,裁剪到 | |
| 平均时长 | 固定、公开人数 | 每人一个值,裁剪到 |
最后一行来自一个人的值至多改变 24,总和除以不变的
“每天每人一条、值域
3. 拉普拉斯机制示意
对纯
import numpy as np
def illustrative_private_count(person_ids, epsilon, rng):
if not np.isfinite(epsilon) or epsilon <= 0:
raise ValueError("epsilon must be finite and positive")
person_ids = list(person_ids)
if any(not isinstance(value, str) or not value for value in person_ids):
raise ValueError("person IDs must be nonempty strings")
true_count = len(set(person_ids))
return true_count + rng.laplace(0.0, 1.0 / epsilon)
person_ids = ["synthetic-a", "synthetic-a", "synthetic-b", "synthetic-c"]
rng = np.random.default_rng(42) # Reproducible arithmetic only; no private release.
released = illustrative_private_count(person_ids, epsilon=0.5, rng=rng)
print(round(released, 3))例子使用合成人员 ID,去重后人数为 3,输出约为 4.588。固定 seed 只用于复现算术,公开 seed 会让噪声可预测,不能用于真实隐私发布。这个函数也没有预算账本、安全随机数、并发控制和浮点机制保证;替换随机数生成器一项仍不足以上生产。
在理想实数 Laplace 机制中,
4. 没有通用的 epsilon 分级表
把 epsilon < 0.1 称为强、≈1 称为中、>10 称为弱,脱离邻接定义、保护单位、组合次数、delta 和威胁模型就没有充分意义。
选择参数需要记录:
- 要保护谁以及相邻定义;
- 可能发布多少次、跨多久组合;
- 攻击者的辅助信息;
- 结果决策的最小可接受效用;
- delta 相对于总体规模的理由;
- 参数由谁批准、何时复审。
先给出整体隐私损失目标,再在查询和时间窗口间分配,不要每个分析师自行选择“看起来够小”的 epsilon。
5. Composition 会消耗保证
同一人的数据用于多次发布时,隐私保证要组合。基本顺序组合给出
重复提交同一查询并平均独立噪声,会提高精度,也持续消耗预算。系统要:
- 识别等价/重写查询;
- 统一预算账本与原子扣减;
- 处理并发、失败和重试;
- 缓存相同查询的同一次发布结果;
- 限制跨接口旁路与多个数据副本。
例如独立发布 100 次、每次
缓存同一次发布结果再展示不新增原始数据访问。缓存键应绑定快照、查询参数、贡献规则和机制版本;换快照后重新计算是另一次发布。不要把“复用结果”实现成“给不同查询复用同一个噪声”,相减时噪声会抵消。
6. Post-processing 与 side information
DP 输出的任何不再访问原数据的后处理不会额外削弱其 DP 保证。这使排序、可视化和确定性格式化可以复用同一发布结果。
DP 设计允许攻击者拥有广泛辅助信息;保证不依赖隐藏算法。但实现中的密钥、随机状态、未保护中间表和调试日志仍需安全控制。
7. Central 与 local 模型
- Central DP:可信服务接收原始数据,统一执行机制;通常效用更好,但中心需强安全与治理。
- Local DP:数据在离开设备前随机化,服务端接收随机化报告;这不保证它永远猜不到原值,信任要求不同,统计噪声通常更大。
还存在 distributed/shuffle 等模型。选择取决于信任边界、攻击者和系统架构,不能只比较 epsilon。
8. 实现风险清单
[ ] 邻接关系和保护单位明确
[ ] 每人贡献次数和值域已强制界定
[ ] 机制与 accountant 数学一致
[ ] 随机数和浮点实现经过评估
[ ] 预算扣减原子、持久且不可绕过
[ ] 中间结果、日志和缓存不泄露真值
[ ] 多次发布、分组和筛选计入组合
[ ] 裁剪偏差与小群体效用已评估
[ ] 参数、代码和发布记录可审计9. DP 不解决什么
- 原始数据库被未授权读取;
- 分析目的不合理或歧视性决策;
- 错误、偏倚或不具代表性的数据;
- 小群体统计本身带来的群体伤害;
- 非 DP 接口泄露同一数据;
- 模型或发布系统之外的身份映射。
它是发布/学习机制的一项形式化保证,不是完整隐私计划。
常见误区
- 加了随机噪声就是 DP:还需邻接、敏感度和机制证明。
- epsilon 有统一安全阈值:上下文和组合决定解释。
- 每个事件敏感度为 1:保护人为单位时需限制个人贡献。
- 查询失败不消耗预算:若结果或副作用已可观察,处理必须按系统设计决定。
练习
- 分别定义 event-level 与 person-level 相邻关系,计算计数敏感度。
- 为平均工作时长选择 clipping 范围,并分析偏差。
- 设计原子预算账本,处理并发、重试和重复查询。
- 审计一个“加噪 API”,找出预算和旁路缺口。
小结
差分隐私的核心不是噪声按钮,而是一个可审计的整体保证:保护单位、贡献界限、机制、预算组合和系统边界必须一致。
最后一课把隐私要求落到日常运行:怎样持续执行访问授权、保留删除、请求响应、供应商管理和事件处置。