博客
安全

文档 DLP 管线:守得住的掩码

文档 DLP:三层检测、贯穿文档的编号占位符、彻底的重新嵌入、AES-256-GCM 的原文 —— 两道显式的 unmask 关卡。Census:F-DLP-1。

Simmetric Team8 分钟阅读13/10/2026
文档 DLP 管线:守得住的掩码

文档只进来一次;占位符留下

AI workspace 的知识库里进来的是真文档 —— 合同、HR 信函、发票。有些带着谁都不该随手看到的数据,而 LLM 永远不该引用它们。Simmetric Chat 对启用了该功能的 workspace 的回答:一条文档扫描管线,把敏感实体改写为贯穿全文的编号占位符,并把唯一一份干净原文加密保存。设计的重点在最后半句 —— 占位符留下:按构造,掩码是单向的,于是“文档”与“可检索的语料”从设计上就成了两个不同的对象。

本文以操作者遇到它的方式走一遍这条管线:异步扫描、三层检测、一个占位符保证了什么、重新嵌入时发生什么、原文如何保存,以及两道 unmask 关卡(聊天中的重组、预览里的 unmask)—— 让干净副本只在有意图时可达。

Enterprise 版可选功能,按 workspace 启用,默认关闭(workspace 开关 + 评估门槛)。数据:FACT-CENSUS.md F-DLP-1。

扫描:异步、排队、在摄取完成后

当某 workspace 启用了文档扫描,每个上传的文档在摄取完成后经过一次异步的 pg-boss 扫描 —— 上传路径保持响应,而扫描表现得像平台里的每个后台作业一样:排队、重试、可观察。遗留语料有自己的回填(需通过评估门槛、在界面里显式确认),限速在活体扫描之下,而且可恢复:一列标记(dlpScannedAt)把每次重跑圈定在从未被扫描过的文档上。

检测:三层

检测是一条三层管线,每层各司其职:

  1. 管理员可配置的正则模式 —— 由 admin 维护的模式服务(任意模式的开关、测试预览)。
  2. 对固定格式意大利/欧洲标识符的校验和验证 —— Codice Fiscale(含 omocodia 校验)、P.IVA、IBAN:这些类别是确定性的;没通过校验和的字符串不是标识符,因此普通数字永远不会触发它们。
  3. 对名字/地址的 LLM 上下文检测 —— 上下文类别经过模型;它们的召回率是量测并写进文档的数值,而不是一句承诺。

两个被点名的类别是确定性(校验和)的,两个是上下文(LLM)的 —— 评估门槛量测的正是这个划分:启用它的质量标准 = 确定性类别上零被抑制的误报,上下文类别的召回率逐次运行都有记录。

这篇文章永远不会印出的那个数字:一个“存在多少种 PII”的计数。census 合约是明确的 —— 查不到出处的数字不发货;类别是被点名的,代码说明它检测什么。

掩码:无法再次匹配的编号占位符

被检测到的实体成为贯穿文档的编号占位符([PERSON_1]、[GOV_ID_2]…)。三个属性让它有意义:

  • 全文跨文档一致 —— 同一实体在整个文档里是同一个占位符;LLM 继续读的是一份一致的文档。
  • 幂等 —— 掩码是自己的不动点:占位符语法永远无法再次匹配,重扫不会产出 [PERSON_1_1] 一类的残渣。
  • 重写是彻底的 —— chunk 以掩码后的文本重写,FTS 向量重新计算,嵌入在掩码文本上重新生成。没有任何未涂黑的向量保持可检索。

加密:唯一干净副本是 AES-256-GCM

原文与每个实体值都以加密形态落地(AES-256-GCM,平台的密钥合约)。这是管线诚实的原因:掩码不是“在视图层里藏起来” —— 未涂黑的字节在存储里根本不以明文形态存在。加密原文是唯一干净副本。

两道 unmask 关卡

干净副本恰好可以经由两道显式关卡可达:

  1. 聊天中重组 —— 流结束时、恰好一次,服务器在最终消息里重组占位符,只对在来源文档的 workspace 里持有 dlp:unmask 权限的用户生效。重组后的文本由 SSE 的 done 载荷携带;widget 访客永远收不到重组文本(在服务端强制,不是靠藏一个按钮)。
  2. 预览 unmask —— 文档文本端点默认给掩码后的文本;unmask 参数只经由关卡梯队生效(参数在场、workspace 开关打开、角色解析出权限)。每一个未命中的分支仍然返回掩码文本并给 200 —— 这个端点从来不是权利的预言机。

审计矩阵

每条读路径都被行为测试钉住(文本视图、OCR 预览、综合、引用、widget、MCP 工具、全文搜索、导出、管理员的重新嵌入)。三个最硬的钉子是“永远不”的臂:widget 访客、引用表面与 MCP 工具拿到的是掩码文本,永远不是重组文本。审计日志类别(平台的不变事件日志,F-AUDIT-1)记录触碰这个表面的操作。

继续阅读

操作指南带着完整的操作者走读 —— 开关、评估运行器、回填、每个端点 —— 在 /zh/docs/document-dlp-pipeline:

Provenance:Simmetric Chat 的 docs/DLP_DOCUMENT_PIPELINE.md(v0.28.1,Phase 192 DLP-01..06)、packages/server/src/services/(dlpPatternService/dlpChecksum/quota services)、encryptionService —— 处于 census 固定的文档状态(SHA aca5b8ff)。

相关文章