☰
rizzo-pii安全与GDPR合规分析:数据最小化、不可逆模式、AGPL许可,本地PII工具的合规边界在哪里
2026/10/14 18:12:19 网站建设 项目流程

【免费下载链接】rizzo-pii

Local-first privacy guard: anonymize your documents before sharing with LLMs.

项目地址:https://gitcode.com/gh_mirrors/ri/rizzo-pii
点击查看免费下载

把合同、判决书、财报直接粘贴给 ChatGPT 或 Claude,方便,却也悄悄把姓名、税号、IBAN、病历送上了不可控的服务器。rizzo-pii 是一款本地优先的 PII 匿名化工具:它用约 0.3B 参数的轻量模型在你自己的 CPU 上检测 22 类个人数据,只把「占位符」发往云端大模型,敏感内容从不出设备。本文从GDPR 数据最小化、不可逆模式、AGPL 许可三个角度,分析这款本地 PII 工具的合规边界究竟划在哪里。

为什么"GDPR 合规"不能只是一句口号

对律所、会计师、医院来说,把含个人数据的文档交给云端 LLM,在 GDPR 下很可能构成一次直接违规——最常见的原因,是把可识别数据传给了没有合法依据的第三方。

rizzo-pii 的思路是「保留最强模型,把数据从方程里拿掉」:本地匿名化 → 只发占位符 → 本地还原。它的隐私保证是架构层面的,而非一句承诺。

数据最小化如何落地:数据从不出设备

GDPR 第 5 条的「数据最小化」被 rizzo-pii 近乎字面地实现:第三方处理器永远只能看到伪名化文本。

  • 检测与还原全在本地 CPU 上运行——没有 API Key、没有遥测、没有上传。
  • 映射字典从不上网:服务器内部重建字典以定位 PII,请求结束即销毁,任何方向都不跨线传输。
  • 文档只活在内存里:PDF 预览用 LRU 缓存,永不落盘,进程结束即消失。

也就是说,云端收到的文本已经被剥掉了所有标识符。这正是大多数云端 LLM 调用"违法"的根源被从源头消除。相关实现见 src/app/app.py 的analyze()函数与 src/app/detectors.py 的确定性检测网。

💡 对新手而言,判断一个 PII 工具是否"真合规"的关键问句是:敏感值到底有没有离开我的机器?在 rizzo-pii 里,答案是否定的。

不可逆模式:从"可逆脱敏"到"销毁恢复密钥"

默认情况下,rizzo-pii 做的是伪名化(pseudonymization)而非销毁:每个 PII 获得一个稳定的类型化占位符([FULLNAME_1]、[IBAN_1]、[CF_1]),并生成一份本地字典记录「占位符 → 真实值」。LLM 的回答返回后,本地一步还原,工具因此真正可用而不只是合规摆设。

但有些场景恰恰相反:希望匿名化后不存在任何恢复密钥。rizzo-pii 提供了这样的开关,而且"不是装饰性的"。

当字典被关闭时,会发生以下变化(配置注释见 src/app/app.py):

维度可逆模式(默认)不可逆模式(PII_MAPPING=0)
是否构建映射字典✅ 构建并本地保存❌ 不构建、不返回、不存储
实体片段是否带原文t字段✅ 携带❌ 直接删除
占位符编号是否保留保留保留([FULLNAME_1]两次仍代表同一人)
能否从响应重建字典能不能(原文已剥离)
浏览器 localStorage 是否写入写入不写入,并隐藏下载入口

关键点在于:编号保留、原文删除。两个相同的占位符仍告诉大模型"这是同一个主体",但一个孤立的编号反查不到任何值。这正是数据最小化在"彻底销毁"场景下的极致形态——连一把能打开门的钥匙都不留下。

可通过界面开关、环境变量PII_MAPPING=0、每次请求的include_mapping: false或POST /settings(持久化到prefs.json)来启用,说明见 docs/releases/v2.0.0.md。

真正的 PDF 脱敏与"失效即失败"安全网

合规最怕的是"看起来脱敏了,其实没有"。rizzo-pii 在这一层做到了结构性安全:

  • 真实删红(true redaction):PII 从 PDF 内容流中被移除,而不是用黑框盖住——复制、OCR、文本抽取都拿不到原值。
  • 元数据一并清洗:XMP、批注、表单字段值、书签标题全部清除,内嵌附件整体丢弃。
  • 失效即失败(fail-closed):如果整份 PDF 中一处 PII 都没找到,端点直接返回422,而不是交给你一个"看似匿名化"的文件。
  • 残留/跳过告警:极少数值无法安全替换(如过短的数字),会以X-PII-Residual、X-PII-Skipped响应头在界面明确提示,而非静默放行。

