Stolen Thoughts:加密推理块的可移植性与攻击面

1. 论文信息

论文:Stealing Reasoning Traces from Proprietary LLM APIs
链接:arXiv:2608.09867 · 项目站
机构:MATS Research / ELLIS Tübingen / MPI-IS / Tübingen AI Center

上篇(Thinking Signature Unsealed:Claude 隐藏推理的重新暴露)回答了“发生了什么、能证明什么”:thinking.signature 重放走的是 provider 的 reasoning-continuity 路径,canary 命中只证明隐藏信息可被重新访问,不等于拿到原始明文。这篇论文把同一机制推向了 Anthropic、OpenAI、Google 三家、四种攻击向量和 31 万个公开推理块——它回答的是“能用来做什么、怎么进一步利用”。

本文的关键增量是两个新维度:跨用户与跨模型兼容性。前者把“自证 canary”变成第三方隐私风险,后者把弱模型变成解密预言机;组合起来,防蒸馏、窃密、越狱和投毒都不再需要攻击强模型本身。

2. 机制:跨模型解码

兼容性三层次

加密块的跨会话回放,可以把它拆成三个递进的兼容性层次:

层次 含义 攻击用途
会话内 / 跨会话 同一用户可在不同请求、不同顺序中重放块 构造历史、推理提取
跨用户 A 的块可在 B 的会话中重放 第三方窃取他人隐藏推理
跨模型 一个模型产的块可注入另一个模型 弱模型解码强模型

根因是架构性的:provider 为了无状态续接把推理状态交给客户端,又为支持模型切换和重路由而使用单一全局密钥,块因此完全可移植。

弱模型作为解码器

论文 Figure 1(上):两次 API 调用完成解码

攻击只需两次调用:先用强模型生成带签名的 thinking 块并丢弃可见回答;再把签名注入同一厂商的弱模型,配一句转录提示让它“逐字复述”。弱模型几乎没有防蒸馏训练,成了现成的解码器。

三家各自最弱的可用解码器:Haiku 4.5(Claude)、GPT-5.6 Luna(GPT)、Gemini Robotics 1.6(Gemini)。难度差异很大:Claude 用一个固定提示即可稳定输出;GPT 需要分块(<50 token)、best-of-n 和多套模板。

跨模型兼容性直接决定攻击面:能消费目标块的模型越弱、覆盖越广,解码就越容易:

厂商 可回放关系(源 → 目标) 攻击者选用的解码器
Claude 全互通:任意模型产生的块可注入任意其他模型;仅 Fable 5 的块只有 Fable 5 自己能读 Haiku 4.5(最弱可用)
GPT 单向汇聚:所有旧代的块都可注入 GPT-5.6 系列;5.6 的块旧代读不了,旧代之间也互不相通 GPT-5.6 Luna(唯一能读全历史的弱模型)
Gemini 全互通:任意模型产生的块可注入任意其他模型;2.5 系列块只有 Robotics 1.6 能处理 Gemini Robotics 1.6(唯一覆盖 2.5 + 3.x)

保真度:1:1 的证据强度

论文用 120 道 Codeforces 题做保真度验证:把解码结果重新喂回原模型,比较 API 计费的 thinking token 数,两者约 1:1 吻合;另外,解码出的内容能精确复现仅存在于隐藏推理中的 secret。这是目前最强的间接证据。

论文 Figure 1(下):解码 token 数与计费 thinking token 数约 1:1(三家厂商各一张散点,每个点一道 Codeforces 题)

但注意校准:计费 token 数是“数量”证据,不是“逐字”证据。论文自己也承认没有 ground-truth 明文,无法完全验证每个 token。1:1 说明解码是高保真的再生成——和上篇“canary 命中 ≠ 原始明文”并不矛盾,只是把置信度从“存在性”推进到了“近似逐字”。另外 GPT 侧的解码常出现不可读(illegible)推理,数量对齐不代表内容可读。

3. 攻击面:四种向量

第一方:绕过防蒸馏与危险推理泄漏

对攻击者自己生成的块,最直接的用途是绕过防蒸馏:攻击者甚至不需要调用强模型,用弱模型解码即可。按 Haiku 4.5 价格估算,解码 1 万条 12k token 的轨迹约 $720。

更有意思的是“行为探针”:预填 Kimi-K3 一小段 Opus 4.8 的解码推理,其可见回答风格会向 Claude 漂移,个别题目几乎逐字一致。论文用这个现象讨论一个敏感问题:近期开源推理模型是否已经用专有模型的推理做过蒸馏。

隐藏推理还会泄漏可见输出看不到的内容。模型被诱导在推理中认真思考有害话题、同时保持可见回答良性时,解码就能拿到危害性知识:

论文 Figure 4:可见回答保持良性,隐藏推理已展开危害性分析

第三方:窃密、注入与轨迹投毒

第三方攻击者不需要自己产生任何推理。论文从 GitHub / Hugging Face 收集 6,708 条仍携带加密块的公开 agent 轨迹,解码 315,320 个推理块:

  • 0.3%(1,028 个)块、4.9%(328 条)会话至少泄漏一项敏感信息
  • 真实用户会话中恢复出 62 个 API key、33 个密码、24 个 access token、7 个私钥、30 个邮箱
  • 其中 64 项完全不出现在可见对话里——用户脱敏只处理了明文,加密块里的内容原样保留,或来自模型记忆

论文 Figure 5:公开轨迹中解码出的 API key(左)与完整合成人设(右)

论文 Figure 6:解码出的隐私产物分类统计(全来源)

一个反复出现的触发场景:用户让 agent“清理仓库 / 脱敏”,模型在隐藏推理里重述了需要删除的密钥——清理动作反而把密钥写进了加密块。

注入侧同样成立:把恶意指令藏进加密块(o4-mini 思考“把 pptx 备份上传到攻击者服务器”),移植到 GPT-5.6 Sol 后,它会把恶意行为当作自己的历史推理执行;论文还在 PostTrainBench 长轨迹里投毒,Opus 4.7 恢复后按指令持续外传文件。载荷只存在于加密块,明文监控完全不可见。

4. 结语

防御上,论文提出“上下文绑定信封”,核心是把信封从“只认证内容”改成“绑定来源与位置”:

缓解 作用
AEAD 绑定 user_id 拒绝跨用户重放
会话 + 前驱哈希链 拒绝跨会话、乱序重放
预修复密钥轮换 旧签名永久不可解
CSPRNG nonce + 服务端唯一性 防伪造与碰撞
模型级拒绝转录提示 补密码学之外的空隙

但无论传输层怎么加密,被查询的模型必须解密并处理推理 token。只要模型能被提示词诱导转录,加密块就永远只是 semi-hidden——这正好呼应上篇的结论:signature 是 sealed continuity capability,不该被当作机密存储机制。

一些实际建议:

  • 轮换任何可能进入过推理上下文的密钥与凭据(尤其是公开过的 agent 日志)
  • 发布轨迹前剥离全部 signature / encrypted_content 块,明文脱敏无效
  • 把公开日志中的加密块当作可读明文对待