1.引言

隐私的定义

“数据隐私技术的目标是,允许数据分析方获取隐私数据中蕴含的趋势,但不会泄露特定个体的信息。”

“这一定义不包括保证安全性的技术,如加密技术”

“安全与隐私之间的差异:隐私技术涉及到故意发布信息,并试图控制从发布信息中学到什么。安全技术通常会阻止信息的泄露,并控制数据可以被谁访问”

“只有当安全对隐私有重要影响时,我们才会讨论相应的安全技术”

差分隐私

文章聚焦在差分隐私

“差分隐私(及其变体)是我们已知的唯一能从数学角度提供可证明隐私保护能力的方法”

2.去标识/匿名化

个人标识信息:能唯一标识一个个体的信息,有很多例子:身份证号、姓名、电话号码等

去标识:移除数据的标识信息

关联/链接攻击:寻找辅助信息【包含个人标识信息的数据】和去标识数据库的重叠列,即重识别个体。

“数据库领域将此类匹配操作称为关联(JOIN) 两个数据表。我们可以使用Pandas的 merge 函数实现此操作。”

karries_row = adult_pii[adult_pii['Name'] == 'Karrie Trusslove'] 
pd.merge(karries_row, adult_data, left_on=['DOB', 'Zip'], right_on=['DOB', 'Zip'])

“拉坦娅·斯威尼(Latanya Sweeney)的研究结果表明 1,组合 使用出生日期、性别、邮政编码,可以唯一重标识出87%的美国公民”

差分攻击:发布聚合是不能保护隐私的,差分攻击可以攻击聚合结果

“考虑对数据集中某个大分组执行两次求和问询(第一个是对整个数据集进行问询,第二个是对除一条记录外的所有记录进行问询):”

“如果我们得到了这两个问询的回答,我们可以简单地对结果求减法,从而准确获得凯莉的年龄!”

3.k-匿名

“𝑘-匿名性的定义用数学描述了我们的直观 想法:一部分辅助信息不应该”过多地”缩小个体所属记录的可能范围”

“将数据集按照准标识(Quasi-Identifier)分组,使每个分组中的个体都拥有相同的准标识。如果每个分组的大小都至少为 𝑘,则我们称此数据集满足 𝑘-匿名 性”

“这样一来,虽然攻击者仍然可以将攻击范围缩小至特定 的分组中,但攻击者无法进一步确定分组中的哪个个体才是攻击目标”

验证k-匿名:依次检测数据库的每一行,查看有多少行和当前行的准标识符相同

def isKAnonymized(df, k): 
	for index, row in df.iterrows(): 
		query = ' & '.join([f'{col} == {row[col]}' for col in df.columns]) rows = df.query(query) 
		if rows.shape[0] < k: return False return True

泛化数据集,使之满足k-匿名:

“泛化指的是将数据修改为不那么特殊的数据,使其更可能与数据集中其他个体的数据相匹配。举例来说,精确到个位的年龄可以通过四舍五入的方式泛化为精确到十位,可以将邮政编码最右侧的数字替换为0来泛化邮政编码。”

泛化的挑战:

“通常需要从数据中移除相当多的信息,才能使数据集满足合理 𝑘 取值下的 𝑘-匿名性”

解决思路:引入更多的数据

“在拥有更多个体的数据集中,通常需要更少的泛化处理即可使数据集满足所需 𝑘 取值下的 𝑘-匿名性。”

“引入更多数据并不一定像我们期待的那样降低满足 𝑘-匿名性的 难度。 出现这一问题的根本原因是,数据集中包含异常值(Outlier),即包含一些与其他个体差异非常大的个体。即使经过了泛化处理,也很难使这些异常个体融入到任何分组中。”

“异常值使得实现 𝑘-匿名性变得非常具有挑战性,即使对于较大的数据集也是如此。实现满足 𝑘-匿名性的最优泛化方法是一个NP-困难问题。”

解决思路:移除异常值

“异常值问题的一个简单解决方案是将数据集中每个个体的年龄限制在一个特定的范围内,从而完全消除数据集中的异常值。”

可以使用Numpy的clip函数裁剪异常值

4.差分隐私

“与 𝑘-匿名性类似,差分隐私(Differential Privacy)2 3 也是一个用数学语言描述的隐私定义(即可以用数学方法证明发布数据满足此性质)。然而,与 𝑘-匿名性不同,差分隐私不是数据所具有的属性,而是算法所具有的属性。也就是说,我们可以证明一个算法满足差分隐私。如果想证明一个数据集满足差分隐私,我们需要证明的是产生此数据集的算法满足差分隐私。”
“假设我的数据在 𝑥 中,但不在 𝑥′ 中。如果攻击者无法确定 𝐹 的输入是 𝑥 还是 𝑥′,则攻击者甚至无法判断输入是否包含我的数据,更无法判断出我的数据是什么了”

“我们在实际中应该如何设置 𝜖,差分隐私才能提供足够的隐私性呢?没人知道这个问题的答案”

差分隐私基础机制–拉普拉斯机制


回答计数查询的差分隐私机制【计数查询敏感度为1】

sensitivity = 1 
epsilon = 0.1 
adult[adult['Age'] >= 40].shape[0] + np.random.laplace(loc=0, scale=sensitivity/epsilon)

验证拉普拉斯机制的保护效果:一个简单地攻击和防护示例

“构造一个恶意的计数查询,专门用于确定凯莉·特鲁斯洛夫的收入是否大于 $50k。”

也就是发起恶意查询:Name属性为凯莉·特鲁斯洛夫的数据中,有多少条数据的Target属性取值小于等于50k?

karries_row = adult[adult['Name'] == 'Karrie Trusslove'] 
karries_row[karries_row['Target'] == '<=50K'].shape[0]

真实的查询结果是1

利用拉普拉斯机制保护查询的真实结果

sensitivity = 1 
epsilon = 0.1 
karries_row = adult[adult['Name'] == 'Karrie Trusslove'] karries_row[karries_row['Target'] == '<=50K'].shape[0] + \ np.random.laplace(loc=0, scale=sensitivity/epsilon)

回答结果是一个噪声值,无法判断真实结果

“这就是差分隐私要实现的目的:哪怕查询是恶意的,也不会拒绝回复。而是添加噪声,使恶意问询的回复结果对攻击者来说变得毫无用处。”

有时候拒绝回复本身会泄露隐私4


  1. Latanya Sweeney. Simple demographics often identify people uniquely. URL: https://dataprivacylab.org/projects/ identifiability/. ↩︎

  2. Cynthia Dwork. Differential privacy. In Proceedings of the 33rd International Conference on Automata, Languages and Programming - Volume Part II, ICALP’06, 1–12. Berlin, Heidelberg, 2006. Springer-Verlag. URL: https://doi. org/10.1007/11787006_1, doi:10.1007/11787006_1. ↩︎

  3. Cynthia Dwork, Frank McSherry, Kobbi Nissim, and Adam Smith. Calibrating noise to sensitivity in private data analysis. In Proceedings of the Third Conference on Theory of Cryptography, TCC’06, 265–284. Berlin, Heidelberg, 2006. Springer-Verlag. URL: https://doi.org/10.1007/11681878_14, doi:10.1007/11681878_14. ↩︎

  4. Cynthia Dwork, Aaron Roth, and others. The algorithmic foundations of differential privacy. Foundations and Trends® in Theoretical Computer Science, 9(3–4):211–407, 2014. ↩︎

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