4、数据脱敏技术对比:令牌化、掩码、假名化
做医疗数据合规,绕不开一个核心问题:怎么把数据交出去的同时,又不泄露隐私?
技术方案不少,但真正能过审计、扛得住攻击的,其实就那么几种。**令牌化、掩码、假名化**,这三兄弟经常被拉出来比较。今天我就把它们掰开揉碎,聊聊各自的脾气秉性。
4.1 为什么需要懂这三种技术?
你得先明白一个道理:没有完美的脱敏技术。每种方案都有它的适用场景和代价。
比如,研发测试环境需要数据长得像真的,但不能是真的。这时候你搞个掩码,把姓名改成“张***”,测试人员一眼就看出是假数据,很多逻辑就测不出来了。你想想看,他需要的是一个可逆向的、格式保持的假数据,还是纯粹的黑框框?
我个人习惯是先定场景,再选技术。别上来就问“哪个最好”,这问题没法答。
4.2 令牌化(Tokenization)—— 保留原格式的“替身”
令牌化,说白了就是给敏感数据找个替身。这个替身长得跟原数据一模一样,但本质上已经没有关联了。
举个例子:身份证号 110101199001011234,令牌化之后变成 11010119900101XXXX。关键是,这个 XXXX 是有意义的,可能是某个随机索引。系统外的人拿了这个令牌,没办法反推出原数据。
核心特征:格式保持。18位身份证变成18位令牌,11位手机号变成11位令牌。这对下游系统特别友好,不需要改表结构、改校验逻辑。
不过,这里有个大坑。我在项目中遇到过一家医院,他们用离线令牌化(就是把令牌发出去,自己保存映射表)。结果运维人员不小心把映射表删了,所有当年生成的令牌全部作废。那个月的报表数据直接烂掉。
- 在线令牌化:实时请求中心令牌服务,安全性最高,但对网络有依赖。
- 离线令牌化:本地生成令牌和映射表,速度快,但映射表丢了就全完了。
⚠️ 我曾经踩过的坑:别把令牌当哈希。令牌可逆(虽然需要查映射表),哈希不可逆。审计要求“不可逆”的场景,别用令牌化。
4.3 掩码(Masking)—— 简单暴力的“打码”
掩码大家最熟悉。手机号中间的4位变成 ****,这就是掩码。
优点是快,没有任何性能开销,改几个字符就行。缺点也很明显:**信息损失严重**。你只看到一个片段,对数据分析、模型训练基本帮不上忙。
在医疗领域,掩码常见于病案展示。医生看诊断记录时,患者姓名只显示后两位,其他打马赛克。这叫静态掩码,写死的。
还有动态掩码。比如同一个患者数据,医生登录看到完整姓名,护士登录看到“张护士”三个字。这种场景我建议慎用,因为它本质上还是在玩权限控制,跟数据脱敏是两回事。
4.4 假名化(Pseudonymization)—— GDPR 的最爱
假名化跟令牌化有点像,但法律意义完全不同。GDPR 里明确说了,假名化后的数据仍然属于个人数据,只是风险降低了。令牌化在某些司法管辖区可能被认定为匿名化,是彻底解除监管的。
听起来绕?嗯,这里要注意:假名化强调的是“同一患者在不同系统中的关联”。比如你在 A 系统把患者姓名替换成“P001”,在 B 系统也替换成同样的“P001”。那么这两个系统就可以通过假名来关联这个患者。
我在一个跨国多中心研究里用过这种方案。每个站点自己维护一个假名表,总部拿到的是一串假名。这样总部能看到某个药在不同站点的疗效,但猜不出具体是谁吃了药。
💡 一个小技巧:假名一定要用强密码学算法(比如 HMAC-SHA256)生成,别自己手写 GUID。我见过有人用 UUID,结果发现重复率高得吓人——因为时间戳精度不够。
4.5 三种技术,一张表说清楚
深纠到底层,区别在哪里?我整理了一张对比表,你看完就明白了。
| 维度 | 令牌化 | 掩码 | 假名化 |
|---|---|---|---|
| 可逆性 | 可逆(需映射表) | 不可逆(或部分可逆) | 可逆(需密钥/映射) |
| 格式保持 | ✅ 完全保持 | ✅ 保持长度,内容残缺 | ✅ 可配置保持 |
| 计算效率 | 中等(需查表/网络调用) | 极高(纯字符串操作) | 高(一次 HMAC 计算) |
| 安全性 | ★★★★★(映射表安全) | ★★☆☆☆(可被反向推测) | ★★★★☆(密钥安全) |
| 适用场景 | 研发测试、数仓分析、系统间集成 | 前台展示、报表预览、审计日志 | 多中心研究、跨系统关联、GDPR 合规 |
| 医疗典型用例 | 患者 ID、社保号、信用卡 | 姓名、电话号码、地址 | 研究数据集中的患者标识 |
4.6 怎么选?我的三个建议
别纠结“哪个最好”。你先问自己三个问题:
- 下游系统能不能忍受值变了? 不能?那就别选掩码。比如医学影像 DICOM 头里的患者 ID,变了影像就读不出来。你只能用令牌化,因为格式完全一样。
- 法律要求是匿名化还是假名化? GDPR 有明确区分。国内《网络安全法》目前没分那么细,但监管趋势必然越来越严。建议按最严的标准来。
- 需要跨系统关联吗? 如果两个子系统需要共用一个“假身份”,直接上假名化。如果各自独立,令牌化就够了。
我的个人经验:在做医疗数据共享平台时,我一般这样选:患者主索引(MPI)用令牌化,确保数据能拼回来;医生日志用掩码,给前台展示;研究数据集(经过伦理审批的)用假名化,留一条追溯链路。三层分开,互不干扰。
这张图把我刚才说的逻辑串起来了。你看,三种技术分布在三个维度上,各自有擅长的地方。选型的时候,就从你当前最看重的那个维度切进去。
💡 最后一个提醒:不管选哪种技术,一定要做合规性论证。别自己拍脑袋说“我用令牌化了,所以数据不算 PII”。法务不签字,技术人员说一万句都没用。我的经验是,提前拉上法务和合规一起定标准,省得后面返工。