浅谈数据库中的推理控制技术与差分隐私

上学期数据库课程中,在学到数据库安全时曾经在课程笔记中曾简要提及过一些其他的安全性保护技术,例如「推理控制」,以「防止用户通过组合多个低权限查询结果,推断出其无权访问的高敏感度信息」。我在当时就感到非常惊奇,这是怎么做到的呢?

具体而言这是推断攻击,指攻击者利用公开的聚合数据(例如统计报告、平均值、总和等)结合其已知的辅助信息,来推断出特定个体的敏感信息。即使发布的数据是聚合的,不直接包含个体信息,攻击者也可能通过这种方式「反推出」个体隐私。

例如说包含三个人 A, B, C 的工资的数据库,A 知道自己的工资,通过交流知道了 B 的工资,同时通过查询得到了他们的平均工资,这样一来他就能推断出 C 的工资,因此造成了 C 的隐私泄露。

最初、最朴素的想法就是将所有的查询作为一个闭包,计算出这个闭包,就能得到这些查询可以间接推断出的所有信息,然后再从中根据隐私等级判断是否有密级信息泄露。或者更清楚地说,数据库实时构建一个「能被推断出的所有信息的集合」。

显然这个是相当不现实的:

  1. 一个用户可能进行成千上万次查询。要实时计算这些查询的所有可能交集、并集、差集,并判断这些组合是否会泄露隐私,其计算量会随着查询次数的增加呈指数级增长。
  2. 即使能做到,每次查询前都进行如此复杂的推演,性能也会大大降低。
  3. 此外数据库并不知道攻击者掌握了哪些外部信息,这样的防备一样可能被攻破。

那么应该怎么做呢?

kk-匿名

kk-匿名kk-Anonymity)是最经典的匿名化技术之一。其核心思想是,让每一条记录都无法与至少 k1k-1 条其他记录区分开来。这样一来,攻击者就无法将某条具体信息锁定到某个人身上。

假设有一个公开的医疗数据库,包含邮编、年龄和所患疾病。如果攻击者知道某位重要人物的邮编和确切年龄,他很可能通过查询 (邮编='100084', 年龄=45) 来精确找到这个人的记录,从而得知其所患疾病。

这种情况下,数据库管理员会设置一个 kk 值(例如 k=3k=3)。在发布数据前,系统会自动对数据进行抑制泛化处理。

  1. 数据抑制(Suppression):将一些属性的值用星号 * 取代。
  2. 数据泛化(Generalization):将一些属性的精确值用更宽泛的类别取代。

例如说原始数据:

姓名 邮编 年龄 疾病
张三 100084 45 心脏病
李四 100085 47 高血压
王五 100084 46 糖尿病

经过 kk-匿名处理后,可能变成:

姓名(抑制) 邮编(泛化) 年龄(泛化) 疾病
* 10008* 4* 心脏病
* 10008* 4* 高血压
* 10008* 4* 糖尿病

现在,即使攻击者知道目标人物的邮编是 100084,年龄是 45 岁,当他查询时,会得到三条无法区分的记录。他只能知道目标人物患有这三种疾病之一,但无法确定具体是哪一种,从而保护了个人隐私。

然而,kk-匿名并不是万能的。它无法防止同质攻击(Homogeneity Attack),即如果一个匿名组内所有记录的敏感属性值都相同,攻击者仍然可以推断出该属性值。

此外由于攻击者依旧可以探知关于个体的信息,可以获知目标个体患有三种疾病之一,因此也存在背景知识攻击(Background Knowledge Attack)的风险,即攻击者利用其已有的背景知识,结合匿名数据,推断出个体的敏感信息。

查询限制与单元格抑制

除了改造数据本身,数据库还可以在响应查询的环节进行智能控制,拒绝那些可能泄露信息的「危险」请求。

第一种方法是查询限制(Query Restriction)。系统会分析用户的查询请求,如果发现该请求可能导致个体信息暴露,就会拒绝执行或返回一个模糊的结果。

例如说「最小结果集限制」,如果一个聚合查询(如 COUNT, SUM)返回的结果集所包含的记录数过少(例如少于 5 条),系统会拒绝返回结果。因为过小的结果集很容易被用来锁定个体。

第二种方法是单元格抑制(Cell Suppression)。在发布统计表格(如人口普查报告)时,如果某个单元格的数值过小,可能会暴露信息。单元格抑制技术会主动「隐藏」这些危险的单元格。

差分隐私

概括

差分隐私(Differential Privacy)是一种更为先进和数学化的隐私保护技术。其核心思想是,通过在查询结果中添加随机噪声,使得攻击者无法确定某个个体是否包含在数据集中。

其核心直觉在于:如果单个记录的加入或移除对查询结果的影响微乎其微(被随机噪声所掩盖),那么攻击者就无法从查询结果中反推出任何关于该个体的信息。

例如说查询「小区总收入」时,差分隐私机制并不会返回精确的 1,000,000 元。它会在这个真实值上加入一个经过数学方法精确计算的随机噪声,可能返回 1,000,050 元。当某个住户搬离后,再次查询,系统会在新的真实值 900,000 元上加入另一个随机噪声,可能返回 899,970 元。

攻击者得到的两个差值 100,080 元,与那个住户的真实收入 100,000 元有所偏差。

噪声的加入,使得攻击者无法确定这个差值是真实的个人数据,还是仅仅是随机噪声的波动。

通过严格的数学证明,差分隐私可以保证,任何单一个体的数据对最终输出结果的影响都微乎其微,从而在保护个体隐私的同时,不影响整体数据的统计分析价值。

差分隐私中有一个隐私预算(Privacy Budget)ε\varepsilon 的概念,用来量化允许泄露的隐私程度。每次查询都会消耗一定的隐私预算,当预算耗尽后,系统将拒绝进一步的查询请求。

  • 低隐私预算:意味着隐私保护级别非常高。系统会加入更多的噪声。返回的数据在宏观上依然可用,但会更「模糊」一点。这通常用于向公众或不受信任的第三方发布数据。
  • 高隐私预算:意味着隐私保护级别相对较低。系统会加入更少的噪声。返回的数据会更接近真实值。这通常用于组织内部,由受信任的分析师进行精度要求更高的分析。

