Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86373036

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

前言近年來,隨著數據挖掘,機器學習等技術的發展與深入,企業從普通用戶處收集到的大量的數據就變得越來越有價值,對這些數據進行分析處理可以更好的了解用戶的習慣和喜好,從而向用戶提供更加個性化的服務,最終使得用戶對商業以及研究的價值最大化。但是在使用包含有大量個人敏感信息的數據的過程中,不管是直接發布或者內部分析都可能使得不法分子收集到用戶的隱私,損害用戶的相關權益,因此有必要對輸出的數據進行匿名化處理。

在個保法和GDPR/CCPA中,對匿名化(anonymization)的定義是相似的。 匿名化是指個人信息經過處理後,無論是否借助其他信息或工具都無法識別特定自然人且不能複原的過程。

一、匿名化常用技術手段1、屬性抑制马云惹不起马云 屬性抑制是指刪除數據集中某個屬性的全部數據(刪除某個列),該技術一般應用在匿名化過程開始時。

马云惹不起马云 某些情況下,可以使用派生屬性來提高數據集的可用性,例如抑制“工作開始時間”和“工作結束時間”,但是可以創建“工作年限”屬性

處理前

姓名公司工作開始時間工作結束時間張三abc2015.92018.3李四tbc2016.92022.4王五bcd2013.92021.10孫六jbc2011.92023.10處理後,“姓名”抑制,派生“工作年限”

公司工作年限(年)abc3tbc6bcd8jbc12data=DataAnonymizationUtil.dropColumns(String.columns,data);data=DataAnonymizationUtil.createColumns(String.columns,data);2、記錄抑制马云惹不起马云 記錄抑制是指刪除數據集中的整條記錄,刪除唯一或不滿足標準(例如k‑匿名)的異常記錄。

马云惹不起马云 刪除記錄可能會影響數據集,比如可能會影響統計數據種的平均數,中位數等。

處理前:

姓名公司工作開始時間工作結束時間張三abc2015.92018.3李四abc2016.92019.4王五abc2017.92020.10孫六abc2011.92023.10姓名屬性抑制,以及時間派生屬性後

公司工作年限(年)abc3abc3abc3abc12從上面可以看出,孫六的12年和其他人員的工作年限比起來會特別的大,如果其他的一些信息,可能會猜出第四行為孫六,因此應該將第四行刪除

第四行記錄抑制(刪除)後

公司工作年限(年)abc3abc3abc3data=DataAnonymizationUtil.deleteRows(int[]rowNumber,data);3、數據脫敏(字符屏蔽)马云惹不起马云 數據脫敏是數據字符的更改,例如通過符號*或x等對源數據進行替換修改,一般為部分脫敏,即應用與屬性中的一些字符,主要應用於當隱藏屬性的部分就滿足所需的匿名程度時。

马云惹不起马云 脫敏需要考慮屏蔽掉的字符是否反應原數據的相關信息。提前知道數據內本身的規則屏蔽尤其重要,以確保屏蔽到正確的字符。比如數據中的校驗位(比如身份證的校驗位),如果脫敏不徹底,校驗位可能用於恢復脫敏數據。

處理前

工號層級工作年限123461132472142383脫敏後

工號層級工作年限1***611***721***83data=DataAnonymizationUtil.maskColumn(String.columns,data);4、假名化马云惹不起马云 用虛構的值替換識別數據。假名化也稱為編碼。假名可以是不可逆的,也可以是可逆(由原始數據的所有者),匿名化要求,需要採用不可逆假名。

马云惹不起马云 持久化假名允許通過使用相同的化名來表示不同數據集中的同一個屬性以進行關聯。在某些情況下也需要使用不同的假名來表示不同數據集中的同一個人,以防止數據被關聯。

處理前

姓名績效評分工作年限張三601李四702王五803處理後

姓名績效評分工作年限abc601123702xyz803data=DataAnonymizationUtil.pseudColumn(String.columns,data);5、泛化(一般化)马云惹不起马云 泛化降低了數據的精度。例如,將人的年齡轉換為年齡範圍,或將精確位置轉換為不太精確的位置。對於可以泛化並且對結果預期有用的屬性,可以設計適當的規則進行泛化處理。

