dsh-privacy-shield:本地明文、云端占位符、展示层还原

前言

在 DeepSeek Harness(DSH)里和模型对话时,请求正文会发到云端;本地会话日志和聊天界面则保留另一套「人可读」记录。若把姓名、手机号、证件号等直接写进提示词,模型侧会看到明文,审计和合规压力都会上来。常见做法是在发送前整段替换或脱敏,但若同时改写本地 transcript,界面和工具链里的真值也会丢,后续很难在展示层把占位符还原成原文。

dsh-privacy-shield(维护者 hhl123hhl,社区分类 admin-security)走「本地优先」路线:只在构建「模型可见面」时替换敏感文本,本地 session、聊天 UI 与工具执行仍保留真值;模型返回的流式内容在落库与展示前再把占位符还原。下文按安装、配置与日常命令说明用法;事实以 GitHub 仓库 README 为准。

这是什么

一句话:面向 DSH 的本地隐私护盾——明文留在本机,发往模型的是确定性占位符,transcript 里你仍看到真实值。

DSH 对同一会话维护两套表面(README 中的表格):

表面 含义 谁在读
模型可见面 组装请求用的消息 模型(出站云端)
人读记录面 原始提交的 session 事件 聊天 UI、本地 session 日志

插件在模型可见副本里把敏感片段换成 <LABEL_8hexdigits> 形式占位符;人读记录面不改写。回复流经过包装后,在 text-delta、reasoning-delta、tool-call-delta、block-end 等分片里还原占位符(含跨 chunk 切断的情况)。

示例(README 原文逻辑):

你输入:      Call 张三 at 13800138000 about 京A12345.
模型看到:    Call <PERSON_1a2b3c4d> at <PHONE_9f8e7d6c> about <PLATE_0a1b2c3d>.
界面仍显示:  Call 张三 at 13800138000 about 京A12345.

技术约束(README):Version 1.0.0,零第三方运行时依赖,纯 ESM,Node.js 18+;package.json 中许可证为 MIT。

核心能力(已文档化部分)

只改模型可见面

通过对 Session.deriveEventMessage 的防御性补丁,在推导模型可见副本时改写 system、developer、user、assistant、tool result 五类表面;人读记录面不重写。这是与同生态其他脱敏插件的主要差异之一:若连本地 transcript 一起改写,本地可读性与展示层还原会受影响。

占位符与内存 vault

默认使用 HMAC 占位符:<LABEL_8hex> 为 HMAC-SHA256(label, value) 前 4 字节;密钥在本地文件 $DSH_HOME/shield/.placeholder.key,不可枚举。配置项 placeholderHash: legacy 可保留旧版 FNV-1a 格式。

placeholder → value 映射表仅在内存中、LRU 有界,不写盘;设计上可通过本地日志重跑检测器重建。规则包导入不会携带还原表。

检测与词表

三类检测族:28 种通用 PII/凭证实体(含社保、公积金、学号、病历、IMEI、MAC 等;银行卡经 Luhn),中文实体规则(组织、项目、系统、证件号、地址、人等),以及用户词表(字面量与 re: 正则行)。

termsFile 指向行式词表(支持 #/// 注释、@category 标签),与内联 terms 合并;文件变更通过 fs.watch 热加载。

词表挖掘与规则包

  • /shield scan-doc <path>:从本地 txt/md/csv/json/code/docx 等提取候选专名。
  • /shield learn:从本地 session 日志挖掘高频未匹配片段;须经 terms adopt 确认后才进入词表。

规则包 schema:dsh-shield.rules/v1,字段含 schema, exportedAt, plugin, entities, terms, notes。/shield export / /shield import 在机器间迁移词表与实体开关;--encrypt <passphrase> 使用 AES-256-GCM + scrypt(DSH-SHIELD-ENC/v1),--pass 用于解密导入。导入校验会拒绝 vault/values/secrets 一类字段;包内仍不含还原表,但词表本身敏感,需按词表同级保管。

也可在 cordis.patch.yml 中设 rulesPack: "<path>" 启动加载,或单独配置 termsFile。

出站审计与 Web UI

默认 JSONL 审计:每请求记录占位符数量与标签分布,并对出站文本再跑检测器以标记明文泄漏;只记计数与标签,不记明文。/shield audit [days] 查询,audit export 导出 CSV。

Web UI 提供 dock 状态栏与可展开面板(Settings / Terms / Test bench / Audit / Candidates);敏感操作需 confirm。RPC 合约见仓库 docs/CLIENT-RPC-NOTES.md(11 个方法)。

运维与模型工具

  • /shield on|off、/shield enforce|observe:enforce 改写模型可见面,observe 仅统计。
  • /shield pause <minutes>:临时明文透传并自动恢复。
  • /shield doctor:自检(OK/warn 行)。
  • 模型可调用 shield_scan 工具,返回脱敏统计(仅计数与标签)。

图像:不做 OCR,图片原样通过;文本类 file block 会脱敏。本地明文:日志中保留真值是还原设计的一部分;磁盘加密、备份与访问控制需自行处理,见 docs/SECURITY.md。

安装与启用

DSH 生态强调「一切皆插件」;目录页 skillhub.cn 上的 dsh-privacy-shield 为社区站点,与 DeepSeek / 幻方无官方从属关系。安装前应在 GitHub 阅读源码与 MIT 许可证;插件以当前 DSH 进程权限运行。

官方 Quick start 中的安装方式为本地 bundle(需本机已有插件目录的绝对路径):

plugin_manager action=install_bundle target=<absolute path to dsh-privacy-shield>

安装、升级或卸载后必须重启 DSH profile(README「Known limitations」一节)。

在 profile 的 cordis.patch.yml 中配置;仓库自带 cordis.patch.yml 为可运行示例,默认 mode: enforce。完整字段见 docs/CONFIG.md;摘要表中常见项:

字段 默认 作用
enabled true 总开关;false 时不注册插件
mode enforce enforce 改写模型可见面;observe 仅计数

典型用法

重启并改好配置后,先用状态与试跑命令确认行为:

/shield status
/shield verify 张三的手机号是13800138000

status 查看模式、表面、计数与 derive-patch 状态;verify 只做试算脱敏,输出掩码后的文本。

规则包流转:

/shield export [path] [--encrypt <passphrase>]
/shield import <path> [--pass <passphrase>] [replace confirm]
/shield rules

import 默认合并词表;replace confirm 可整表替换。加密包在导入时自动识别。

从文档与历史扩充词表时,先扫描或学习,再显式采纳:

/shield scan-doc <path>
/shield learn
# 确认后通过 terms adopt 使候选生效(见 README Features)

适用场景与注意

适合:在本机 DSH 中对话或跑智能体,需要把 PII、凭证、内部专名挡在模型可见面之外,又希望在聊天 transcript 和本地日志里继续看到真值、并让助手回复中的占位符自动还原的场景。

不适合或需自备措施:依赖图片内文字的敏感信息(插件不 OCR);要求云端与本地完全同文且本地也不留明文的场景(本插件刻意保留人读记录面明文)。

与同生态其他脱敏插件相比(README「How it differs」):仅改模型可见副本、HMAC 占位符、可加密迁移的规则包、带明文复检的出站审计,以及需确认的词汇挖掘,是文档中强调的设计选择。

结尾

dsh-privacy-shield 把脱敏边界放在「发往模型的那份消息」上,用本地密钥派生的占位符与流式还原,在不大改你本地阅读体验的前提下降低云端明文暴露面。进一步了解与提 issue 可走 GitHub;在社区目录浏览元信息见 skillhub.cn 插件页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