跳转到内容

Dwork DP 2006 — 用相邻数据集定义隐私

待复核

想象你在班里做匿名投票,老师只公布”赞成有多少人”,不公布谁投了什么。 如果小明参加和不参加,最后公布的数字看起来都差不多,旁观者就很难判断小明的真实选择。

这篇论文把这种直觉变成了差分隐私的核心语言:相邻数据集必须不可区分。 相邻数据集就是只差一个人的两个版本,比如”有小明的数据”和”没有小明的数据”。 如果算法在这两个版本上的输出分布非常接近,攻击者看到结果也很难判断那个人是否在场。

论文接着回答一个工程问题:既然要让两个相邻世界看起来像,那应该加多少噪声? 答案是按查询函数的敏感度来校准。 敏感度越高,一个人越能改变结果,就要加越大的随机噪声。

一句话定义:Dwork 等人用相邻数据集的输出概率比来定义隐私,并给出按敏感度加拉普拉斯噪声的通用机制。

不理解这篇论文,下面这些事都没法解释:

  • 为什么”删掉姓名”不是隐私保证,攻击者仍然可能用外部信息重新识别个人
  • 为什么差分隐私总在谈 epsilon,因为它量化了两个相邻世界有多难区分
  • 为什么噪声不能凭感觉加,必须跟查询函数的最坏个人影响绑定
  • 为什么多个隐私查询可以像记账一样组合,而不是每次都重新承诺”匿名”

这篇论文的重要性在于,它把隐私从口号改成了可证明的系统接口。 你不再只说”我们会保护用户”,而是能说”这个机制满足 epsilon 差分隐私,敏感度是多少,噪声是多少”。

它也是 dwork-dp-icalp-2006 的姊妹篇。 ICALP 那篇更像宣言:什么叫差分隐私。 本篇更像工具箱:怎样把定义落到具体查询、具体噪声和具体误差上。

  1. 相邻数据集:只看一个人的影响。 类比:电梯里多上来一个人,如果楼层显示、运行声音和等待时间都几乎不变,外面的人就很难知道这个人是否进了电梯。 差分隐私把”一个人”形式化为两个数据集只差一条记录。

  2. 敏感度:先量最大摇晃,再决定缓冲垫厚度。 类比:搬玻璃杯和搬冰箱需要的防震材料不一样,因为一个轻碰就碎,一个会压坏地板。 查询函数也是这样:计数最多被一个人改 1,最大值在无界数据上可能被一个人改到无限大。

  3. 拉普拉斯机制:用刚好够厚的噪声盖住个人贡献。 类比:录音里要盖住某个人咳嗽声,背景噪声至少要和咳嗽可能带来的变化同量级。 论文证明,只要加上宽度为 敏感度 / epsilon 的拉普拉斯噪声,就能得到严格隐私保证。

import numpy as np
count = 137
epsilon = 1.0
sensitivity = 1
published = count + np.random.laplace(0, sensitivity / epsilon)
print(round(published))

逐部分解释

  • count 是真实统计,比如”有多少人点击了按钮”
  • sensitivity = 1,因为增删一个人最多让计数变 1
  • np.random.laplace(0, 1) 给结果加随机噪声,让 137 和 136 这两个相邻世界难区分

案例 2:平均工资为什么要先限制范围

Section titled “案例 2:平均工资为什么要先限制范围”
def dp_mean(values, epsilon):
clipped = [min(100000, max(0, v)) for v in values]
sensitivity = 100000 / len(clipped)
return sum(clipped) / len(clipped) + np.random.laplace(0, sensitivity / epsilon)

逐部分解释

  • clipped 把工资限制在 0 到 100000,避免一个极端值让敏感度无上界
  • 平均值敏感度是值域宽度除以人数,人越多,一个人能改变均值的幅度越小
  • 如果不裁剪,“某人收入无限大”会让噪声也必须无限大,结果就不可用
budget = 3.0
queries = [0.5, 0.5, 1.0]
spent = sum(queries)
assert spent <= budget
remaining = budget - spent

逐部分解释

  • 每个数字是一条查询使用的 epsilon
  • 简单组合下,总隐私损失可以用这些 epsilon 相加来保守估计
  • remaining 是还能继续问多少问题的预算,不记账就会在多次分析中慢慢泄漏个人信息
  1. 以为匿名化等于差分隐私:匿名化依赖攻击者不知道外部信息,差分隐私直接限制任意相邻数据集的输出差别。

  2. 把 epsilon 当成噪声大小:epsilon 是隐私损失参数,真正的噪声宽度是敏感度除以 epsilon。

  3. 忘记敏感度必须是最坏情况上界:只看当前数据的变化很诱人,但这个数本身可能泄露数据特征。

  4. 连续查询不算总账:一次查询满足 epsilon 隐私,不代表一百次查询仍然只花 epsilon。

适用

  • 发布聚合统计,比如计数、均值、直方图和简单线性查询
  • 有可信数据管理者统一控制查询、预算和噪声的中心化场景
  • 需要给隐私承诺配上数学证明和审计口径的系统
  • 数据量足够大,噪声相对真实信号不会淹没结论的分析任务

不适用

  • 需要返回精确个人记录的业务,比如查询某个病人的具体病历
  • 数据集很小的场景,因为噪声会和信号同量级甚至更大
  • 查询函数没有明确上界,比如未裁剪的最大值、总资产或长文本特征
  • 完全不信任数据收集者的场景,此时要考虑 duchi-local-dp-2013 这类本地模型
  • 2002 年sweeney-k-anonymity-2002 展示了删除姓名仍可能被重新识别,隐私研究开始从”脱敏字段”转向”攻击模型”。
  • 2003 年:Dinur 和 Nissim 证明,如果统计数据库回答太多过准的问题,攻击者可以重建大量原始数据。
  • 2006 年:Dwork、McSherry、Nissim 和 Smith 在 TCC 发表本篇,把”加多少噪声”和”个人最大影响”绑定起来。
  • 同年:Dwork 在 ICALP 系统阐述差分隐私定义,dwork-our-data-ourselves-2006 则探索分布式噪声生成。
  • 2017 年:这条研究线获得 Gödel Prize,说明它不只是隐私工程技巧,也是理论计算机科学的重要结果。
  • 隐私可以定义成两个世界难区分:一个人是否在数据集中,不应该显著改变任何可观察输出。
  • 噪声是精确设计出来的:敏感度决定个人影响上限,epsilon 决定你愿意暴露多少差异。
  • 组合性让隐私进入系统工程:多次查询可以累计分析,不必每个模块各说各话。
  • 可用性来自大数:数据集越大,单个人影响越小,同样隐私预算下结果越准。