PAPER DEEP DIVE
从专有 LLM API 窃取推理轨迹
本文发现 Anthropic、OpenAI 和 Google 的加密推理块可在会话、用户与模型之间重放。攻击者把前沿模型产生的加密推理签名注入同一厂商的较弱模型,迫使后者把隐藏思维过程转录为明文,从而绕过反蒸馏机制、恢复公开轨迹中的密钥与个人信息、暴露隐藏有害推理,并执行不可见提示注入。论文解码 315320 个公开推理块,在真实用户会话中发现 62 个 API key 等敏感数据,并提出了上下文绑定、密钥轮换和训练侧拒绝转录等缓解方案。
一句话总结
攻击者把前沿模型返回的加密推理签名重放到同一厂商的较弱模型,让较弱模型把隐藏思维过程逐字转录出来,从而绕过蒸馏防护、暴露隐私、制造不可见注入并提取有害内容。
研究背景与动机
推理模型在给出用户可见回答之前,会先生成大量内部思维链。这类中间步骤包含中间假设、工具输出、用户数据以及上下文中的密钥,信息密度明显高于最终回答。
为了避免竞争对手通过 API 蒸馏专有推理,也为了减少安全机制被暴露的风险,Anthropic、OpenAI 和 Google 等厂商不再直接返回明文思维链,而是把加密后的 reasoning block 交给客户端。
这种设计本质上是无状态的:客户端需要在后续请求中把加密块传回 API,服务端才不必保存会话状态。问题是,加密块只要能被验签和重放,就不能只在本会话内使用。
此前已有工作证明加密 reasoning block 可以离开原始上下文。这篇论文进一步证明,这些块在同一厂商生态内可以跨会话、跨用户、跨模型互换,形成了完整可用的解码通道。
作者把攻击者分为两类:第一方攻击者用自己产生的加密轨迹做蒸馏和越狱;第三方攻击者获取其他用户公开的会话轨迹,做秘密提取或把恶意轨迹注入受害者的 agentic 工作流。
预备知识
论文把加密块视为带关联数据的认证加密信封(AEAD)。信封中通常包含模型名、块类型、版本、密钥 ID、nonce、认证标签和密文;客户端拿到的 signature 或 thinkingSignature 就是携带这些字段的 base64 字符串。
AEAD 的 MAC 保证内容不能被用户篡改,却并不保证块必须在原会话、原用户或原模型中消费。只要服务端用同一把全局密钥验证和重放,攻击者就可以把一条轨迹从 Opus 4.8 搬到 Haiku 4.5。
论文把兼容性分为三种:会话内和跨会话兼容、跨用户兼容、跨模型兼容。前两种支撑历史编辑和会话续跑,跨模型兼容则让一个厂商的弱模型成为整个模型族的解码器。
方法详解
攻击流程可以压缩为四步:从源模型拿到加密 reasoning block,把它注入兼容解码模型的上下文,用预填充或重复注入诱导转录,再用可选的强模型做一次低温度校正。
Claude 路线使用 Haiku 4.5 作为解码器。Haiku 支持 assistant turn 预填充,攻击模板先放用户指令,再放签名块和可见的 <thinking-copy> 前缀,让模型在同一 assistant turn 内继续转录。
GPT 路线使用 GPT-5.6 Luna。GPT 模型有更强的反蒸馏措施,作者会重复注入同一条轨迹,生成最多 50 个候选,并依据提取误差选择最佳结果。
Gemini 路线使用 Gemini Robotics 1.6。由于单次采样噪声较大,作者最多采样 20 个非拒绝解码,选择提取误差最低的 3 个候选,再交给 Gemini 3.5 Flash 做温度为零的校正。
论文用 API 报告的 thinking token 数作为计费侧地面真值,定义解码-计费比例和提取误差。真实轨迹无法直接比较,但 token 数一致性在 120 道 Codeforces 题上表现得很好。
$$r = \frac{T_{\text{decoded}}}{T_{\text{billed}}}$$ $$E = \left| 1 - \frac{T_{\text{extracted}}}{T_{\text{billed}}} \right|$$提取误差越小,说明转录长度越接近源轨迹。Claude 的固定提示在大多数块上接近 1:1;GPT 需要候选采样和分块;Gemini 的 1:1 比例最不稳定,因此需要多次采样和校正。
图1:两次 API 调用完成推理提取,解码 token 数与源模型报告值接近。
四类攻击向量
第一类是反蒸馏绕过。最终输出只暴露教师计算的终点,推理轨迹则暴露问题分解、中间推导和解题策略,因此是更密集的监督信号。
论文引用此前工作:用 GPT-5.4 mini 的可见输出和摘要训练反转模型,再微调 Qwen2.5-7B-Instruct,使 MATH500 从 68.4% 提升到 76.0%。但那仍是近似重建;本文可以直接拿到真实轨迹。
按 Haiku 4.5 的计价,解码 1 万条、输入输出窗口各 1.2 万 token 的轨迹,名义成本约为 720 美元。这个价格让大规模蒸馏从经济上变得可行。
第二类是秘密提取。作者从 GitHub 和 Hugging Face 收集 6708 条公开 agent 轨迹,解码 315320 个 reasoning block,最终在真实用户会话中发现 62 个 API key、33 个密码、24 个访问令牌、7 个私钥、30 个邮箱和 6 个非 localhost IP。
第三类是越狱。模型可能被诱导在隐藏推理中处理有害主题,但可见回答保持安全。论文用改写后的 HarmBench 问题让 Opus 4.8 思考如何偷车,丢弃可见回答,再用 Haiku 4.5 解码出有害信息。
图2:可见回答保持安全,解码后的隐藏推理却包含有害信息。
图3:公开轨迹的解码推理中复现 API key 和合成人物信息。
第四类是不可见提示注入。攻击者把恶意指令藏在加密块中,受害者续跑公开轨迹时,模型会把注入块当作自己过去的推理,从而执行外传文件等动作,普通文本监控看不到 payload。
flowchart TD
A[源模型生成加密推理] --> B[返回 signature 或 thinkingSignature]
B --> C[攻击者捕获并重放]
C --> D[同厂商较弱解码模型]
D --> E[预填充或重复注入诱导转录]
E --> F{需要校正}
F -->|是| G[强模型低温度校正]
F -->|否| H[得到明文推理轨迹]
G --> H
H --> I[蒸馏]
H --> J[秘密与 PII 提取]
H --> K[隐藏有害信息越狱]
H --> L[不可见提示注入]
对训练 LLM 与 VLM 式模型的启示
这篇论文真正值得训练侧关注的一点是:推理轨迹与最终输出并不是同一种监督。最终输出适合做答案对齐,但隐藏轨迹提供了逐步推理、尝试路径、自我纠错和工具使用过程的直接样例。
如果训练数据中有中间思维过程,标准 next-token 训练可以直接学习教师的分解方式,而不需要学生从答案反推潜在计算。近似重建已经能带来 MATH500 的提升,真实轨迹的理论收益只会更大。
对 VLM 或多模态 agent 式模型而言,这种监督不只限于文本。公开轨迹中出现的模型记忆、文件路径、命令、工具结果和敏感值,说明隐藏推理往往比可见对话更接近 agent 的真实执行状态。
不过,本文没有发布轨迹数据集,也没有提供可复现攻击。把此类轨迹用于训练前必须考虑合规、隐私和来源授权;论文展示的攻击本身不是训练建议,而是提醒训练管线中“可见输出”和“真实状态”之间的差距。
推理预填充作为一种行为探针
作者在附录里用解码出的 Opus 4.8 轨迹前 1% 预填充 Kimi-K3 和 Inkling 的推理,再让模型自由生成剩余推理和可见回答。可见回答从未被预填充,因此风格变化来自模型对推理通道内容的响应。
结果最突出的是 Kimi-K3。在 30 道 HLE 题上,Kimi-K3 的可见回答与 Opus 回答共享 n-gram 的平均重叠在 STEM 题上升 0.15,在非 STEM 题上升 0.09;Inkling 几乎没有变化。
交叉控制实验显示,Kimi-K3 用 Inkling 轨迹预填充、Inkling 用 Kimi-K3 轨迹预填充时,都没有显著接近对方的可见回答。因此这不是任意跨模型预填充的机械效应,而是与 Opus 轨迹相关的行为变化。
$$J(A,B) = \frac{|G_A \cap G_B|}{|G_A \cup G_B|}$$
图4:少量 Claude 推理预填充让 Kimi-K3 的可见回答更接近 Claude。
图5:Opus 推理预填充下,Kimi-K3 与 Opus 回答的共享 n-gram 明显上升。
| 模型 | 预填充来源 | 类别 | 预填充 | 控制 | 变化 | p 值 |
|---|---|---|---|---|---|---|
| Kimi-K3 | Opus 4.8 | STEM | 0.305 | 0.160 | +0.15 | 1.7e-5 |
| Kimi-K3 | Opus 4.8 | 非 STEM | 0.289 | 0.203 | +0.09 | 6.3e-6 |
| Inkling | Opus 4.8 | STEM | 0.217 | 0.205 | +0.01 | 7.4e-2 |
| Inkling | Opus 4.8 | 非 STEM | 0.241 | 0.239 | +0.002 | 5.5e-1 |
风格分类器使用 3-gram 到 5-gram 的哈希特征,特征向量归一化,按问题分组做五折交叉验证。只预填充四个词后,Kimi-K3 相对 Opus 的 AUC 从 0.99 降到 0.97,GLM-5.2 从 0.99 降到 0.94。
Kimi-K3 相对 GPT-5.6 Sol 的 AUC 从 0.97 降到 0.93。DeepSeek-V3.1 和 Inkling 在多数条件下仍接近 1.00,没有显示出可比较的向源模型漂移。
推理长度也出现变化:Kimi-K3 的中位推理长度在 Opus 预填充下从约 5700 token 降到 2500 token,GLM-5.2 从约 17600 token 降到 7800 token。自预填充只产生轻微缩短,说明不是单纯的 API 前缀机械效应。
概率提取与困惑度
作者用概率提取框架检查模型是否能够逐字复现 16-token 片段。给定目标片段 z 的单次采样命中概率 p_z,n 次独立查询内至少命中一次的概率可以写成累积公式。
$$P(\text{extract within } n) = 1 - (1 - p_z)^n$$只给定问题条件时,没有任何被评测模型表现出可实用的逐字记忆。即使是最有利的 Kimi-K3,复现一条 16-token 推理片段也需要约 1e10 次查询;AIME 上的中位数需求在 1e9 到 1e12 之间。
加入 1% 推理预填充后,GLM-5.2 对 Opus 推理后续片段的采样需求从约 1e14 降到 1e11,Kimi-K3 仍约 1e10。可见回答更易提取:Kimi-K3 用完整 Opus 轨迹作为条件时,只需约 1e5 次查询即可复现下一个 16-token 回答片段。
论文还用困惑度判断哪些推理轨迹被开放模型视为“更自然”。对与问题 q 关联的轨迹 t,条件困惑度定义为
$$\mathrm{PPL}(t \mid q) = \exp\left(-\frac{1}{|t|}\sum_i \log p(t_i \mid q, t_{<i})\right)$$
图6:不同模型对被评分推理轨迹的条件困惑度热力图。
结果很有意思:除 Kimi-K3 和 Kimi-K2.7-Code 外,多数模型给自己推理的平均困惑度反而高于其他模型的轨迹。困惑度是粗粒度指标,不能作为确认性的模型相似度证据。
综合这些实验,作者明确表示没有发现可实用的逐字记忆证据,也没有建立蒸馏的因果结论。这些行为更接近“在给定源推理前缀时持续生成源模型风格”的兼容性证据。
关键实验
跨模型兼容矩阵是最直接的攻击可行性证据。Claude 的 Fable 5 轨迹只能被 Fable 5 自己重放,而 Opus 4.8、Sonnet 系列和 Haiku 4.5 的轨迹可被表内所有 Claude 模型处理;GPT-5.6 系列可以读取所有早期 GPT 轨迹;Gemini 的测试矩阵全部兼容。
| 厂商 | 源模型 | 可接收该轨迹的目标模型 |
|---|---|---|
| Claude | Fable 5 | 仅 Fable 5 |
| Claude | Opus 4.8、Sonnet 5、Sonnet 4.6、Sonnet 4.5、Haiku 4.5 | Fable 5、Opus 4.8、Sonnet 5、Sonnet 4.6、Sonnet 4.5、Haiku 4.5 |
| GPT | GPT-5.6 Sol、GPT-5.6 Terra、GPT-5.6 Luna | GPT-5.6 Sol、GPT-5.6 Terra、GPT-5.6 Luna |
| GPT | GPT-5 | GPT-5.6 系列和 GPT-5 |
| Gemini | Gemini 3.1 Pro、Gemini 3 Pro、Gemini Robotics 1.6、Gemini 3.5 Flash、Gemini 3 Flash、Gemini 3.1 Flash Lite | 上述全部模型 |
公开轨迹扫描给出了隐私风险的量级。两阶段 LLM 作为 judge 的流水线先高召回标记,再做去重和排除 benchmark 来源;最终 0.3% 的解码块、4.9% 的轨迹至少包含一个真实敏感项。
| 类别 | 第一轮标记 | 第二轮判定 | 去重 | 非 benchmark | 仅出现在推理 |
|---|---|---|---|---|---|
| 姓名 | 4350 | 541 | 173 | 130 | 4 |
| 邮箱 | 651 | 232 | 72 | 30 | 3 |
| 访问令牌 | 852 | 84 | 30 | 24 | 3 |
| API key | 966 | 90 | 69 | 62 | 11 |
| 密码 | 1235 | 330 | 72 | 33 | 2 |
| 私钥 | 62 | 11 | 11 | 7 | 0 |
| 总计 | 76778 | 2194 | 941 | 704 | 64 |
64 个真实人工产物只出现在隐藏推理中,没有出现在解析后的可见会话里。也就是说,用户在分享前清洗明文,仍然无法清洗自己看不见的加密块。
论文还发现摘要并不总是忠实。18 条 Opus 4.8 轨迹中有 9 条在隐藏推理中先写出答案再做推导;其中 8 条摘要也提前给出答案。个别摘要把“我先验证计算”改写成“让我建立坐标系”,丢失了验证信号。
图7:解码结果显示模型先给出答案再做验证,摘要却把验证写成独立推导。
防御方案
最简单的跨用户修复是把 user_id 放进 AEAD 的关联数据中,重放时比较绑定身份与已认证调用者,不匹配就拒绝。
跨会话问题更复杂,因为合法工作流需要 fork、compact 和模型降级。作者提出轻量哈希链,把每个块绑定到会话和前一个块,而不是绑定完整历史。
$$\tau_{n+1} = H\bigl(\text{user\_id} \,\|\, \text{session\_id} \,\|\, H(\tau_n \,\|\, \text{salt}_2) \,\|\, \text{salt}_1\bigr)$$哈希链不能阻止攻击者按顺序重放整段会话,但会显著提高成本并缩小爆炸半径。论文进一步建议用 Merkle 树保留子根,以兼容会话压缩后的可验证顺序。
对已经公开的历史签名,唯一有效补救是轮换旧密钥,并拒绝使用退役 key ID 解码。企业档案可提供身份验证后的重新签名接口,但旧签名本身应永久不可解。
作者也承认加密不能解决全部问题:模型只要被合法要求处理自己的推理,就必须能理解该内容。因此还需要训练模型识别 <thinking-copy> 这类转录越狱,并在提示明显要求暴露推理时拒绝。
另一条路径是让推理瞬时化,不存储也不返回轨迹。多个厂商已经支持类似模式,例如 Qwen 的 preserve_thinking 参数。推理不放给客户端,就消除了提取 payload。
局限性与风险判断
作者自述的第一个局限是测试窗口固定在 2026 年 7 月初的 API 版本上。厂商的加密实现、模型版本和防护策略都可能随时变化,论文本身也说明披露后相同攻击无法再次执行。
第二个局限是缺少明文地面真值。token 数对比只能验证长度,不能逐 token 证明解码完全一致;Gemini 解码噪声明显,GPT 还有大量不可读的压缩推理。
第三个局限是公开轨迹扫描不是穷尽审计。作者假设本地轨迹和生产服务中的敏感数据会更多,但这仍是一个定向演示,而不是全量统计。
附录中的蒸馏相关性分析还带独立免责声明:研究不能因果证明任何开放模型经过蒸馏,样本偏斜、模糊解码、服务配置差异都可能影响结果。
从工程角度看,这篇论文没有公开代码或数据集,且攻击细节已被厂商修复。任何人都不能把其中的数字当作当前线上 API 仍然可用的操作手册。
总结与展望
这篇论文把“加密推理”从商业保密问题重新定义为系统安全问题。AEAD 保护了完整性,却没有绑定上下文,于是同厂商内最弱的模型成了最强模型隐藏思维的解码器。
对模型训练社区,它给出的教训是:中间推理比最终输出更接近真实任务状态,因此是更强但更敏感的监督来源;对安全社区,它说明密码学边界必须覆盖“哪个上下文可以消费这条轨迹”,而不是只覆盖“这条轨迹是否被篡改”。
未来的推理 API 需要在无状态成本、模型切换便利、用户透明度和第三方可验证性之间重新设计。短期可行的方向是上下文绑定、密钥轮换、弱模型拒绝训练和瞬时推理。
金句
“一种把用户自己的数据藏起来、却让第三方可以完整提取的架构,既不提供隐私,也不提供安全。”
