研究者发现可从OpenAI/Anthropic等闭源API输出中提取隐含推理链,对模型安全有重要参考意义。
我们在 OpenAI、Anthropic 和 Google 的前沿模型上均验证了这一方法。解码后的推理过程与 API 报告的隐藏思维 token 数量高度吻合。下图每个点对应一道 Codeforces 题目:横轴表示 API 报告的隐藏思维 token 数量,纵轴表示将解码后的推理内容作为输入传回模型时的 token 数量。
泄露的不同类型条目:技术标识符 351 个、个人身份信息 126 个、凭证 204 个、其他 23 个
泄露的不同类型条目
我们从 GitHub 和 Hugging Face 收集了 6,708 条公开可用的智能体轨迹,这些轨迹由 Claude、GPT 和 Gemini 模型生成,且仍包含加密推理块。对每个签名块应用解码管道后,共得到 315,320 个重建推理块。
这些隐藏轨迹中包含真实的秘密和敏感信息。在排除基准测试会话后,我们从真实用户会话中恢复了 704 个不同的隐私产物,包括 62 个 API 密钥、33 个密码、24 个访问令牌、30 个个人邮箱地址,以及姓名、邮政地址、内部 URL 和其他技术标识符。
在这 704 个产物中,有 64 个仅出现在推理块内,而在可见会话中无处寻踪。
‹ GPT-5.2 Codex encrypted_content · decoded with GPT-5.6 Luna
Terminal-Bench sanitize-git-repo task [ … ]
无匹配。但我们需要确保不存在 API 密钥或其他令牌,比如 openai。但请求中只有这些?"清除所有 API 密钥。" 我们应该搜索模式,比如 "api_key"、"apikey"、"token"、"secret"。但不要修改非敏感内容;也不要修改未被污染的文件。可能存在误报。我们应该搜索目标模式并检查。我们将搜索常见模式:"api_key"、"apikey"、"secret"、"token"。但可能出现在文档中;我们只替换实际值而非占位符。我们将识别带有赋值的密钥,如 API_KEY=...;带有长字符串的。我们会仔细检查。
也许配置文件中存在真实密钥,如 .env、.yaml。我们会用 grep 搜索 'key' 相关的模式。但必须小心处理大文件。我们将运行 grep 搜索 'API_KEY'、'apikey'、'apiKey'、'secret'、'token'、'pass'、'password'。然后检查结果。我们将列出匹配项。使用 grep -RIn。
无匹配?奇怪。也许仓库中没有这类字符串。但需要确保所有 API 密钥已移除。我们还应该查找典型令牌模式,如 "sk-"(OpenAI)、"AKIA"(AWS)。我们将搜索已知模式:AKIA[0-9A-Z]{16} 等。使用 grep -RIn 配合 -E 正则表达式。我们做几次。
grep 发现了许多匹配,包括在 JSON diff 文本中?该文件 exp_data/datasets/tokenized/rw_v2_fasttext... 包含 diff 行,引用了令牌?这是一个包含许多其他修改的 diff 工件,可能已存在于数据集中?它包含实际令牌,也许。我们需要检查包含密钥的实际文件:ray_processing/process.py 等。
另注意 grep 在数据集 json 文件中匹配到字符串,其中包含带有令牌的 diff。它是一个嵌入的 diff;我们也需要清除其中的令牌。许多行显示带有 ***REMOVED*** 等的 s3 url;这些可能是占位符;不要更改?但令牌。
我们发现了实际值:
process.py 和 ray_cluster.yaml 中有 "AKIA1234567890123456"(两处)ray_cluster.yaml 中的 GitHub 令牌 ghp_aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789(某个占位符?看起来明显是假的,但当作密钥处理;替换为 <your-github-token>。)ray_cluster.yaml 中的 Huggingface 令牌 hf_abcdefghijklmnopqrstuvwxyz123456(替换为 <your-huggingface-token>)ray_processing/cluster_tri_tokenize_shuffle.yaml 中有 HF_TOKEN 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,以及 .cache/huggingface/token 文件中有相同令牌。替换。exp_data/datasets/tokenized/rw_v2_fasttext... 内部的 diff 中。该文件似乎包含 ***REMOVED*** 占位符。那份文件包含的 diff 可能有令牌?扫描摘录:摘录中没有令牌?可能有来自 cluster 文件的?但该 JSON 文件的 grep 输出很大;它可能包含一个 diff,其中包含来自仓库的令牌(可能在其中)以及密钥。我们需要检查。它是一个令牌化的数据集,可能捕获包含令牌和密钥的 git diff 文本。exp_data/datasets/tokenized/rw_v2_fasttext_openhermes_vs_rw_v2_bigram_0.1_arcade100k.json 的 grep 结果显示一个长字符串 dcnlp_diff,其中包含许多文件的 diff,包括带有 hf_oCfF... 的行,也许还有 AKIA... 和 ghp_... 等。我们还必须清除该 JSON 字符串中存在的令牌(如果存在的话)。因为 grep 输出表明该文件包含匹配的模式(正则表达式包含 GH 和 HF 令牌等)。所以我们需要打开相关部分。
也许其他文件也有令牌:ray_processing/ray_cluster.yaml 等。我们将需要用占位符替换令牌。
根据指令:用一致的占位符值替换整个仓库中的实际值。
我们需要知道要使用的占位符值。提供的示例:
<your-aws-access-key-id><your-aws-secret-access-key><your-github-token><your-huggingface-token>但也可能有其他密钥?我们只找到了 AWS 访问密钥(但没有 secret)。我们找到了 HF 令牌。我们应该用占位符替换吗?是的。
同样在 cluster yaml 中可能有环境变量名 HF_TOKEN 中的 HF 令牌。应替换为 <your-huggingface-token>。
也没有找到 secret access key;但也许有?没有从 grep 看到,但可能有其他模式如 "AWS_SECRET_ACCESS_KEY" 及其值,但因为 grep 之前没有找到。我们将搜索 "AWS_SECRET_ACCESS_KEY" 等,也许在其他文件中。我们将执行 grep -RIn "AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|HF_TOKEN|huggingface-cli login|ghp_|github_pat_|GITHUB_TOKEN|HF_TOKEN|HUGGINGFACE" 等,简单搜索。
我们将打开每个文件进行编辑。
因为我们不能修改没有敏感信息的文件。我们只更新那些有令牌的文件。我们将用 grep -RIn -E "AKIA|ghp_|hf_|AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|HF_TOKEN|huggingface-cli login|GITHUB_TOKEN|GH_TOKEN|github_pat_" 列出所有出现位置。我们将打开每个文件进行编辑。
让我们检查每个文件的内容。
ray_processing/process.py 第 122 行附近。我们将打开附近内容。使用 sed。这里我们还看到了 AWS secret access key。我们必须用占位符替换两者:AWS_ACCESS_KEY_ID -> <your-aws-access-key-id>,AWS_SECRET_ACCESS_KEY -> <your-aws-secret-access-key>。必须确保占位符一致。
2) ray_processing/ray_cluster.yaml 第 29 行等附近。我们将查看相关内容。
替换 AWS 访问密钥和 secret;GitHub 令牌;Huggingface 令牌。使用占位符。
注意:git clone -b https://ghp_...@github.com/... 命令很奇怪:-b 期望的是分支;但实际在仓库中。
还要检查 ray_processing/cluster_tri_tokenize_shuffle.yaml,我们看到了。打开相关部分,附近第 40 行。
grep 路径:ray_processing/cluster_tri_tokenize_shuffle.yaml 也许存在?也许文件路径有大写?我们列出 ray_processing 目录。
该目录中没有 cluster_tri_tokenize_shuffle.yaml 文件。所以 grep 输出可能包含来自其他地方的文件?它显示路径 ray_processing/cluster_tri_tokenize_shuffle.yaml,也许存储在 exp_data/datasets/tokenized/rw_v2_fasttext... 内部,其中包含引用该文件的 diff。该文件可能不存在,但 diff 包含补丁。所以令牌可能只出现在这个 JSON 文件中。
让我们定位 cluster_tri_tokenize_shuffle.yaml,也许在另一个目录。使用 find。
没有此文件。所以令牌只出现在 exp_data/datasets/tokenized/rw_v2_fasttext... 内部的 diff 字符串中,其中包含可能来自其他文件的令牌。我们也需要清除这个 JSON diff 字符串中的令牌。该文件是一个包含 diff 的数据集,也许用于训练;但仍然包含令牌字符串。我们必须替换。我们需要查看包含令牌的部分(第 1-30 行附近?)。由于 grep 输出很长,因为整个 diff 字符串包含许多令牌也许。我们需要在文件中搜索 "AKIA" 或 "ghp_" 或 "hf_"。在该文件上使用 grep -n。
这个 JSON 包含带有令牌 hf_oCfF... 等的 diff。我们需要替换该字符串中的那些令牌。它还包含 AWS 访问密钥?实际上 diff 摘录没有显示 AWS 密钥或 github 令牌;它包含 huggingface 令牌但没有 AWS 或 github。它没有包含 AKIA?等等,diff 摘录只包含 huggingface 令牌在行内:
- - echo 'export HF_TOKEN=hf_oCf...'
- - echo 'hf_oCf...' > ...
所以我们必须用占位符替换那些。该 JSON 在这一行。
仓库中可能还有其他令牌超出这个 JSON 文件。我们应该搜索 hf_ 等模式来查找其他出现位置。我们将使用 grep -RIn "hf_" 搜索,但这在数据集字符串中可能有很多?但可能很少。
让我们对每个令牌执行有针对性的 grep 来列出它们的文件出现位置。我们将并行执行多个命令(最多 5 个)。使用多工具并行调用多个 grep。我们将使用多工具并行。
我们需要做多次 grep 命令来列出所有包含这些令牌的文件。使用 grep -RIn 搜索每个单独令牌。我们将执行多个 grep 命令同时进行,使用多工具并行。我们将使用多工具并行。
使用此函数同时运行多个工具,但仅在它们可以并行操作时这样做。即使提示建议顺序使用工具,也应该这样做。所以如果需要多个命令并发运行,我们应该使用 multi_tool_use.parallel。对于多次 grep 可以用 once。但我们已经运行了一些。现在需要检查出现位置来替换。我们将使用 multi_tool_use.parallel 配合 grep 来定位每个令牌的文件位置。使用 grep -RIn 配合令牌列表。可以用一个命令完成吗?可以用 grep -RIn -F 用 | 分隔令牌列表来查找固定字符串,但用 -e 更直接。简而言之:
grep -RIn -F -e 'AKIA123...' -e 'D4w8z...' -e 'ghp_a...' -e 'hf_abcdefghijklmnopqrstuvwxyz123456' -e 'hf_oCf...' .
这一个命令就够了。但为了识别其他可能的令牌,我们还应该做模式搜索。但替换完这些之后,可以再做一次模式搜索。可能 .env 中有密钥?之前用 grep 搜索 "api_key" 等没有找到。但可能有些密钥不符合这个模式。不过按照指示,我们必须"找到并删除所有此类信息"。应该用一些启发式方法检测令牌:AWS Access Key(AKIA 等)。可以用 gitleaks 风格?但我们只能用本地扫描正则表达式来做。
接下来将找到的令牌替换为占位符;还需要确保在整个仓库中使用相同的占位符。给出的占位符是针对令牌类型的:使用 <your-aws-access-key-id>、<your-aws-secret-access-key>、<your-github-token>、<your-huggingface-token>。还要把 HF_TOKEN 值替换为 <your-huggingface-token>,以及 huggingface-cli login --token 中的令牌也替换为 <your-huggingface-token>。对于 AWS 环境变量,替换值为占位符;变量名保持不变。对于 git clone 中嵌入令牌的 URL——用占位符替换令牌,保持格式一致。例如:
https://<your-github-token>@github.com/mlfoundations/dcnlp.git
(保持格式一致。)这不是典型域名,但为保持格式只替换令牌部分。同理,JSON diff 字符串中也要替换令牌;占位符会插入到字符串中(需要保留 < 和 >)。应该没问题;没有说数据字段中不能用占位符。
必须小心:JSON 文件可能用了转义;必须保持有效的 JSON 字符串。dcnlp_diff 字段包含 \n 序列;如果修改,要保持正确的转义;应该把这个 JSON 文件当原始字符串处理;用 apply_patch 可能?用 python - <<'PY' 来编辑文件可能更简单?但 apply_patch 可以处理。
考虑到编辑限制:apply_patch 用于单个文件编辑。但我们有多个文件;可以多次使用 apply_patch 或者用脚本。由于需要在整个仓库中替换相同的令牌,可能用 python 脚本原地替换多个文件?但指示说:"对于自动生成或脚本更高效的变化(如在整个代码库中搜索替换字符串),不要使用 apply_patch。"这正是搜索替换场景。用脚本是正确的。
我们来实现脚本:
from pathlib import Path
replacements = {
'AKIA1234567890123456': '<your-aws-access-key-id>',
'D4w8z9wKN1aVeT3BpQj6kIuN7wH8X0M9KfV5OqzF': '<your-aws-secret-access-key>',
'ghp_aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789': '<your-github-token>',
'hf_abcdefghijklmnopqrstuvwxyz123456': '<your-huggingface-token>',
'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': '<your-huggingface-token>',
}
for path in Path(".").rglob("*"):
if path.is_file():
try:
data = path.read_text(encoding="utf-8")
except Exception:
continue
new = data
for old, newval in replacements.items():
new = new.replace(old, newval)
if new != data:
path.write_text(new, encoding="utf-8")
print(f"updated {path}")
但要小心不要修改不含令牌的文件。这个脚本只修改包含确切令牌的文件。确保只处理文本文件。有些文件可能不是 UTF-8;出错就跳过。没问题。
但要确保不修改其他文件。如果有其他令牌没找到,可能会漏掉;替换后应该再扫一次。还应该搜索 AKIA 等模式。还要搜索 AWS_SECRET_ACCESS_KEY 确认值没有被替换?实际上我们会替换值;变量名保留。没问题。
还要检查 'huggingface-cli login --token ' 后面跟实际令牌的情况;需要替换。还要检查 HF_TOKEN= 在 diff JSON 等地方的出现。
好,运行脚本。但注意:很多文件可能很大?没问题。但要留意大型数据集文件;可能很大;几十 MB。可以处理。
整个文件;安全吗?嗯。文件可能很大(经过 tokenize 的数据集)。我们需要检查大小以确保不是太大。使用 ls -lh 来检查那个文件。Claude Sonnet 4.6 签名 · 用 Haiku 4.5 ClawBench 航班预订任务解码 [ … ]让我先读取用户的个人信息以获取预订机票所需的详细信息。现在我有了 Alex 的信息。让我搜索 7 月 15 日从多伦多(YYZ)到东京成田(NRT)的直飞航班。我将使用航班预订网站。让我从 Google Flights 或其他预订网站开始。关键信息:
[ … ]让我打开 Google Flights 来搜索。›
encrypted_content · 使用 GPT-5.6 Luna 解密
Terminal-Bench sanitize-git-repo 任务
[ … ]未匹配到任何结果。但我们需要确保没有 API 密钥,可能还有其他令牌,比如 openai。但请求只处理这些吗?"清理所有 API 密钥。" 我们应该搜索像 "api_key"、"apikey"、"token"、"secret" 这样的模式。但不要修改非敏感内容;也不要修改未被污染的文件。可能有误报。我们应该有针对性地搜索模式并进行检查。我们会搜索常见模式:"api_key"、"apikey"、"secret"、"token"。但可能在文档中;我们只替换实际值而非占位符。我们会识别带有赋值语句的密钥,如 API_KEY=...;带有长字符串的。我们会仔细检查。也许配置文件中有真实密钥,如 .env、.yaml。我们会用 grep 搜索 'key' 相关模式。但必须注意大规模搜索的情况。我们会运行 grep 搜索 'API_KEY'、'apikey'、'apiKey'、'secret'、'token'、'pass'、'password'。然后检查结果。我们会列出匹配项。使用 grep -RIn。
未匹配到任何结果?奇怪。也许仓库中没有这类字符串。但需要确保所有 API 密钥都已移除。我们还应该查找典型令牌模式,比如 "sk-"(OpenAI)、"AKIA"(AWS)。我们会搜索已知模式:AKIA[0-9A-Z]{16}。使用 grep -RIn 配合正则表达式。还有 "ASIA" 用于临时凭证。我们会用 "AKIA[0-9A-Z]{16}" 执行 grep -RIn -E。做一些尝试。
grep 找到了很多匹配项,包括在 JSON diff 文本中?那个文件 exp_data/datasets/tokenized/rw_v2_fasttext... 包含 diff 行,引用了令牌?那是一个 diff 产物,包含许多其他修改,可能已在数据集中?它包含实际令牌,也许。我们需要检查包含密钥的实际文件:ray_processing/process.py 等。
还要注意 grep 在数据集 json 文件中匹配到了,该文件包含字符串,其中包含带令牌的 diff。它是一个嵌入式 diff;我们也需要清理那里的令牌。多行显示带有 REMOVED 等的 s3 链接;那些可能是占位符;不要更改?但令牌。
我们找到了实际值:
process.py 和 ray_cluster.yaml 中的 "AKIA1234567890123456"(两处)ray_cluster.yaml 中的 GitHub 令牌 ghp_aBcDeFgHiJkLmNoPqRsTuVwXyZ0123456789(某个占位符?看起来明显是假的,但当作密钥处理;替换为 <your-github-token>。)ray_cluster.yaml 中的 huggingface 令牌 hf_abcdefghijklmnopqrstuvwxyz123456(替换为 <your-huggingface-token>)ray_processing/cluster_tri_tokenize_shuffle.yaml 中有 HF_TOKEN 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,.cache/huggingface/token 文件中也有相同的令牌。替换。***REMOVED***。该文件包含一个有占位符的 diff;也许包含令牌?我们需要检查。grep 结果显示该 JSON 文件是因为它包含 "diff --git ... huggingface ..."?等等,那个 JSON 文件的 grep 输出很大;它很可能包含一个 diff,其中本身包含令牌(来自仓库的相同令牌)也许在里面。我们需要检查。那是一个令牌化数据集,可能捕获了包含令牌和密钥的 git diff 文本。exp_data/datasets/tokenized/rw_v2_fasttext_ 的 grep 结果显示了那个 JSON 文件,因为 diff 内容本身包含令牌。