下面来用形式化的语言描述差分隐私的核心机制。

基本概念

相邻数据集(Adjacent Database)是差分隐私的基石。假设有两个数据集 D1,D2D_1, D_2,如果它们之间仅仅相差一条记录,我们就称它们为相邻数据集。这代表了某条数据在或不在数据集中的两种情况[1]

ε\varepsilon-差分隐私

若机制 M\mathcal{M} 满足 ε\varepsilon-差分隐私,那么对于任意两个相邻数据库 D1,D2D_1, D_2,以及 M\mathcal{M} 可能输出的任意结果集合 SS,都满足以下不等式:

Pr[M(D1)S]eε×Pr[M(D2)S]\Pr[\mathcal{M}(D_1) \in S] \le \e^{\varepsilon} \times \Pr[\mathcal{M}(D_2) \in S]

其中:

  • M\mathcal{M} 表示随机算法,可以看作是一次数据库查询。
  • M(D1)\mathcal{M}(D_1) 表示在数据集 D1D_1 上运行算法 M\mathcal{M} 的结果。
  • Pr[]\Pr[\cdot ] 表示概率。
  • eε\e^{\varepsilon} 是一个略大于 1 的数(当 ε\varepsilon 很小时)。

这个式子的含义是,不管查询到的结果是什么(对任意结果集合 SS 都满足),包含某条数据得到该结果的概率,与不包含这条数据得到该结果的概率之比不会超过 eε\e^{\varepsilon}。根据相邻数据集的定义,D1,D2D_1, D_2 是可交换的,因此反之亦然。

换言之,攻击者几乎无法通过查询结果来判断某条数据是否存在于数据集中,因为两种情况下的概率分布实在是太接近了(在 eε\e^{\varepsilon} 接近 1 的情况下)。

拉普拉斯机制

那么该如何设计算法 M\mathcal{M} 满足上述定义呢?最常用的方法是拉普拉斯机制(Laplace Mechanism)。

假设存在一个查询函数(Query Function)ff,它作用于数据集 DD 并返回一个实数结果。例如可以是 SQL 中的 COUNT, SUM, AVG 等聚合函数。这是没有隐私保护的真实查询。

敏感度(Sensitivity)Δf\Delta f 是一个衡量查询函数「脆弱性」的指标,定义为:当数据集中增加或删除一条记录时,查询函数 ff 的输出结果可能产生的最大变化量。即

Δf=maxD1,D2f(D1)f(D2)\Delta f = \max_{D_1, D_2} |f(D_1) - f(D_2)|

其中 D1,D2D_1, D_2 是任意两个相邻数据集。

例如说 COUNT 函数的敏感度为 1,因为添加或删除一条记录最多会改变计数结果 1。而查询班级考试总分的敏感度为 100(假设满分为 100),因为添加或删除一个学生的成绩最多会改变总分 100。

为了处理连续输出的场景,我们可以将上述不等式用概率密度函数等价地表示。设任意一个可能的输出结果为 yy,则

pdf(M(D1)=y)pdf(M(D2)=y)eε\dfrac{\operatorname{pdf}(\mathcal{M}(D_1) = y)}{\operatorname{pdf}(\mathcal{M}(D_2) = y)} \le \e^{\varepsilon}

设我们添加的噪声 zz 来自一个未知的概率分布,其密度函数为 p(z)p(z),即 M(D)=f(D)+z\mathcal{M}(D) = f(D) + z

那么查询结果的概率密度就是 pdf(M(D)=y)=p(yf(D))\operatorname{pdf}(\mathcal{M}(D) = y) = p(y - f(D))

取对数后得到

ln(p(yf(D1)))ln(p(yf(D2)))ε\ln\left(p(y - f(D_1))\right) - \ln\left(p(y - f(D_2))\right) \le \varepsilon

z1=yf(D1),z2=yf(D2)z_1 = y - f(D_1), z_2 = y - f(D_2),即

ln(p(z1))ln(p(z2))ε\ln(p(z_1)) - \ln(p(z_2)) \le \varepsilon

又因为 f(D1)f(D2)Δf|f(D_1) - f(D_2)| \le \Delta f,所以 z1z2Δf|z_1 - z_2| \le \Delta f

因此我们需要找到一个函数 g(z)=ln(p(z))g(z) = \ln(p(z)),使得对于任意满足 z1z2Δf|z_1 - z_2| \le \Delta fz1,z2z_1, z_2,都有 g(z1)g(z2)εg(z_1) - g(z_2) \le \varepsilon

为了让这个不等式对所有情况都成立,我们需要限制函数 g(z)=ln(p(z))g(z) = \ln(p(z)) 的变化率。一个简单而有效的选择是让 g(z)g(z) 的导数(或其绝对值)为一个常数。

如果我们希望噪声对结果的影响是对称的(即正噪声和负噪声的概率一样),那么我们应该让 g(z)g(z) 对称于 yy 轴。满足这个条件的、最简单的函数形式就是

g(z)=ln(p(z))=Cz+Constantg(z) = \ln(p(z)) = -C|z| + \text{Constant}

其中 CC 是一个正常数,表示斜率的绝对值。

我们希望噪声集中在 0 附近,远离 0 的概率密度应该更小,因此斜率用 C-C

现在我们来计算 CC 的值。对于任意 z1,z2z_1, z_2 满足 z1z2Δf|z_1 - z_2| \le \Delta f,都有 Cz1Cz2εC|z_1| - C|z_2| \le \varepsilon

为了保证最坏情况,取 z1z2=Δf|z_1 - z_2| = \Delta f,这时

Cz1Cz2Cz1z2=CΔf\begin{aligned} C|z_1| - C|z_2| &\le C|z_1 - z_2| \\ &= C \Delta f \\ \end{aligned}

对于所有情况,需要保证 CΔfεC \Delta f \le \varepsilon,即 CεΔfC \le \dfrac{\varepsilon}{\Delta f}

为了在满足条件的前提下让噪声尽可能小(即集中在 0 附近),CC 应该尽可能大。于是我们取 C=εΔfC = \dfrac{\varepsilon}{\Delta f}