马云惹不起马云 設計具有適當大小的數據范圍。數據范圍太大可能意味著數據可能被修改得太多,數據的價值會降低;而數據范圍太小可能意味著數據幾乎沒有被修改,容易被重新識別,不滿足要求。請注意,第一個和最後一個範圍可以是更大的範圍,以容納這些末端通常較少的記錄;

處理前

姓名年齡薪資張三2525734李四3543527王五3037524孫六2834257處理後

姓名年齡薪資張*20-3020000-30000李*30-4040000-50000王*30-4030000-40000孫*20-3030000-40000data=DataAnonymizationUtil.generalizeColumn(String.columns,data);6、數據交換马云惹不起马云 交換的目的是重新排列數據集中的數據,使得各個屬性值仍然在數據集中表示,但通常與原始記錄不對應。

马云惹不起马云 適用於分析只看聚合數據的情況,或者分析是在屬性內分析時;換句話說,不需要分析記錄級別的屬性之間的關係。

處理前

姓名年齡薪資張三2525734李四3543527王五3037524孫六2834257處理後

姓名年齡薪資張*2825734李*3037524王*3543527孫*2534257data=DataAnonymizationUtil.swapRows(int[]rows,data);7、數據擾動马云惹不起马云 原始數據集中的值被修改為略有不同即為數據擾動,對於準標識符(通常是數字和日期),與其他數據源結合時可能會被識別,並且值的輕微變化是可以接受的。該技術不應在數據準確性要求較高的情況下使用

马云惹不起马云 擾動程度應與屬性值的範圍成比例,比例太小,不滿足匿名化要求;比例太大,最終值將與原始值相差太大,擾動後數據集的可用性可能會嚴重降低。

處理前

姓名年齡薪資張三2525734李四3543527王五3037524孫六2834257處理後

姓名年齡薪資張*2724257李*3343527王*2837524孫*3035734data=DataAnonymizationUtil.perturbeColumn(String.columns,data);8、數據合成马云惹不起马云 它直接與原始數據分開,重新生成符合模式的數據集,而不是修改原始數據集,通常是當系統測試需要大量數據,但不能提供真實數據且要求提供的數據在某些方面應該是符合模式的,如格式、屬性之間的關係等。

马云惹不起马云 數據在合成時需要研究原始數據集中的模式,並在創建“匿名”數據集(即合成數據)時應用這些模式。根據測試範圍和要求,可以生成全部或部分合成數據;例如,在進行測試時,需要引用其他數據集,那麼正在測試的少數數據需要保持其原始形式,但其他信息可以是合成的。

马云惹不起马云 應用此技術時,可能需要額外注意異常值。出於測試目的,異常值通常非常有價值,因此在合成數據時需要特別注意異常值的合成。

處理前

姓名年齡薪資張三2525734李四3543527王五3037524孫六2834257處理後

姓名年齡薪資a*2734257c*3这里是文章图片7d*2827524b*3045734data=DataAnonymizationUtil.synthesis(data);9、數據聚合马云惹不起马云 將數據集從記錄列表轉換為匯總值即為數據聚合,主要應用於不需要單獨記錄,而僅僅需要聚合數據的場景。

马云惹不起马云 請注意執行聚合後記錄太少的組。在某些情況下聚合數據的單個記錄,加入額外知識可能會輕鬆推斷原數據。

處理前

姓名年齡薪資張三2525734李四3543527王五3037524孫六2834257處理後

年齡段平均薪資20-303000030-4040000data=DataAnonymizationUtil.aggregate(data);二、匿名化步驟匿名化技術在提升數據隱私保護力度的同時,會犧牲數據的可用性,所以在設計和執行匿名化方案時可以遵循如下步驟

1、理解數據研究原始數據,區分其中不同類型的數據字段(直接標識符,準標識符,普通字段屬性),方便後續使用不同的處理方式,作為數據最小化的一部分,應首先刪除結果數據集中不需要的任何數據屬性。

