本文主要基於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性質的前部分記錄。在統計有較多資料的情況下,本缺陷可以忽視不計。
參考文獻