yauntyour/DSH-Encrypt0

dsh-encrypt

DeepSeek Harness 的 WebUI 管理加密凭据插件

AI 分析

提供基于 AES-256-GCM 的凭据加密存储,支持免密登录时长配置、输错锁定及防泄漏遮蔽。适合对 API 密钥等敏感凭据有高安全保护需求的用户。

包名
dsh-encrypt
版本
0.1.0-rc.9
许可证
MIT
最近更新
2026年8月16日

安装

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:yauntyour/DSH-Encrypt

使用

全部操作在「设置 → 加密安全」完成(面板 id encryption):

操作前置状态效果
设置加密密码(输入两次,至少 8 个字符)明文同一文件原地替换为密文文档,进程保持解锁
解锁加密+锁定(重启后)校验密码摘要并派生密钥,立即恢复模型调用
修改密码加密+解锁全部条目在新密钥下重加密
免密登录时长(滑块)任意0 = 每次都输密码;1–30 = N 天内免密;31 = 永远免密(均仅本机)

滑块即改即存(松开即提交到 /api/credentials.config,只接受 localhost;刻度只显示「每次」与「永远」两头)。解锁成功后按当前滑块时长签发免密票据;改动滑块会作废旧票据,若当前已解锁则立即按新时长重新签发。打开 WebUI 时自动尝试免密解锁(localhost 专属),免密期间无需输密码;到期后回到密码解锁。非 localhost 访问始终需要输入密码,且不显示改密入口(后端同样强制)。

永远密文:设置密码后没有「移除密码」路径——文件永为密文。若凭证文件被人替换成明文,解锁状态下会被立即重新加密写回;若发生在锁定/重启期间,凭证解析暂停(面板显示警告),重新设置密码即恢复(原有凭证内容保留)。

解锁锁定:连续输错密码达到阈值(默认 5 次)后,解锁接口进入指数退避锁定——第 1 次锁定 30 秒,之后每次失败翻倍,上限 15 分钟;计数与截止时间持久化在状态文件里,重启进程不能清零。锁定期间面板显示剩余秒数并禁用解锁按钮,接口返回 429 + Retry-After;成功解锁即清零。

状态机:

             set-password                    (restart)            unlock
  plain ──────────────────► encrypted+unlocked ──────► encrypted+locked ──► unlocked
    ▲                            │  ▲                                        │
    └────── clear-password ──────┘  └──────────── change-password ───────────┘
  • 锁定期间:web 服务照常运行;继承环境中的凭证仍可解析,文件内凭证解析抛 VAULT_LOCKEDdescribe 报告 source: "locked"——设置页即是解锁入口
  • 免密窗口:票据在签发时写入 issuedAtdaysdays: -1 永不失效。滑块改动会立即作废旧票据
  • 忘记密码:设计上不可恢复(密码不落盘);恢复手段 = 删除 .credentials.yaml 重新配置

配置项

config:
  path: ''            # 凭证文件绝对路径;未设置时取 $DSH_HOME/.credentials.yaml
  dshHome: ''         # Harness home(通常由运行时注入,无需手动设置)
  allowEnvFallback: true          # 允许继承环境与 .env 回退层
  passwordEnv: DSH_CREDENTIAL_PASSWORD  # 启动自动解锁的环境变量名
  watch: true         # 监听文件变化热重载
  debounceMs: 100     # 热重载防抖(毫秒)
  leakGuard: true     # 凭证泄露检测与输出脱敏
  leakMinMaskLength: 8     # 短于该长度的值不脱敏(避免误伤普通文本)
  leakMaxMaskLength: 256   # 长于该长度的值不脱敏(流式回看窗口)
  maxUnlockAttempts: 5     # 连续解锁失败触发锁定的阈值
  lockoutBaseMs: 30000     # 首次锁定窗口(毫秒,之后指数翻倍)
  lockoutMaxMs: 900000     # 锁定窗口上限(毫秒)
字段类型默认值说明
pathstring$DSH_HOME/.credentials.yaml凭证文件绝对路径(运行时注入 dshHome 计算默认值)
dshHomestring运行时注入Harness home
allowEnvFallbackbooleantrue是否启用继承环境与 .env 回退层
passwordEnvstringDSH_CREDENTIAL_PASSWORD启动自动解锁密码的环境变量名
watchbooleantrue是否监听文件热重载
debounceMsnumber100热重载防抖毫秒数(≥ 0)
rememberDaysnumber0免密登录天数:0 = 每次都输密码,1..30 天,-1 = 永远(补丁配置的初始值;滑块运行时值写入 $DSH_HOME/.dsh-encrypt.json 并优先生效)
leakGuardbooleantrue泄露检测与输出脱敏总开关(关闭后 HTTP/WS 输出不再扫描)
leakMinMaskLengthnumber8参与脱敏的最小值长度(4–64;更短的值视为普通文本)
leakMaxMaskLengthnumber256参与脱敏的最大值长度(16–1024;同时是流式脱敏的跨块回看窗口)
maxUnlockAttemptsnumber5连续解锁失败多少次后进入锁定(≥ 1)
lockoutBaseMsnumber30000首次锁定窗口毫秒数(≥ 1000;之后每次失败 ×2)
lockoutMaxMsnumber900000锁定窗口上限毫秒数(≥ 1000)