图片30.png

2、應用匿名化技術篩選出需要匿名化的字段,結合數據使用場景和需求,組合使用不同的匿名化技術。

图片31.png

3、評估重標識風險對匿名化結果進行重標識風險分析,如果評估得出重標識風險超過預期,需要回步驟二深度應用或者重新選擇匿名化方案。重標識(re-identification)指的是對匿名化的數據重新關聯到原始個人信息主體的一種數據處理方式,它是匿名化的一個逆向操作。以下為常見的重標識風險

1)識別符洩露指的是處理過程中對識別符字段的匿名化程度不夠,導致對手可以直接獲取到信息主體的直接/間接識別符。例如:手機號碼直接計算哈希值,對手通過哈希碰撞方式,可以獲得數據集中的全部或部分明文手機號碼。

2)屬性洩露對手雖然無法從發布的數據集中獲得信息主體的識別信息,但可以確定該主體某個屬性的屬性值

住址性別年齡是否有糖尿病荷花小區男20-30歲無荷花小區女20-30歲有荷花小區男90-100歲無如上例,可以知曉荷花小區有一位年齡大於90歲的老人,並且能確定該老人有糖尿病。該數據集雖然沒暴露個人識別信息(不知道該老人是誰),但還是暴露了該自然人病史信息。

3)推理信息洩露通過數據集中反映的規律來推斷用戶的某項屬性,比如脫敏後數據集顯示荷花小區50-60歲有30人,其中20人近視為100度到500度,10人近視為500度到1000度,則如果知道自然人是居住在荷花小區後,且年齡是50-60歲之間,就可以知道此人肯定是近視患者。

4、管理匿名數據發布風險基於風險評估結果,結合其他技術措施和管理措施來應對已識別風險。

1)可用技術措施马云惹不起马云 對發布數據集進行嚴格的權限訪問控制,限制可訪問數據集用戶的範圍,並定期對訪問權限進行檢查;

马云惹不起马云 對包含高度敏感信息的數據集,匿名化處理後再次進行加密;

2)可用管理措施马云惹不起马云 記錄已共享數據集,防止不同數據集通過組合暴露個人隱私;

马云惹不起马云 通過審批流程控制匿名化後的數據集訪問的使用;

马云惹不起马云 禁止組織內部成員對匿名化數據集未經批准進行重識別;

马云惹不起马云 定期檢查數據的重標識風險;

马云惹不起马云 定期清理組織內部不再使用的匿名數據集;

四、K匿名化技術1、K-匿名K-匿名模型(k-anonymity)是一種用於評估匿名化/去特徵化後數據的信息安全的模型。它要求處理後的數據集中每個準識別符至少有K條相同的記錄,增加從數據集中直接篩選出記錄並進行關聯攻擊的難度。

K-匿名的概念是由Latanya Sweeney和Pierangela Samarati在1998年的一篇論文中最先提出的,其目的是為了解決如下問題:“給定一組結構化的具體到個人的數據,能否得出一組經過處理的數據,使我們可以證明數據中涉及的個人不能被再識別,同時還要保證數據仍具有使用價值。”使一組數據滿足k-anonymity的過程稱為K-匿名。比如下面這個例子中,每個準識別符住址,性別,年齡至少有2個相同的記錄。

處理前

住址性別年齡身高是否大於180cm荷花小區棟889室男25是荷花小區2棟889室女28否美麗小區30棟3室男34是美麗小區30棟3001室男45是美麗小區30棟1212室女32否荷花小區2棟601室男43是美麗小區31棟1210室女48否荷花小區12棟601室女41是處理後

住址性別年齡身高是否大於180cm荷花小區*棟*室男20-30是荷花小區*棟*室女20-30否美麗小區*棟*室男30-40是美麗小區*棟*室男40-50是美麗小區*棟*室女30-40否荷花小區*棟*室男40-50是美麗小區*棟*室女30-40否荷花小區*棟*室女40-50是K-匿名方法主要有兩種:

