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

在個(gè)保法和GDPR/CCPA中,對匿名化(anonymization)的定義是相似的。 匿名化是指個(gè)人信息經(jīng)過處理后,無論是否借助其他信息或工具都無法識別特定自然人且不能復(fù)原的過程。
一、匿名化常用技術(shù)手段
1、屬性抑制
- · 屬性抑制是指刪除數(shù)據(jù)集中某個(gè)屬性的全部數(shù)據(jù)(刪除某個(gè)列),該技術(shù)一般應(yīng)用在匿名化過程開始時(shí)。
- · 某些情況下,可以使用派生屬性來提高數(shù)據(jù)集的可用性,例如抑制“工作開始時(shí)間”和“工作結(jié)束時(shí)間”,但是可以創(chuàng)建“工作年限”屬性
處理前
|
姓名 |
公司 |
工作開始時(shí)間 |
工作結(jié)束時(shí)間 |
|
張三 |
abc |
2015.9 |
2018.3 |
|
李四 |
tbc |
2016.9 |
2022.4 |
|
王五 |
bcd |
2013.9 |
2021.10 |
|
孫六 |
jbc |
2011.9 |
2023.10 |
處理后,“姓名”抑制,派生“工作年限”
|
公司 |
工作年限(年) |
|
abc |
3 |
|
tbc |
6 |
|
bcd |
8 |
|
jbc |
12 |
data = DataAnonymizationUtil.dropColumns(String... columns,data);data = DataAnonymizationUtil.createColumns(String... columns,data);
2、記錄抑制
- · 記錄抑制是指刪除數(shù)據(jù)集中的整條記錄,刪除唯一或不滿足標(biāo)準(zhǔn)(例如k?匿名)的異常記錄。
- · 刪除記錄可能會(huì)影響數(shù)據(jù)集,比如可能會(huì)影響統(tǒng)計(jì)數(shù)據(jù)種的平均數(shù),中位數(shù)等。
處理前:
|
姓名 |
公司 |
工作開始時(shí)間 |
工作結(jié)束時(shí)間 |
|
張三 |
abc |
2015.9 |
2018.3 |
|
李四 |
abc |
2016.9 |
2019.4 |
|
王五 |
abc |
2017.9 |
2020.10 |
|
孫六 |
abc |
2011.9 |
2023.10 |
姓名屬性抑制,以及時(shí)間派生屬性后
|
公司 |
工作年限(年) |
|
abc |
3 |
|
abc |
3 |
|
abc |
3 |
|
abc |
12 |
從上面可以看出,孫六的12年和其他人員的工作年限比起來會(huì)特別的大,如果其他的一些信息,可能會(huì)猜出第四行為孫六,因此應(yīng)該將第四行刪除
第四行記錄抑制(刪除)后
|
公司 |
工作年限(年) |
|
abc |
3 |
|
abc |
3 |
|
abc |
3 |
data = DataAnonymizationUtil.deleteRows(int[] rowNumber,data);
3、數(shù)據(jù)脫敏(字符屏蔽)
- · 數(shù)據(jù)脫敏是數(shù)據(jù)字符的更改,例如通過符號*或x等對源數(shù)據(jù)進(jìn)行替換修改,一般為部分脫敏,即應(yīng)用與屬性中的一些字符,主要應(yīng)用于當(dāng)隱藏屬性的部分就滿足所需的匿名程度時(shí)。
- · 脫敏需要考慮屏蔽掉的字符是否反應(yīng)原數(shù)據(jù)的相關(guān)信息。提前知道數(shù)據(jù)內(nèi)本身的規(guī)則屏蔽尤其重要,以確保屏蔽到正確的字符。比如數(shù)據(jù)中的校驗(yàn)位(比如身份證的校驗(yàn)位),如果脫敏不徹底,校驗(yàn)位可能用于恢復(fù)脫敏數(shù)據(jù)。
處理前
|
工號 |
層級 |
工作年限 |
|
1234 |
6 |
1 |
|
1324 |
7 |
2 |
|
1423 |
8 |
3 |
脫敏后
|
工號 |
層級 |
工作年限 |
|
1*** |
6 |
1 |
|
1*** |
7 |
2 |
|
1*** |
8 |
3 |
data = DataAnonymizationUtil.maskColumn(String... columns,data);
4、假名化
- · 用虛構(gòu)的值替換識別數(shù)據(jù)。假名化也稱為編碼。假名可以是不可逆的,也可以是可逆(由原始數(shù)據(jù)的所有者),匿名化要求,需要采用不可逆假名。
- · 持久化假名允許通過使用相同的化名來表示不同數(shù)據(jù)集中的同一個(gè)屬性以進(jìn)行關(guān)聯(lián)。在某些情況下也需要使用不同的假名來表示不同數(shù)據(jù)集中的同一個(gè)人,以防止數(shù)據(jù)被關(guān)聯(lián)。
處理前
|
姓名 |
績效評分 |
工作年限 |
|
張三 |
60 |
1 |
|
李四 |
70 |
2 |
|
王五 |
80 |
3 |
處理后
|
姓名 |
績效評分 |
工作年限 |
|
abc |
60 |
1 |
|
123 |
70 |
2 |
|
xyz |
80 |
3 |
data = DataAnonymizationUtil.pseudColumn(String... columns,data);
5、泛化(一般化)
- · 泛化降低了數(shù)據(jù)的精度。例如,將人的年齡轉(zhuǎn)換為年齡范圍,或?qū)⒕_位置轉(zhuǎn)換為不太精確的位置。對于可以泛化并且對結(jié)果預(yù)期有用的屬性,可以設(shè)計(jì)適當(dāng)?shù)囊?guī)則進(jìn)行泛化處理。
- · 設(shè)計(jì)具有適當(dāng)大小的數(shù)據(jù)范圍。數(shù)據(jù)范圍太大可能意味著數(shù)據(jù)可能被修改得太多,數(shù)據(jù)的價(jià)值會(huì)降低;而數(shù)據(jù)范圍太小可能意味著數(shù)據(jù)幾乎沒有被修改,容易被重新識別,不滿足要求。請注意,第一個(gè)和最后一個(gè)范圍可以是更大的范圍,以容納這些末端通常較少的記錄;
處理前
|
姓名 |
年齡 |
薪資 |
|
張三 |
25 |
25734 |
|
李四 |
35 |
43527 |
|
王五 |
30 |
37524 |
|
孫六 |
28 |
34257 |
處理后
|
姓名 |
年齡 |
薪資 |
|
張* |
20-30 |
20000-30000 |
|
李* |
30-40 |
40000-50000 |
|
王* |
30-40 |
30000-40000 |
|
孫* |
20-30 |
30000-40000 |
data = DataAnonymizationUtil.generalizeColumn(String... columns,data);
6、數(shù)據(jù)交換
- · 交換的目的是重新排列數(shù)據(jù)集中的數(shù)據(jù),使得各個(gè)屬性值仍然在數(shù)據(jù)集中表示,但通常與原始記錄不對應(yīng)。
- · 適用于分析只看聚合數(shù)據(jù)的情況,或者分析是在屬性內(nèi)分析時(shí);換句話說,不需要分析記錄級別的屬性之間的關(guān)系。
處理前
|
姓名 |
年齡 |
薪資 |
|
張三 |
25 |
25734 |
|
李四 |
35 |
43527 |
|
王五 |
30 |
37524 |
|
孫六 |
28 |
34257 |
處理后
|
姓名 |
年齡 |
薪資 |
|
張* |
28 |
25734 |
|
李* |
30 |
37524 |
|
王* |
35 |
43527 |
|
孫* |
25 |
34257 |
data = DataAnonymizationUtil.swapRows(int[] rows,data);
7、數(shù)據(jù)擾動(dòng)
- · 原始數(shù)據(jù)集中的值被修改為略有不同即為數(shù)據(jù)擾動(dòng),對于準(zhǔn)標(biāo)識符(通常是數(shù)字和日期),與其他數(shù)據(jù)源結(jié)合時(shí)可能會(huì)被識別,并且值的輕微變化是可以接受的。該技術(shù)不應(yīng)在數(shù)據(jù)準(zhǔn)確性要求較高的情況下使用
- · 擾動(dòng)程度應(yīng)與屬性值的范圍成比例,比例太小,不滿足匿名化要求;比例太大,最終值將與原始值相差太大,擾動(dòng)后數(shù)據(jù)集的可用性可能會(huì)嚴(yán)重降低。
處理前
|
姓名 |
年齡 |
薪資 |
|
張三 |
25 |
25734 |
|
李四 |
35 |
43527 |
|
王五 |
30 |
37524 |
|
孫六 |
28 |
34257 |
處理后
|
姓名 |
年齡 |
薪資 |
|
張* |
27 |
24257 |
|
李* |
33 |
43527 |
|
王* |
28 |
37524 |
|
孫* |
30 |
35734 |
data = DataAnonymizationUtil.perturbeColumn(String... columns,data);
8、數(shù)據(jù)合成
- · 它直接與原始數(shù)據(jù)分開,重新生成符合模式的數(shù)據(jù)集,而不是修改原始數(shù)據(jù)集,通常是當(dāng)系統(tǒng)測試需要大量數(shù)據(jù),但不能提供真實(shí)數(shù)據(jù)且要求提供的數(shù)據(jù)在某些方面應(yīng)該是符合模式的,如格式、屬性之 間的關(guān)系等。
- · 數(shù)據(jù)在合成時(shí)需要研究原始數(shù)據(jù)集中的模式,并在創(chuàng)建“匿名”數(shù)據(jù)集(即合成數(shù)據(jù))時(shí)應(yīng)用這些模式。根據(jù)測試范圍和要求,可以生成全部或部分合成數(shù)據(jù);例如,在進(jìn)行測試時(shí),需要引用其他數(shù)據(jù)集,那么正在測試的少數(shù)數(shù)據(jù)需要保持其原始形式,但其他信息可以是合成的。
- · 應(yīng)用此技術(shù)時(shí),可能需要額外注意異常值。出于測試目的,異常值通常非常有價(jià)值,因此在合成數(shù)據(jù)時(shí)需要特別注意異常值的合成。
處理前
|
姓名 |
年齡 |
薪資 |
|
張三 |
25 |
25734 |
|
李四 |
35 |
43527 |
|
王五 |
30 |
37524 |
|
孫六 |
28 |
34257 |
處理后
|
姓名 |
年齡 |
薪資 |
|
a* |
27 |
34257 |
|
c* |
33 |
33527 |
|
d* |
28 |
27524 |
|
b* |
30 |
45734 |
data = DataAnonymizationUtil.synthesis(data);
9、數(shù)據(jù)聚合
- · 將數(shù)據(jù)集從記錄列表轉(zhuǎn)換為匯總值即為數(shù)據(jù)聚合,主要應(yīng)用于不需要單獨(dú)記錄,而僅僅需要聚合數(shù)據(jù)的場景。
- · 請注意執(zhí)行聚合后記錄太少的組。在某些情況下聚合數(shù)據(jù)的單個(gè)記錄,加入額外知識可能會(huì)輕松推斷原數(shù)據(jù)。
處理前
|
姓名 |
年齡 |
薪資 |
|
張三 |
25 |
25734 |
|
李四 |
35 |
43527 |
|
王五 |
30 |
37524 |
|
孫六 |
28 |
34257 |
處理后
|
年齡段 |
平均薪資 |
|
20-30 |
30000 |
|
30-40 |
40000 |
data = DataAnonymizationUtil.aggregate(data);
二、匿名化步驟
匿名化技術(shù)在提升數(shù)據(jù)隱私保護(hù)力度的同時(shí),會(huì)犧牲數(shù)據(jù)的可用性,所以在設(shè)計(jì)和執(zhí)行匿名化方案時(shí)可以遵循如下步驟
1、理解數(shù)據(jù)
研究原始數(shù)據(jù),區(qū)分其中不同類型的數(shù)據(jù)字段(直接標(biāo)識符,準(zhǔn)標(biāo)識符,普通字段屬性),方便后續(xù)使用不同的處理方式,作為數(shù)據(jù)最小化的一部分,應(yīng)首先刪除結(jié)果數(shù)據(jù)集中不需要的任何數(shù)據(jù)屬性。
數(shù)據(jù)匿名化技術(shù)介紹
2、應(yīng)用匿名化技術(shù)
篩選出需要匿名化的字段,結(jié)合數(shù)據(jù)使用場景和需求,組合使用不同的匿名化技術(shù)。
數(shù)據(jù)匿名化技術(shù)介紹
3、評估重標(biāo)識風(fēng)險(xiǎn)
對匿名化結(jié)果進(jìn)行重標(biāo)識風(fēng)險(xiǎn)分析,如果評估得出重標(biāo)識風(fēng)險(xiǎn)超過預(yù)期,需要回步驟二深度應(yīng)用或者重新選擇匿名化方案。重標(biāo)識(re-identification)指的是對匿名化的數(shù)據(jù)重新關(guān)聯(lián)到原始個(gè)人信息主體的一種數(shù)據(jù)處理方式,它是匿名化的一個(gè)逆向操作。以下為常見的重標(biāo)識風(fēng)險(xiǎn)
1)識別符泄露
指的是處理過程中對識別符字段的匿名化程度不夠,導(dǎo)致對手可以直接獲取到信息主體的直接/間接識別符。例如:手機(jī)號碼直接計(jì)算哈希值,對手通過哈希碰撞方式,可以獲得數(shù)據(jù)集中的全部或部分明文手機(jī)號碼。
2)屬性泄露
對手雖然無法從發(fā)布的數(shù)據(jù)集中獲得信息主體的識別信息,但可以確定該主體某個(gè)屬性的屬性值
|
住址 |
性別 |
年齡 |
是否有糖尿病 |
|
荷花小區(qū) |
男 |
20-30歲 |
無 |
|
荷花小區(qū) |
女 |
20-30歲 |
有 |
|
荷花小區(qū) |
男 |
90-100歲 |
無 |
如上例,可以知曉荷花小區(qū)有一位年齡大于90歲的老人,并且能確定該老人有糖尿病。該數(shù)據(jù)集雖然沒暴露個(gè)人識別信息(不知道該老人是誰),但還是暴露了該自然人病史信息。
3)推理信息泄露
通過數(shù)據(jù)集中反映的規(guī)律來推斷用戶的某項(xiàng)屬性,比如脫敏后數(shù)據(jù)集顯示荷花小區(qū)50-60歲有30人,其中20人近視為100度到500度,10人近視為500度到1000度,則如果知道自然人是居住在荷花小區(qū)后,且年齡是50-60歲之間,就可以知道此人肯定是近視患者。
4、管理匿名數(shù)據(jù)發(fā)布風(fēng)險(xiǎn)
基于風(fēng)險(xiǎn)評估結(jié)果,結(jié)合其他技術(shù)措施和管理措施來應(yīng)對已識別風(fēng)險(xiǎn)。
1)可用技術(shù)措施
- · 對發(fā)布數(shù)據(jù)集進(jìn)行嚴(yán)格的權(quán)限訪問控制,限制可訪問數(shù)據(jù)集用戶的范圍,并定期對訪問權(quán)限進(jìn)行檢查;
- · 對包含高度敏感信息的數(shù)據(jù)集,匿名化處理后再次進(jìn)行加密;
2)可用管理措施
- · 記錄已共享數(shù)據(jù)集,防止不同數(shù)據(jù)集通過組合暴露個(gè)人隱私;
- · 通過審批流程控制匿名化后的數(shù)據(jù)集訪問的使用;
- · 禁止組織內(nèi)部成員對匿名化數(shù)據(jù)集未經(jīng)批準(zhǔn)進(jìn)行重識別;
- · 定期檢查數(shù)據(jù)的重標(biāo)識風(fēng)險(xiǎn);
- · 定期清理組織內(nèi)部不再使用的匿名數(shù)據(jù)集;
四、K匿名化技術(shù)
1、K-匿名
K-匿名模型(k-anonymity)是一種用于評估匿名化/去特征化后數(shù)據(jù)的信息安全的模型。它要求處理后的數(shù)據(jù)集中每個(gè)準(zhǔn)識別符至少有K條相同的記錄,增加從數(shù)據(jù)集中直接篩選出記錄并進(jìn)行關(guān)聯(lián)攻擊的難度。
K-匿名的概念是由Latanya Sweeney和 Pierangela Samarati在1998年的一篇論文中最先提出的,其目的是為了解決如下問題:“給定一組結(jié)構(gòu)化的具體到個(gè)人的數(shù)據(jù),能否得出一組經(jīng)過處理的數(shù)據(jù),使我們可以證明數(shù)據(jù)中涉及的個(gè)人不能被再識別,同時(shí)還要保證數(shù)據(jù)仍具有使用價(jià)值。”使一組數(shù)據(jù)滿足k-anonymity的過程稱為K-匿名。
比如下面這個(gè)例子中,每個(gè)準(zhǔn)識別符住址,性別,年齡至少有2個(gè)相同的記錄。
處理前
|
住址 |
性別 |
年齡 |
身高是否大于180cm |
|
荷花小區(qū)棟889室 |
男 |
25 |
是 |
|
荷花小區(qū)2棟889室 |
女 |
28 |
否 |
|
美麗小區(qū)30棟3室 |
男 |
34 |
是 |
|
美麗小區(qū)30棟3001室 |
男 |
45 |
是 |
|
美麗小區(qū)30棟1212室 |
女 |
32 |
否 |
|
荷花小區(qū)2棟601室 |
男 |
43 |
是 |
|
美麗小區(qū)31棟1210室 |
女 |
48 |
否 |
|
荷花小區(qū)12棟601室 |
女 |
41 |
是 |
處理后
|
住址 |
性別 |
年齡 |
身高是否大于180cm |
|
荷花小區(qū)*棟*室 |
男 |
20-30 |
是 |
|
荷花小區(qū)*棟*室 |
女 |
20-30 |
否 |
|
美麗小區(qū)*棟*室 |
男 |
30-40 |
是 |
|
美麗小區(qū)*棟*室 |
男 |
40-50 |
是 |
|
美麗小區(qū)*棟*室 |
女 |
30-40 |
否 |
|
荷花小區(qū)*棟*室 |
男 |
40-50 |
是 |
|
美麗小區(qū)*棟*室 |
女 |
30-40 |
否 |
|
荷花小區(qū)*棟*室 |
女 |
40-50 |
是 |
K-匿名方法主要有兩種:
1)數(shù)據(jù)抑制,主要是講一些屬性的值用*取代或者刪除對應(yīng)的屬性;
2)數(shù)據(jù)泛化,將一些屬性的精確值用更寬泛的值替代,比如說把年齡這個(gè)數(shù)字概括成一個(gè)年齡段。
判斷是否K匿名的偽代碼
public static boolean isKAnonymized(List data, int k) {
Map dataMap = new HashMap<>();
for (Object o : data) {
ArrayList ar = (ArrayList) o;
String sb = IntStream.range(0, ar.size()).mapToObj(i -> String.valueOf(ar.get(i)))
.collect(Collectors.joining());
dataMap.merge(sb, 1, Integer::sum);
}
return dataMap.keySet().stream().noneMatch(key -> dataMap.get(key) < k);
}如果不滿足,可以通過泛化來對數(shù)據(jù)進(jìn)行修改,示例代碼為對里面int類型的數(shù)字進(jìn)行泛化
public static List generalize(List data) {
List data2 = new ArrayList<>();
for (Object o : data) {
ArrayList ar = (ArrayList) o;
ArrayList ar2 = new ArrayList<>();
for (int i = 0; i < ar.size(); i++) {
Object o1 = ar.get(i);
if (o1 instanceof Integer) {
ar2.add((int) o1 / 10);
} else {
ar2.add(o1);
}
}
data2.add(ar2);
}
return data2;
}K-匿名能保證以下三點(diǎn):
- · 攻擊者無法知道某個(gè)人是否在公開的數(shù)據(jù)中
- · 給定一個(gè)人,攻擊者無法確認(rèn)他是否有某項(xiàng)敏感屬性
- · 攻擊者無法確認(rèn)某條數(shù)據(jù)對應(yīng)的是哪個(gè)人
盡管K-匿名化是一個(gè)可以較好解決數(shù)據(jù)匿名化問題的手段,但是如果處理不當(dāng),仍然可以從其他角度攻擊匿名化后的數(shù)據(jù),這些攻擊包括:
攻擊方法1:未排序匹配攻擊
當(dāng)公開的數(shù)據(jù)記錄和原始記錄的順序一樣時(shí),攻擊者可以猜出匿名化的記錄屬于誰。
例如:如果攻擊者知道在數(shù)據(jù)集中李四為最后一項(xiàng)或張三為第一項(xiàng),那么就可以確認(rèn),李四購買偏好是健身相關(guān),而張三購買偏好為游戲相關(guān)。
|
性別 |
年齡 |
購買偏好 |
|
男 |
20-30 |
游戲相關(guān) |
|
男 |
20-30 |
健身相關(guān) |
攻擊方法2:同質(zhì)化攻擊
某個(gè)K-匿名組內(nèi)對應(yīng)的敏感屬性的值也完全相同,這使得攻擊者可以輕易獲取想要的信息。
例如:已知張三為男性,年齡為23歲,那么可以確認(rèn),張三購買偏好是健身相關(guān),李四為女性,李四年齡為35歲,則可以確認(rèn)李四的購買偏好為穿戴相關(guān)。
|
性別 |
年齡 |
購買偏好 |
|
男 |
20-30 |
健身相關(guān) |
|
男 |
20-30 |
健身相關(guān) |
|
女 |
30-40 |
穿戴相關(guān) |
|
女 |
30-40 |
穿戴相關(guān) |
攻擊方法3:背景知識攻擊
即使K-匿名組內(nèi)的敏感屬性并不相同,攻擊者也有可能依據(jù)其已有的背景知識以高概率獲取到其隱私信息。
例如:攻擊者知道王六為女生,且知道她及其厭惡烹飪,那么從表中,攻擊者可以確認(rèn)王六的購買偏好是穿戴。相關(guān)
|
性別 |
年齡 |
購買偏好 |
|
男 |
20-30 |
游戲相關(guān) |
|
男 |
20-30 |
健身相關(guān) |
|
女 |
30-40 |
烹飪相關(guān) |
|
女 |
30-40 |
穿戴相關(guān) |
攻擊方法4:補(bǔ)充數(shù)據(jù)攻擊
假如一份數(shù)據(jù)被公開多次,且它們的k-匿名方式并不一樣,那么攻擊者可以通過關(guān)聯(lián)多種數(shù)據(jù)推測用戶信息。
例如:從一個(gè)表中對其進(jìn)行不同列的2-匿名計(jì)算,得到兩個(gè)不同的表,如果攻擊者將兩個(gè)表格的數(shù)據(jù)進(jìn)行拼接,形成一個(gè)新的表,可能就會(huì)發(fā)現(xiàn)新表中存在的唯一數(shù)據(jù)。
2、L-多樣性
L多樣性(l?diversity)為克服k匿名模型缺陷,Machanavajjhala等人提出的一種增強(qiáng)k匿名模型。即在公開的數(shù)據(jù)中,對于那些準(zhǔn)標(biāo)識符相同的數(shù)據(jù),敏感數(shù)據(jù)必須具有多樣性,這樣才能保證用戶的隱私不能通過背景知識等方法推測出來。
L-多樣性是指相同類型數(shù)據(jù)中至少有L種內(nèi)容不同的敏感屬性,使得攻擊者最多以 1/L的概率確認(rèn)個(gè)體的敏感信息
|
住址 |
性別 |
年齡 |
購買偏好 |


咨詢
建站咨詢
