第4章:数据识别技术基础:三种核心武器
刚开始接触数据安全的时候,我面对着满屏的日志和数据流也有点头大。敏感数据到底藏哪儿了?怎么才能又快又准地把它们揪出来?
说实话,这个问题没有一把万能钥匙。所以我们要学会组合使用三种核心技术:正则表达式、关键字字典、还有机器学习模型。我习惯把它们看成三件不同的武器——用的场合不一样,效果也完全不一样。
核心结论:这三大技术不是谁取代谁的关系,而是搭配着用的。经典的数据识别方案,往往是“正则+字典”打底,机器学习做精细化扫描。
4.1 正则表达式:找的就是固定格式
正则表达式,说白了就是一套模式匹配的规则。它能把你脑子里想的“这玩意儿长什么样”翻译成电脑能懂的语法。
我一般用它来识别那些结构固定的数据。比如身份证号,18位,最后一位可能是数字也可能是X。再比如手机号码,11位,开头是1后面10位数字。这些都适合用正则。
举个真实的例子。我在项目中遇到过,有个客户说“我们想扫出所有PDF文件里的信用卡号”。我直接写了一条正则:
# 信用卡号匹配(常见16位,每4位一个空格或连字符)
\b(?:\d[ -]*?){13,16}\b
嗯,这里要注意。正则写不好,漏报或者误报会很严重。我曾经在测试阶段发现一条正则把“1988100123456789”这种不是信用卡号的数字也匹配上了,当时排查了半天。
小经验:正则要配合前后边界符用。\b或者^$能帮你减少很多误报。而且尽量用非贪婪匹配(量词后面加?),不然性能会下降。
你想想看,写正则需要积累。我自己整理了一份常用敏感数据的正则库,包括大陆身份证、护照号、手机号、邮箱、IP地址等等。你可以照着这个思路也建一个。
4.2 关键字字典:简单粗暴但有效
正则虽然强,但遇到“机密”“内部资料”这种关键词,它就不好使了。因为这些词没有格式,谁也说不清它们长什么样。这时候关键字字典登场。
我的做法是这样的:
- 先准备一个黑名单词库:比如“绝密”、“最高机密”、“Confidential”等。这些词本身就带安全等级。
- 再搭一个白名单词库:把一些常见的、但不是敏感词的词放进去,比如“项目”、“文档”。这样做是为了降低误报。
- 最后还要考虑同义词和变种:比如“工资”和“薪酬”本质上是一回事,但字典里最好都能覆盖到。
我记得给一个金融客户做过项目,他们要识别员工发送“公司财务报表”这类内容。光用正则不够,因为“财务报表”四个字结构不固定。我们就在关键字字典里配置了“财报”、“合并报表”、“现金流量表”这些词,效果立竿见影。
注意:关键字字典不能太大太泛。我见过有人把整个百科词条当字典用,结果DLP引擎内存直接爆了。不是词越多越好,精准才是王道。
关键字字典还有一个好处:维护成本低。业务部门的人也能参与进来。你可以定期跟他们沟通,看看最近有没有什么新出现的敏感词需要加进去。
4.3 机器学习模型:对付模糊场景
最后说说机器学习模型。很多人觉得这东西很玄,其实说白了,它就是通过大量样本学习“什么样算敏感”。
它最擅长处理的是:
- 上下文相关的敏感信息(比如一段话描述了某个员工的薪酬,但没有出现“工资”两个字)
- 变体写法(把“身份证号”写成“身 份 证 号”)
- 跨领域的语义判断(比如一段医疗文本里有患者姓名和病情描述)
我个人习惯用分类模型来做。先标注一批数据,把“敏感”和“非敏感”的样本都整理好,训练一个二分类器。我记得自己在实际测试中发现,5000条左右的标注数据,就能训练出一个准确率90%以上的模型。
当然,机器学习也不是万能的。
容易踩的坑:
- 训练数据里敏感样本太少,模型根本学不到东西
- 样本分布和真实场景差距太大,上线后误报率飙升
- 模型维护周期太长,跟不上业务变化
我曾经在银行项目上吃过这个亏。训练数据都是旧版合同,上线第二天新版合同上线了,模型瞬间不认识了……嗯,从那以后我每次都要求准备一个持续更新的样本库。
三者的对比:一张表看清楚
| 对比维度 | 正则表达式 | 关键字字典 | 机器学习模型 |
|---|---|---|---|
| 适用数据类型 | 固定格式(身份证号、手机号、邮箱) | 关键词汇(机密、内部、薪酬) | 语义和上下文(合同段落、医疗描述) |
| 精准度 | 高,需精确编写 | 中,依赖词库完整度 | 中高,依赖训练数据质量 |
| 维护成本 | 中等,每次改格式都得改正则 | 低,加个词就行 | 高,需要持续标注和重新训练 |
| 抗干扰能力 | 弱,空格/特殊符号直接失效 | 弱,同义词容易漏掉 | 强,能容忍一定程度的改写 |
| 部署速度 | 快,写一条测一条 | 最快,配置即生效 | 慢,需要数据准备和训练周期 |
你看,三种方法各有擅长。我的建议是:
- 先用正则把结构化数据扫一遍
- 再用关键字字典兜底,覆盖那些非结构化的敏感词
- 最后用机器学习模型处理剩下的“灰区”场景
三者叠加,基本能把99%的敏感数据识别出来。剩下的1%是什么?通常是一些极为罕见的变种,或者业务自己都没意识到的敏感内容——这些可以做人工抽检,慢慢补进来。