dsh-destinywind-tpm:用 TPM/DPAPI 封存 DSH 凭据,取代明文文件

前言

DeepSeek Harness(DSH)里,模型 API Key 等敏感值往往通过凭据服务解析:官方默认实现会把引用值写在 $DSH_HOME 下的 .credentials.yaml 里,权限再严也是明文落盘。本机若被拷贝配置、误提交备份或多人共用开发机,风险集中在「文件里就是真值」这一点。

社区维护者 rickwindman 提供的 dsh-destinywind-tpm 属于 DSH 插件目录中的 admin-security 分类,定位是凭据提供方(credential provider):在写入磁盘前用本机可用的最强保护者做 AES-256-GCM 信封加密,只在 resolve 时解封;没有可用保护者则拒绝挂载,不落明文。下面介绍它是什么、如何安装,以及换装时对已有密钥的影响。

这是什么

dsh-destinywind-tpm 是跨平台硬件/用户级凭据存储的 DSH bundle 插件,维护者为 rickwindman,当前 package 版本为 1.0.0,许可证 MIT。

它与官方 @deepseek-ai/dsh-credentials-local(明文 .credentials.yaml)在 Cordis 里互斥占位:一个上下文只能挂一个 credentials 服务。设置页和各插件仍走标准凭据接口,消费方不感知背后是实现明文还是封存库。

平台行为(资料原文):

  • Windows:TPM(CNG Microsoft Platform Crypto Provider)优先,回退 DPAPI
  • Linux:TPM 2.0(tpm2-tools)优先,回退会话密钥环(libsecret)
  • 两者皆不可用:拒绝挂载,绝不落明文

核心功能

封存与密库

引用值与记录在落盘前经本机保护者封存,密库文件路径为:

$DSH_HOME/.credentials.dpapi.json

文件权限 0600,采用 staging + 原子 rename 落盘。

无明文回退

全新安装在新值保存之前,解析不到任何凭据——这是刻意设计,不是「先明文再迁移」。

本机本用户绑定

密库复制到其他机器或账户无法解密;把密库当备份迁走会失效。

启动校验

启动时会重新解封全部密文;任一解封失败会报错,不会静默降级到明文或其它提供方。

解析顺序(与官方提供方一致)

  1. 进程环境变量(启动 dsh 的 shell 或系统用户变量)
  2. 本插件密库(官方提供方则为 .credentials.yaml)
  3. 项目 .env(启动目录)→ 用户 .env($DSH_HOME/.env)

同名环境变量优先于密库;存在时密库的 set/unset 也会拒绝写入该引用,避免误改。若出现「设置里改了 Key 但不生效」,应先查启动环境里是否仍有旧变量。

安装与启用

插件声明了 dsh.bundle.patch,装完即生效,无需手工改 Cordis 配置。补丁会按 id 覆盖默认的 credentials 行(置 disabled: true)。

Cordis 声明式安装:

plugin_manager { action: "install_bundle", target: "<本仓库绝对路径>" }

命令行等价形式:

dsh plugin --profile web add link:<本仓库绝对路径>

安装后重启 dsh web 生效。

禁用本 bundle 可恢复默认提供方;已封存的值仍保持封存,回到官方明文提供方后需重新录入(官方读不到封存库)。从官方换到本插件时,.credentials.yaml 里的旧值不会被读取,需在设置页重录一遍即入封存库;旧文件可确认无用后自行删除。两个方向均无自动迁移,属刻意设计。

典型用法

安装并完成重启后,使用方式与 DSH 标准凭据流程一致:在设置页或通过凭据 API 写入引用(例如 DeepSeek 提供器将 Key 存为 DEEPSEEK_API_KEY 等引用名,配置里只留引用,真值在凭据服务)。解析时按上述顺序查找;值会写入 .credentials.dpapi.json 并由本机保护者封存。

仓库 tests/ 提供本机集成测试(离线端到端 + 模块解析钩子),依赖作者本机 D:\dsh 路径,不能直接在 CI 运行。若需本地验证实现,可在仓库根目录执行:

node --import ./tests/resolve-hook.mjs tests/offline.mjs

适用场景与注意

适合:在本机开发或运行 DSH,希望 API Key 等凭据引用不以明文 YAML 长期落盘;Windows/Linux 上能使用 TPM 或回退保护(DPAPI / libsecret)的环境。

不受影响的部分(换装引擎时):模型连接器各自登录态(如 workbuddy / trae);进程环境变量与 .env 中的值(它们在密库解析链之外或按优先级覆盖)。

需重录的部分:凭据服务内的引用值,包括在设置页配置的模型 API Key。

安全与信任:插件以当前 dsh 进程权限运行,安装前应在 GitHub 阅读源码与 MIT 许可证,确认符合你的合规要求。社区插件目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,选型与审计责任在使用方。

结尾

dsh-destinywind-tpm 把 DSH 凭据从明文文件换成 TPM/DPAPI(及 Linux 侧等价回退)封存,并在无保护者时拒绝挂载,适合对本地密钥落盘有硬性要求的场景。目录页:https://www.skillhub.cn/plugins/rickwindman/dsh-destinywind-tpm;源码与 README:https://github.com/rickwindman/dsh-destinywind-tpm。

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

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

小夜