此外,模型从不单独工作:它始终与一张正则 + 校验和安全网配对。IBAN(mod-97)、信用卡(Luhn)、CF/PIVA 官方算法必须通过校验才会被接受,且有效校验和优先于模型——这消除了神经标注器切碎长代码的经典失效,为"泄露危害最大"的标识符提供数学上确定的检测。校验和逻辑见 src/inspect/validate_checksums.py,PDF 导出见 src/app/pdf_export.py。

AGPL 许可边界:源码是 MIT,为何二进制是 AGPL?

这是理解 rizzo-pii 合规边界的另一个关键。它的许可是双轨的(详见 THIRD_PARTY_LICENSES.md 与 LICENSE):

你拿到的是许可
本仓库源码MIT(自由使用、修改、商用)
Releases 发布二进制(.exe/.dmg/.deb/.AppImage)AGPL-3.0(因打包了 PyMuPDF)
你自行docker build的镜像组合含 PyMuPDF,转交时视为 AGPL-3.0

原因在于:做真实删红的page.apply_redactions()依赖PyMuPDF,而它采用「AGPL-3.0 或 Artifex 商用」双许可。内嵌 AGPL 库的可执行文件构成结合作品,整体遵循最严格组件——所以发布二进制是 AGPL-3.0。

AGPL 对合规用户意味着什么?

  • 不碰你的文档:copyleft 约束的是软件,不是输出。律所用它匿名化合同,不必向任何人公开任何东西。
  • 不禁止商用:可以工作中用、可以售卖;唯一不能做的是闭源再分发(接收方必须拿到对应源码)。
  • 网络条款(§13):若把应用作为他人可访问的服务运行(如--host 0.0.0.0或办公服务器上的 Docker),须向远程用户提供对应源码。但默认绑定127.0.0.1,普通桌面使用根本触发不到。
  • 想做闭源产品?要么替换 PyMuPDF,要么购买 Artifex 商用许可——这正是双许可存在的意义。

对合规团队的一句话结论:从源码安装、本地桌面使用,不会触发 AGPL 的任何额外义务。

合规边界在哪里:诚实的局限

任何合规工具都该说清楚"边界"。rizzo-pii 的官方局限包括:

  • 验证仅覆盖意大利语:训练是多语言的,但 7,000 行基准只度量意大利语,其余七种语言"训练了但未认证"。
  • 意大利法律标识符验证于注入实体:CF、PIVA、CATASTO、DOCID、PROVINCE没有公开真实数据,验证里用的是"生成实体注入真实句子"——是好代理,不是完全盲测。
  • 类别不平衡:FULLNAME的数量约为CREDITCARDNUMBER的 97 倍,稀有标签更噪。
  • 评估是句子级而非文档级:真实用例是整份文档,端到端度量尚待补充。

最实用的缓解措施始终是:把模型与正则/校验和安全网配对使用——两者结合强于任何单一手段。

总结:本地 PII 工具的合规边界

把三个维度串起来,rizzo-pii 的合规边界可以这样理解:

  • 数据最小化(GDPR 第 5 条):从架构上让第三方"只看得到伪名化文本",敏感值不出设备,字典不上网、文档不落盘。
  • 不可逆模式:在"可逆脱敏"与"彻底销毁恢复密钥"之间给出一个非装饰性的开关,把合规选择权交回用户。
  • AGPL 许可:源码 MIT 最大化自由度,二进制因 PyMuPDF 而 AGPL-3.0,但对本地桌面用户零额外义务。
  • 真正的边界:验证以意大利语为准、法律标识符依赖注入实体、评估尚未做到文档级——在这些点上,它需要"模型 + 校验和安全网"的组合来兜底。

一句话:rizzo-pii 把"GDPR by design"落成了一个可以跑在普通笔记本上的结构性保证——而它诚实地标出了自己还没走到哪里,这恰恰是合规工具该有的样子。

📎 更多工程细节见 docs/CHANGELOG.md,完整方法论见技术报告 report/rizzo-pii-report.pdf。

【免费下载链接】rizzo-pii

Local-first privacy guard: anonymize your documents before sharing with LLMs.

项目地址:https://gitcode.com/gh_mirrors/ri/rizzo-pii
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询