数据 v.s. 隐私
在大数据的时代,数据成为了科学研究的基石。我们在享受着推荐算法、语音识别、图像识别、无人车驾驶等智能的技术带来的便利的同时,数据在背后担任着驱动算法不断优化迭代的角色。在科学研究、产品开发、数据公开的过程中,算法需要收集、使用用户数据,在这过程中数据就不可避免的暴露在外。历史上就有很多公开的数据暴露了用户隐私的案例。
美国在线(AOL)是一家美国互联网服务公司,也是美国最大的互联网提供商之一。在 2006 年8月,为了学术研究,AOL 公开了匿名的搜索记录,其中包括 65 万个用户的数据,总共 20M 条查询记录。在这些数据中,用户的姓名被替换成了一个个匿名的 ID,但是纽约时报通过这些搜索纪录,找到了 ID 匿名为4417749的用户在真实世界中对应的人。ID 4417749 的搜索记录里有关于“60岁的老年人”的问题、“Lilburn地方的风景”、还有“Arnold” 的搜索字样。通过上面几条数据,纽约时报发现 Lilburn 只有14个人姓Arnold,最后经过直接联系这14个人确认 ID 4417749 是一位62岁名字叫 Thelma Arnold的老奶奶。最后 AOL 紧急撤下数据,发表声明致歉,但是已经太晚了。因为隐私泄露事件,AOL遭到了起诉,最终赔偿受影响用户总额高达五百万美元。
同样是 2006年,美国最大的影视公司之一 Netflix,举办了一个预测算法的比赛(Netflix Prize),比赛要求在公开数据上推测用户的电影评分 。Netflix 把数据中唯一识别用户的信息抹去,认为这样就能保证用户的隐私。但是在 2007 年来自The University of Texas at Austin 的两位研究人员表示通过关联 Netflix 公开的数据和 IMDb(互联网电影数据库)网站上公开的纪录就能够识别出匿名后用户的身份。三年后,在2010年,Netflix 最后因为隐私原因宣布停止这项比赛,并因此受到高额罚款,赔偿金额总计九百万美元。
近几年各大公司均持续关注用户的隐私安全。例如苹果 在2016 年 6 月份的WWDC 大会上就提出了一项名为Differential Privacy 的差分隐私技术。苹果声称他能通过数据计算出用户群体的行为模式,但是却无法获得每个用户个体的数据。那么差分隐私技术又是怎么做的呢?
在大数据时代,如何才能保证我们的隐私呢?要回答这个问题,我们首先要知道什么是隐私。
什么是隐私?
我们经常谈论到隐私泄漏、隐私保护,那么什么是隐私呢?举个例子,居住在海淀区五道口的小明经常在网上购买电子产品,那小明的姓名、购买偏好和居住地址算不算是隐私呢?如果某购物网站统计了用户的购物偏好并公开部分数据,公开的数据中显示北京海淀区五道口的用户更爱买电子产品,那么小明的隐私是否被泄漏了呢?要弄清楚隐私保护,我们先要讨论一下究竟什么是隐私。
对于隐私这个词,科学研究上普遍接受的定义是“单个用户的某一些属性”,只要符合这一定义都可以被看做是隐私。我们在提“隐私”的时候,更加强调的是“单个用户”。那么,一群用户的某一些属性,可以认为不是隐私。我们拿刚才的例子来看,针对小明这个单个用户,“购买偏好”和“居住地址”就是隐私。如果公开的数据说住在五道口的小明爱买电子产品,那么这显然就是隐私泄漏了。但是如果数据中只包含一个区域的人的购买偏好,就没有泄露用户隐私。如果进一步讲,大家都知道小明住在海淀区五道口,那么是不是小明就爱买点此产品了呢?这种情况算不算事隐私泄漏呢?答案是不算,因为大家只是通过这个趋势推测,数据并不显示小明一定爱买电子产品。
所以,从隐私保护的角度来说,隐私是针对单个用户的概念,公开群体用户的信息不算是隐私泄漏,但是如果能从数据中能准确推测出个体的信息,那么就算是隐私泄漏。
隐私保护的方法
从信息时代开始,关于隐私保护的研究就开始了。随着数据不断地增长,人们对隐私越来越重视。我们在讨论隐私保护的时候包括两种情况。
第一种是公司为了学术研究和数据交流开放用户数据,学术机构或者个人可以向数据库发起查询请求,公司返回对应的数据时需要保证用户的隐私。
第二种情况是公司作为服务提供商,为了提高服务质量,主动收集用户的数据,这些在客户端上收集的数据也需要保证隐私性。学术界提出了多种保护隐私的方法和测量隐私是否泄露的工具,例如k-anonymity(k-匿名化)、l-diversity(l-多样化)、t-closeness、 ε-differentialprivacy(差分隐私)、同态加密(homomorphic encryption)、零知识证明(zero-knowledge proof)等等。今天主要介绍k-anonymity(k-匿名化),l-diversity(l-多样化),t-closeness 和 ε-differential privacy(差分隐私)。这些方法先从直观的角度去衡量一个公开数据的隐私性,再到使用密码学、统计学等工具保证数据的隐私性。
下面我们一一解读这四种隐私保护的方法:
k-anonymity(k-匿名化)
k-anonymity 是在 1998 年由 Latanya Sweeney 和 Pierangela Samarati 提出的一种数据匿名化方法。
我们先看一下下面的这个表格:
我们把要表格中的公开属性分为以下三类:
- Key attributes: 一般是个体的唯一标示,比如说姓名、地址、电话等等,这些内容需要在公开数据的时候删掉。
- Quasi-identifier: 类似邮编、年龄、生日、性别等不是唯一的,但是能帮助研究人员关联相关数据的标示。
- Sensitive attributes: 敏感数据,比如说购买偏好、薪水等等,这些数据是研究人员最关心的,所以一般都直接公开。
简单来说,k-anonymity 的目的是保证公开的数据中包含的个人信息至少 k-1 条不能通过其他个人信息确定出来。也就是公开数据中的任意 quasi-identifier信息,相同的组合都需要出现至少 k 次。
举个例子,假设一个公开的数据进行了 2-anonymity 保护。如果攻击者想确认一个人(小明)的敏感信息(购买偏好),通过查询他的年龄、邮编和性别,攻击者会发现数据里至少有两个人是有相同的年龄、邮编和性别。这样攻击者就没办法区分这两条数据到底哪个是小明了,从而也就保证了小明的隐私不会被泄露。
下面这个表就是 2-anonymization 过的信息:
k-anonymity的方法主要有两种,一种是删除对应的数据列,用星号(*)代替。另外一种方法是用概括的方法使之无法区分,比如把年龄这个数字概括成一个年龄段。对于邮编这样的数据,如果删除所有邮编,研究人员会失去很多有意义的信息,所以可以选择删除最后一位数字。
从这个表中,即使我们知道小明是男性、24岁、邮编是100083,却仍然无法知道小明的购买偏好。而研究人员依然可以根据这些数据统计出一些有意义的结果,这样既兼顾了个人的隐私,又能为研究提供有效的数据。
k-anonymity能保证以下三点:
1. 攻击者无法知道某个人是否在公开的数据中
2. 给定一个人,攻击者无法确认他是否有某项敏感属性
3. 攻击者无法确认某条数据对应的是哪个人(这条假设攻击者除了 quasi-identifier 信息之外对其他数据一无所知,举个例子,如果所有用户的偏好都是购买电子产品,那么 k-anonymity 也无法保证隐私没有泄露)
攻击方法
未排序匹配攻击 (unsorted matching attack) :当公开的数据记录和原始记录的顺序一样的时候,攻击者可以猜出匿名化的记录是属于谁。例如如果攻击者知道在数据中小明是排在小白前面,那么他就可以确认,小明的购买偏好是电子产品,小白是家用电器。解决方法也很简单,在公开数据之前先打乱原始数据的顺序就可以避免这类的攻击。
补充数据攻击 (complementary release attack) :假如公开的数据有多种类型,如果它们的 k-anonymity 方法不同,那么攻击者可以通过关联多种数据推测用户信息。
除此之外,如果敏感属性在同一类 quasi-identifiers 中缺乏多样性,或者攻击者有其它的背景知识,k-anonymity 也无法避免隐私泄露。
我们知道李雷的信息,表中有两条对应的数据,但是他们的购买偏好都是电子产品。因为这个敏感属性缺乏多样性,所以尽管是 2-anonimity 匿名化的数据,我们依然能够获得李雷的敏感信息。
如果我们知道小紫的信息,并且知道她不喜欢购买护肤品,那么从表中,我们仍可以确认小紫的购买偏好是厨具。
l-diversity(l-多样化)
通过上面的例子,我们引出了多样化的概念。简单来说,在公开的数据中,对于那些quasi-identifier 相同的数据中,敏感属性必须具有多样性,这样才能保证用户的隐私不能通过背景知识等方法推测出来。
l-diversity 保证了相同类型数据中至少有 l 种内容不同的敏感属性。
例如在上图的例子中,有 10 条相同的类型的数据,其中 8 条的购买偏好是电子产品,其他两条分别是图书和家用电器。那么在这个例子中,公开的数据就满足 3-diversity 的属性。
除了以上介绍的简单 l-diversity 的定义,还有其他版本的 l-diversity,引入了其他统计方法。比如说:
基于概率的l-diversity (probabilistic l-diversity): 在一个类型中出现频率最高的值的概率不大于1/l。
基于墒的l-diversity (entropy l-diversity): 在一个类型中敏感数据分布的墒至少是 log(l)。
递归 (c,l)-diversity (recursive (c, l)-diversity): 简单来说就是保证最经常出现的值的出现频率不要太高。
l-diversity 也有其局限性:
敏感属性的性质决定即使保证了一定概率的 diversity 也很容易泄露隐私。例如,医院公开的艾滋病数据中,敏感属性是“艾滋病阳性”(出现概率是 1%)和“艾滋病阴性”(出现概率是 99%),这两种值的敏感性不同,造成的结果也不同。
有些情况下 l-diversity 是没有意义的:比如说艾滋病数据的例子中仅含有两种不同的值,保证2-diversity 也是没有意义的。
l-diversity 很难达成:例如,我们想在 10000 条数据中保证 2-diversity,那么可能最多需要10000* 0.01 = 100 个相同的类型。这时可能通过之前介绍的 k-anonymity的方法很难达到。
偏斜性攻击 (Skewness Attack):假如我们要保证在同一类型的数据中出现“艾滋病阳性”和出现“艾滋病阴性”的概率是相同的,我们虽然保证了 diversity,但是我们泄露隐私的可能性会变大。因为l-diversity 并没有考虑敏感属性的总体的分布。
l-diversity 没有考虑敏感属性的语义,比如说下面的例子,我们通过李雷的信息从公开数据中关联到了两条信息,通过这两条信息我们能得出两个结论。第一,李雷的工资相对较低;第二,李雷喜欢买电子电器相关的产品。
t-closeness
上面最后一个问题就引出了 t-closeness 的概念,t-closeness 是为了保证在相同的quasi-identifier类型组中,敏感信息的分布情况与整个数据的敏感信息分布情况接近(close),不超过阈值 t。
如果刚才的那个数据保证了 t-closeness 属性,那么通过李雷的信息查询出来的结果中,工资的分布就和整体的分布类似,进而很难推断出李雷工资的高低。
最后,如果保证了 k-anonymity,l-diversity 和 t-closeness,隐私就不会泄露了么?答案并不是这样,我们看下面的例子:
在这个例子中,我们保证了 2- anonymity , 2-diversity , t-closeness(分布近似),工资和购买偏好是敏感属性。攻击者通过李雷的个人信息找到了四条数据,同时知道李雷有很多书,这样就能很容易在四条数据中找到李雷的那一条,从而造成隐私泄露。可能有些读者会有疑问,通过背景知识攻击 k-anonymity 的前提是不是假设了解 quasi-identifier ?并不是这样,针对敏感属性的背景攻击对 k-anonymity 也适用,所以无论经过哪些属性保证,隐私泄露还是很难避免。
差分隐私(differential privacy)
除了之前我们介绍的针对 k-anonymity, l-diversity,t-closeness 三种隐私保护方法的攻击之外,还有一种叫做差分攻击 ( differential attack )。举个例子,购物公司发布了购物偏好的数据,说我们有 100 个人的购物偏好数据,其中有 10 个人偏爱购买汽车用品,其他 90 个偏爱购买电子产品。如果攻击者知道其中 99 个人是偏爱汽车用品还是电子产品,就可以知道第 100 个人的购物偏好。这样通过比较公开数据和既有的知识推测出个人隐私,就叫做差分攻击。
在 2009 年,微软研究院的Cynthia Dwork 提出差分隐私的概念,差分隐私就是为了防止差分攻击,也就是说尽管攻击者知道发布的 100 个人的个人以信息和其中 99 个人的信息,他也没办法通过比对这两个信息获得第 100 个人的信息。
简单来说,差分隐私就是用一种方法使得查询 100 个信息和查询其中 99 个的信息得到的结果是相对一致的,那么攻击者就无法通过比较(差分)数据的不同找出第100 个人的信息。这种方法就是加入随机性,如果查询 100 个记录和 99 个记录,输出同样的值的概率是一样的,攻击者就无法进行差分攻击。进一步说,对于差别只有一条记录的两个数据集 D 和 D' (neighboring datasets),查询他们获得结果相同的概率非常接近。注意,这里并不能保证概率相同,如果一样的话,数据就需要完全的随机化,那样公开数据也就没有意义。所以,我们需要尽可能接近,保证在隐私和可用性之间找到一个平衡。
ε-差分隐私 (ε-differential privacy, ε-DP) 可以用下面的定义来表示:
其中 M 是在 D 上做任意查询操作,对查询后的结果加入一定的随机性,也就是给数据加噪音,两个 datasets加上同一随机噪音之后查询结果为 C 的概率比小于一个特定的数 。这样就能保证用户隐私泄露的概率有一个数学的上界,相比传统的 k-anonymity,差分隐私使隐私保护的模型更加清晰。
我们用一个例子解释差分隐私的定义:
上图中 D1 和D2 是两个neighboring datasets,他们只有一条记录不一致,在攻击者查询“20-30岁之间有多少人偏好购买电子产品”的时候,对于这两个数据库得到的查询结果是 100 的概率分别是 99% 和 98%,他们的比值小于某个数。如果对于任意的查询,都能满足这样的条件,我们就可以说这种随机方法是满足ε-差分隐私的。因为 D1 和 D2 是可以互换的,所以更加严格的讲,他们的比值也要大于 。
无论查询是什么,两个相邻的数据库返回的结果总是近似的。
要达到数据的差分隐私有四种方法:
输出结果变换
输入查询变换
中间值变换
抽样和聚合数据
本文接下来主要介绍输出结果变换的方法,这种方法主要针对查询结果是数值或者数值向量的情况,通过加入噪声使输出结果达到 ε-DP。
输出结果变换:加入噪声
在差分隐私中,防止隐私泄露的重要因素是在查询结果中加噪音,对于数值的查询结果,一种常见的方法就是对结果进行数值变换。要解释如何加入噪音,我们先看一下下面的这个例子:
假如某公司公开了数据,并且对外提供了查询数据的接口 f(x),针对不同的查询 x,服务器都会输出一个查询结果 f(x) + 噪声,加入噪声就是为了保证 ε-差分隐私。
那么如何选择噪声呢?
差分隐私方法中,作者巧妙的利用了拉普拉斯分布的特性,找到了合适的噪声方法。针对数值或向量的查询输出,M(x) = f(x) + 噪声。我们能得出以下结论:
其中 Lap 是拉普拉斯分布,GS 表示 global sensitivity:
详细的证明可以参考差分隐私的相关文章。
我们有了这个结论,想要对某个查询接口 f(x) 保证 ε-DP 的话,只需要在查询结果上加入 Lap(GS/e) 的噪声就可以了。
拉普拉斯分布和其概率密度函数如下:
(ε,δ)-differential privacy, (ε, δ)-DP
ε-DP 是一种“严格”的隐私保护保证,当在数据库中添加和删除一条数据时候,保证所有查询的输出都类似。但是(ε, δ)-DP 在 ε-DP 的保证中允许了一定概率的错误发生,比如说,用户在 (ε, δ)-DP 的保护下会有 δ 概率的隐私泄露。
基于这些的概念,差分隐私在机器学习算法中也能够使用,常见的算法,比如说 PCA、logistic regression、SVM都有对应的差分隐私化算法。
差分隐私在数据的实用性和隐私性之间达到了平衡,使用者可以通过设定自己的“隐私预算”(privacy budget)来调整数据的实用性和隐私性。但是差分隐私也不是万能的,其中加入噪声的很多算法需要在大量的数据集上才实用。除此之外,什么才是“隐私预算”的合理设定也是一个问题。这些都是差分隐私面临的问题和挑战。并且由于差分隐私对于“背景知识”的要求过于强,所以需要在结果中加入大量随机化,导致数据的可用性(utility)急剧下降。但是差分隐私作为一个非常优雅的数学工具,是隐私保护的研究在未来的一个发展方向。差分隐私用严格的数学证明告诉人们一个匿名化的公开数据究竟能保护用户多少的隐私。
k-匿名化与 ε-差分隐私的关系
我们前面分别单独介绍了 k-匿名化和 ε-差分隐私,k-匿名化相对比较容易理解和实践,差分隐私更像是从理论上证明了隐私保护的边界。虽然方法的分析角度完全不同,但是它们之间却有着紧密的联系。普渡大学的Ninghui Li教授在 Provably PrivateData Anonymization: Or, k-Anonymity Meets Differential Privacy 文章中详细分析了 k-匿名化和 ε-差分隐私之间的关系。文章证明了在使用 k-匿名化“得当”的情况下,可以满足一定条件的 (ε, δ)-differentialprivacy。同时也提出了一种 k-anonymity 的变形:β-Sampling+ Data-independent _Generalization + k-Suppression (k, β)-SDGS ,通过变形后的 k-anonymity 就可以使之满足差分隐私。通过使用差分隐私这种工具,我们就能精确的衡量前人提出的 k-anonymity,在理论研究上具有重要意义。
实际案例
在实际应用中使用差分隐私时需要考虑的问题还有很多,我们在介绍差分隐私的时候假设所有的查询操作都由可信的数据库处理,数据库里存储着用户的原始数据。那么如果数据库被攻击了,包含用户隐私的原始数据就泄露了。
如果不收集用户的原始数据,在客户端上先做差分隐私,再上传给服务器,这个问题就解决了。最近Google率先使用RAPPOR系统在 Chrome 浏览器上通过这种方法收集用户的使用情况数据。RAPPOR 基于“随机应答”(randomized response)的方法保护用户的原始数据不被泄露,随机应答的流程如下:
当用户需要上报个人数据的时候,首先“抛硬币”决定是否上报真实数据。如果是正面,则上报真实数据。如果不是,就上报一个随机的数据,再“抛一次硬币”决定随机数据的内容。
服务器收到所有的数据后,因为知道“抛硬币”是正面的概率,服务器就能够判断返回的数据是正确的概率。
这种“随机应答”的方法在理论上也被证明是服从ε-差分隐私的。对于用户来说,隐私数据在上报给服务器之前就已经加了噪声,从而具有一定保证。对于公司来说,也能收集到有效的数据。
RAPPOR 使用“随机应答”的方法克服了之前只能回答简单查询语句的限制,现在可以上报包含字符串这类更加复杂的回答。RAPPOR 在上报字符串信息的时候首先使用“布隆过滤器”(bloom filter)算法把字符串哈希到一个数组中,然后再加入噪声传给服务器。布隆过滤器不需要存储元素本身,并可以用于检索一个元素是否在一个集合中。通过使用这种方法,就可以对字符串数据添加噪音,保护用户的隐私。
苹果在 2016 年的世界开发者大会(WWDC)上也宣布使用差分隐私的方法收集用户数据。虽然苹果没有透露具体的细节,我们从官方的描述中也可以推测出苹果也使用了在客户端上做匿名化再传输到服务器的方法。
Differentialprivacy is a research topic in the areas of statistics and data analytics thatuses hashing, subsampling and noiseinjection to enable...crowdsourced learning while keeping the data ofindividual users completely private. Apple has been doing some super-importantwork in this area to enable differential privacy to be deployed at scale.
我们刚才介绍的 Google 和 Apple 的模型都是先在本地做差分隐私,然后再上报给服务器,我们把这种方法叫做本地模式(local mode)。这种差分隐私的做法在上报数据可以相互关联的情况下还是存在隐私泄漏。Google的RAPPOR虽然解决了对同一个数据的多次上报的隐私泄露问题,但并没有解决多个相关数据上报后产生的隐私泄露问题。对于这一问题,Apple也没有给出详细的解释。
除了Google 和苹果在内部产品中使用差分隐私方法,哈佛大学公开了一个名为PSI (Ψ) 的项目,提供了一个便捷的差分隐私工具。使用者通过上传数据,调整差分隐私的参数,就可以获得满足差分隐私的数据集。
总结
本文介绍了学术界和工业界对于用户隐私保护的努力成果。我们首先介绍了 k-anonymity,即通过变换隐私数据,保证相同特性的用户在数据库出现的次数至少是 k 次。然后,为了防止攻击者通过隐私数据的背景知识推测用户身份,提出使用 l-diversity,保证相同特征的用户中,隐私数据相同的个数大于 l。除此之外,我们也讨论了 t-closeness。最后我们详细介绍了差分隐私的概念,以及实际应用中应如何使用差分隐私。
从最开始的 k-anonymity, l-diversity , t-closeness 到现在的 ε-差分隐私,都是为了既保证用户的个人隐私,也能对实际应用和研究提供有价值的数据。在大数据的时代中,希望各公司在利用数据提供更好的服务的同时,能保护好用户的个人隐私。这是法律的要求,也是安全行业的追求。我们相信隐私保护技术会越来越受到重视,并从学术理论迅速投入工业界实战应用。