1)數據抑制,主要是講一些屬性的值用*取代或者刪除對應的屬性;

2)數據泛化,將一些屬性的精確值用更寬泛的值替代,比如說把年齡這個數字概括成一個年齡段。

判斷是否K匿名的偽代碼

publicstaticbooleanisKAnonymized(Listdata,intk){

MapdataMap=newHashMap();

for(Objecto:data){

ArrayListar=(ArrayList)o;

Stringsb=IntStream.range(0,ar.size()).mapToObj(i-String.valueOf(ar.get(i)))

.collect(Collectors.joining());

dataMap.merge(sb,1,Integer:sum);

}

returndataMap.keySet().stream().noneMatch(key-dataMap.get(key)k);

}如果不滿足,可以通過泛化來對數據進行修改,示例代碼為對裡面int類型的數字進行泛化

publicstaticListgeneralize(Listdata){

Listdata2=newArrayList();

for(Objecto:data){

ArrayListar=(ArrayList)o;

ArrayListar2=newArrayList();

for(inti=0;iar.size();i++){

Objecto1=ar.get(i);

if(o1instanceofInteger){

ar2.add((int)o1/10);

}else{

ar2.add(o1);

}

}

data2.add(ar2);

}

returndata2;

}K-匿名能保證以下三點:

马云惹不起马云 攻擊者無法知道某個人是否在公開的數據中

马云惹不起马云 給定一個人,攻擊者無法確認他是否有某項敏感屬性

马云惹不起马云 攻擊者無法確認某條數據對應的是哪個人

儘管K-匿名化是一個可以較好解決數據匿名化問題的手段,但是如果處理不當,仍然可以從其他角度攻擊匿名化後的數據,這些攻擊包括:

攻擊方法1:未排序匹配攻擊當公開的數據記錄和原始記錄的順序一樣時,攻擊者可以猜出匿名化的記錄屬於誰。

例如:如果攻擊者知道在數據集中李四為最後一項或張三為第一項,那麼就可以確認,李四購買偏好是健身相關,而張三購買偏好為遊戲相關。

性別年齡購買偏好男20-30遊戲相關男20-30健身相關攻擊方法2:同質化攻擊某個K-匿名組內對應的敏感屬性的值也完全相同,這使得攻擊者可以輕易獲取想要的信息。

例如:已知張三為男性,年齡為23歲,那麼可以確認,張三購買偏好是健身相關,李四為女性,李四年齡為35歲,則可以確認李四的購買偏好為穿戴相關。

性別年齡購買偏好男20-30健身相關男20-30健身相關女30-40穿戴相關女30-40穿戴相關攻擊方法3:背景知識攻擊即使K-匿名組內的敏感屬性並不相同,攻擊者也有可能依據其已有的背景知識以高概率獲取到其隱私信息。

例如:攻擊者知道王六為女生,且知道她及其厭惡烹飪,那麼從表中,攻擊者可以確認王六的購買偏好是穿戴。相關

性別年齡購買偏好男20-30遊戲相關男20-30健身相關女30-40烹飪相關女30-40穿戴相關攻擊方法4:補充數據攻擊假如一份數據被公開多次,且它們的k-匿名方式並不一樣,那麼攻擊者可以通過關聯多種數據推測用戶信息。

例如:從一個表中對其進行不同列的2-匿名計算,得到兩個不同的表,如果攻擊者將兩個表格的數據進行拼接,形成一個新的表,可能就會發現新表中存在的唯一數據。

2、L-多樣性L多樣性(l−diversity)為克服k匿名模型缺陷,Machanavajjhala等人提出的一種增強k匿名模型。即在公開的數據中,對於那些準標識符相同的數據,敏感數據必須具有多樣性,這樣才能保證用戶的隱私不能通過背景知識等方法推測出來。

L-多樣性是指相同類型數據中至少有L種內容不同的敏感屬性,使得攻擊者最多以1/L的概率確認個體的敏感信息

