Claude Code 正在使用隐写术标记请求
摘要
对 Claude Code 二进制文件的分析显示,它使用隐写术技术(例如更改系统提示中的 Unicode 字符)来为发送到自定义 API 端点的请求添加不可见水印,这很可能用于检测未经授权的转售商和模型蒸馏攻击。
暂无内容
查看缓存全文
缓存时间: 2026/06/30 18:37
# Claude Code 正在通过隐写术标记请求
来源:https://thereallo.dev/blog/claude-code-prompt-steganography
出于隐私原因,我检查了 Claude Code。
大多数开发者都会给予他们的开发工具极大的权限。文件系统、Shell、Git、浏览器访问,甚至现在还能控制电脑。这正是关键所在——它们需要足够的上下文来完成有用的工作。
这也意味着客户端本身值得审视。如果一个编码代理可以读取你的仓库并执行命令,那么它内置的二进制文件应该是“平淡无奇”的(例如,pi 工具集)。
所以我查看了我本地安装的 Claude Code (2.1.196)。
在 Claude Code 的二进制文件中,有一个函数会修改插入到系统提示中的当前日期字符串。
正常的字符串看起来像这样:
Claude Code 可以静默地更改两处:
1. `Today's` 中的撇号
2. 日期分隔符,从 `-` 改为 `/`
以下是相关代码,从压缩的代码包中清理后:
这是提示隐写术,一种在明文中隐藏数据的技术。
可见的句子读起来仍像一个普通日期。模型和用户看到的是平淡无奇的内容。但原始请求中包含了一个标记。
触发条件是 `ANTHROPIC_BASE_URL`,即 Claude Code 的 API 基础 URL 覆盖。
然后它会检查:
- 系统时区是否为 `Asia/Shanghai` 或 `Asia/Urumqi`
- API 基础 URL 主机名是否匹配一个解码后的域名列表
- 主机名是否包含特定 AI 实验室关键词
时区检查会将:
改为:
主机名检查会更改撇号:
| 条件 | 撇号 |
|------|------|
| 正常 | `'` |
| 已知域名 | `\u2019` |
| 实验室关键词 | `\u02BC` |
| 已知域名 + 实验室关键词 | `\u02B9` |
这些是视觉上微小的变化,在大多数等宽字体中你根本不会注意到。
域名和关键词列表以 base64 字符串存储,并使用密钥 `91` 进行 XOR 解码。
解码后的实验室关键词列表是:
解码后的域名列表要大得多。它包含中国公司域名、AI 公司域名,以及大量的代理/转售商/网关域名。
一些例子:
日期函数在构建代理上下文时被使用:
因此标记成为发送给模型的系统上下文的一部分。(Anthropic 可能在后端解析它)
我安装的二进制文件由 Anthropic 签名:
我当前的 Shell 没有设置 `ANTHROPIC_BASE_URL`,并且我的时区是:
因此,在我当前的机器和环境下,这条路径会生成正常的撇号和正常的 `YYYY-MM-DD` 日期字符串。
Anthropic 可能希望检测 API 转售商、未经授权的 Claude Code 网关以及模型“蒸馏攻击”流水线。一个指向已知转售商域名的自定义 `ANTHROPIC_BASE_URL` 是一个有用的信号。一个包含 `deepseek` 或 `zhipu` 的主机名也是一个有用的信号。
这部分是有道理的,但这个实现很奇怪。
CC 使用几乎不可见的 Unicode 标记静默地修改系统提示。它将代理/网关分类编码到一个看起来像普通英语的句子中。它将域名列表隐藏在 XOR 和 base64 之后。这不是一个恶意功能,但对于一个要求信任的开发者工具来说,这是一个奇怪的选择。
编码代理已经处于可怕边界的危险一侧。它们可以检查代码、意外总结秘密、运行命令、安装包、编辑文件,并在**你本地机器**上推送提交。大多数开发者接受这一点,因为生产力提升值得冒险。
真正的开发者的信任取决于平淡无奇的行为。
如果客户端想要检测自定义 API 网关,它可以直接说出来。它可以发送一个明确的遥测字段并附上文档。它可以让策略可见。它可以把这个行为写在发布说明中。
将信号隐藏在系统提示中,使得所有其他隐私声明更难让人相信。
对于大多数用户来说,这条路径可能保持不激活。
如果你使用官方的 Anthropic API 端点,`Crt()` 会提前返回。如果 `ANTHROPIC_BASE_URL` 未设置,`Crt()` 会提前返回。如果你使用的是正常设置,日期提示保持“平淡无奇”。
有趣的情况是人们通过自定义基础 URL 路由 CC。这包括:
- 内部网关
- 本地代理
- 模型路由器
- 转售商
- 研究设置
在这种情况下,Claude Code 会分类主机名,并将结果编码到提示中。
绕过方法也很简单。更改主机名、更改时区、修补二进制文件、包装进程。任何认真的攻击者都能让这个信号失效。
所以这个功能主要惩罚的正是那些更容易被指纹识别的人:做着奇怪但合理事情的普通开发者。
我认为这本来可以更透明。
开发者工具可以执行条款。API 提供商可以检测滥用。公司可以保护他们的模型。
当一个拥有文件系统和 Shell 访问权限的工具开始将分类位隐藏在不可见的提示标点中时,正确的反应是审视。
信任是在平淡无奇的部分中赢得的。
相似文章
Claude Code 悄然识别与中国关联的 API 路由器(8分钟阅读)
Claude Code 有一个隐藏机制,通过修改模型上下文中的日期字符串来对通过自定义端点路由的请求进行指纹识别,尤其是那些与中国相关的请求。
@trq212: 所有Claude生成的文本都将带有这种嵌入式水印。例如,你可以检查某个PR是否由C…
推文表示,所有Claude生成的文本都将带有嵌入式水印,从而可以检测由Claude Code创建的内容(如拉取请求),但存在局限性。
Claude 现在在所有文本输出中嵌入不可见水印,并为文件添加签名元数据
Anthropic 正在为所有 Claude 文本输出添加不可见水印,并为受支持的文件添加带签名的 C2PA 来源元数据,这符合《欧盟人工智能法案》透明度行为准则,检测机制将在稍后详细说明。
Anthropic反监控立场下秘密Claude追踪器震惊用户
Anthropic秘密在Claude Code中嵌入隐藏追踪器以监控中国用户,使用提示隐写术,与其反监控立场相矛盾,引发用户信任担忧。
关于Claude的新水印
一篇批评性观点文章,认为Anthropic在Claude生成的文本中加入隐形水印对恶意用户无效,同时不公平地污名化诚实用户,并质疑该公司因此获得的集中权力。