因此 ln(p(z))=εΔfz+K\ln(p(z)) = -\dfrac{\varepsilon}{\Delta f}|z| + K,即

p(z)=eKeCzp(z) = \e^K \cdot \e^{-C|z|}

为了让 p(z)p(z) 成为一个合法的概率密度函数,必须满足 +p(z) ⁣dz=1\displaystyle \int_{-\infty}^{+\infty} p(z) \d z = 1

A=eKA = \e^K 是一个常数,那么

AeCz ⁣dz=1A(0eCz ⁣dz+0eCz ⁣dz)=1A2C=1A=C2\begin{aligned} \int_{-\infty }^{\infty } A \cdot \e^{-C|z|} \d z &= 1 \\ A \cdot \left(\int_{-\infty }^{0} \e^{Cz} \d z + \int_{0}^{\infty } \e^{-Cz} \d z\right) &= 1 \\ A \cdot \dfrac{2}{C} &= 1 \\ A &= \dfrac{C}{2} \end{aligned}

从这也可以看出来为何上面斜率要是 C-C,还有个原因是为了让积分收敛。

代回去,得到

p(z)=C2eCzp(z) = \dfrac{C}{2} \cdot \e^{-C|z|}

这正是拉普拉斯分布(Laplace Distribution)的概率密度函数,一般形式为

Lap(xμ,b)=12bexμb\operatorname{Lap}(x \mid \mu, b) = \dfrac{1}{2b} \cdot \e^{-\frac{|x - \mu|}{b}}

其中 μ\mu 是位置参数,表示分布的中心位置;bb 是尺度参数,控制分布的「宽度」。

这里 μ=0,b=1C=Δfε\mu = 0, b = \frac{1}{C} = \frac{\Delta f}{\varepsilon}

因此,拉普拉斯机制的具体实现是:对于查询函数 ff,它的差分隐私保护版本 M(D)\mathcal{M}(D) 定义为

M(D)=f(D)+Lap(Δfε)\mathcal{M}(D) = f(D) + \text{Lap}\left(\tfrac{\Delta f}{\varepsilon}\right)

这个证明告诉我们,加入的噪声大小,是由查询本身的脆弱性(敏感度 Δf\Delta f)和我们期望的隐私保护水平(预算 ε\varepsilon)共同决定的。

  • 查询越敏感(Δf\Delta f 越大),意味着单个用户的数据对结果影响越大,为了「掩盖」这个影响,我们就必须加入更大范围的噪声。
  • 隐私要求越高(ε\varepsilon 越小),意味着我们要求两种情况下的概率比值越接近 1,我们也必须加入更大范围的噪声。

还有一点补充,上面的证明是关于任意单点 yy,可以证明对于任意集合 SS 也成立。

具体证明

上面的证明已经得出了对于任意单点 yy,其概率密度函数满足

pdf(M(D1)y)eε×pdf(M(D2)y)\operatorname{pdf}(\mathcal{M}(D_1) \le y) \le \e^{\varepsilon} \times \operatorname{pdf}(\mathcal{M}(D_2) \le y)

现在要证明对于任意集合 SS ,其概率 Pr[M(D1)S]\Pr[\mathcal{M}(D_1) \in S] 也满足这个关系。

对于连续型随机变量,一个集合的概率是其概率密度函数在该集合上的积分。所以:

Pr[M(D1)S]=ySpdf(M(D1)=y) ⁣dy\Pr[\mathcal{M}(D_1) \in S] = \int_{y \in S} \operatorname{pdf}(\mathcal{M}(D_1) = y) \d y

将点的不等式代入得

ySpdf(M(D1)=y) ⁣dyySeε×pdf(M(D2)=y) ⁣dy\int_{y \in S} \operatorname{pdf}(\mathcal{M}(D_1) = y) \d y \le \int_{y \in S} \e^{\varepsilon} \times \operatorname{pdf}(\mathcal{M}(D_2) = y) \d y

于是有

ySpdf(M(D1)=y) ⁣dyeε×ySpdf(M(D2)=y) ⁣dyPr[M(D1)S]eε×Pr[M(D2)S]\begin{aligned} \int_{y \in S} \operatorname{pdf}(\mathcal{M}(D_1) = y) \d y &\le \e^{\varepsilon} \times \int_{y \in S} \operatorname{pdf}(\mathcal{M}(D_2) = y) \d y\\ \Pr[\mathcal{M}(D_1) \in S] &\le \e^{\varepsilon} \times \Pr[\mathcal{M}(D_2) \in S] \end{aligned}

ε\varepsilon-差分隐私性质

无界 DP 蕴含有界 DP

一个满足 ε\varepsilon-无界 DP 的机制 M\mathcal{M},必然满足 2ε2\varepsilon-有界 DP。反之则不然。

证明

假设机制 M\mathcal{M} 满足 ε\varepsilon-无界 DP,考虑两个大小相同(比如都为 kk)的有界相邻数据集 D1=X{a}D_1 = X \cup \{a\}D2=X{b}D_2 = X \cup \{b\}。目标是证明 Pr[M(D1)S]e2εPr[M(D2)S]\Pr[\mathcal{M}(D_1) \in S] \le e^{2\varepsilon} \Pr[\mathcal{M}(D_2) \in S]

可以引入一个中间数据集 XX(大小为 k1k-1)。

  1. D1D_1XX 是无界相邻的。根据无界 DP 的定义:Pr[M(D1)S]eεPr[M(X)S]\Pr[\mathcal{M}(D_1) \in S] \le e^\varepsilon \Pr[\mathcal{M}(X) \in S]
  2. D2D_2XX 也是无界相邻的。同样有:Pr[M(X)S]eεPr[M(D2)S]\Pr[\mathcal{M}(X) \in S] \le e^\varepsilon \Pr[\mathcal{M}(D_2) \in S]

将二式代入一式得到

Pr[M(D1)S]eε(eεPr[M(D2)S])=e2εPr[M(D2)S]\Pr[\mathcal{M}(D_1) \in S] \le e^\varepsilon \cdot (e^\varepsilon \Pr[\mathcal{M}(D_2) \in S]) = e^{2\varepsilon} \Pr[\mathcal{M}(D_2) \in S]

