dsh-secret-scrub:DeepSeek Harness 插件

前言

在 DeepSeek Harness (DSH) 的开发中,Agent 需要调用外部工具。如果工具的参数或返回结果中包含密钥、Token 等敏感信息,直接记录日志或传递给模型会带来安全风险。我们需要一种机制,在不丢失上下文的前提下,将这些敏感信息替换为占位符,同时记录发生的事件。

dsh-secret-scrub 旨在解决这一问题。它是一个基于模式的屏蔽插件,在工具执行前屏蔽入参,在模型看到结果前屏蔽出参,并将事件追加到 JSONL 日志中,但不存储原始明文。

是什么

这是一个 DeepSeek Harness 插件,由 jwilson411 维护。

它的核心功能是在工具进出 DSH 流程时,根据已知模式屏蔽敏感信息。它不是检测模型,不进行分类或启发式分析,只匹配预定义的形状。日志中只包含模式名称、占位符和统计信息,不包含原始密文,因此不提供反向映射。

安装与启用

使用官方命令安装:

dsh plugin --profile default add github:jwilson411/dsh-secret-scrub

移除时使用 remove 命令。

核心能力

  1. 进出场屏蔽:工具执行前屏蔽入参,模型看到结果前屏蔽出参。
  2. 模式匹配:支持 GITHUB_PAT、AWS_ACCESS_KEY_ID、SLACK_BOT_TOKEN 等特定模式。
  3. 稳定占位符:使用 $SECRET_<PATTERN>_<8hex> 格式。同一会话中相同的字节生成相同的占位符,方便模型推理;不同会话则不同。
  4. 无前像日志:日志中不包含原始密文,不提供反向映射。

使用示例

插件导出了 wrapExecute 和 scrub 等函数供直接调用。

  • 包装工具执行:
    const execute = wrapExecute(tool.execute, state, {
      tool: tool.name,
      incidentLog: '/var/log/dsh/secret-scrub.l',
    });
这会将工具的参数在进入时屏蔽,将工具的返回结果在输出给模型前屏蔽,并追加事件到日志文件。
  • 单独 scrub 值:
    const { value, findings } = scrub(payload, state);
    // findings: [{ pattern: 'AWS_ACCESS_KEY_ID', placeholder: '$SECRET_…', count: 2 }]
`scrub` 函数会递归遍历字符串、数组和对象,包括对象键,并返回处理后的值和发现列表。

支持的模式

插件内置了以下模式的正则匹配规则:

  • GITHUB_PAT:匹配 GitHub 经典个人访问令牌 (ghp_ + 36 字符)。
  • GITHUB_FINE_GRAINED_PAT:匹配 GitHub 细粒度令牌 (github_pat_ + 40 或更多字符)。
  • AWS_ACCESS_KEY_ID:匹配 AWS 长期访问密钥 ID (AKIA + 16 字符)。
  • SLACK_BOT_TOKEN:匹配 Slack 机器人令牌 (xoxb- + 数字段 + 密文段)。
  • PEM_PRIVATE_KEY:匹配 PEM 私钥块或其头部。
  • SK_LIVE_TOKEN:匹配通用 sk- 前缀的活体 API Token。

注意事项

  • 非管理器:它不存储、不轮换、不验证密钥。如果密钥泄露,需要手动轮换。
  • 非检测器:不使用分类器或熵值启发式,只匹配预定义正则。
  • 依赖版本:依赖 @deepseek-ai/dsh-tools ^0.1.1-rc.2。
  • 许可证:MIT。
  • 定位:它是侧信道记录,不是 DLP(数据防泄漏)或实时扫描 API。

参考资料

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

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

小夜