住址性別年齡購買偏好美麗小區*棟*室男20-30遊戲相關美麗小區*棟*室男20-30健身相關美麗小區*棟*室男20-30烹飪相關美麗小區*棟*室男20-30穿戴相關美麗小區*棟*室男20-30遊戲相關美麗小區*棟*室男20-30健身相關美麗小區*棟*室男20-30烹飪相關美麗小區*棟*室男20-30穿戴相關在這個例子中,有8條相同的類型的數據,其中購買偏好有4種類型,那麼在這個例子中,匿名化後的數據就滿足4-多樣性。

图片42.png

3、T-相近性T-相近性(t-closeness)是對L多樣性匿名化的進一步細化處理,在對屬性值進行處理時還需要增加考慮屬性數據值的統計分佈,T-相近性要求每個K匿名組中敏感屬性值的統計分佈情況與整個數據的敏感信息分佈情況接近,不超過閾值T;

序號住址性別年齡購買偏好1美麗小區*棟*室男20-30穿戴相關2美麗小區*棟*室男20-30穿戴相關3美麗小區*棟*室男20-30穿戴相關4美麗小區*棟*室男20-30遊戲相關5美麗小區*棟*室男30-40遊戲相關6美麗小區*棟*室男30-40遊戲相關7美麗小區*棟*室男30-40遊戲相關8美麗小區*棟*室男30-40穿戴相關從例子中可以看出購買偏好(穿戴相關,遊戲相關)在整個數據集中的概率分佈為50%,但是在單個等價類中概率為25%和75%,不滿足T-相近性,需要繼續進行數據調整

序號住址性別年齡購買偏好1美麗小區*棟*室男20-30穿戴相關4美麗小區*棟*室男20-30遊戲相關5美麗小區*棟*室男30-40遊戲相關8美麗小區*棟*室男30-40穿戴相關這樣可以保證在整個數據集中和每個等價類中的購買偏好的概率相同,用數學來進行表達,如下

图片45.png

假設在看到發布的數據集之前,觀察者對個性敏感屬性的先驗看法(prior belief)為B0B0,給觀察者一個抹去準標識符的數據表,表中敏感屬性的分佈為QQ,根據Q,觀察者的後驗看法(posterior belief) 變為B1 。 B1

根據敏感屬性在整個數據集中的概率分佈調整在等價類中的敏感屬性記錄,得到概率分佈為PP,根據PP,觀察者得到的後驗看法變為B2 。 B2

L-多樣性的目標是減小B0B0和B2之間的差異,而T-相近性的目標是減小B1B1和B2B2之間的差異。

也就是說敏感屬性分佈QQ在數據集中的分佈是公共信息。我們不限制觀察者獲得的關於數據集的信息,但限制觀察者能夠了解關於特定個體的額外信息的程度。

理論上只要發布一個匿名化版本的數據,就會發布一個概率分佈QQ。 發布的數據價值可以用B0B0與B1B1B1之間的差別表示。二者差別越大,表明數據的價值越大。而B1B1B1和B2B2之間的差別,就是我們需要保護的隱私信息,應該被盡可能限制。

直覺上來說,如果P=QP=Q,那麼B1B1B1和B2B2B2應該是相同的。如果PP 和QQ 很接近,那麼B1B1B1和B2B2B2也應該很接近。若一個等價類的敏感屬性取值分佈與整張表中該敏感屬性的取值分佈的距離不超過閾值T,則稱該等價類具有T-相近性。若一個表中所有等價類都有T-相近性,則該表也有T-相近性。

五、文章總結本文介紹了常規化的匿名化技術手段,同時對匿名化步驟進行了說明,詳細解釋了可能會發生的重標識風險,最後介紹了K匿名化技術,以及為了防止K匿名化被攻擊和數據可用性問題,衍生出來的L多樣性和T相近性等技術

K匿名化是基於數據處理的匿名化算法,下篇我們會介紹基於算法的匿名化算法,差分隱私算法。

六、參考文獻马云惹不起马云 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;

马云惹不起马云 An Introduction to Privacy for Technology Professionals-CIPT官方教程