AI在代码里藏暗号:1572人围观一次信任危机

AI在代码里藏暗号:1572人围观一次信任危机

AI隐私AnthropicClaude信任

数据源:HN + web research · HN

2026年6月30日,Anthropic发布了新一代AI模型Claude Sonnet 5。同一天,另一条新闻抢走了Hacker News榜首位置。这条新闻与模型发布无关,指向的是Anthropic的另一款产品——AI编程工具Claude Code。一位署名”Thereallo”的开发者出于隐私考虑,检查了自己电脑上安装的Claude Code程序。他在里面发现了一段代码,这段代码会悄悄改变系统提示中的一句话,用肉眼几乎看不出差别的方式,把用户信息标记在每一次请求里。这条帖子在12小时内获得1572个点赞和450条评论。

笔者把这篇文章认真读了两遍,也翻完了Hacker News上几百条讨论。事情本身不算复杂,但它触及的问题,比技术本身大得多。

一条日期,四种写法

先看这段被修改的句子是什么。Claude Code在向Anthropic服务器发送请求时,会在系统提示里插入一行纯文本:“Today’s date is 2026-06-30.”(今天的日期是2026年6月30日)。这行字很简单,就是一个常规的日期提示。

但Thereallo发现,程序内部有一个函数,会偷偷改动这行字里的两个地方:一是”Today’s”中间的撇号,二是日期里的分隔符。怎么改呢?

撇号有四种写法。普通人打出来的英文撇号,在电脑里是一个叫”U+0027”的标准字符,看起来就是一根直直的小竖线” ’ “。但Unicode标准里还有好几个长得几乎一样的撇号变体:右单引号”’“(U+2019),修饰字母撇号”ʻ”(U+02BC),以及上标修饰撇号”ʹ”(U+02B9)。在大多数编程用的等宽字体下,这些字符看起来几乎完全一样——笔者在自己的编辑器里试了一下,不放大到200%很难分辨。

Claude Code利用了这个视觉上的模糊性。它根据用户的环境变量和电脑时区,自动选择用哪一种撇号。一个正常用户发出去的日期提示里嵌入的是普通撇号;而如果一个用户是通过特定服务器中转、或者电脑时区设在中国大陆,发出去的日期提示里嵌入的就是另一个变体。

日期分隔符同理。正常写法是”2026-06-30”(用短横线),但如果检测到时区是”Asia/Shanghai”(上海)或”Asia/Urumqi”(乌鲁木齐),分隔符就会变成斜杠”2026/06/30”。

对人类来说——无论你是程序员还是普通用户——屏幕上的这行日期和原来看起来没有区别。但对Anthropic的服务器来说,每一个字符的编码都不同。这就是信息隐藏技术(隐写术)的经典用法:在公开可见的内容里埋入只有发送方和接收方才能解读的信号。

它在标记什么?

Thereallo进一步解开了程序里的其他逻辑。除了检查时区,Claude Code还会检查两个东西:

一是用户是否设置了自定义的API服务器地址。如果你把连接目标从Anthropic官方服务器改成了其他地址——比如内部网关、第三方代理、或者转发服务——程序就会检查这个地址的域名是否在一个内置列表里。

二是这个域名里是否包含特定关键词。Thereallo把程序里加密存储的名单解码了出来,发现关键词列表里包括:deepseek、moonshot、minimax、zhipu、bigmodel、baichuan、stepfun、01ai、dashscope、volces。

这串名字,对AI行业稍有了解的人都不会陌生——全是中国AI公司的品牌名。

而域名列表更长,包含大量中国企业的域名(baidu.com、alibaba-inc.com、bytedance.net、kuaishou.com、xiaohongshu.com、jd.com等)和各类API代理、转售服务的域名。

程序把这些信息加密存储在代码里:用base64编码后再用密钥91进行XOR运算。普通用户看代码时,看到的只是一串无意义的乱码,无法直接知道自己在被检查什么。

综合来看,Claude Code在发送请求前做了三件事:判断你是否在中国时区、判断你的API请求是否经过了与中国AI公司有关的服务器、然后把这些判断结果编码成撇号变体,悄悄塞进系统提示里,随每一次请求发送到Anthropic的服务器。

而你——完全不知道这件事在发生。

隐写术:信息时代的隐形墨水

