一个团队在他们的日志流水线前端部署了一个经过微调的脱敏模型。它在数据进入长期存储之前剥离姓名、电子邮件、账号和 IP 地址。该模型体积小、速度快,且易于与接入层(ingestion workers)并行部署。隐私审查通过了该方案。六个月后,一位客服工程师将一行看起来很奇怪的日志粘贴到调试工具中,脱敏器产生的输出包含了一个真实客户的电子邮件地址——而这个地址在输入中根本没有出现。
流水线完全按照其构建初衷运行。而脱敏器本身就是泄露源。
这种失效模式并不罕见。它是其构造方式的直接产物。一个基于真实客户数据训练的脱敏模型,已经在某种保真度上学习了真实客户数据的分布。模型学到的任何东西都有可能被诱导输出。在隐私边界放置机器学习模型的团队实际上增加了一个新的暴露面——而隐私团队通常并不掌握这个暴露面的威胁模型,因为隐私团队将脱敏器视为一种控制手段,而不是一个本身包含受保护类数据的资产。
脱敏器不是墙,而是见证者
让团队陷入困境的思维模型是:“脱敏器位于数据和存储之间,因此数据不会到达存储端。” 这种思维模型对正则表达式(regex)是成立的。但对于一个神经网络来说,它是错误的,因为这个神经网络的权重是通过对包含那些本该被正则匹配到的字符串的示例进行梯度下降更新而来的。
生产环境中的语言模型可以被诱导逐字输出训练数据。2023 年关于 ChatGPT 大规模提取的研究表明,大约 200 美元的 gpt-3.5-turbo API 查询就产生了超过 10,000 个唯一的逐字训练示例,提取的内容涵盖了 PII、代码、新闻标题和日志格式的字符串。2024 年的 PII-Scope 研究发现,经过微调的模型泄露 PII 的比例显著高于其预训练版本,简单的模板提示攻击在 256 次查询内就能达到 50% 以上的提取率。一个在真实日志行语料库上微调的脱敏器——从经验而非假设上讲——就是一个泄露率高于预训练基线的微调模型。
这种威胁与普通的模型风险并不对称。分类错误产生的是错误的标签;而提取式脱敏器产生的是受保护的文本。错误的爆炸半径就是数据本身。
为什么微调后的脱敏器会记住它们脱敏的数值
三项结构性事实使得脱敏模型作为一个类别特别容易发生泄露。
训练标签就是这些值。 标准的有监督脱敏数据集将原始文本与标记哪些子字符串是 PII 的跨度级(span-level)标签配对。示例的两部分都包含字面上的受保护字符串。损失函数是针对 token 计算的,因此模型会因为拟合姓名、账号和电子邮件地址的准确字符而获得奖励。这不像基础模型记住受版权保护的散文那样的偶然记忆——这是有监督学习的目标。
罕见实体无处藏身。 真实日志语料库中的大多数 PII 遵循长尾分布。少数高频实体——内部测试账号、客服代表的邮箱、CTO 的名字——会出现数百次。大多数真实的客户标识符只出现一两次。重复是记忆的主导预测因子,因此高频尾部会被最先且最牢固地记住。而这些高频字符串恰恰是攻击者可以通过廉价探测提取的内容。
部署形态奖励了提取。 脱敏器通常按日志行调用,甚至按请求调用,且至少有一个路径上的输入是攻击者可控的(用户提交的表单字段、请求体、URL 参数)。攻击者可以通过正常的应用程序流量发出数千个探测提示。他们不需要模型的 API 密钥;他们只需要编写能到达脱敏器的日志行即可。2022 年关于 NER 模型中意外记忆的研究表明,即使是特定任务的脱敏器,也会通过输出内容和推理时的耗时差异泄露记住的短语——这是一个团队不太可能考虑到的侧信道。
泄露在生产环境中是如何实际显现的
第一个迹象通常不是隐私警报,而是一些嘈杂且模糊的异常。
一位测试工程师注意到脱敏后的输出包含了一个未出现在输入中的电子邮件。一个支持工单中的截图显示,一个脱敏后的姓名被替换成了另一个人的名字。调试工具输出的一个“脱敏”字符串被某人识别出属于一个真实客户。Bug 的形态看起来像 UI 故障或日志错误,而不是隐私事件。
看起来像故障的原因是这种泄露是数据相关的。脱敏器只会在输入与被记住的 PII 最初配对的输入(在模型的表示空间中)相似时,才会输出这些记住的 PII。大多数生产流量不会触发该路径。发现泄露的团队通常是偶然发送了与记住的“邻域”相匹配的异常输入的团队。对抗性探测会有目的地寻找这些输入;而其他所有人都是在相隔数月、不相关的工单中偶然发现它们的。
等到这种模式被识别出来时,该模型在整个部署周期内一直在向下游存储输出受保护的字符串。存储必须经过审计,模型必须重新训练,而且必须有人向法务部门解释,在实践中“我们实际上不知道哪些记录包含泄露的 PII”究竟意味着什么。
遏制(Containment)的真实面貌 这种处理方式是结构性的,而非一个简单的调节旋钮。以下四种模式经受住了考验。
仅使用合成数据的训练语料库 。使用生成的 PII 构建训练集——通过姓名生成器、faker 库、结构化模板——提供真实的语料背景但使用合成的数值。脱敏器(redactor)学习的是“这是一封电子邮件”的形态,而不会学习到任何具体个人的邮箱地址。与在真实 PII 上训练相比,在实际输入上的质量会有所下降,但这种下降是有限的,且泄露面(disclosure surface)会大幅收缩。 《自然》(Nature)2025 年一篇关于结合基于规则的 NLP 和机器学习用于金融 PII 检测的论文,明确将合成数据生成作为隐私保护训练步骤;运营层面的经验是将合成数据视为默认选择,而不是在没有真实标签时的备选方案。
针对最高风险类别的确定性检测 。识别姓名很难,但账号并不难。对于具有机器可检查结构的 PII 类别——使用 Luhn 算法的信用卡号、符合格式规则的社会安全号码(SSN)、带有内部校验和的账号 ID——正则表达式加校验和的效果优于神经网络,因为正则表达式无法被“记住”(memorize)。Microsoft Presidio 的设计将此作为适用于模式实体的默认设置,并为具有上下文特征的实体保留机器学习。架构层面的承诺是:仅在确定性方法无法触及的地方使用机器学习,并针对机器学习部分建立清晰的威胁模型。
评估套件中的提取探测 。将脱敏器视为任何其他接触 PII 的模型,并针对金丝雀提取(canary extraction)进行评估,而不仅仅是 F1 分数。在训练集中注入唯一的合成金丝雀数据,测量训练后的提取率,并根据金丝雀泄露阈值来决定是否部署。金丝雀暴露指标(canary exposure metric)以位(bits)为单位,量化了训练后提取金丝雀比随机提取容易多少;如果脱敏器的金丝雀暴露值超过一个较小的数值,则说明该模型在交付时带有记忆。这里的原则是像攻击者那样测试模型——使用对抗性输入、模板化提示、重复探测——而不是仅仅测试理想路径(happy path)。
在吞吐量预算允许的情况下,在训练时采用差分隐私 。DP-SGD 向梯度添加经过校准的噪声,从而限制任何单个训练样本对最终权重的显着影响。这种隐私保证是数学上的,而非经验性的,这对于隐私关键组件来说是正确形式的保证。其成本也是实实在在的——收敛变慢、长尾部分的 F1 分数下降、复杂的 epsilon 计算——并且在处理极小数据集时表现不佳,但专门针对脱敏器而言,由于任务范围狭窄,隐私与效用之间的权衡比通用大语言模型更具优势。
架构层面的实现 在隐私边界中加入机器学习并不会默认增强该边界。它将一种威胁模型(通过正则表达式规避进行的模式绕过)替换为另一种威胁模型(记忆、提取和时序侧信道),而新的威胁模型更难推理、更难审计,也更难界定。
想要利用机器学习的人机工程学优势来处理复杂情况(具有上下文的姓名、歧义字符串、多语言输入)的团队,必须接受机器学习组件现在已成为受保护资产类别的一部分。脱敏器的权重是敏感数据。脱敏器的日志是敏感数据。脱敏器的训练语料库也是敏感数据,随之而来的是对数据保留、访问控制和事件响应的所有要求。
最简洁的架构是将机器学习完全排除在结构化 PII 类别的边界之外,对非结构化类别使用合成数据加差分隐私(DP),并根据提取攻击评估而非分类指标来决定是否部署。而妥协的架构则使用在生产日志上微调过的通用 NER 模型,将其作为无状态服务部署,并假设其威胁模型与正则表达式相同。第一种方案构建起来更难。第二种方案最终会出现在事故总结报告中。
正确的理解框架是:脱敏器是一个对训练集中每条 PII 记录都有读取权限的模型,它被部署在一个任何拥有流量的人都可以查询的 API 后面。如果这句话没有让隐私团队感到不安,那么该脱敏器还没有进行过威胁建模。
会员专享
余下内容仅对会员开放。 会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。
— 完整文章,包含未公开存档的部分 — 可落地的工作框架,附带权衡与决策依据 — 新文章抢先看,先于公开发布 登录以继续阅读→ 随时取消 · 一次订阅,畅读全部