数据脱敏 t-closeness介绍与实现
数据脱敏 t-closeness介绍与实现
本文主要基于t-closeness的首次提出团队Ninghui Li, Tiancheng Li, Suresh Venkatasubramanian发表的论文: t-closeness privacy beyond k-anonymity and l-diversity
提出背景
要知道t-closeness的提出背景,就必须要了解 k-anonymity和 l-diversity,因为t-closeness正是针对后者的一次“革命性优化”,而后者又是针对前者的优化方案实现。
k-anonymity
k-anonymity是匿名化数据的一种性质。如果一组公开的数据中,任何一个人的信息都不能和其他至少k-1人区分开,则称该数据满足k-anonymity,该组数据称为一个等价类(An equivalence class)。k-匿名性的概念是由Latanya Sweeney和 Pierangela Samarati在1998年的一篇论文中最先提出的,其目的是为了解决如下问题:“给定一组结构化的具体到个人的数据,能否给出一组经过处理的数据,使我们可以证明数据中涉及的个人不能被再识别,同时还要保证数据仍具有使用价值。”使一组数据满足k-anonymity的过程称为k-anonymization。
举例来讲,下表是某医院数据库中存储的病历表的一部分。一共有6个属性,分别为用户编号id、用户身份证号idNumber、性别sex、年龄age、身高height、疾病disease.
id | idNumber | sex | age | height | disease |
---|---|---|---|---|---|
4533747 | 120227****4400 | 女 | 40 | 169 | 乙肝 |
4533748 | 500415****5207 | 女 | 31 | 187 | 高血压 |
4533749 | 110822****6331 | 男 | 20 | 156 | 艾滋病 |
4533750 | 631619****9337 | 男 | 40 | 151 | 感冒 |
4533751 | 331526****9038 | 男 | 40 | 176 | 乙肝 |
4533752 | 360228****1013 | 男 | 55 | 163 | 乙肝 |
4533753 | 520727****9726 | 女 | 31 | 171 | 乙肝 |
4533754 | 641209****7206 | 女 | 69 | 156 | 高血压 |
4533755 | 151110****9541 | 女 | 37 | 198 | 乙肝 |
4533756 | 520708****5514 | 男 | 39 | 174 | 艾滋病 |
实现k-anonymity的常见方法有两种方法:
· 数据抑制:此种方法将一些属性的值用星号“*”取代或者不发布该属性。可以取代一列中的所有值或部分值(上表中的 idNumber 也是数据抑制的一种)。在下面的匿名化表格中,我们将不发布“id”、“idNumber”栏的所有值、“性别”一栏的部分值用“*”取代。
· 数据泛化:此种方法将一些属性的精确值用更宽泛的类别取代。如一组数据中“age”栏中的31、40、35可以改为30~40。
对攻击者而言,“age”、“sex”、“height”虽然单独不能用于唯一识别一个个体,但结合起来则可能用于识别唯一一个个体的属性被称作“准标识符”;相应地,“id”、"idNumber"等可以识别唯一一个个体的属性被称为“标识符”;“疾病”、“薪水”或者其它当事人希望保护的属性常被称为“敏感属性”,也可能成为敌手的“目标属性”。
下表是经过k = 2即2-匿名性处理之后的病历表,即对于“age”、“sex”、“height”三个属性具有2-匿名性。任何一行在这三列上的值的组合都至少出现了2次。在k-anonymity的数据库中,所有由准标识符组成的多元组都至少出现了k次。
sex | age | height | disease |
---|---|---|---|
女 | 31~40 | 169~187 | 乙肝 |
女 | 31~40 | 169~187 | 高血压 |
男 | 20~40 | 151~156 | 艾滋病 |
男 | 20~40 | 151~156 | 感冒 |
男 | 40~55 | 163~176 | 乙肝 |
男 | 40~55 | 163~176 | 乙肝 |
女 | 31~69 | 156~171 | 乙肝 |
女 | 31~69 | 156~171 | 高血压 |
* | 37~39 | 174~198 | 乙肝 |
* | 37~39 | 174~198 | 艾滋病 |
Meyerson和Williams的研究表明,求最优的k-匿名化方案是一个NP困难的问题;然而,利用诸如k-优化的启发式方法通常也可以得到令人满意的结果。
l-diversity
尽管k-匿名化是一个定义简洁且具有很多可行算法的手段,可以较好地解决一组数据的匿名化问题,但从其它角度仍然可以攻击满足k-匿名性的数据。若攻击者掌握并利用其它背景知识,这些攻击甚至可以更有效率。
这些攻击包括:
同质性攻击(Homogeneous attack):如果目标属性(攻击者希望获知的属性)在k个条目中的取值都是相同的,则可以进行此种攻击。这时,就算一组数据已经被k-匿名化,目标属性在k条记录中的取值仍然可以被获取。
背景知识攻击(Background knowledge attack):此种攻击可以利用目标属性与准标识符属性之间的联系来减少目标属性里可能值的数量。例如,Machanavajjhala 等人的研究表明,利用心脏病在日本人中的发病率较低这一事实,可以在医疗数据库中缩小一个敏感属性的取值范围。
为克服k匿名模型缺陷,Machanavajjhala等人提出一种增强的k匿名模型:
l多样性(l−diversity)模型. l-多样性确保每个k-匿名组至少包含l个不同的敏感属性值。因此,即使对手能够识别一个人的群体,他/她仍然无法确定该人的敏感属性的价值。
k-匿名中可能出现的问题是,k-匿名组中的所有人都拥有相同的敏感属性值。一个知道某个人在k匿名组中的对手仍然可以绝对肯定地了解该人敏感属性的价值。这个问题可以通过使用l- diversity来解决。
定义(The l-diversity Principle)
如果一个等价类至少有l个敏感属性的“良好表示”(well-represented)值,则称该等价类具有l多样性。如果一个表中的所有等价类都有l多样性,则称该表具有l多样性。
Machanavajjala 等人对此原则中的”良好表示” (well-represented)一词给出了多种解释:
· 可区分l多样性(Distinct l-diversity)。对“良好表示”的最简单理解是确保每个等价类中的敏感属性至少有l个不同的值。可区分l多样性并不能防止概率推理攻击。一个等价类可能有一个值相比其他值出现得更频繁,使得攻击者能够推断出等价类中的实体很可能有该值(如上述的日本人心脏病例)。这便推动了接下来的两个更健壮的l多样性的概念的提出。
· 熵l多样性(Entropy l-diversity)。一个等价类E的熵被定义为:
其中,S是敏感属性的定义域,p(E, s)是E中的敏感值为s记录的分数。
一个表被称作有熵l多样性,如果对它的每个等价类E,Entropy(E)>=log l 。熵l多样性的定义比可区分l多样性更为健壮。为了使每个等价类都有熵l多样性,整个表的熵必须至少为 log l 。有时这一条件可能会限制过多,因为如果有几个值很常见的话,整个表的熵会很低。这就导致了接下来的一种更为保守的l多样性的定义。
· 递归(c, l)多样性(Recursive (c, l)-diversity)。递归(c, l)多样性确保出现频率最高的值不会出现的太过频繁,而频率不太高的值不会出现得太少。设m为等价类中的值的数目, 为在等价类E中第i个频率最高的敏感值的出现次数。若 , 则称E具有递归(c, l)多样性。若一个表的所有等价类都具有递归(c, l)多样性,则称该表具有递归(c, l)多样性。
l多样性的局限性
虽然l多样性原则k-匿名性在有关防止属性泄露方面上迈出了关键性的一步,但它仍具有以下几个缺陷:
l多样性可能难以实现,也没有必要实现。
· 例1:假设原始数据只有一个敏感属性:特定病毒的测试结果。它有两个值:阳性和阴性。进一步假设有10000条记录,其中99%为阴性,只有1%为阳性。那么这两个值的灵敏度是非常不同的。人们不介意被知道检测呈阴性,因为这样一来,他们与99%的人口一样,但他们不希望被知道或是认为检测呈阳性。在这种情况下,对于只包含阴性记录的等价类,2-多样性是不必要的。为了有一个不同的2-多元表,最多可以有10000×1%=100个等价类,并且信息损失会很大。还要注意,由于整个表中敏感属性的熵非常小,如果使用熵l-多样性,则必须将l设置为一个小值。
l多样性不足以防止(敏感)属性泄露。
下面有两类对于l多样性的攻击。
偏斜攻击(Skewness Attack):当总体分布是偏态分布时,满足l多样性不会阻止属性公开。再考虑例1。假设一个等价类有相等数量的阳性记录和阴性记录。它满足不同的2-多样性、熵2-多样性和任何可施加的递归(c,2)-多样性要求。然而,这带来了严重的隐私风险,因为课堂上的任何人都被认为有50%的可能性是阳性的,而总人数只有1%。
现在考虑一个等价类,它有49个阳性记录,只有1个阴性记录。它将是明显的2分,并且比整个表具有更高的熵(因此满足任何可以施加的熵多样性),即使等价类中的任何人都将被认为是98%的阳性,而不是1%。事实上,这个等价类与一个有1个阳性记录和49个阴性记录的类具有完全相同的多样性,尽管这两个类存在非常不同的隐私风险级别。
相似性攻击(Similarity Attack):当等价类中的敏感属性值不同但语义相似时,攻击者可以获得重要信息。考虑下面的例子:
· 例2:表3是原始表,表4显示了满足可区分和熵3-多样性的匿名版本。表中有两个敏感的属性:薪水和疾病。假设一个人知道Bob的记录对应于前三个记录中的一个,那么他就知道Bob的工资在[3K–5K]范围内,并且可以推断Bob的工资相对较低。这种攻击不仅适用于“工资”等数字属性,还适用于“疾病”等类别属性。知道Bob的记录属于第一类,我们就可以得出结论,Bob有一些与胃有关的疾病,因为等价类中的三种疾病都与胃有关。
结论
总而言之,具有相同多样性级别的分布可能提供非常不同的隐私级别,因为属性值之间存在语义关系,因为不同的值具有非常不同的敏感级别,并且因为隐私也受到与整个分布的关系的影响。
T-相近(t-closeness)
t-相近是基于l-多样性组的匿名化的进一步细化,用于通过降低数据表示的粒度来保护数据集中的隐私。这种减少是一种折衷,它会导致数据管理或挖掘算法的一些有效性损失,从而获得一些隐私。t-相近模型扩展了l-多样性模型,通过考虑属性数据值的分布,清晰地处理属性值。t-相近要求每个k-匿名组中敏感属性值的统计分布与该属性在整个数据集中的总体分布“接近”。
直觉上,隐私是通过观察者获得的信息来衡量的。在看到发布的表之前,观察者对个体的敏感属性值有一些先验看法(prior belief)。看到发布的表后,观察者有了一个后验看法(posterior belief)。信息增益可以表示为后验看法和先验看法之间的差异。Li, N等人方法的新颖之处在于,他们将获得的信息分为两部分:发布数据中的整体信息和特定个人信息。
首先考虑以下思维实验:首先,设观察者对个体的敏感属性的先验看法为B0.然后,给观察者一个抹去准标识符信息的数据表,这个表中敏感属性的分布记为Q,根据Q,观察者的看法变为B1 .最后,发布含有准标识符信息的数据表,那么观察者就能够根据该表识别特定个体记录所在的等价类,得到该等价类中敏感属性的分布P,根据P,观察者的看法变为 B2。
l多样性需求的动机是限制B0和B2之间的差异(尽管它只是通过要求P具有一定程度的多样性间接实现的)。在t相近这里,我们选择限制B1和 B2之间的差异。换句话说,我们假设敏感属性Q在表中总体人口中的分布是公共信息。我们不限制观察者获得的关于总体人口的信息,但限制观察者能够了解关于特定个体的额外信息的程度。
我们观察到,通过泛化,我们所能做的就是将所有准标识符属性泛化为最一般的值。因此,只要发布一个版本的数据,就会发布一个分布Q。同时,如果一个人想要发布这个数据表,那他所打算的就是发布这个分布Q,正是这个分布使得这个数据表能够派上用场。 我们发布数据是因为数据有价值,这个价值就是数据整体的分布规律,可以用B0与 B1之间的差别表示。二者差别越大,表明数据的价值越大,这一部分不应被限制。也即整体的分布Q应该被公开。因为这正是发布数据的意义所在。而 B1和B2 之间的差别,就是我们需要保护的隐私信息,应该被尽可能限制。
我们通过限制P和Q之间的距离来限制从 B1到 B2的增益。直觉上来说,如果P=Q,那么 B1和 B2应该是相同的。如果P和Q很接近,那么B1和B2也应该很接近,即使可能与 B0非常不同。
定义(The t-closeness Principle)
若一个等价类的敏感属性取值分布与整张表中该敏感属性的取值分布的距离不超过阈值t,则称该等价类具有t相近性。若一个表中所有等价类都有t相近性,则该表也有t相近性。
当然,要求P和Q接近也同样限制了发布的有用信息量,因为它限制了准标识符属性和敏感属性之间的相关性信息,然而这正是我们的目的。如果观察者得到的二者之间的相关性描述过于清晰,就会出现属性泄露。t相近性中的t参数使得人们可以在实用性和隐私性之间进行权衡。
使用EMD来衡量P和Q的距离
可以看出,解决问题的关键在于测量两个概率分布之间的距离。众所周知的变量距离公式是:
然而,上述距离公式并不能反映值之间的语义距离。如上文中的例2,其中收入属性的总体分布Q = {3k,4k,5k,6k,7k,8k,9k,10k,11k }。表4中的第一个等价类的分布P1= {3k,4k,5k },第二个等价类的分布P2={6k,8k,11k}。我们知道,P1 相比于P2会导致更多的信息泄露,因为 P1中的值都在较低水平分布,因此我们希望距离运算的结果.但是上述距离度量公式不能做到这一点,因为从它们的角度看3k和6k除了取值不同并没有其他区别。
简而言之,衡量P和Q的距离有以下条件:
· 为属性值定义了一个度量空间以便在可以定义任意一对值之间的距离
· 基于这些值有两个概率分布,我们希望这两个概率分布之间的距离取决于这些值之间的距离。
这实际上就是EMD(Earth Mover’s distance,陆地移动距离)。
如何计算EMD
回顾之前的例2:
Q = {3k,4k,5k,6k,7k,8k,9k,10k,11k }。P1 = {3k,4k,5k },P2={6k,8k,11k}。
我们用EMD来计算
令v1 = 3k, v2 = 4k, ...v9 = 11k, 我们定义vi和vj之间的距离为|i - j|/8, 因此最大距离为1.可以得到
对于疾病属性,我们使用图1的层次结构来定义值之间的距离,例如,“Flu”和“Bronchitis”之间的距离为1/3,“Flu”和“Pulmonary embolism”之间的距离为2/3,“Flu”和“Stomach cancer”之间的距离为 3/3 = 1. 然后分布{gastric ulcer, gastritis, pneumonia}与总体分布之间的距离为0.5。
这里所说的疾病属性的距离是通过层次距离来描述的:
层次距离(Hierarchical Distance):分类属性的两个值之间的距离是将这两个值基于域层次结构概括为相同值的最小级别。
表5所展示的是表3的另一个匿名版本。薪水属性为0.167-相近性,疾病属性为0.167相近性。表5成功防止了相似性攻击。例如,根据表5,Alice无法推断Bob工资低或者患有胃类疾病。
我们注意到,t-相近性可以防止属性泄露,但不能防止身份泄露。因此,我们有时可能同时需要k-匿名算法和t-相近性。此外,t-相近性对于针对k-匿名算法的同质性攻击和背景知识攻击并不能保证它们永远不会发生,而是保证如果这类攻击发生在了此类表中,那么即使你使用完全广义的表也可以发生相似的攻击。所以,如果要发布数据的话,发布经过t-相近性方法处理后的数据是最好的。
建模与代码实现
本部分是相关课程作业,因此数据集和选择的编程语言可能与实际应用有出入;只是来了解相关概念的人,这部分可以不看
首先,根据我们的原始数据集org(如下图),我们知道敏感属性为疾病,性别、年龄和体重是准标识符,编号和idNumber忽略不计入输出文件t中:
要限制P和Q之间的距离,就要首先对已有的P和Q之间的距离进行计算,那么就需要先对此处疾病属性建立层次结构,我们建立的结构如下:
我们采用树形结构来描述这一层次结构,用来衡量敏感属性diseases之间距离的方法正是求树的深度的过程,建立如上图所示的java树形数据结构,通过处理类Operation的getOrgT()方法来得到原始数据集org的t值,再调用Operation类中的public t_closeness()方法,对原始数据进行t-closeness处理,具体方法实现代码参见附件项目k_anonymity的源码.
关于参数t:
· 一般情况下,参数t越小,信息泄露就越少(数值距离)
· 一般情况下,参数t越大,信息泄露就越少(层次距离)
· t的取值范围与建立的层次结构、org中记录的个数n还有匿名参数k有关。k其实就是一个等价类中所包含的记录条数,参数t的大小与信息泄露的关系并没有那么密切,不是说t大信息泄露就一定少或者多。
运行结果分析
为了反映出t-closeness相比k-anonymity的进步之处,我们设定k = 5, n = 100.即生成100条原始记录,每5个分为一个等价类。
可以看到,在原始数据集org文件中的第16-20条记录组成的等价类中,敏感属性全部分布于“病毒感染性疾病(大类)”之中,以该文件为蓝本生成的k-匿名文件k依旧存在这个情况,但经过t-closeness处理之后,该情况已经得到消除:
org数据集部分记录
k数据集部分记录
t数据集部分记录
当然,t文件后半部分也同样因为处理的原因(项目所使用的算法是保证前面的记录有良好的t-closeness性质),所以大多敏感属性分布于同一分类下。因为建立的树形结构的原因,生成数据时,大概有2/3的数据随机生成为了“病毒感染性疾病(大类)”,但我们可以选择只向外界发布得到了有良好的t-closeness性质的前部分记录。在统计有较多数据的情况下,本缺陷可以忽视不计。
参考文献
Machanavajjhala, A.; Gehrke, J.; Kifer, D.; Venkatasubramaniam, M. L-diversity: Privacy beyond k-anonymity. ACM Trans. Knowl. Discov. Data 2007, 1
Li, N.; Li, T.; Venkatasubramanian, S. t-closeness: Privacy beyond k-anonymity and l-diversity. In Proceedings of the IEEE International Conference on Data Engineering, Istanbul, Turkey, 15–20 April 2007;
数据脱敏 t-closeness介绍与实现的更多相关文章
- KingbaseES 数据脱敏功能介绍
数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护. KingbaseES主要提供动态数据脱敏功能. 动态数据脱敏(Dynamic Data Masking)是与生产环境 ...
- 基于Mybatis插件方式实现数据脱敏处理
一.项目介绍 1.项目背景 有时候我们数据库中存储一些敏感的信息比如手机号.银行卡号,我们希望我们查询出来的的时候对一些敏感信息做一些脱敏处理. 当面项目是基于自定义Mybatis插件方式实现数据脱敏 ...
- java 数据脱敏
所谓数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份 ...
- Oracle汉字用户名数据脱敏长度不变,rpad函数使用
信息安全考虑,有时需要对用户名称进行数据脱敏. 针对Oracle数据库,进行取数数据脱敏处理 脱敏规则: 长度小于9个字符,只保留前3个汉字与后3个汉字,中间全部由*填充. 长度9个字及以上及奇数,隐 ...
- 转 Nmon 监控生成数据文件字段的介绍
##发现nomon 一个好用的功能 数据透视图 PIVOTCHART:这些参数被用来构建数据透视图.所需的参数:Sheetname,PageField,rowfield,columnfield,Dat ...
- php 数据脱敏显示
/** * 数据脱敏 * @param $string 需要脱敏值 * @param int $start 开始 * @param int $length 结束 * @param string $re ...
- 如何用java实现数据脱敏
数据脱敏是什么意思呢? 数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护.在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并 ...
- Oracle 11g数据脱敏
Oracle 11g数据脱敏 前言 最近开发人员有个需求,导一份生产库的数据到测试库. 由于生产数据安全需要,需要并允许对导出的数据进行加密脱敏处理. 关于加密和脱敏 个人理解, 加密是通过一系列规则 ...
- 大数据和Hadoop平台介绍
大数据和Hadoop平台介绍 定义 大数据是指其大小和复杂性无法通过现有常用的工具软件,以合理的成本,在可接受的时限内对其进行捕获.管理和处理的数据集.这些困难包括数据的收入.存储.搜索.共享.分析和 ...
随机推荐
- 快速从零开始整合SSM,小白包会(1)
整合SSM,关键就是几个xml的配置. 准备: 1. Idea(配置好tomcat,可以安装插件freeMybatis,提高效率,安装插件不难,百度经验就有) 2. 下载好数据库MySql,以 ...
- [hdu6978]New Equipments II
显然可以费用流来做,具体建图如下-- 点集:源点,汇点,左边$n$个工人,右边$n$个设备 边集:源点向第$i$个工人连$(1,a_{i})$的边,第$i$个设备向汇点连$(1,b_{i ...
- [bzoj1305]跳舞
考虑如果没有k个人,那么就是裸的二分答案+最大流对于这k个人,再在原来的每一个点裂点,中间的流量为k,然后裂出来的点向所有不能匹配的点连边,再二分答案+最大流即可 1 #include<bits ...
- 7.1 k8s使用configmapg 给pod内的程序提供配置文件
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中.使用时, Pods 可以将其用作环境变量.命令行参数或者存储卷中的配置文件. 以下以nginx镜像提供配置文件为例镜像演示 ...
- go定义接口以及类怎么使用接口
go定义接口以及类怎么使用接口 多态是指代码可以根据类型的具体实现采取不同行为的能力.如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值. 接口是用来定义行为的类型.这些被定义 ...
- Oracle——listener数据库监听 lsnrctl
lsnrctl(Listener Control)是一个SQL*Net工具,用于控制数据库listener,这个工具提供了命令用于控制listener的启动.停止,查看listener的状态,改变li ...
- C语言中内存对齐与结构体
结构体 结构体是一种新的数据类型,对C语言的数据类型进行了极大的扩充. struct STU{ int age; char name[15]; }; struct STU a; //结构体实例 str ...
- 【模板】网络最大流(EK、Dinic、ISAP)(网络流)/洛谷P3376
题目链接 https://www.luogu.com.cn/problem/P3376 题目大意 输入格式 第一行包含四个正整数 \(n,m,s,t\),分别表示点的个数.有向边的个数.源点序号.汇点 ...
- JavaScript获取html表单值验证后跳转网页中的关键点
关键代码: 1.表单部分 <form action="Depart.jsp" name="myform" method="post" ...
- day06 目录结构
day06 目录结构 文件目录 /bin # 存放系统常用命令的目录 /boot # 系统引导程序+内核 /dev # 设备.光驱.硬盘 /etc # 存放系统或服务的配置文件 /home # 普通用 ...