为什么AI编程助手绝不应看到你的API密钥(以及我如何解决这一问题)
AI编程助手已经从根本上改变了我们构建软件的方式。无论你使用的是Cursor、Claude Code、Windsurf还是其他AI驱动的IDE,这些工具都能读取你的项目中的大部分内容,以提供更好的建议。这些上下文常常包括配置文件、源代码、终端输出——有时还有你的密钥。这让我停下来问一个简单的问题:为什么AI助手需要访问我的API密钥?
问题所在
如今,几乎每个应用程序都这样存储凭证:
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxx
STRIPE_SECRET_KEY=sk_live_xxxxxxxxx
DATABASE_URL=postgres://...
这些值通常被加载到:
- .env文件
- process.env
- os.environ
- shell变量
这种方法可行,但它也意味着任何能访问你的项目或进程环境的东西都有可能访问这些凭证。对于AI辅助开发来说,这引入了不必要程度的暴露风险。即使你信任你的工具,最小化密钥存在的位置也是一种良好的安全实践。
我开始思考……
如果应用程序从不存储真实的密钥会怎样?如果它们只看到一个占位符呢?
与其这样:
OPENAI_API_KEY=sk-xxxxxxxx
不如让项目包含:
OPENAI_API_KEY=nv://OPENAI_API_KEY
没有明文API密钥。没有值得复制的东西。AI助手读取不到任何有意义的内容。
想法产生
这促使我构建了 nv-protocol。nv-protocol并不将密钥注入到你的应用程序环境中,而是将加密的凭证本地存储,并且只在授权出站请求发出时才替换占位符。
基本流程如下:
Developer
│
▼
.env
OPENAI_API_KEY=nv://OPENAI_API_KEY
│
▼
Application
│
▼
nv-protocol
│
▼
Secure Vault
│
▼
External API
你的项目从不包含真实的密钥。
你的源代码保持可移植性。
你的AI助手只看到占位符。