Claude Code 的隐写标记:你的 AI 编程助手可能在悄悄打小报告
作者出于隐私考虑,对 Claude Code(Anthropic 的 AI 编程助手)进行了安全审查,发现了一个令人警惕的现象:它在向所有 API 请求中注入了隐写标记 —— 在系统提示词中嵌入隐藏的唯一标识符。这意味着每个用户都可能被悄无声息地追踪。
发现过程
作者使用了多个 Claude Code 实例(不同账号、不同 API Base URL),逐一对比其系统提示词。结果发现,每个实例的提示词中都包含一段独特的标识符。经过详细的差异对比分析,这些标识符编码了以下信息:
- API Base URL(如
api.anthropic.com或自定义代理地址) - 系统时区(暴露用户的地理位置范围)
- 可能的会话/用户标识
这不是一次性行为,而是每次 API 调用都会携带的"数字水印"。
隐写技术分析
Claude Code 的隐写手法非常巧妙:在每次 API 调用时,它在系统提示词(system prompt)中嵌入一段看似普通的文本段落,但实际包含隐藏信息。通过对比不同环境下的提示词差异,就可以解码出这些追踪标记。
具体来说,system prompt 中有一段特定的、看起来无害的文本。但其措辞会随环境变量(如服务器地址、时区)的变化而变化。这些看似自然的语言变体,恰恰携带了可追踪的唯一信息。这不是加密 —— 而是隐写术(steganography):将信息隐藏在看似无害的正常内容中。
隐私影响
这一机制带来了几个值得关注的隐私问题:
- 跨维度追踪:Anthropic 可以区分来自不同用户的请求,即使使用 API Key 之外的维度也能识别
- 代理无效:如果用户通过代理转发请求,隐写标记依然存在,仍可被追踪
- 地理位置暴露:系统时区信息暴露了用户的地理位置范围,即使使用了 VPN
- 无法选择退出:用户无法通过正常设置关闭这一功能
技术细节
作者通过逆向工程 Claude Code 的 Node.js 代码,定位到了生成这些标记的具体函数。关键逻辑如下:
- 在构建 API 请求时,检测系统环境变量(
TZ、环境标识等) - 根据这些环境变量生成一个"指纹"字符串
- 将该指纹嵌入到系统提示词中,伪装成普通的说明文本
- 该指纹不是加密的,但伪装手法高明,普通用户几乎不可能察觉
这本质上是一种信息泄露机制 —— 即使你通过代理隐藏了 IP,Claude Code 仍然会通过系统提示词的"措辞变体"来暴露你的身份信息。
应对措施
对于隐私敏感的用户,可以采取以下措施:
- 覆盖时区:设置环境变量
TZ=UTC,避免暴露真实地理位置 - 统一 API 入口:使用自定义代理统一 API Base URL,减少 API 端点的特征暴露
- 审查源码:审查 Claude Code 源码中的 system prompt 构建逻辑,了解完整的标记生成机制
- 考虑替代方案:对于隐私敏感项目,考虑使用其他工具,或手动审查每次请求的内容
总结
AI 编程助手正在变得越来越强大,但用户需要充分了解它们的隐私影响。Claude Code 的隐写标记虽然可能出于反滥用(anti-abuse)的正当目的,但对隐私敏感的用户来说,这是一个需要认真对待的问题。
透明度和用户控制权应当成为 AI 工具设计的基本原则。用户有权知道自己发出的每个请求中携带了哪些额外信息,也有权选择是否分享这些信息。
原文出处:https://thereallo.dev/blog/claude-code-prompt-steganography