前言¶
在 DeepSeek Harness(DSH)里跑智能体,侧栏会堆很多会话。其中一些只想自己看,但同一台机器上别人也能打开 DSH,会话正文就摆在界面上。把敏感资料放在工作区目录里时,Explorer 或任意程序读文件也不经过 DSH。单靠「别让别人点我的 DSH」并不成立。
下面介绍社区插件 dsh-chatlock(维护者 xevil3301,分类 admin-security)。它做两件事:给单个会话加界面锁;把工作区目录整包加密成保险箱。两者共用一把口令,口令只存 scrypt 派生值,解锁状态只在内存里,进程重启后需重新验证。
插件托管于 GitHub:xevil3301/dsh-chatlock。目录页见 SkillHub 插件页。DSH 生态是「一切皆插件」;SkillHub 为独立社区目录,与 DeepSeek / 幻方无官方从属关系。
这是什么¶
dsh-chatlock 是 DSH 的隐私与安全管理插件:会话锁在打开已锁会话时模糊内容并弹窗验密;保险箱把指定目录加密后,磁盘上只剩 .bin 密文,原始文件名也读不出来。会话记录本身没有做磁盘加密——DSH 启动时要读会话列表——所以第一件事是界面锁,第二件才是磁盘锁。README 里把这一点写得很明确,后面谈威胁模型时也依赖这个区分。
版本与依赖(以仓库资料为准):package.json 为 0.2.0,许可证 MIT,Node ≥ 22;README 徽章标注兼容 dsh 0.2.1-rc.3。
核心功能¶
会话锁¶
在侧栏给某个会话上锁。再次打开该会话时,会话区模糊,弹出密码框;口令错误则无法查看正文。「已解锁」只存在于当前进程内存,重启 DSH 后需重新输入。
保险箱¶
选定工作区中的一个目录,加密并锁定后,目录内为 AES-256-GCM 密文;清单同样加密,避免 manifest 泄露原始路径。解锁时用正确口令还原目录。两个能力共用一把口令。
自动锁与一键全锁¶
解锁后密钥留在内存;空闲约十五分钟(可调)会自动锁回,期间不必重复输密。另有「立即锁全部保险箱」,同样依赖内存中的密钥。进程正常退出时密钥清空,相当于全部上锁。
宿主侧守卫¶
host 半边通过路由与 ctx.fs 守卫,在 DSH 文件工具路径上配合保险箱状态;client 半边负责遮罩、侧栏锁标、设置页与上锁入口。具体文件分工见 README「这堆文件是什么」一节。
安装与启用¶
安装步骤来自官方 README,装完后必须重启 dsh(宿主侧不支持热重载,改文件后若日志无变化,先确认是否已重启)。
git clone https://github.com/xevil3301/dsh-chatlock
cd dsh-chatlock
node install.mjs # 默认装进 desktop profile
node install.mjs --profile web # 或者别的 profile
也可在仓库内执行 node install.mjs,等价于 npm run install:dsh。
经过上面的步骤后,打开 DSH 设置里「聊天锁」页面,先设置密码。回到侧栏,鼠标移到任意会话上会出现锁图标,点击即可上锁。
典型用法¶
- 只防旁人误看屏幕:在设置里设口令,对敏感会话点侧栏锁;离开电脑前可依赖进程退出或等待空闲超时自动锁回。
- 防目录被直接打开或拷走:在插件能力范围内,把导出会话或私密资料目录登记为保险箱,锁定后磁盘上只有密文;需要使用时解锁,用完锁定或等自动锁。
- 本地演示加解密效果:仓库提供
demo/vault-demo.mjs,跑一次可对比加密前后目录形态(README 说明)。
真机自检(可选,需运行中的 DSH 实例):
node test/live-check.mjs --port <你的端口>
node test/live-check.mjs --mutate # 写入往返,跑完自己清干净
README 说明:live-check 会按 DSH 算法签浏览器会话 cookie;纯 curl 访问 /api 容易 401,不代表插件未安装。
威胁模型与边界¶
插件 README 用三层表格说明能力边界,本版实现的是第二层磁盘锁加第一层界面锁,未做虚拟盘驱动(第三层)。
| 层 | 作用 | 大致能挡谁 |
|---|---|---|
| 界面锁 | 不输密码看不见会话内容 | 能操作你 DSH 的人;DOM 里仍可能有文字 |
| 磁盘锁 | 目录内密文,文件名也加密 | 直接打开或拷走目录、换机器看硬盘 |
| 虚拟盘 | 数据始终密文,驱动透明解密 | 除解锁中机器外;本插件未实现 |
另一个 Windows 账户访问同一台机器时,NTFS ACL 往往够用;同一账户下 ACL 挡不住,保险箱的意义是把明文暴露的时间窗口压短。加密主要在文件被拷走、硬盘被拿走时才有用。
务必知晓的硬边界(均来自 README):
- 聊天锁是界面锁,不是会话文件的磁盘加密。
- 保险箱是整目录加锁/解锁,不是边用边透明的实时加密。
- 符号链接不跟随;单文件超过 512MB 会跳过并在结果中点名。
- 保险箱路径不允许互相嵌套。
- 忘记保险箱密码不可恢复(scrypt,无后门)。
- 进程被强杀时可能没有清理钩子;不要把正在写入的工作区当保险箱,更适合归档区。
插件以当前 dsh 进程权限运行,安装前建议通读源码并确认 MIT 许可证与上述边界是否符合你的合规要求。
结尾¶
dsh-chatlock 用一把口令把「侧栏误点」和「目录被裸读」两类日常风险分开处理:会话用界面锁,资料目录用 AES-256-GCM 保险箱,并配合内存授权与空闲自动锁。若你需要在 DSH 工作流里加一层可复现的本地防护,可按 README 安装、设密、上锁,并对照威胁模型判断是否足够。
- 目录页:https://www.skillhub.cn/plugins/xevil3301/dsh-chatlock
- 源码与文档:https://github.com/xevil3301/dsh-chatlock