数据脱敏
本文约需 2 分钟阅读
数据脱敏是指对生产环境的敏感数据进行加工,使其能够在非生产环境 (开发、测试、分析) 中安全使用的技术。将信用卡号「 4111-2222-3333-4444 」替换为「 XXXX-XXXX-XXXX-4444 」就是典型处理方式,它在保持数据格式和统计特性的同时,使个人无法被识别。截至 2025 年,随着 GDPR 和修订后的个人信息保护法日趋严格,在开发与测试环境中引入数据脱敏已成为事实上的必备要求。
如何防止脱敏遗漏
静态脱敏运用中最容易发生的事故是「脱敏遗漏」。由于脱敏是按照列举目标字段的规则执行的,因架构变更而新增的字段,或写入备注栏等意料之外位置的个人信息,一旦规则更新跟不上就会被原样放行。哪怕只遗漏一个字段,也意味着真实的个人信息会流入接收该副本的开发和测试环境。因此,重要的是把两件事配套运用:在分发前对数据进行机械化检查、确认没有残留未脱敏的个人信息,以及在定期审计中进行核对;一旦发现遗漏,就强化检查脚本本身。
与令牌化的区别
数据脱敏与令牌化容易被混淆,但二者有本质区别。由于数据脱敏对原始数据进行不可逆变换,因此无法从脱敏后的数据还原出原始值。而令牌化保留了令牌与原始数据的对应表 (令牌库),因此具有权限的人可以还原出原始值。无需还原的数据脱敏适合开发与测试环境,而像支付处理那样事后仍需原始数据的场景则适合令牌化。
与加密的区别
与加密最大的区别在于可逆性。加密是使用密钥变换数据的技术,持有正确密钥的人可以完全还原出原始数据。而数据脱敏没有解密密钥的概念,原则上无法从脱敏后的数据恢复原始值。二者的用途也不同。加密用于在存储和传输过程中保护「以后还需要读取」的数据,脱敏则用于生成「无需还原」的数据,以便安全地用于测试和分析。像格式保留加密 (FPE) 那样将加密技术用作脱敏手段的情况也存在,但二者的区别在于目的:是保护并可恢复,还是生成不可逆的替代数据。
静态脱敏与动态脱敏
脱敏的应用方式大致分为两种。静态数据脱敏 (SDM) 是先创建生产数据库的副本,将副本中的敏感数据恒久替换为脱敏后的值,再分发到开发和测试环境。分发的数据中不再保留原始值,即使整个环境被带走也不会泄露机密信息。而动态数据脱敏 (DDM) 则保持原始数据不变,在用户查询数据的瞬间实时加上掩码后再显示。它可以根据查看者的权限区别显示,例如「管理员看全部数字,客服只看后 4 位」,因此适合生产环境的界面显示和客户支持业务。基本的使用原则是:向测试环境分发数据用静态,在运行中系统按权限显示用动态。
主要的脱敏手法
实务中使用的手法大致有 4 种。置换 (Substitution) 是用并不存在的值进行替换的方法,例如将姓名转换为随机的名字。混洗 (Shuffling) 在同一字段内交换数值,在保持统计分布的同时切断与个人的关联。置空 (Nulling) 是将值替换为 NULL 或固定值的最简单方法,但作为测试数据的可用性会降低。格式保留加密 (FPE) 生成与原始数据格式相同的密文,将对既有系统的影响降到最低。与加密结合,可以实现多层防护。
实务中的应用要点
随着GDPR和个人信息保护法的施行,将生产数据原封不动地复制到开发环境的做法会带来法律风险。引入脱敏时,维持参照完整性至关重要。如果对客户表的 ID 进行了脱敏,就必须用同样的规则转换订单表的外键,否则测试将无法进行。请用强随机密码保护脱敏工具的管理控制台,以防止脱敏规则被非法篡改。
这篇文章对您有帮助吗?