我做了一个让 Agent 更安全地接收密钥的 Skill

1 天前
 andie

Agent 有时确实需要 API Token 、访问密钥等敏感信息。

但直接粘贴到对话里,明文会进入上下文,甚至出发 Codex 的 Cyber 应激。为了减少这些不必要的暴露,我开发了一个开源 Agent Skill:Loopmark

它的工作流程是:

  1. Agent 根据任务生成一张表单,并把链接发给用户
  2. 用户在浏览器中填写普通信息或密钥
  3. 普通回答复制回对话;密钥在浏览器中加密,不会出现在复制内容里
  4. Agent 将密钥下载并解密到本地临时 .env 文件,供后续命令按需使用

整个过程中,云端只保存密文。用于解密密钥的私钥只保存在发起表单的 Agent 本地。

加密实现采用混合方案:问题会话使用由随机 session code 派生的对称密钥加密;密钥字段使用 ECDH 密钥协商与 AES-GCM 加密。Worker 和 R2 对象存储都无法直接读取密钥明文。

默认可以直接使用托管服务;如果有更严格的数据边界要求,也可以将 Worker 和私有 R2 存储桶部署到自己的 Cloudflare 账号

安装:

npx skills add andiedie/loopmark

项目完全开源,采用 MIT License:

1617 次点击
所在节点    程序员
9 条回复
billlee
1 天前
这弹个记事本出来出来编辑本地临时 .env 文件不就好了?你从服务器绕一圈,还加载一堆不明所以的 prompt: https://github.com/Andiedie/loopmark/blob/main/skills/loopmark/SKILL.md, https://github.com/Andiedie/loopmark/blob/main/skills/loopmark/references/protocol.md 是想干什么?
timeance
1 天前
合理,我常用的方式是让 ai 写个一次性脚本,将密钥注入到指定位置。然后自己访问脚本去写就完事了

或者像 #1 楼上说的那样,直接弹个记事本,或者在代码里注释好 告诉你是第几行自己过去填
wsbqdyhm
1 天前
我是直接明文,反正也能用,不知道有什么后果,有时会自动放到 env
Fish1024
1 天前
请在终端安全写入钥匙串,不要把 PAT 发到聊天里:
xxx
完成后回复“已写入钥匙串”,我会读取它创建 PR ;

我的 ai 让我这样操作
op351
1 天前
其实阻挡不了 从我的观察来看模型想读取密钥或者直接在会话中显示密钥是挡不住的
有些 agent 会有阻拦机制,比如不让模型直接读.env 文件,要读的话需要用户授权
但我经常观察到模型会绕过这种阻拦机制,通过其他命令或方式读取.env
比如从程序的运行时中打 log 读取,写 python 脚本读取这种
至于密钥在上下文中展示 这个更拦不住了

如果真要阻止密钥外泄的话 只能开发环境一套密钥 生产环境用另外一套密钥
sampdoria
1 天前
@op351 用单独的用户启动 agent ,不给该用户开放.env 文件的 read 权限
andie
1 天前
@billlee 有一个隐藏的问题是,我可能并不是只在同一台设备上工作,比如我通过 ssh 在远程服务器通过 codex cli 工作,有个“服务器绕一圈”才能让我做到我在任意另外的设备上也能填写。

我用了很长一段时间临时 .env ,不过每次都要编辑,声明位置,声明格式真的蛮麻烦的,于是便有了这个 skill

纯个人偏好,只是发现用上的频率越来越高且体验非常好,于是推荐给大家实施,各取所需即可~
LokiSharp
1 天前
ssh-agnet ssh-add 不就行了
gorvey
1 天前
我没有这个场景,不过用 bitwarden cli 1password cli 应该也行吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1233689

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX