PDF 脱敏技术【1】:PDF 脱敏不是盖黑框:为什么敏感信息仍能被复制,正确的保护方式是什么? 先说结论在 PDF 上画一个黑色矩形只能证明肉眼暂时看不见不能证明敏感信息已经从文件中删除。更严格地说PDF 脱敏的验收对象不是编辑软件里的黑框也不是一张页面截图而是最终准备交付的发布文件。接收者可能搜索、复制、另存、打印也可能直接解析 PDF 的文本、图像、表单、附件和元数据。只要原值仍能从发布副本中取得视觉效果再整齐也不能算真正完成了脱敏。我先用一组合成文件复现最常见的黑框失败再增加一组增量保存实验随后回顾三起公开事件最后讨论字形位置侧信道。三条风险线分别是当前对象仍可直接读取、旧修订仍保留原始字节以及原文字已删除后仍可能存在的版面线索。一个 30 秒就能复现的实验我准备了两份只含合成数据的 PDF。第一份是原始员工信息第二份在姓名、手机号、身份证号和薪资上方画了黑框。原始PDF文件在姓名、手机号、身份证号和薪资上方画了黑框的PDF文件第二份看起来已经“脱敏”。但用独立 PDF 解析器提取文本仍然得到Employee Name Zhang San Mobile 13812345678 National ID 350102199001011234 Monthly Salary CNY 35,000原因并不复杂黑框是后来添加的绘图指令原文本对象没有被改动。PDF 阅读器先绘制文字再绘制位于上方的矩形人的眼睛只看到最上层搜索、复制和文本提取工具却可以访问底层对象。你甚至不需要专业取证软件。以下任一动作都可能暴露问题搜索已知的姓名、号码或关键词框选黑框区域复制后粘贴到记事本用另一个阅读器打开、另存或导出使用pdftotext、PDF SDK 或其他解析器提取文本。因此“截图看起来没问题”只能作为第一层视觉检查不能作为发布结论。这不是理论风险三起公开的假脱敏事件类似错误并不只发生在测试文件里。法院文件、国会调查材料和商业诉讼资料都出现过“黑框仍在、原文也仍在”的情况。2011Apple vs. Samsung黑框后面是商业信息2011 年Apple 与 Samsung 专利诉讼中的一份法院意见包含多处看似已经遮挡的内容。美国律师协会后来总结称把被遮挡区域复制并粘贴到文本文件后隐藏内容就会重新出现。暴露的信息包括 Apple 关于消费者是否可能转向 Samsung Android 设备的研究以及与 Nokia、IBM 等公司的部分许可交易细节。法院发现问题后封存了原版本并在数小时内发布了新的版本。这个案例说明假脱敏不只会泄露姓名和证件号码也可能泄露商业策略、授权安排等机密信息。来源American Bar AssociationEmbarrassing Redaction Failures。2016Benghazi 调查文件视觉标记可以被绕过2016 年美国众议院 Benghazi 委员会民主党成员发布了一份 Sidney Blumenthal 访谈记录其中一些页面带有大面积黑色脱敏标记。《Los Angeles Times》当时报道使用普通的剪切、复制和粘贴操作即可绕过这些标记看到原本试图隐藏的访谈内容其中包括 Blumenthal 与相关组织的工作和报酬信息。值得注意的是这次事故不需要复杂攻击。接收者只需不按照发布者预想的方式“老老实实阅读”视觉遮挡就失去了作用。来源Los Angeles Times2016-06-27。2019Manafort 文件错误脱敏影响重大案件2019 年Paul Manafort 的律师向法院提交了一份带有黑色遮挡区域的 PDF。文件表面上隐藏了部分案情但媒体和公众通过复制、粘贴等方式看到了底层文字。被意外公开的信息涉及 Manafort 与 Konstantin Kilimnik 的接触、2016 年竞选民调数据以及乌克兰和平计划等内容。相关文件随后被撤下并替换为正确处理的版本。这个事件受到高度关注不只是因为技术错误本身还因为一次看似简单的文档处理失误改变了重大案件信息的公开范围。来源同样可参见美国律师协会的案例总结。这三起事件的共同机制是发布者改变了页面外观却没有可靠地删除接收者不应获得的信息。第二个实验当前文本已经删除旧修订仍然在黑框实验很直观但它还不是最隐蔽的失败。PDF 支持增量更新保存程序可以不重写文件前半部分只把本次修改的新对象、交叉引用信息和 trailer 追加到文件末尾。阅读器默认显示最新修订因此当前页面和普通文本提取可能都已经看不到原值但旧修订的对象字节仍留在同一文件中。我用同一组合成值制作了两份对照文件。第一份把当前页面替换为四条黑色占位条然后以增量方式保存第二份从当前有效对象图重新生成一个非增量的全量重写副本。这个实验只用于说明 PDF 文件结构和发布准入检查不是对 Foxit PDF SDK 的产品测试。对增量样本做普通验收时当前页面看不到原值独立解析器提取当前修订文本也是 0 命中但结构扫描发现 2 个%%EOF、2 个startxref和 1 个/Prev指针。沿第一处%%EOF提取前一修订后四类合成敏感值均可恢复。全量重写样本则只有 1 个%%EOF、1 个startxref、没有/Prev当前解析与已知历史对象扫描均未发现这些值。这里要把三个条件分开Apply()成功说明当前有效对象已经按 redaction 规则处理输出路径与输入路径不同说明没有覆盖原件非增量全量重写才用于移除发布副本中的旧修订和未引用对象。前两个条件不能推导出第三个。“Save As”只是接口或菜单名称不能单独证明旧修订已清除具体保存标志和最终文件结构才是证据。三类失败当前对象、历史修订与版面侧信道讨论 PDF 假脱敏时需要把三类不同机制分开否则容易用一种检查覆盖所有风险。第一类是non-excising redaction非删除式脱敏原文字仍是当前有效内容只是被黑框、白框或其他图形覆盖。这类问题可以通过搜索、复制或文本提取直接发现前三个公开事件和本文第一个合成实验都属于这一类。第二类是历史修订残留当前修订已经不再引用原对象但增量保存没有重写旧字节。普通阅读器使用最新版看起来没有异常修订恢复或未引用对象扫描却可能直接找回旧内容。第三类是excising redaction 之后的版面侧信道原文字和旧修订都已清理但其他排版数据仍可能保留与原值有关的线索。攻击者不是直接读回原文而是利用候选集合、上下文和版面特征缩小可能答案。三者的利用条件和验证方法不同第一类查当前内容第二类查修订链和旧对象第三类做特定工作流下的对抗性分析。为什么“删除对象”后原文还可能留在 PDF 里传统 PDF 文件可粗略看成body → xref → trailer → startxref → %%EOF。增量保存不会改写前面的 body而是在文件尾部再追加一组 body、xref、trailer 和新的%%EOF。新 trailer 的/Prev指向上一份交叉引用信息阅读器据此合并各修订并展示最新状态。因此在新 xref 中把某个对象标记为删除或改为引用新对象只会改变“当前版本应该使用什么”它不会擦除旧对象已经占用的字节。Adobe PDF Reference 对此明确说明增量更新保持原始内容不变被删除对象也只是由新交叉引用项标记为 free。NDSS 2021 的研究进一步展示了第三方如何利用 PDF 修订结构恢复先前内容。这也是为什么发布准入检查要覆盖/Prev、多组startxref/%%EOF和疑似未引用对象而不能只运行一次当前文本提取。需要说明的是简单计数属于保守的结构指示器不等于完整取证对象流、交叉引用流和异常 PDF 还需要更完整的解析。但在安全发布场景中一旦发现历史修订指示器默认阻止发布比宣称“当前工具没有恢复到内容所以通过”更稳妥。技术依据可参见 NDSS 2021 论文。删除底层文字后是否就一定安全2022 年伊利诺伊大学研究人员发布了论文预印本论文随后发表于Proceedings on Privacy Enhancing Technologies 2023(3)题目是Story Beyond the Eye: Glyph Positions Break PDF Text Redaction。研究关注的是字形位置泄露。PDF 不只记录字符本身还可能记录字符的宽度、位置和微小水平偏移。某些文档生成流程会把与被删除文字有关的排版误差“传递”到相邻的未删除字符。攻击者可以把候选姓名逐个代入模型比较哪个候选产生的字形位置指纹与发布文件最接近。论文评估了 11 种常见 PDF 脱敏工具其中两种没有真正删除文字容易受到复制粘贴攻击其余被测试流程虽然移除了目标文字但仍保留了可用于字形位移攻击的定位信息。研究者还在 OIG 报告、FOIA 响应和法院文档等公开语料中验证了这类风险。但这里必须把边界说清楚这不是“所有被删除文字都能恢复”的万能攻击攻击效果与 PDF 的生成软件、工作流、字体和排版方式有关一到两个词的短脱敏区域尤其是姓名更值得关注攻击者通常需要一个合理的候选词典和上下文论文中的结论是公开研究结果不是本文对 Foxit PDF SDK 的本地测试结论。论文正文与 DOI 可分别在 PoPETs 论文页面和 DOI: 10.56553/popets-2023-0069核对。其 2022 年预印本见 arXiv:2206.02285。这一研究带来的工程启示不是“永久删除没有意义”。恰恰相反永久删除仍是最基本的门槛只是生产系统不能在Apply()返回成功后立即宣布工作结束还需要继续清理和验证发布副本。PDF 脱敏可以划分为四个可靠性层级层级做了什么应如何评价L1 视觉覆盖在文字上方添加黑框、白框或模糊效果底层内容可能仍在不能视为脱敏L2 当前对象删除当前修订不再引用目标文字、图像或路径对象必要但不充分旧修订可能仍在L3 全量重写与清理非增量重写并清理旧修订、未引用对象和隐藏数据可靠性更高但仍需验证范围L4 独立与对抗性验证交叉解析、修订链检查、重开并检查已知侧信道形成可审计的发布证据这里故意没有使用“100% 安全”。更准确的表述是在指定版本、规则、样本和检查范围内没有发现列明的敏感信息。脱敏、遮罩、匿名化、加密和水印不是一回事NIST 对 redaction 的定义强调的是出于法律或安全目的从文档或数据集中移除信息。关键词是“移除”不是“覆盖”。方法主要目标能否替代 PDF redaction黑框/白框遮罩改变页面显示不能底层对象可能仍在Redaction永久删除指定内容并保留其余版面是本文讨论的基础处理能力匿名化降低或消除对自然人的可识别性是更广的数据治理目标不等于画黑框加密控制谁可以打开文档不能替代对获授权接收者隐藏部分字段水印提示权属、状态或追踪来源用于提示和追责不负责删除内容《个人信息保护法》第二十八条列举了生物识别、医疗健康、金融账户、行踪轨迹等敏感个人信息并要求处理此类信息时采取严格保护措施。PDF 脱敏可以成为保护流程中的一项技术控制但单一工具或一次操作本身不能自动等同于合规。法规原文可在中央网信办网站核对。真正的 PDF 脱敏至少要做四件事1. 找到目标内容文本型 PDF 可以使用精确词典、正则表达式、语义规则或字段坐标扫描件通常还需要 OCR 和图像检测。自动识别结果必须允许人工复核因为漏报和误报都可能造成高昂成本。识别阶段还要考虑拆分文本、跨行字段、旋转页面、表单外观、图片中的文字以及同一敏感值的格式变体。搜索一次返回零结果并不等于页面中没有敏感信息。2. 永久删除目标对象正确的 redaction 工作流通常先标记区域再执行应用操作永久删除当前修订中区域下方的文本、图像或路径对象。只保存红色边框、批注或黑色外观仍然不够但即使当前对象删除成功也不能立刻把文件送入发布目录。3. 清理页面之外和处理之后的残留以非增量方式全量重写新的发布副本移除旧修订和未引用对象再检查文档属性、XMP、附件、表单字段、批注、书签、标签树、替代文本、可选内容组以及 JavaScript/文档动作。新输出路径只是原件保护措施不等于全量重写。数字签名在这里会带来真实的约束为了保持原签名覆盖字节不变后续修改通常采用增量更新而全量重写会改变原签名覆盖的字节使原签名不再有效。高风险流程应生成一个全量重写的脱敏派生件再按组织批准的身份重新签名或者明确拒绝处理。不能同时承诺“保留原签名有效”和“彻底移除原签名覆盖的敏感字节”。对字形位置等侧信道则要结合文档来源和生成工作流决定是否增加专项检测或采用更严格的发布策略。“把整份 PDF 栅格化”也不是通用答案。它可能损害搜索、可访问性和文档真实性字形位置论文同样提醒栅格化可以提高某些场景的攻击难度但不能被描述为自动消除所有信息泄漏。4. 使用独立方法验收生成工具报告成功只是一个信号。发布前至少应重新渲染、搜索已知值、复制处理区域、使用不同解析器提取文本、检查隐藏对象和修订结构并关闭后重新打开文件。本文验证器在--fail-on-incremental-updates开启时只要检测到历史修订指示器就阻止发布当前版本不声称完成旧版本内容取证。如果当前验证器没有实现字形位置侧信道测试报告应写成not_tested而不是默认pass。安全结论的可信度来自明确记录“测过什么、没测什么”而不是把未知范围隐藏起来。Foxit SDK 在这条流程中的位置在程序化流程中Foxit PDF SDK 可以作为 PDF 解析、区域标记和永久删除的处理引擎。下一篇会以 C/Windows 为主线完成一个最小闭环加载文档、解析页面、搜索目标文本、获取矩形、标记 redaction、执行Apply()、使用明确的非增量标志全量保存新文件再交给独立解析器验证修订结构和内容。需要特别说明本文引用的字形位置研究评估的是论文中列出的工具和工作流。除非针对具体 Foxit SDK 版本完成独立实验否则不能据此宣称它受影响也不能宣称它已经专门消除了该侧信道。SDK 负责完成关键处理能力发布系统仍需承担规则、清理、验证和审计责任。最后记住一个判断标准不要只问“黑框有没有盖住”而要问如果接收者完全不遵守我的预期操作他还能不能从当前对象、历史修订或版面线索中读取、提取或推断出不应获得的信息这个问题会自然地把检查从页面截图扩展到底层对象、隐藏数据、文档工作流和独立验证。也只有到这一步PDF 脱敏才从一个视觉效果变成一条可以进入生产系统的安全流程。本文基于公开资料和个人技术验证不代表福昕官方观点法规内容仅作技术背景不构成法律意见。公开资料最后核对日期为 2026-08-11。评论或私信“PDF脱敏清单”获取五层验收清单。如果你正在评估程序化 PDF 脱敏可以从 Foxit PDF SDK for Windows 试用页开始用合成测试文件验证自己的流程。专栏导航系列目录下一篇[PDF 脱敏技术【2】:从识别到永久删除