数据时代,很多机构需要面向公众或研究者发布其收集的数据。然而,这些数据中可能包含这用户的隐私信息。这要求发布者在发布前进行脱敏处理。本文介绍三种数据脱敏方法/标准:k-anonymity、 l \mathcal{l} l -diversity 和 t-closeness。
连接攻击
考虑如下两张表:
下面一张是某医院收集的病人信息,其中已经抹去了姓名、身份证号等信息。但是,直接发布这样简单处理的数据并不安全。因为接受者(recipient)可能知道其他信息,比如上面一张投票信息表。那么recipient就可以通过比对Birthdate、Sex 和 Zipcode 的值得知 Andre 患有 Flu。这种通过某些属性与外部表连接的攻击称为连接攻击。
基本概念
数据以表的形式表示,每一行表示一条记录(record),每一列表示一个属性(attribute)。每一个记录与一个特定用户/个体关联。这些属性可以分为三类:
- 标识符(explicit identifiers):可以直接确定一个个体。如:身份证号,姓名等。
- 准标识符集(quasi-identifler attribute set ):可以和外部表连接来识别个体的最小属性集。如Figure1中的 { 邮编、生日、性别 }。
- 敏感数据:用户不希望被人知道的数据。如:薪水、年龄等。可以认为数据表中除了标识符和准标识符之外都是敏感数据。
当公开数据表时,应避免用户的敏感数据被公开(disclosure),也即不能让观察者(observer)者将某条记录和一个确定的用户联系起来。信息公开(information disclosure)可以分为两类:
- 身份公开(identity disclosure):指可以将用户和特定记录联系起来(link)。
- 属性公开(attribute disclosure):当新公开的信息可以使观察者更准确地推测用户的特征时,称发生了属性公开。
另外需要注意的是,我们应当尽量使观察者无法将记录与用户进行连接,而不是使观察者获得错误的信息。因为即使错误的信息也可能给用户带来困扰(比如一个积极阳光的社会主义好青年,天天被推送小电影,这不是坑害祖国的花朵吗!)。
k k k- a n o n y m i t y anonymity anonymity( k k k-匿名)
准标识符假设
k-anonymity想法十分简单。其首先做了如下假设:
准标识符假设:
数据持有者可以识别出其所持有数据表中可能出现在外部数据中的属性,因此其可以准确的识别出准标识符集合。
显然这个假设可能不成立:比如持有者误判了哪些属性是连接敏感的并将其公开。然而,由于数据持有者并不清楚观察者知道哪些信息,这个问题并不好在算法上予以解决。我们只能依赖算法以外的东西——政策、合同等。反正k-anonymity认为这一假设是合理的。
k-anonymity Property
k-anonymity要求同一个准标识符至少要有k条记录。因此观察者无法通过准标识符连接记录。
上图table1是原数据,table2满足 3-anonymity,准标识符 Q I = { Z I P C o d e , A g e } QI=\{ZIP Code,Age\} QI={ZIPCode,Age}。Disease是敏感数据。
我们把拥有相同准标识符的所有记录称为一个等价类(equivalence class)。k-anonymity 即是要求同一等价类中的记录不少于k条。把等价类的大小组成的集合称为频率集(frequency fet)。
等价类是一个多重集(multiset),即其中可以有相同的元素。频率集应该也是多重集?
k-anonymity 使得观察者无法以高于 1 k \frac{1}{k} k1的置信度通过准标识符来识别用户。
k-anonymity 的缺点
k-anonymity 可以阻止身份公开,但无法防止属性公开。比如其无法抵抗一致性攻击和背景知识攻击。
- 同质攻击(homogeneity attack):如在table2中,第1-3条记录的敏感数据是一致的,因此这时候k-anonymity就失效了。观察者只要知道表中某一用户的ZIP Code是476**,年龄在20多岁就可以确定他有心脏病。
- 背景攻击(background knowledge attack):如果观察者通过ZIP Code和Age确定用户Carl在table2的等价类3中,同时观察者知道Carl患心脏病的可能很小,那么他就可以确定Carl有癌症。
l \mathcal{l} l- d i v e r s i t y diversity diversity
l \mathcal{l} l-diversity
如果一个等价类里的敏感属性至少有 l \mathcal{l} l个 良表示(well-represented) 的取值,则称该等价类具有 l \mathcal{l} l-diversity。如果一个数据表里的所有等价类都具有 l \mathcal{l} l-diversity,则称该表具有 l \mathcal{l} l-diversity。
良表示
良表示有三种定义:
1. 可区分良表示(Distinct l \mathcal{l} l-diversity
最简单的 l \mathcal{l} l-diversity要求同一等价类中的敏感属性要有至少 l \mathcal{l} l个可区分的取值。但是,如果某一个取值的频率明显高于其他取值,这将使得观察者可以以较高的置信度认为这一等价类中的敏感属性都取这个值。这导致了下面两种良表示定义。
2. 熵良表示(Entropy l \mathcal{l} l-diversity)
记
S
S
S为敏感属性的取值集合,
p
(
E
,
s
)
p(E,s)
p(E,s)为等价类
E
E
E中敏感属性取值
s
s
s的概率,entropy
l
\mathcal{l}
l-diversity要求下式成立:
E
n
t
r
o
p
y
(
E
)
=
−
∑
s
∈
S
p
(
E
,
s
)
log
p
(
E
,
s
)
≥
log
l
Entropy(E)=-\sum_{s\in S}p(E,s)\log p(E,s)\ge\log l
Entropy(E)=−s∈S∑p(E,s)logp(E,s)≥logl
若每一等价类都满足Entropy
l
\mathcal{l}
l-diversity,那么整张数据表的熵也必然不小于
log
l
\log l
logl。这个要求太严格了,比如敏感属性的取值集合中某些取值的频率较高,这将导致整张表的熵比较低。
3. 递归良表示(Recursive (c, l \mathcal{l} l)-diversity)
设等价类
E
E
E中敏感属性有
m
m
m种取值,记
r
i
r_i
ri为出现次数第
i
i
i多的取值的频次,如果
E
E
E满足:
r
1
<
c
(
r
l
+
r
l
+
1
+
…
r
m
)
r_1<c(r_l+r_{l+1}+\dots r_m)
r1<c(rl+rl+1+…rm)
则称等价类
E
E
E具有recursive (c,
l
\mathcal{l}
l)-diversity。如果数据表中所有等价类都具有recursive (c,
l
\mathcal{l}
l)-diversity,则称数据表具有recursive (c,
l
\mathcal{l}
l)-diversity。
l \mathcal{l} l-diversity 的缺点
1. 可能难以实现且无必要实现
比如疾病检测报告,假设敏感属性只有”阳性“和”阴性“,10000条记录中分别占1%和99%。阴性人群并不在乎被人知道其检测结果为阴性,但阳性人群可能很敏感。这时候如果一个等价类中均为阴性,是没有必要实现可区分的2-diversity的。同时,注意到整体的熵很小,要实现熵良表示也是很难的, l l l必须取很小的值。
2. 不足以阻止属性公开
下面列举两种攻击:
-
Skewness Attack:继续考虑疾病检测报告的例子。假设一个等价类中恰好有一半阳性,一半阴性。那么此时这个等价类满足可区分的2-diversity、熵2-diversity和任意 ( c , l ) (c,l) (c,l)-diversity。但是,此时,相比于整体1%阳性的概率,该等价类中的个体都有1/2的概率被认为是阳性。
再考虑另一种情况:一个等价类中有49个阳性和1个阴性,这符合可区分的2-diversity。同时,由于其熵大于整体的熵,必然也将满足任何可以实现的熵良表示。但是,在这个等价类中,每个个体都有98%的概率被认为是阳性,远高于整体的1%!这代表了一种很严重的隐私风险。
另外,上述情况和49个阴性一个阳性具有完全相同的diversity,但是这两种情况却具有完全不同的隐私风险 。
-
Similarity Attack: l l l-diversity并没有考虑语义信息,这将带来风险。比如如果敏感属性是”工资“,某一等价类中的取值全在3k-5k之间,那么观察者只要知道用户在这一等价类中就可以知道其工资处于较低水平,具体数值观察者并不关心。
t-closeness
t-closeness认为,在数据表公开前,观察者有对于客户敏感属性的先验信念(prior belief),数据表公开后观察者获得了后验信念(posterior belief)。这二者之间的差别就是观察者获得的信息(information gain)。t-closeness将信息获得又分为两部分:关于整体的和关于特定个体的。
建模
首先考虑如下思想实验:
记观察者的先验信念为 B 0 B_0 B0,我们先发布一个抹去准标识符信息的数据表,这个表中敏感属性的分布记为 Q Q Q,根据 Q Q Q,观察者得到了 B 1 B_1 B1;然后发布含有准标识符信息的数据表,那么观察者可以由准标识符识别特定个体所在等价类,并可以得到该等价类中敏感属性的分布 P P P,根据 P P P,观察者得到了 B 2 B_2 B2。
l l l-diversity其实就是限制 B 2 B_2 B2与 B 0 B_0 B0之间的区别。然而,我们发布数据是因为数据有价值,这个价值就是数据整体的分布规律,可以用 B 0 B_0 B0与 B 1 B_1 B1之间的差别表示。二者差别越大,表明数据的价值越大,这一部分不应被限制。也即整体的分布Q应该被公开。因为这正是数据的价值所在。而 B 1 B_1 B1与 B 2 B_2 B2之间的差别,就是我们需要保护的隐私信息,应该被尽可能限制。
t-closeness通过限制 P P P与 Q Q Q的距离来限制 B 1 B_1 B1与 B 2 B_2 B2的区别。其认为如果 P = Q P=Q P=Q,那么应有 B 1 = B 2 B_1=B_2 B1=B2。 P 、 Q P、Q P、Q越近, B 1 、 B 2 B_1、B_2 B1、B2也应越近。
The t-closeness Principle:如果等价类E中的敏感属性取值分布与整张表中该敏感属性的分布的距离不超过阈值 t t t,则称E满足t-closeness。如果数据表中所有等价类都满足t-closeness,则称该表满足t-closeness。
EMD 距离
可以看出,t-closeness的一个关键在于如何定义两个分布之间的距离。原论文中采用了搬土距离(Earth Mover Distance,EMD)。EMD的好处在于其考虑了属性之间的语义关系。这里不详述。
平衡
显然,t-closeness 限制了准标识符和敏感属性之间的联系,损失了一些信息。但这正是发布者需要抑制的,如果观察者知道太多准标识符和敏感属性间的信息,那么很可能发生属性泄露。通过阈值 t t t的设置可以平衡隐私保护和数据价值。
匿名模型的实现算法
Samarati’s Algorithm
**基本过程:**记泛化结构高度为h,检查高为h/2的结点能否满足k-匿名,满足则继续检查h/4高度的结点;否则检查3h/4高度的结点。重复这一过程直到找到满足k-匿名的最低层
**特点:**最早的k-匿名实现算法。基于二分查找的全局泛化算法,需要预先定义的泛化结构。
参考文献:
Samarati P . Protecting Respondents’ Identities in Microdata Release[J]. IEEE Trans.knowl.data Eng, 2001, 13(6):1010-1027.
Mondrian
**基本过程:**Mondrian算法针对数值型数据。以单个属性为例,以所有记录在该属性取值的中位数将记录划分为两部分,然后每一部分继续以中位数划分为两个区间。重复这个过程,直到每个区间包含的记录数在k-2k之间。此时每个区间都是一个等价类,区间内的值的泛化为该区间范围值。多属性情况类似,就是多维空间里的区间划分问题。
**特点:**局部泛化;不需要泛化结构;等价类大小均衡;只适用于数值型数据;泛化区间可能重叠
参考文献:
Kristen LeFevre, David J DeWitt and Raghu Ramakrishnan. Mondrian multidimensional k-anonymity,
In Proc. of the International Conference on Data Engineering (ICDE’06), Atlanta, Georgia, April 2006.
Incognito
**基本过程:**这个算法是把关联规则挖掘里的apriori算法套过来了。见如下算法描述:
**特点:**全局泛化;可以找出所有可行的全局泛化方案;其缺点在于效率相对较低。
参考文献:
Lefevre K, Dewitt D J and Ramakrishnan R. Incognito:Efficient full-domain k-anonymity, In Proceedings of
ACM SIGMOD. ACM, New York, 2005
K-OPTIMIZE
**基本过程:**算法将k-匿名方法的寻找转换为集合枚举问题。其假设准标识符集合里的属性间有序,每个属性的取值间也有序。比如下图表示了准标识符集合{age、sex、zipcode}的一种有序排列。那么字母表I={1,2,…,9}的子集{1,4,5,9}就表示一种泛化方案: 1,2,3合并,6,7,8合并。带星号的可以省略,因此 {1,4,5,9}={5,9}。
那么k-匿名的寻找就变成幂集搜索问题了。K-OPTIMIZE设计了一种集合枚举树的搜索算法,如下图:
参考文献:
R J Bayardo, R Agarwal. Data privacy through optimal k-anonymization, In Proc. of the 21st International Conference on Data Engineering(ICDE’05), Tokyo,Japan, 2005, pp 217-228