本文首發(fā)于【林子的空間】
數(shù)據(jù)匿名化哥捕,是數(shù)據(jù)安全相關(guān)的實(shí)踐。目前從網(wǎng)上能找到的內(nèi)容主要是關(guān)于匿名化的實(shí)現(xiàn)技術(shù)。最近万俗,筆者在項(xiàng)目中以QA和用戶的雙重身份接觸到了數(shù)據(jù)匿名化卤妒,決定跟大家分享一下這段經(jīng)歷帽揪,從QA的視角來聊聊數(shù)據(jù)匿名化弥鹦。
數(shù)據(jù)匿名化及其實(shí)現(xiàn)概述
在聊項(xiàng)目經(jīng)歷之前蕾哟,還是有必要大概介紹一下數(shù)據(jù)匿名化。
數(shù)據(jù)匿名化是指從數(shù)據(jù)集中將個(gè)人身份信息(Personal Identification Information, PII)清除/脫敏沪斟,讓人無法識(shí)別數(shù)據(jù)所描述/關(guān)聯(lián)的主體支示,以實(shí)現(xiàn)保護(hù)隱私的目的刊橘。
很多場景下需要使用和處理生產(chǎn)環(huán)境的真實(shí)數(shù)據(jù),比如:以測試颂鸿、培訓(xùn)促绵、數(shù)據(jù)對(duì)外發(fā)布、數(shù)據(jù)分析等為目的的場景嘴纺。但生產(chǎn)環(huán)境的真實(shí)數(shù)據(jù)包含個(gè)人身份信息败晴,由于隱私保護(hù)需要,不能直接使用栽渴。這個(gè)時(shí)候數(shù)據(jù)匿名化很有必要位衩。
實(shí)現(xiàn)數(shù)據(jù)匿名化的操作(參考Wikipedia)常見的有五種類型:泛化(Generalization),抑制(Suppression)熔萧,解剖(Anatomization)糖驴,置換(Permutation)和擾動(dòng)(Perturbation)。具體的實(shí)現(xiàn)技術(shù)細(xì)節(jié)不是QA視角關(guān)注的重點(diǎn)佛致,本文不做展開贮缕,對(duì)此感興趣的朋友請(qǐng)自行研究學(xué)習(xí)。下表列舉一些簡單的數(shù)據(jù)匿名化例子:
數(shù)據(jù)匿名化方法 | 方法詳情 | 方法示例 |
---|---|---|
取整 | 數(shù)值或日期數(shù)據(jù)的取整 | 15:25:25 => 15:00:00 |
屏蔽 | 屏蔽部分?jǐn)?shù)據(jù)俺榆,如電話號(hào)碼感昼、身份證號(hào)碼等 | 187****1234 |
截?cái)?/td> | 數(shù)據(jù)部分截?cái)?/td> | 0086-10-88888888 => 0086-10 |
替換 | 使用替換表對(duì)敏感數(shù)據(jù)進(jìn)行替換 | IBM=>1, HP=>2, MS=>3 |
哈希 | 將數(shù)據(jù)映射為固定長度的字符串 | IBM=>a23d, HP=>1fc2 |
重排 | 將數(shù)據(jù)庫的某一列值進(jìn)行重排 | 81,87,85 => 87,85,81 |
保留格式加密(FPE) | 明文和密文格式不變 | 18712345678 => 18587654321 |
數(shù)據(jù)匿名化后需要關(guān)注以下幾個(gè)方面:
- 安全性:之所以要將數(shù)據(jù)匿名化,為的就是保護(hù)個(gè)人隱私罐脊,是從數(shù)據(jù)安全性角度考慮的定嗓。因此,安全性是數(shù)據(jù)匿名化后需要著重考慮的關(guān)鍵點(diǎn)萍桌。
- 可用性:數(shù)據(jù)匿名化肯定是有其目的用途的宵溅,不管是應(yīng)用于前面提到的哪個(gè)場景,都需要保證匿名化后的數(shù)據(jù)是滿足需求的上炎,也就是數(shù)據(jù)可用性恃逻。
- 可用性和安全性的平衡:如果數(shù)據(jù)匿名化做的很徹底,完全識(shí)別不出原來數(shù)據(jù)的面目藕施,定會(huì)影響到數(shù)據(jù)的可用性寇损,因此,可用性和安全性是相互制衡的兩個(gè)方面裳食,唯有根據(jù)實(shí)際需求保持好兩者的平衡才能真正發(fā)揮作用矛市。
數(shù)據(jù)匿名化的項(xiàng)目實(shí)踐
這不是一個(gè)大數(shù)據(jù)項(xiàng)目,數(shù)據(jù)分析(雖有必要但)不是重點(diǎn)诲祸;這是一個(gè)普通的企業(yè)管理系統(tǒng)和用戶系統(tǒng)浊吏,有著大量的用戶數(shù)據(jù)憨愉,而且數(shù)據(jù)機(jī)密程度要求比較高。下面來看為什么要在項(xiàng)目內(nèi)做數(shù)據(jù)匿名化卿捎,以及項(xiàng)目的數(shù)據(jù)匿名化是怎么做的配紫、有哪些坑。
項(xiàng)目痛點(diǎn)驅(qū)動(dòng)數(shù)據(jù)匿名化
生產(chǎn)環(huán)境缺陷較多是困擾客戶和開發(fā)團(tuán)隊(duì)的問題午阵,是項(xiàng)目迫切需要解決的痛點(diǎn)躺孝。
生產(chǎn)環(huán)境數(shù)據(jù)機(jī)密性要求較高,數(shù)據(jù)可訪問權(quán)限受限底桂,測試環(huán)境的數(shù)據(jù)量和復(fù)雜度都無法和生產(chǎn)環(huán)境相比植袍。這種環(huán)境數(shù)據(jù)的差異性使得生產(chǎn)環(huán)境缺陷的診斷定位非常困難,也很難在測試環(huán)境提前發(fā)現(xiàn)可能引起的生產(chǎn)環(huán)境問題籽懦。雖然從缺陷分析于个、缺陷響應(yīng)機(jī)制、增加日志監(jiān)控等方面做了很多工作暮顺,但還是會(huì)有很多缺陷在生產(chǎn)環(huán)境出現(xiàn)厅篓,而且總會(huì)冒出一些稀奇古怪的新的缺陷類型來。
于是捶码,團(tuán)隊(duì)跟客戶討論最終決定采用數(shù)據(jù)匿名化技術(shù)將生產(chǎn)環(huán)境數(shù)據(jù)匿名化后用于測試羽氮,以盡早暴露生產(chǎn)環(huán)境問題,同時(shí)幫助更方便生產(chǎn)環(huán)境問題的診斷定位惫恼。
項(xiàng)目的數(shù)據(jù)匿名化流程
項(xiàng)目的數(shù)據(jù)匿名化實(shí)踐主要經(jīng)歷以下四個(gè)階段:分析設(shè)計(jì)档押、落地實(shí)施、測試確認(rèn)和交付使用祈纯。
這里主要是為了方便描述令宿,分成了四個(gè)看似獨(dú)立的階段,其實(shí)每個(gè)階段之間的分界線不是那么清晰的腕窥,實(shí)際操作過程中有反復(fù)和疊加的情況存在粒没,如下圖中虛線所示。例如:在落地實(shí)施階段發(fā)現(xiàn)有些分析做的不夠或者設(shè)計(jì)不合理油昂,需要返回重新分析和設(shè)計(jì)革娄;在測試確認(rèn)階段發(fā)現(xiàn)有的數(shù)據(jù)匿名化有問題,需要返回重走實(shí)施流程執(zhí)行優(yōu)化的匿名化方案等冕碟。
1. 分析設(shè)計(jì)
要實(shí)現(xiàn)數(shù)據(jù)匿名化首先要搞清楚需要脫敏的數(shù)據(jù),以及如何對(duì)數(shù)據(jù)進(jìn)行脫敏匆浙,這就是對(duì)應(yīng)到分析設(shè)計(jì)階段的兩個(gè)主要任務(wù):定義PII信息和制定數(shù)據(jù)匿名化策略安寺。這部分由業(yè)務(wù)、開發(fā)和測試等多個(gè)角色合作完成首尼。
定義PII信息
定義PII信息主要是根據(jù)業(yè)務(wù)需求分析出系統(tǒng)中的哪些數(shù)據(jù)是不能對(duì)外公開需要脫敏的挑庶,以確定數(shù)據(jù)脫敏的范圍言秸。常見的PII信息可能有:個(gè)人身份信息(姓名、身份證號(hào)迎捺、電話號(hào)碼举畸、職業(yè)、薪水等)凳枝、部門信息抄沮、簽署的協(xié)議內(nèi)容等。
除了基本的個(gè)人信息外岖瑰,不同的業(yè)務(wù)領(lǐng)域或客戶對(duì)機(jī)密信息的定義也會(huì)有區(qū)別叛买。數(shù)據(jù)脫敏范圍一定要根據(jù)具體的業(yè)務(wù)需求來確定。
制定數(shù)據(jù)匿名化策略
確定了脫敏范圍蹋订,接下來就是確定詳細(xì)的脫敏方式率挣,選擇合適的工具,也就是制定數(shù)據(jù)匿名化策略露戒。
首先是工具選型椒功。項(xiàng)目選擇的是Tonic,之所以選擇這個(gè)工具很大部分原因是客戶提出來的智什,當(dāng)然這個(gè)工具也是很強(qiáng)大的蛾茉。作為QA,并沒有親密接觸到這個(gè)工具撩鹿,在此也就不多展開谦炬,更多關(guān)于工具的詳情,請(qǐng)自行研究對(duì)比节沦。
然后是根據(jù)工具以及系統(tǒng)PII數(shù)據(jù)的存儲(chǔ)特點(diǎn)键思,確定最終可以實(shí)現(xiàn)脫敏的數(shù)據(jù)范圍。比如甫贯,項(xiàng)目中的不同類數(shù)據(jù)有不同的方案:
- 直接以數(shù)值形式存儲(chǔ)在DB里的PII數(shù)據(jù)吼鳞,可以對(duì)其進(jìn)行脫敏,實(shí)現(xiàn)匿名化叫搁;
- 以文件形式存儲(chǔ)的協(xié)議赔桌、報(bào)告等數(shù)據(jù),都是只讀的PDF格式渴逻,這種數(shù)據(jù)難以脫敏疾党,只能放棄這些文件數(shù)據(jù),不進(jìn)行導(dǎo)入惨奕;
- 用戶登錄認(rèn)證相關(guān)數(shù)據(jù)雪位,脫敏成本較高,采用Mock的方式梨撞,讓用戶仍然能夠登錄系統(tǒng)進(jìn)行使用雹洗。
進(jìn)行數(shù)據(jù)脫敏還要注意不同類型的數(shù)據(jù)一般會(huì)有不同的脫敏方式香罐,比如:人名的脫敏有專門的詞庫,脫敏后看起來還是人名的樣子时肿;而有些固定格式的字段庇茫,像身份證號(hào)、電話號(hào)碼螃成、車牌號(hào)這些脫敏后雖然數(shù)值變了旦签,格式還需要保留原樣。因此锈颗,對(duì)于每一個(gè)不同的數(shù)據(jù)字段都要設(shè)定好詳細(xì)的脫敏策略顷霹。
2. 落地實(shí)施
制定好詳細(xì)的數(shù)據(jù)匿名化策略,接下來就是利用工具實(shí)現(xiàn)脫敏了击吱,這部分由專門負(fù)責(zé)的開發(fā)人員來完成淋淀。下面根據(jù)項(xiàng)目經(jīng)歷,分享落地實(shí)施的執(zhí)行流程和踩過的坑覆醇。
流程
數(shù)據(jù)匿名化的具體實(shí)施經(jīng)歷了以下幾個(gè)步驟:
- 數(shù)據(jù)分析:確定 DB 涉及表單的范圍朵纷,識(shí)別 PII 數(shù)據(jù)存儲(chǔ)列,分析數(shù)據(jù)關(guān)聯(lián)并確認(rèn)外鍵關(guān)聯(lián)列永脓、enum 存儲(chǔ)列等核心關(guān)系列袍辞。
- 數(shù)據(jù)生成:采用工具Tonic,與 Tonic 支持團(tuán)隊(duì)合作常摧,根據(jù)不同列的脫敏方案進(jìn)行脫敏搅吁,生成新的匿名化數(shù)據(jù)。
- 環(huán)境搭建:這些匿名化后的數(shù)據(jù)是用于測試環(huán)境的落午,但不是直接導(dǎo)入測試環(huán)境谎懦,需要驗(yàn)證可用之后才能切換到測試環(huán)境。因此溃斋,需要的單獨(dú)搭建一套測試環(huán)境用來導(dǎo)入脫敏后的數(shù)據(jù)界拦。本步驟實(shí)現(xiàn)環(huán)境基礎(chǔ)設(shè)施搭建,安裝配置所有第三方支持組件梗劫。
- 數(shù)據(jù)導(dǎo)入:在新搭建的環(huán)境導(dǎo)入 Tonic 生成的數(shù)據(jù)享甸,簡單驗(yàn)證保證系統(tǒng)正常運(yùn)行起來,后續(xù)再交給QA團(tuán)隊(duì)來做進(jìn)一步的測試確認(rèn)梳侨。
注意:這里的數(shù)據(jù)分析跟前面分析設(shè)計(jì)階段的分析師不同的蛉威,分析設(shè)計(jì)階段是從業(yè)務(wù)上對(duì)PII數(shù)據(jù)的分析確認(rèn),在實(shí)施階段是對(duì)數(shù)據(jù)庫表里存儲(chǔ)的實(shí)際數(shù)據(jù)進(jìn)行分析猫妙。
難點(diǎn)
在數(shù)據(jù)匿名化實(shí)施過程中踩到了一些坑瓷翻,在此也跟大家分享一下:
- 潛在數(shù)據(jù)關(guān)系錯(cuò)綜復(fù)雜,有些未被提前識(shí)別割坠,導(dǎo)致生成的數(shù)據(jù)不可用齐帚;
- 為了保證導(dǎo)入數(shù)據(jù)正常工作,需要Mock不能實(shí)現(xiàn)匿名化的用戶登錄認(rèn)證系統(tǒng)彼哼,這是一個(gè)難點(diǎn)对妄;
- 系統(tǒng)存在大量的事件(Event),基于導(dǎo)入數(shù)據(jù)重新生成Event也比較麻煩敢朱;
- 匿名化后導(dǎo)致有不少跟環(huán)境配置相關(guān)的數(shù)據(jù)需要修復(fù)剪菱。
3. 測試確認(rèn)
測試確認(rèn)是QA主要參與的階段,對(duì)脫敏后生成的數(shù)據(jù)的測試主要從安全性和可用性兩個(gè)方面進(jìn)行測試確認(rèn)拴签。
安全性
首先要保障的是數(shù)據(jù)的安全性孝常,也就是需要滿足數(shù)據(jù)不能被識(shí)別,測試過程中主要關(guān)注以下幾個(gè)方面:
- 確認(rèn)分析階段確認(rèn)需要脫敏的數(shù)據(jù)是否都已經(jīng)脫敏蚓哩,或者已經(jīng)通過Mock的方式處理构灸。
- 是否有分析過程中漏掉的同樣需要脫敏但沒有脫敏的信息,對(duì)于這樣的數(shù)據(jù)需要再次進(jìn)行脫敏岸梨。
- 對(duì)于已經(jīng)脫敏的數(shù)據(jù)是否有猜測出真實(shí)信息的可能喜颁,通過系列數(shù)據(jù)的關(guān)聯(lián)、對(duì)比等方式曹阔。
- 可用性和安全性沒法兩全半开,需要作出取舍,對(duì)于那些為了保證可用性而沒法脫敏的數(shù)據(jù)是否有從訪問控制的角度保障一定的安全性赃份。比如:只能有限的用戶可以訪問寂拆,并且需要在內(nèi)網(wǎng)才能訪問等。
可用性
可用性主要是通過測試系統(tǒng)功能來確認(rèn)抓韩,這跟平常的功能測試差異不大纠永,不過可以重點(diǎn)關(guān)注以下幾個(gè)方面:
- 系統(tǒng)各個(gè)功能模塊的連通性、與外部系統(tǒng)的連通性园蝠,通過驗(yàn)證已有數(shù)據(jù)和新增數(shù)據(jù)是否都能工作正常渺蒿。
- 脫敏后的數(shù)據(jù)是否有問題,比如類型錯(cuò)誤可能導(dǎo)致數(shù)據(jù)存儲(chǔ)被破壞而不能通過數(shù)據(jù)校驗(yàn)等彪薛。我們?cè)趯?shí)踐過程中就發(fā)現(xiàn)有date類型的數(shù)據(jù)不小心給脫敏成了string類型茂装,導(dǎo)致存儲(chǔ)失敗。
- 數(shù)據(jù)唯一性保障善延,確保不會(huì)有重復(fù)數(shù)據(jù)影響功能使用少态。舉例說明,系統(tǒng)有個(gè)功能需要存儲(chǔ)客戶的短名稱易遣,脫敏過程中實(shí)現(xiàn)方式是用前三個(gè)字母彼妻,假設(shè)有幾個(gè)客戶名字分別被脫敏為:“New Star”、“New World”、“New Land”侨歉,那么它們的短名稱就都變成了“New”屋摇,是相同的,而事實(shí)上是對(duì)應(yīng)到不同的客戶幽邓,這必然會(huì)影響功能的使用炮温。
4. 交付使用
確認(rèn)了匿名化后的數(shù)據(jù)沒問題、系統(tǒng)工作正常就正式投入使用了牵舵,這時(shí)候QA身份也變成了用戶柒啤,團(tuán)隊(duì)的業(yè)務(wù)和開發(fā)人員也是這個(gè)環(huán)境的用戶。這部分主要分享一下脫敏后的數(shù)據(jù)給我們團(tuán)隊(duì)帶來的價(jià)值畸颅,以及使用過程中的一些感受和想法担巩。
價(jià)值
我們采用每月導(dǎo)入一次數(shù)據(jù)的做法,以盡量保證這個(gè)測試環(huán)境的數(shù)據(jù)跟生產(chǎn)環(huán)境的接近没炒。利用脫敏的生產(chǎn)環(huán)境數(shù)據(jù)測試帶來的價(jià)值主要有:
- 功能相關(guān)bug可以提前在測試環(huán)境發(fā)現(xiàn)涛癌,減少流入生產(chǎn)環(huán)境的bug數(shù),降低了修復(fù)成本窥浪。
- 利用這個(gè)環(huán)境做性能測試祖很,盡早發(fā)現(xiàn)之前到生產(chǎn)環(huán)境才能暴露的性能問題,盡早修復(fù)漾脂,降低了成本假颇,并且?guī)砀玫挠脩趔w驗(yàn);另外骨稿,我們還通過這個(gè)環(huán)境跟蹤性能趨勢笨鸡,盡早做好性能優(yōu)化工作。
- 利用這些數(shù)據(jù)重現(xiàn)生產(chǎn)環(huán)境的缺陷坦冠,加快線上問題診斷速度形耗,提高響應(yīng)效率,改善用戶支持體驗(yàn)辙浑。
使用感受
脫敏后的數(shù)據(jù)的使用跟原來測試環(huán)境自己創(chuàng)建的數(shù)據(jù)使用還是很不一樣的感受:
- 不是測試人員熟悉的數(shù)據(jù)激涤,相對(duì)不易于測試,不如自己創(chuàng)建的數(shù)據(jù)使用的那么順手判呕。
- 數(shù)據(jù)辨識(shí)度降低倦踢,脫敏后的數(shù)據(jù)很多都是沒有任何意義的一些字符拼湊的詞語(我們的系統(tǒng)是英文的),有些功能就很難使用侠草。比如搜索辱挥,每次需要輸入一些沒有意思的字符串還是很費(fèi)勁的,這樣的話边涕,可能會(huì)導(dǎo)致測試人員盡量不用搜索功能而漏掉搜索功能本身存在的bug晤碘。
- 每次重新導(dǎo)入新的數(shù)據(jù)都會(huì)清理掉原來的數(shù)據(jù)褂微,包括測試人員新建數(shù)據(jù),也就是每月都要面對(duì)一批新的數(shù)據(jù)园爷,這種體驗(yàn)也是很特別的宠蚂。
- 含有PII的文件難以匿名化,文件數(shù)據(jù)沒法導(dǎo)入腮介,從而導(dǎo)致有些功能沒法使用原有數(shù)據(jù)進(jìn)行驗(yàn)證肥矢。
- 用戶登錄認(rèn)證相關(guān)信息沒法匿名化導(dǎo)入端衰,被Mock掉了叠洗,導(dǎo)致無法驗(yàn)證原有用戶的真實(shí)登錄功能。
數(shù)據(jù)匿名化是測試右移實(shí)踐之一
本文項(xiàng)目實(shí)踐只是將數(shù)據(jù)脫敏用于測試旅东,數(shù)據(jù)匿名化還有很多其他的用途灭抑,比如數(shù)據(jù)挖掘、數(shù)據(jù)分析等抵代。
數(shù)據(jù)匿名化的實(shí)踐過程相當(dāng)于一個(gè)小項(xiàng)目交付過程腾节,同樣包含需求分析、設(shè)計(jì)荤牍、開發(fā)(匿名化實(shí)施)案腺、測試和發(fā)布(交付)等環(huán)節(jié),在每個(gè)環(huán)節(jié)會(huì)有不同的角色參與協(xié)作康吵,也同樣需要遵循質(zhì)量內(nèi)建理念劈榨,前期工作做的充分,后面返工就會(huì)減少晦嵌。
數(shù)據(jù)匿名化是對(duì)生產(chǎn)環(huán)境的真實(shí)數(shù)據(jù)的處理同辣,不管用于什么用途,都可以算是生產(chǎn)環(huán)境下的QA/測試右移的實(shí)踐之一惭载。
希望本文能夠給沒有做過數(shù)據(jù)匿名化的同學(xué)帶來一些幫助旱函,也歡迎有經(jīng)驗(yàn)的同學(xué)來分享更多的經(jīng)驗(yàn)。
推薦閱讀:
生產(chǎn)環(huán)境下的QA
測試右移之日志收集與監(jiān)控
都是臟數(shù)據(jù)惹的禍
QA與Ops通力合作打造反脆弱的軟件系統(tǒng)