AI助手在偷偷标记你
前两天刷 Hacker News,看到一位开发者发的帖子,标题直接让我咖啡喷了半杯:
「Claude Code Is Steganographically Marking Requests」
翻译成人话:你的 AI 编程助手,在系统提示词里藏了追踪码。
不是比喻。是真的在 system prompt 里,用肉眼看不出来的方式,嵌了隐写标记。
他发现了什么
这位叫 Thereallo 的老哥,本来只是想检查一下 Claude Code 客户端的隐私情况——毕竟这玩意儿有文件系统权限、Shell 权限、Git 权限,谁不关心安全问题呢。
他翻了 Claude Code v2.1.196 的打包代码,然后在一个不起眼的角落里,发现了一个函数。
这个函数做的事情极其简单:修改系统提示词里的日期字符串。
正常情况,Claude Code 塞给模型的 system prompt 里有一行:
看起来人畜无害对吧?但这个函数可以在你完全不知情的情况下,偷偷改两样东西:
1. 撇号(apostrophe)
Today's 里的那个 ',它不是普通的 ASCII 撇号。根据你的情况,它会被替换成四个不同 Unicode 字符之一。你在屏幕上看到的都是 "Today's",但背后的字节完全不同。
2. 日期分隔符
日期里的 -,有时会被替换成 /。
四个撇号 x 两个分隔符 = 8 种组合。一套 2 比特的隐写编码系统。你的每一次 API 请求,都带着一个独特的指纹。
它是怎么决定用什么标记的
这位老哥继续深挖,发现标记逻辑有三个触发条件:
known(已知域名)
API 请求的 host 是否在 hardcode 的域名白名单里
labKw(实验关键词)
host 里是否包含特定"实验"关键词
cnTZ(中国时区)
系统时区是否为 Asia/Shanghai 或 Asia/Urumqi
更让我在意的是第三点——专门对中国时区做了单独判断。
代码里明确写了 Asia/Shanghai 和 Asia/Urumqi 的判断分支。这意味着:只要你的系统时区在中国,Claude Code 就会给你一个独特的标记组合。Anthropic 能精确知道这个请求来自中国用户、用的是哪个 API 端点、是不是内测版本。
这不是 bug。这是 feature。
为什么要这样做
原作者给了几个合理猜测:
1. 追踪第三方客户端——如果某个 fork 版本用了自己的 API 代理,水印能暴露流量来源。
2. 追踪泄露的 API Key——在非官方客户端使用,水印会暴露你的 API 基础 URL。
3. 区分实验用户——给内测用户和普通用户不同的系统提示词。
4. 合规需求——中国市场有特殊合规要求,需区分中国用户请求。
不管目的是什么,核心问题是:你的 AI 工具在 system prompt 里藏了追踪码,而你完全不知道。
雷哥怎么看
说实话,技术层面我不惊讶。大公司给 API 请求打指纹不是什么新鲜事。
让我在意的,是两个点:
第一,这是 system prompt,不是 HTTP header。
如果是 header 里加个 X-Tracking-ID,没人在意。但 system prompt 是喂给模型的上下文——这相当于你请了个助手,你以为你们的对话是私密的,结果发现他的笔记本每一页都印了你的身份证号。只不过是用隐形墨水印的,你看不见。
第二,中国用户被单独分类了。
如果把 Claude Code 用在工作项目里——你的代码仓库、你的 API 密钥、你的服务器配置,这些都在你的终端里,Claude Code 都有权限访问。然后它还在 system prompt 里,默默地给你的每一次请求打上指纹。
这不是说 Anthropic 干了什么伤天害理的事。但知道你的工具在背后干了什么,这是开发者最基本的权利。
能怎么办
1. 关注这个帖子的后续进展:thereallo.dev/blog/claude-code-prompt-steganography
2. 如果你在用 Claude Code,可以自己翻翻本地安装的代码,看有没有类似逻辑
3. 敏感项目,考虑用轻量客户端(比如 pi harness),或直接用 API 而非 Code 客户端
最后说一句:工具是好工具。但就像你不会把家门钥匙交给一个完全不了解的人一样,知道你的工具在背后干了什么,这是一种基本的安全自觉。
你说呢?用 AI 编程的时候,你在意它背后做了什么吗?评论区聊聊。
本文信息来源于 Thereallo 的逆向分析报告(thereallo.dev),未在本人设备上独立复现验证。建议读者自行核实。本作品包含 AI 创作。
雷哥玩 AI - 每日实测 - 不吹不黑
夜雨聆风