为什么不用差分隐私?
有些算法不是差分隐私的,却声称自己做了匿名化。这类机制在学术文献和工业界都很常见。至于为什么它们仍算保留了某种隐私,说法各不相同:
- 可能包含了一些针对某类攻击的临时防护措施。
- 可能把数据聚合到了"看起来"安全的程度。
- 可能用了其他信息泄露指标,比如熵或互信息。
怎么判断这些方案靠不靠谱?本文中,我会建议一种略带挑衅的方法:用差分隐私的语言来分析它们。我们要问的是:为什么某个机制不是差分隐私的?
我需要一个靶子来展开讨论。认识一下 Paille。

Paille(读作 \(\pi\))有一个算法 \(A\)。他相信 \(A\) 做了匿名化,能保护输入中个体的数据。他的论证思路是:
它不是差分隐私的,但是……[插入长篇解释]
与其纠缠于解释本身,不如直接研究为什么该算法不是 DP。首先,"不是 DP"到底意味着什么?把差分隐私的定义取个否定。如果 \(A\) 不是 DP,就存在仅相差一个人数据的数据库 \(D_1\) 和 \(D_2\),使得比率:
随输出 \(O\) 的变化可以任意大。还记得吗:我们之前把这个比率叫做隐私损失。
假设攻击者在 \(D_1\) 和 \(D_2\) 之间犹豫:他知道数据库中所有人的数据,只差一个人的。那么通过查看 \(A\) 的输出,攻击者可能确定性地知道这个人数据是什么。
听起来……不太好。事实上,这完全就是我们要避免的事情。这怎么能行?等等,我有个想法。如果这种情况只极其罕见地发生呢?
对所有输出平均隐私损失
差分隐私是一个最坏情况属性:必须对每个可能的输出 \(O\) 都成立。所以即使概率比率无界的可能性很小,我们也拿不到 DP。不过我们可以说"除非极其不走运,否则 DP 性质成立"。其实之前引入 \((\varepsilon,\delta)\)-DP 时我们就这样做过了。这可能已经够好了!
\((\varepsilon,\delta)\)-DP 允许一小部分概率出现灾难性失败:隐私损失有时可以是无穷大。为了避免这种情况,我们可以改为平均所有可能输出的隐私损失。有些 DP 变体甚至让我们选择用哪种平均函数。
那么,Paille,这里发生的是这种情况吗?是不是对几乎所有输出都满足差分隐私?或者平均隐私损失被控制在某个合理范围内?
嗯……不完全是。即使对所有输出取平均,隐私损失也可能非常大。
好吧。那换个思路。不对输出取平均,改对人取平均?
对所有人平均隐私损失
差分隐私给所有个体同等的保护。隐私损失保证对每个人都适用。但这一定必要吗?某些场景下,说某些人需要比其他人更多的隐私保护也合理。比如高风险群体可能需要比主流群体更小的 \(\varepsilon\)。
另一种思路是保护几乎所有个体,但不指定哪些人。做法是先根据概率分布对总体建模,然后说"以高概率,从这个分布中抽出来的人是受保护的"。不幸运的人可能得不到任何保护,但这种希望很渺茫。
这有点像 \((\varepsilon,\delta)\)-DP:有一小部分概率出问题。我们可以改为对所有人平均隐私损失,跟之前一样,这能避免某些个体面临无穷风险。不过,这比前一类定义弱得多。首先,如果某些人的数据不寻常,他们可能永远得不到好的保护。其次,它要求我们用概率分布来建模总体。这很难做好!模型一旦有误,处于风险中的人可能比预期多得多。
不过这也算个方案。Paille,你的算法 \(A\) 是这样的吗?
嗯……不是。对更多的人来说隐私损失都非常大,所以取平均意义不大。
啊。那……如果你不保护个体,也许保护的是其他属性?
改变受保护的属性
用 DP 时,攻击者试图区分在一个人上不同的数据库。也就是说,我们保护关于每个人的所有信息。但有时这种保护级别似乎是不可能完成的任务。
比如,假设输入数据库随时间增长:每天从应用用户那里获得新数据,想每天发布当日数据的匿名版本。每天的发布可能都满足差分隐私……但一个用户随时间累积的总隐私损失是无界的——同一个人可能每天都在大量使用应用。
这总比什么都不做好:我们仍然可以说在保护每个用户每一天的所有贡献。要捕捉这个想法很简单:重新定义"相邻数据集",让它在单天内只变化一个人的数据。
还可以把这个思路扩展到其他想保护的属性。也许发现某人在数据库中不算敏感,但发现某个特定字段的值就有问题了!这种情况下,可以调整 DP 定义,让两个数据库只在某个人某个字段上不同。
Paille,你能这样捕捉算法 \(A\) 的性质吗?如果给个体争取形式化的隐私保证太难了,能不能给更小的"隐私单位"做到?
嗯……看起来不行。即使"隐私单位"更小,隐私损失仍然高得离谱。
好吧,看起来不太妙。但别放弃,再试最后一招。如果我们假设攻击者对初始数据集不确定呢?
假设更弱的攻击者
用 DP 时,我们比较算法在仅差一个用户的两个数据库上的输出。隐含假设是:攻击者知道数据库中其他所有人的数据。如果放松这个假设呢?
这似乎有道理。毕竟,攻击者了解数据库中每个人的唯一现实途径是直接访问数据库……那也就没什么好保护的了。有些 DP 变体试图形式化这个想法:用概率分布来捕捉攻击者的不确定性。相邻数据库不再是固定的,而是从分布中抽样,以特定用户的数据为条件。
以这种方式得到的 DP 变体有两个主要问题:
- 首先,它们不组合。假设攻击者背景知识有限时,两个算法分别都"私有"。每个输出单独看不泄露太多。但两个输出合在一起,可能完全不私有——即使在同样的假设下。
- 其次,这些变体要求我们把数据库建模为概率分布。这个分布要捕捉攻击者的不确定性……所以你得站在每个可能攻击者的角度,以某种方式对他们的知识建模。这很难,而且非常脆弱:只要稍微误判攻击者的知识,所有隐私保证就可能崩塌。
正因如此,假设更弱的攻击者可能是一条危险的路。Paille,你的算法 \(A\) 满足某个这样的变体吗?这不足以完全说服我:我还需要仔细看看底层假设,以及你在实践中怎么用。不过,这至少是个开始,总比什么都没有好。
好吧,让我查查。建模攻击者的不确定性很难,但……这样做也没给我令人信服的结果。我可以对数据做一些不切实际的假设,然后勉强能用。但如果试图更现实地建模攻击者,根本拿不到好数字。
那……真可惜。
还剩下什么?
回顾一下我们目前对 Paille 的算法 \(A\) 的了解。如果把迄今为止所有放松方式都否定掉,还剩什么?
一个查看 \(A\) 输出的攻击者:
- 可以检索非常细粒度的信息
- 关于许多个体
- 即使攻击者并不特别幸运
- 并且对数据只有有限的了解。
这很糟糕!但这是以上讨论的直接推论。Paille 的机制不是 DP,乍看似乎没那么严重——毕竟 DP 是一个相当高的标准。但如果我们即使大幅放松定义,也没法用 DP 的语言说出关于 \(A\) 的任何正面结论,那就相当不利了。不需要深入分析 \(A\) 可能安全的原始理由了:我们刚刚已经证明它不安全。
更确切地说,我们无法证明它安全。这会是那些捍卫自定义匿名化方法的人最后的手段:"我证明不了它安全,但我仍然觉得它安全。你来证明我错了!给我看一个有效的攻击。"这样颠倒举证责任,当然是个危险信号。如果你在匿名化我的数据,应该是你来 convince 我这是安全的,而不是反过来。
而且经验表明,即使有人找到了攻击,这也不足以结束争论。实践中,人们在算法上打一两个补丁,然后继续鼓吹安全性。计算机安全史上这样的例子不胜枚举:发现攻击后修补系统,但不久之后,对攻击稍加修改就又成功了。数据隐私领域早期也是如此。希望我们从这段历史中吸取了教训,把未来的努力集中在有可证明保证的更强概念上!
所以,下次你遇到一个非 DP 算法时……不妨坚持让作者向你解释为什么它不是 DP。
最后的说明
除了本文提到的,DP 还有很多变体和扩展。事实上,我和一位同事写了一篇完整的综述论文!论文中对所有变体做了分类,列出它们的属性,并为每一个提供直觉。想快速了解这项工作,可以看看我去年夏天在 PETS 上关于它的演讲录像。

浙公网安备 33010602011771号