第4章:数据识别技术基础:三种核心武器

刚开始接触数据安全的时候,我面对着满屏的日志和数据流也有点头大。敏感数据到底藏哪儿了?怎么才能又快又准地把它们揪出来?

说实话,这个问题没有一把万能钥匙。所以我们要学会组合使用三种核心技术:正则表达式、关键字字典、还有机器学习模型。我习惯把它们看成三件不同的武器——用的场合不一样,效果也完全不一样。

核心结论:这三大技术不是谁取代谁的关系,而是搭配着用的。经典的数据识别方案,往往是“正则+字典”打底,机器学习做精细化扫描。

数据识别技术三大核心方法 正则表达式 关键字字典 机器学习模型 固定格式 身份证号 手机号码 黑名单 白名单 自定义 分类器 聚类 NLP DLP 数据识别引擎 策略执行 + 告警

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%以上的模型。

当然,机器学习也不是万能的。

容易踩的坑:

  • 训练数据里敏感样本太少,模型根本学不到东西
  • 样本分布和真实场景差距太大,上线后误报率飙升
  • 模型维护周期太长,跟不上业务变化

我曾经在银行项目上吃过这个亏。训练数据都是旧版合同,上线第二天新版合同上线了,模型瞬间不认识了……嗯,从那以后我每次都要求准备一个持续更新的样本库。

三者的对比:一张表看清楚

对比维度 正则表达式 关键字字典 机器学习模型
适用数据类型 固定格式(身份证号、手机号、邮箱) 关键词汇(机密、内部、薪酬) 语义和上下文(合同段落、医疗描述)
精准度 高,需精确编写 中,依赖词库完整度 中高,依赖训练数据质量
维护成本 中等,每次改格式都得改正则 低,加个词就行 高,需要持续标注和重新训练
抗干扰能力 弱,空格/特殊符号直接失效 弱,同义词容易漏掉 强,能容忍一定程度的改写
部署速度 快,写一条测一条 最快,配置即生效 慢,需要数据准备和训练周期

你看,三种方法各有擅长。我的建议是:

  1. 先用正则把结构化数据扫一遍
  2. 再用关键字字典兜底,覆盖那些非结构化的敏感词
  3. 最后用机器学习模型处理剩下的“灰区”场景

三者叠加,基本能把99%的敏感数据识别出来。剩下的1%是什么?通常是一些极为罕见的变种,或者业务自己都没意识到的敏感内容——这些可以做人工抽检,慢慢补进来。