这就证明了 ε\varepsilon-无界 DP 蕴含了 2ε2\varepsilon-有界 DP。

这个性质表明,无界差分隐私是更强的隐私保护形式。满足无界 DP 的机制在有界 DP 下也能提供一定程度的隐私保护。当然这个转换会使隐私预算翻倍,即代表隐私保护级别降低了一些。

顺序组合性

如果先后执行了 kk 个查询,且每个查询的机制是独立的,分别用了 ε1,,εk\varepsilon_1, \dots, \varepsilon_{k} 个预算,那么这 kk 个查询合在一起,总的隐私预算消耗是 ε=i=1kεi\varepsilon = \displaystyle \sum_{i=1}^{k} \varepsilon_i

证明

只需证明两个查询的情况,多个查询可以通过数学归纳法推广。

设两个查询分别是 M1,M2\mathcal{M}_1, \mathcal{M}_2,它们分别满足 ε1\varepsilon_1-差分隐私和 ε2\varepsilon_2-差分隐私。

那么对于任意两个相邻数据库 D1,D2D_1, D_2,以及任意结果集合 S1,S2S_1, S_2,都有

{Pr[M1(D1)S1]eε1×Pr[M1(D2)S1]Pr[M2(D1)S2]eε2×Pr[M2(D2)S2]\left\lbrace\begin{aligned} \Pr[\mathcal{M}_1(D_1) \in S_1] &\le \e^{\varepsilon_1} \times \Pr[\mathcal{M}_1(D_2) \in S_1] \\ \Pr[\mathcal{M}_2(D_1) \in S_2] &\le \e^{\varepsilon_2} \times \Pr[\mathcal{M}_2(D_2) \in S_2] \\ \end{aligned}\right.

现在考虑联合查询 M(D)=(M1(D),M2(D))\mathcal{M}(D) = (\mathcal{M}_1(D), \mathcal{M}_2(D)),其结果是一个二元组。 对于任意结果集合 SO1×O2S \subseteq \mathcal{O}_1 \times \mathcal{O}_2[2],有

Pr[M(D1)S]=Pr[(M1(D1),M2(D1))S]=(s1,s2)SPr[M1(D1)=s1M2(D1)=s2]=(s1,s2)SPr[M1(D1)=s1]Pr[M2(D1)=s2](独立性)(s1,s2)Seε1Pr[M1(D2)=s1]eε2Pr[M2(D2)=s2](应用定义)=eε1+ε2(s1,s2)SPr[M1(D2)=s1]Pr[M2(D2)=s2]=eε1+ε2Pr[(M1(D2),M2(D2))S]=eε1+ε2Pr[M(D2)S]\begin{aligned} \Pr[\mathcal{M}(D_1) \in S] &= \Pr[(\mathcal{M}_1(D_1), \mathcal{M}_2(D_1)) \in S] \\ &= \sum_{(s_1, s_2) \in S} \Pr[\mathcal{M}_1(D_1) = s_1 \land \mathcal{M}_2(D_1) = s_2] \\ &= \sum_{(s_1, s_2) \in S} \Pr[\mathcal{M}_1(D_1) = s_1] \cdot \Pr[\mathcal{M}_2(D_1) = s_2] \quad \text{(独立性)}\\ &\le \sum_{(s_1, s_2) \in S} \e^{\varepsilon_1} \Pr[\mathcal{M}_1(D_2) = s_1] \cdot \e^{\varepsilon_2} \Pr[\mathcal{M}_2(D_2) = s_2] \quad \text{(应用定义)} \\ &= \e^{\varepsilon_1 + \varepsilon_2} \sum_{(s_1, s_2) \in S} \Pr[\mathcal{M}_1(D_2) = s_1] \cdot \Pr[\mathcal{M}_2(D_2) = s_2] \\ &= \e^{\varepsilon_1 + \varepsilon_2} \Pr[(\mathcal{M}_1(D_2), \mathcal{M}_2(D_2)) \in S] \\ &= \e^{\varepsilon_1 + \varepsilon_2} \Pr[\mathcal{M}(D_2) \in S] \end{aligned}

因此联合查询 M\mathcal{M} 满足 (ε1+ε2)(\varepsilon_1 + \varepsilon_2)-差分隐私。

顺序组合性表明了隐私是一种可消耗的、有限的资源。这迫使数据管理者必须有规划地、有节制地批准数据访问请求,确保最有价值的问题被优先回答,防止隐私预算被低价值的查询耗尽。

这也是隐私预算中「预算」的内涵体现。

并行组合性

如果将数据集 DD 分割成 kk 个互不相交的子集 D1,,DkD_1, \dots, D_{k},并在每个子集 DiD_i 上独立地执行 εi\varepsilon_i-差分隐私的查询 Mi\mathcal{M}_i,那么整体的隐私预算消耗是 ε=max1ikεi\varepsilon = \max\limits_{1 \le i \le k} \varepsilon_i

证明

依然只需证明两个子集的情况,多个子集可以通过数学归纳法推广。

设两个不相交子集分别是 D1,D2D_1, D_2,它们分别满足 ε1\varepsilon_1-差分隐私 M1\mathcal{M}_1ε2\varepsilon_2-差分隐私 M2\mathcal{M}_2,且两个机制是独立的。

即证明联合机制 M(D)=(M1(D1),M2(D2))\mathcal{M}(D) = (\mathcal{M}_1(D_1), \mathcal{M}_2(D_2)) 满足 ε=max(ε1,ε2)\varepsilon = \max(\varepsilon_1, \varepsilon_2)-差分隐私。

D,DD, D' 是一对相邻数据集,它们仅在某个记录 rr 上不同。由于 D1,D2D_1, D_2 互不相交,rr 只能存在于其中一个子集中。

rD1r \in D_1,这意味着 D1,D1D_1, D_1' 相邻,而 D2=D2D_2 = D_2',即 D2D_2 没有变化。在这种情况下 M2(D2)=M2(D2)\mathcal{M}_2(D_2) = \mathcal{M}_2(D_2')。反之亦然。

对于任意输出结果集合 SO1×O2S \subseteq \mathcal{O}_1 \times \mathcal{O}_2,有

Pr[M(D)S]=Pr[(M1(D1),M2(D2))S]\Pr[\mathcal{M}(D )\in S] = \Pr[(\mathcal{M}_1(D_1), \mathcal{M}_2(D_2)) \in S]

我们希望证明

Pr[(M1(D1),M2(D2))S]emax(ε1,ε2)Pr[(M1(D1),M2(D2))S]\Pr[(\mathcal{M}_1(D_1), \mathcal{M}_2(D_2)) \in S] \le \e^{\max(\varepsilon_1, \varepsilon_2)} \Pr[(\mathcal{M}_1(D_1'), \mathcal{M}_2(D_2')) \in S]

假设差异数据 rD1r \in D_1,有

Pr[(M1(D1),M2(D2))S]=(s1,s2)SPr[M1(D1)=s1M2(D2)=s2]=(s1,s2)SPr[M1(D1)=s1]Pr[M2(D2)=s2](独立性)(s1,s2)Seε1Pr[M1(D1)=s1]Pr[M2(D2)=s2](应用定义)=eε1(s1,s2)SPr[M1(D1)=s1]Pr[M2(D2)=s2]=eε1Pr[(M1(D1),M2(D2))S]\begin{aligned} \Pr[(\mathcal{M}_1(D_1), \mathcal{M}_2(D_2)) \in S] &= \sum_{(s_1, s_2) \in S} \Pr[\mathcal{M}_1(D_1) = s_1 \land \mathcal{M}_2(D_2) = s_2] \\ &= \sum_{(s_1, s_2) \in S} \Pr[\mathcal{M}_1(D_1) = s_1] \cdot \Pr[\mathcal{M}_2(D_2) = s_2] \quad \text{(独立性)}\\ &\le \sum_{(s_1, s_2) \in S} \e^{\varepsilon_1} \Pr[\mathcal{M}_1(D_1') = s_1] \cdot \Pr[\mathcal{M}_2(D_2') = s_2] \quad \text{(应用定义)} \\ &= \e^{\varepsilon_1} \sum_{(s_1, s_2) \in S} \Pr[\mathcal{M}_1(D_1') = s_1] \cdot \Pr[\mathcal{M}_2(D_2') = s_2] \\ &= \e^{\varepsilon_1} \Pr[(\mathcal{M}_1(D_1'), \mathcal{M}_2(D_2')) \in S] \end{aligned}

同理可以得到当 rD2r \in D_2 时有

Pr[(M1(D1),M2(D2))S]eε2Pr[(M1(D1),M2(D2))S]\Pr[(\mathcal{M}_1(D_1), \mathcal{M}_2(D_2)) \in S] \le \e^{\varepsilon_2} \Pr[(\mathcal{M}_1(D_1'), \mathcal{M}_2(D_2')) \in S]

因此无论 rr 属于哪个子集,都有

Pr[(M1(D1),M2(D2))S]emax(ε1,ε2)Pr[(M1(D1),M2(D2))S]\Pr[(\mathcal{M}_1(D_1), \mathcal{M}_2(D_2)) \in S] \le \e^{\max(\varepsilon_1, \varepsilon_2)} \Pr[(\mathcal{M}_1(D_1'), \mathcal{M}_2(D_2')) \in S]

即联合机制 M\mathcal{M} 满足 max(ε1,ε2)\max(\varepsilon_1, \varepsilon_2)-差分隐私。

并行组合性意味着,只要操作的数据子集互不关联,就可以进行海量的「并行」计算,而无需担心隐私预算爆炸性增长。

对后续过程的稳健性

对于一个已经满足差分隐私的机制,其输出结果无论经过任何形式的数据处理、分析、计算(无论多么复杂),其最终结果仍然满足相同的差分隐私级别。

证明

即证明如果一个机制 M:DO\mathcal{M}: \mathcal{D} \to \mathcal{O} 满足 ε\varepsilon-差分隐私,那么对于任意一个(随机或确定的)函数 g ⁣:OOg\colon \mathcal{O} \to \mathcal{O}',复合机制 gMg \circ \mathcal{M} 同样满足 ε\varepsilon-差分隐私。

M\mathcal{M} 是一个 ε\varepsilon-DP 机制。设 gg 是任意一个后续处理函数。我们定义一个新的机制 K(D)=g(M(D))\mathcal{K}(D) = g(\mathcal{M}(D))。我们需要证明 K\mathcal{K} 也是 ε\varepsilon-DP 的。

对于任意两个相邻数据集 D1,D2D_1, D_2,以及任意一个最终输出结果的集合 SOS' \subseteq \mathcal{O}',我们需要证明:

Pr[K(D1)S]eε×Pr[K(D2)S]\Pr[\mathcal{K}(D_1) \in S'] \le \e^{\varepsilon} \times \Pr[\mathcal{K}(D_2) \in S']

考虑不等式左边的 K(D1)\mathcal{K}(D_1) 的输出在 SS' 中的概率

Pr[K(D1)S]=Pr[g(M(D1))S]\Pr[\mathcal{K}(D_1) \in S'] = \Pr[g(\mathcal{M}(D_1)) \in S']

为了利用 M\mathcal{M} 的差分隐私性质,我们需要将关于 gg 输出的事件,转换成关于 M\mathcal{M} 输出的事件。

定义一个集合 SOS \subseteq \mathcal{O},它包含了所有能通过 gg 映射到 SS'M\mathcal{M} 的中间输出结果。

S={oOg(o)S}S = \{ o \in \mathcal{O} \mid g(o) \in S' \}

于是「g(M(D1))g(\mathcal{M}(D_1)) 的结果在 SS' 中」这个事件,就等价于「M(D1)\mathcal{M}(D_1) 的结果在 SS 中」这个事件。当然对于 D2D_2 也是一样。

因此可以重写概率:

Pr[g(M(D1))S]=Pr[M(D1)S]\Pr[g(\mathcal{M}(D_1)) \in S'] = \Pr[\mathcal{M}(D_1) \in S]

应用 M\mathcal{M}ε\varepsilon-差分隐私性质:因为 SSM\mathcal{M} 输出空间的一个子集,所以

Pr[M(D1)S]eε×Pr[M(D2)S]\Pr[\mathcal{M}(D_1) \in S] \le \e^{\varepsilon} \times \Pr[\mathcal{M}(D_2) \in S]

最后将上式右边的概率转换回关于 K\mathcal{K} 的形式:

eε×Pr[M(D2)S]=eε×Pr[g(M(D2))S]=eε×Pr[K(D2)S]\e^{\varepsilon} \times \Pr[\mathcal{M}(D_2) \in S] = \e^{\varepsilon} \times \Pr[g(\mathcal{M}(D_2)) \in S'] = \e^{\varepsilon} \times \Pr[\mathcal{K}(D_2) \in S']

将以上步骤连接起来,我们得到:

Pr[K(D1)S]=Pr[M(D1)S]eε×Pr[M(D2)S]=eε×Pr[K(D2)S]\Pr[\mathcal{K}(D_1) \in S'] = \Pr[\mathcal{M}(D_1) \in S] \le \e^{\varepsilon} \times \Pr[\mathcal{M}(D_2) \in S] = \e^{\varepsilon} \times \Pr[\mathcal{K}(D_2) \in S']

Pr[K(D1)S]eε×Pr[K(D2)S]\Pr[\mathcal{K}(D_1) \in S'] \le \e^{\varepsilon} \times \Pr[\mathcal{K}(D_2) \in S']

得证。

换句话说,数据分析师无法通过更努力地思考或对输出进行更多计算来削弱其隐私保护。一旦数据通过差分隐私机制发布,它就永远是安全的,不会因为后续操作而泄露更多隐私。

组隐私

隐私保护会随着组的大小 kk 平滑地衰减。如果保护单个记录的隐私预算是 ε\varepsilon,那么保护一个大小为 kk 的组的隐私预算就是 kεk \varepsilon

证明

形式化地说明组隐私就是,如果一个机制 K\mathcal{K} 满足 ε\varepsilon-差分隐私,那么对于任意两个数据集 D1,D2D_1, D_2,如果它们之间相差 kk 条记录,那么对于任意输出集合 SS,有

Pr[K(D1)S]ekε×Pr[K(D2)S]\Pr[\mathcal{K}(D_1) \in S] \le \e^{k\varepsilon} \times \Pr[\mathcal{K}(D_2) \in S]

这个证明可以通过构造一个数据集序列来完成。

D1D_1D2D_2 是相差 kk 条记录的数据集。我们可以构造一个包含 k+1k+1 个数据集的序列 D(0),D(1),,D(k)D^{(0)}, D^{(1)}, \dots, D^{(k)},使得:

  • D(0)=D1D^{(0)} = D_1
  • D(k)=D2D^{(k)} = D_2
  • 序列中任意相邻的两个数据集 D(i)D^{(i)}D(i+1)D^{(i+1)} 都只相差 1 条记录(即它们是相邻的)。这可以通过从 D1D_1 开始,逐一添加/删除记录直到变成 D2D_2 来实现。

现在我们对这个序列应用标准的 ε\varepsilon-差分隐私定义:

  • 对于 D(0)D^{(0)}D(1)D^{(1)}Pr[K(D(0))S]eε×Pr[K(D(1))S]\Pr[\mathcal{K}(D^{(0)}) \in S] \le \e^{\varepsilon} \times \Pr[\mathcal{K}(D^{(1)}) \in S]
  • 对于 D(1)D^{(1)}D(2)D^{(2)}Pr[K(D(1))S]eε×Pr[K(D(2))S]\Pr[\mathcal{K}(D^{(1)}) \in S] \le \e^{\varepsilon} \times \Pr[\mathcal{K}(D^{(2)}) \in S]
  • ……
  • 对于 D(k1)D^{(k-1)}D(k)D^{(k)}Pr[K(D(k1))S]eε×Pr[K(D(k))S]\Pr[\mathcal{K}(D^{(k-1)}) \in S] \le \e^{\varepsilon} \times \Pr[\mathcal{K}(D^{(k)}) \in S]

将这些不等式连乘起来,得到

Pr[K(D(0))S]eε×Pr[K(D(1))S]eε×(eε×Pr[K(D(2))S])ekε×Pr[K(D(k))S]=ekε×Pr[K(D2)S]\begin{aligned} \Pr[\mathcal{K}(D^{(0)}) \in S] &\le \e^{\varepsilon} \times \Pr[\mathcal{K}(D^{(1)}) \in S] \\ &\le \e^{\varepsilon} \times (\e^{\varepsilon} \times \Pr[\mathcal{K}(D^{(2)}) \in S]) \\ &\le \dots \\ &\le \e^{k\varepsilon} \times \Pr[\mathcal{K}(D^{(k)}) \in S] \\ &= \e^{k\varepsilon} \times \Pr[\mathcal{K}(D_2) \in S] \end{aligned}

得证。

组隐私量化了当攻击者拥有关于一个群体的背景知识时,隐私泄露的风险。它告诉我们,ε\varepsilon 的值必须足够小,因为实际的隐私损失会随着攻击者目标群体的大小而放大。

通过子抽样实现的隐私放大

设有一个大小为 nn 的数据集 DD。以采样率 p=mnp = \frac{m}{n}DD 中随机抽样(无放回)一个大小为 mm 的子样本 DsampleD_{\text{sample}}

如果机制 M\mathcal{M} 在作用于大小为 mm 的数据集时满足有界 ε\varepsilon-差分隐私,那么将抽样和 M\mathcal{M} 结合起来的复合机制 K(D)=M(Dsample)\mathcal{K}(D) = \mathcal{M}(D_{\text{sample}}),对于原始数据集 DD 来说,满足更强的 ln(1+p(eε1))\ln(1+p(\e^\varepsilon-1))-差分隐私。

ε\varepsilon 很小时,这个值约等于 pεp\varepsilon-差分隐私,即隐私预算被缩小了采样率 pp 的倍数。

证明

设有两个在无界意义上相邻的数据集 D1,D2D_1, D_2,其中 D1=n,D2=n1|D_1|=n, |D_2|=n-1,且 D1=D2{r}D_1 = D_2 \cup \{r\}

设机制 M\mathcal{M} 作用于大小为 mm 的数据集时,满足有界意义上的 ε\varepsilon-差分隐私。即对于任意大小为 mm 的、仅相差一个元素(替换关系)的数据集 Da,DbD_a, D_b,都有 Pr[M(Da)S]eεPr[M(Db)S]\Pr[\mathcal{M}(D_a) \in S] \le e^\varepsilon \Pr[\mathcal{M}(D_b) \in S]

我们分析复合机制 K(D)=M(Dsample)\mathcal{K}(D) = \mathcal{M}(D_{\text{sample}})

我们想要比较 Pr[K(D1)S]\Pr[\mathcal{K}(D_1) \in S]Pr[K(D2)S]\Pr[\mathcal{K}(D_2) \in S],其中 SSM\mathcal{M} 的输出空间的一个子集。

D1D_1 抽样时,有两种情况:

  1. 抽样包含记录 rr。这种情况发生的概率是 p=mnp = \frac{m}{n}
  2. 抽样不包含记录 rr。这种情况发生的概率是 1p1 - p

于是 Pr[K(D1)S]\Pr[\mathcal{K}(D_1) \in S] 可以分解为:

Pr[K(D1)S]=pPr[M(Dsample)SrDsample]+(1p)Pr[M(Dsample)SrDsample]\Pr[\mathcal{K}(D_1) \in S] = p \cdot \Pr[\mathcal{M}(D_{\text{sample}}) \in S \mid r \in D_{\text{sample}}] + (1 - p) \cdot \Pr[\mathcal{M}(D_{\text{sample}}) \in S \mid r \notin D_{\text{sample}}]

rr 被抽中,那么样本的其余 m1m-1 个元素来自 D2D_2。这种情况下的概率可以表示为 Pr[M(R{r})S]\Pr[\mathcal{M}(R \cup \left\lbrace r \right\rbrace) \in S],其中 RR 是从 D2D_2 中随机抽取的大小为 m1m-1 的子集。

rr 未被抽中,则样本全部 mm 个元素都来自 D2D_2。这种情况下的概率与从 D2D_2 中抽样完全的概率一样,即 Pr[K(D2)S]\Pr[\mathcal{K}(D_2 )\in S]

因此

Pr[K(D1)S]=pPr[M(Dsample)SrDsample]+(1p)Pr[M(Dsample)SrDsample]=pERD2m1[Pr[M(R{r})S]]+(1p)Pr[K(D2)S]\begin{aligned} \Pr[\mathcal{K}(D_1) \in S] &= p \cdot \Pr[\mathcal{M}(D_{\text{sample}}) \in S \mid r \in D_{\text{sample}}] + (1 - p) \cdot \Pr[\mathcal{M}(D_{\text{sample}}) \in S \mid r \notin D_{\text{sample}}]\\ &= p \cdot \mathbb{E}_{R \sim D_2^{m-1}}[\Pr[\mathcal{M}(R \cup \{r\}) \in S]] + (1 - p) \cdot \Pr[\mathcal{K}(D_2) \in S] \end{aligned}

其中 RD2m1R \sim D_2^{m-1} 表示 RR 是从 D2D_2 中随机抽取的大小为 m1m-1 的子集,E\mathbb{E} 表示取期望。

现在,我们来约束第一项的期望值。对于一个固定的、从 D2D_2 中抽取的 m1m-1 大小的子集 RR,我们考虑数据集 R{r}R \cup \{r\}。这是一个大小为 mm 的数据集。

为了应用 M\mathcal{M} 的隐私保证,我们需要将它与另一个在有界意义上相邻的数据集进行比较。我们构造一系列这样的数据集:对于任何 xD2Rx \in D_2 \setminus R,数据集 R{x}R \cup \{x\} 的大小也为 mm,且与 R{r}R \cup \{r\} 仅在 rrxx 这一个位置上不同。

根据 M\mathcal{M} 的有界 ε\varepsilon-DP 定义,对于任何 xD2Rx \in D_2 \setminus R,我们有:

Pr[M(R{r})S]eεPr[M(R{x})S]\Pr[\mathcal{M}(R \cup \{r\}) \in S] \le e^{\varepsilon} \Pr[\mathcal{M}(R \cup \{x\}) \in S]

由于上式对所有 nmn-m 个可能的 xx 都成立,我们可以对其取平均值,而不会破坏不等式:

Pr[M(R{r})S]eε1nmxD2RPr[M(R{x})S]\Pr[\mathcal{M}(R \cup \{r\}) \in S] \le e^{\varepsilon} \cdot \frac{1}{n-m} \sum_{x \in D_2 \setminus R} \Pr[\mathcal{M}(R \cup \{x\}) \in S]

现在,我们对 RR 取期望,利用期望的线性性质:

ERD2m1[Pr[M(R{r})S]]eεERD2m1[1nmxD2RPr[M(R{x})S]]\mathbb{E}_{R \sim D_2^{m-1}}[\Pr[\mathcal{M}(R \cup \{r\}) \in S]] \le e^{\varepsilon} \cdot \mathbb{E}_{R \sim D_2^{m-1}}\left[ \frac{1}{n-m} \sum_{x \in D_2 \setminus R} \Pr[\mathcal{M}(R \cup \{x\}) \in S] \right]

不等式右边的期望项。它描述了这样一个过程:

  1. D2D_2 中随机抽取一个大小为 m1m-1 的子集 RR
  2. 从剩下的 nmn-m 个元素中随机抽取一个元素 xx
  3. 将它们合并成一个大小为 mm 的数据集 R{x}R \cup \{x\}
  4. 计算 M(R{x})\mathcal{M}(R \cup \{x\}) 的输出概率,并对所有可能的 RRxx 取平均。

这个过程其实等价于直接从 D2D_2 中随机抽取一个大小为 mm 的子集。因此,这个期望值正好就是 Pr[K(D2)S]\Pr[\mathcal{K}(D_2) \in S]。即

ERD2m1[1nmxD2RPr[M(R{x})S]]=Pr[K(D2)S]\mathbb{E}_{R \sim D_2^{m-1}}\left[ \frac{1}{n-m} \sum_{x \in D_2 \setminus R} \Pr[\mathcal{M}(R \cup \{x\}) \in S] \right] = \Pr[\mathcal{K}(D_2) \in S]

所以,我们得到了界:

ERD2m1[Pr[M(R{r})S]]eεPr[K(D2)S]\mathbb{E}_{R \sim D_2^{m-1}}[\Pr[\mathcal{M}(R \cup \{r\}) \in S]] \le \e^{\varepsilon} \cdot \Pr[\mathcal{K}(D_2) \in S]

将这个结果代回 Pr[K(D1)S]\Pr[\mathcal{K}(D_1) \in S] 的表达式中,得到

Pr[K(D1)S]=pERD2m1[Pr[M(R{r})S]]+(1p)Pr[K(D2)S]p(eεPr[K(D2)S])+(1p)Pr[K(D2)S]=(peε+1p)Pr[K(D2)S]=(1+p(eε1))Pr[K(D2)S]\begin{aligned} \Pr[\mathcal{K}(D_1) \in S] &= p \cdot \mathbb{E}_{R \sim D_2^{m-1}}[\Pr[\mathcal{M}(R \cup \{r\}) \in S]] + (1 - p) \cdot \Pr[\mathcal{K}(D_2) \in S] \\ &\le p \cdot (\e^{\varepsilon} \cdot \Pr[\mathcal{K}(D_2) \in S]) + (1 - p) \cdot \Pr[\mathcal{K}(D_2) \in S] \\ &= (p \e^{\varepsilon} + 1 - p) \cdot \Pr[\mathcal{K}(D_2) \in S] \\ &= (1 + p(\e^{\varepsilon} - 1)) \cdot \Pr[\mathcal{K}(D_2) \in S] \\ \end{aligned}

Pr[K(D1)S](1+p(eε1))Pr[K(D2)S]\Pr[\mathcal{K}(D_1) \in S] \le (1 + p(\e^{\varepsilon} - 1)) \cdot \Pr[\mathcal{K}(D_2) \in S]

因此,复合机制 K\mathcal{K} 满足 ln(1+p(eε1))\ln(1 + p(\e^{\varepsilon} - 1))-差分隐私。

如果想对一个大型数据集进行差分隐私分析,一个常见的方法就是像上面那样从大数据集中随机抽取一小部分数据(一个子样本),然后在这个子样本上运行一个差分隐私机制。

这个「随机抽样」的步骤本身就提供了额外的隐私保护。因为对于任何一个个体来说,他们的信息有可能根本没有被抽中。这种不确定性放大了原有机制的隐私保护效果。

隐私放大效应使得我们可以在数千次迭代后,总的隐私预算仍然保持在一个合理的范围内,否则隐私预算会因顺序组合性而迅速耗尽。

高斯机制

ε\varepsilon-差分隐私的定义非常严格,它要求对于所有可能的输出结果,概率比都受到严格限制。这种严格性使得设计满足纯 ε\varepsilon-差分隐私的机制变得非常困难,可能需要加入过大的噪声,导致数据不可用。

因此引入了一种松弛的版本——(ε,δ)(\varepsilon, \delta)-差分隐私,允许有一小部分输出结果不满足严格的 ε\varepsilon-差分隐私条件。

(ε,δ)(\varepsilon, \delta)-差分隐私定义

机制 M\mathcal{M} 满足 (ε,δ)(\varepsilon, \delta)-差分隐私,如果对于任意两个相邻数据集 D1,D2D_1, D_2,以及任意输出结果集合 SS,都有

Pr[M(D1)S]eε×Pr[M(D2)S]+δ\Pr[\mathcal{M}(D_1) \in S] \le \e^{\varepsilon} \times \Pr[\mathcal{M}(D_2) \in S] + \delta

其中 δ\delta 是一个非常小的值,通常远小于 1D\frac{1}{|D|}

类似拉普拉斯机制添加的是拉普拉斯噪声,高斯机制(Gaussian Mechanism)通过向查询结果添加高斯(正态)分布的噪声来实现 (ε,δ)(\varepsilon, \delta)-差分隐私:

M(D)=f(D)+N(0,σ2)\mathcal{M}(D) = f(D) + \mathcal{N}(0, \sigma^2)

具体的相关证明可能要参考 The Algorithmic Foundations of Differential Privacy (Dwork & Roth, 2014),暂略。

直接给出结论,对于任意 ε(0,1)\varepsilon \in (0,1)δ>0\delta > 0,如果高斯噪声的标准差满足

σΔ2f2ln(1.25/δ)ε\sigma \ge \frac{\Delta_2 f \sqrt{2 \ln(1.25/\delta)}}{\varepsilon}

那么高斯机制 M(D)=f(D)+N(0,σ2)\mathcal{M}(D) = f(D) + \mathcal{N}(0, \sigma^2) 满足 (ε,δ)(\varepsilon, \delta)-差分隐私。

其中 Δ2f\Delta_2 f 是查询函数 ff2\ell_2 敏感度,定义为

Δ2f=maxD1,D2f(D1)f(D2)2\Delta_2 f = \max_{D_1, D_2} \|f(D_1) - f(D_2)\|_2

高斯机制有关的性质与证明跟概率论与统计课学的知识息息相关,可惜我已经忘得差不多了,相关资料看得吃力,加上上面那本书也没读过,因此这部分就草草结束吧,知道有这么回事就行了。

参考


  1. 这里的定义是无界差分隐私(Unbounded Differential Privacy),即数据集大小可变,只能添加或删除记录。另一种定义是有界差分隐私(Bounded Differential Privacy)即数据集大小固定,可以修改记录内容,但不能添加或删除记录。满足无界差分隐私的机制也满足有界差分隐私。 ↩︎

  2. 其中 O1,O2\mathcal{O}_1, \mathcal{O}_2 分别是 M1,M2\mathcal{M}_1, \mathcal{M}_2 的输出空间,即 SS 是联合输出空间 O1×O2\mathcal{O}_1 \times \mathcal{O}_2 的子集。 ↩︎