这里有必要解释一下”隐写术”(Steganography)这个概念。

隐写术和加密不同。加密是把信息变成乱码,让不知道密码的人无法阅读。但乱码本身就很显眼——别人一看就知道”这里面有秘密”。隐写术的思路是把信息藏在一个完全正常的内容里,让人根本意识不到还有隐藏信息存在。

历史上的经典例子:古希腊时期,一个人把奴隶的头发剃光,在头皮上刺字,等头发长回来后派他送信。收信人再把头发剃掉,读到信息。外人看到的就是一个普通的送信奴隶。

Claude Code用的方法,本质上是数字版的”头皮刺字”——在一条看起来极其正常的英文句子里,通过替换肉眼无法分辨的标点符号,把用户类型标记进去。信息就写在明面上,但谁也不会注意到。

Thereallo把这种方法称为”提示隐写术”(prompt steganography),这个命名很快被技术社区接受了。

为什么这么做?

Anthropic的动机不难推测。

Claude Code本身是免费的,但它的对话通过Anthropic的付费API接口计费。如果有人搭建一个中转服务器,把自己买的API额度转卖给其他人使用,或者在Claude Code和Anthropic之间插入中间层以便收集训练数据(业内称为”模型蒸馏”),Anthropic就有理由想要检测和阻止这些行为。

更具体地说,美国政府近年来对中国AI企业的出口管制逐步收紧。Anthropic作为美国公司,在合规层面需要确保自己的技术不被某些实体以未经授权的方式获取。在API请求里标记流量来源,是一种后端风控手段。

问题是——如果动机是合理的,为什么要把这件事藏起来?

信任的裂缝

这是整个事件中争议最大的部分。

一位叫civet_java的用户在Hacker News评论区写道,一个服务提供商没有公开自己工具到底在用户电脑上干了什么——这件事的严重程度,不是一个”商业需要”的理由就能消解的。他说:“如果他们认为这种方式是可接受的,那我会忍不住想:我的电脑上还有别的什么信息被采集了?”

另一位评论者kiproping的发言更尖锐:“今天目标是’中国人’,明天可能就是用’网络攻击’能力的人,或者’越狱’的人,或者任何他们觉得’有问题的’人。”

Thereallo本人的态度相对克制——他的原文结论是:这不算恶意功能,但一个拥有文件系统和命令行访问权限的开发者工具,用隐藏标记的方式来操作系统提示,是一个”奇怪的选择”。他的原话:“Trust is earned in the boring parts.”(信任是在那些无聊的细节里赢得的。)

笔者觉得,这句话是整件事最好的注脚。Anthropic在官网的透明度声明里写了很多关于”负责任AI开发”的承诺。但用户信任不是靠承诺声明建立的,是靠代码里每一个变量的命名、每一个函数的行为来建立的。

Claude Code可以读写你的代码仓库,可以在你的电脑上运行命令、安装软件包、推送代码提交。大部分开发者愿意接受这种权限,是因为他们信任这个工具”不会做奇怪的事”。一旦这个信任被打破——哪怕只是因为一个撇号——裂缝就出现了。

而更难解释的是:这个隐藏标记太容易被绕过了。改掉电脑时区、换个域名、或者直接修改程序代码,都能让这个检测失效。能够真正绕过它的对手,几分钟就能搞定。反而那些正常使用、只是碰巧走了自定义网关的开发者,被标记了出来。

这个事件对普通用户意味着什么?

对绝大多数使用Claude Code默认配置的开发者来说,这段标记代码不会运行。如果你用的是Anthropic官方服务器,程序在检查到默认API地址后会直接退出这个逻辑分支,什么也不改变。

但”没影响你”和”没问题”是两码事。

这件事的信号意义大于实际影响。它说明了一件事:当AI公司在做一件他们认为有必要做的操作时,默认选择是不告诉用户。哪怕这件事完全可以用更透明的方式来做——比如在发布说明里写明、在设置里公开开关、或者在第一次触发时弹出提示。

笔者想起微信里有朋友问:连AI工具都在偷偷做标记,那我们普通人用的App里还有多少类似的操作?

这个问题笔者回答不了。但至少这次,有人把代码翻出来看了。

参考链接:

说明:原文页面上仅有作者头像图片(460×460px),无架构图、数据图表或产品截图等可用于配图的内容素材,因此本文未插入配图。