这类问题我又碰上了一次。客服工单导出的数据把姓名处理成「张*」,本以为够安全,同部门三个人都姓张,配合工号和组别后仍能唯一确定到人,合规检查没过。
第一反应是「掩码方式对所有姓名一致,反而暴露姓氏分布」,验证下来不成立。
把日志和配置对完,能解释这个现象的基本就这几处。脱敏粒度只看字段本身,没考虑与其他字段的组合;工号与组别原样保留,构成准标识符;导出文件里同时保留了内部用户 id。
上来先统计同名同姓加同组别的组合数
python -c "import pandas as pd;df=pd.read_csv('tickets.csv');print(df.groupby(['surname','dept']).size().max())"
接着把工号做不可逆哈希并加盐
python -c "import hashlib;print(hashlib.sha256('E1024|salt2026'.encode()).hexdigest()[:12])"
姓名整体替换为不可逆编号
python mask_table.py --fields name,emp_no --mode tokenize --key-env MASK_KEY
等前面都确认过,再用公开数据集式攻击验证不可还原
python reid_check.py --data masked.csv --quasi dept,title
怎么算真的好了,看的是同一批现象。在只知道部门与岗位的情况下无法唯一确定个体,最小组合数大于 5,重识别脚本找不到唯一行。
容易忽略的是,脱敏要看字段组合而不是单个字段,准标识符叠加起来就足够定位,掩码前先做一次重识别风险评估。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
