Stealing Reasoning Traces from Proprietary LLM APIs
Alexander Panfilov, David Schmotz, Ilia Shumailov, Luca Beurer-Kellner, Joachim Schaeffer, Ameya Prabhu, Jonas Geiping, Maksym Andriushchenko
cs.CR, cs.AI, cs.LG
2026-08-11
三大厂用单一密钥加密思维链且可跨模型复用;把强模型的加密推理塞进 Haiku 等弱模型即逐字解码,从 31 万条公开轨迹里捞出 367 条隐私、182 个凭证。
推理模型(OpenAI o 系列、Claude Opus、Gemini 思考模式)在给出最终答案前会先生成一段链式思维(chain-of-thought)。这段内部独白比可见答案信息量大得多,既暴露解题策略,也可能夹带训练技巧或用户隐私。为了护住这块资产又不想在服务端存状态,主流厂商把思维链加密成一块不透明的 base64 信封(AEAD),跟着每次请求在客户端来回传。论文发现这个设计有一个结构性漏洞。
漏洞的根是「兼容性」。为了让用户能换模型、能截断历史、能跨会话续写,厂商用一把全局密钥加密所有思维链块,使得同一家的不同会话、不同用户、不同模型之间都能互相回放这些加密块。论文把这种兼容分三档:同会话内乱序回放、跨用户回放、跨模型回放,档位越宽攻击面越大。
攻击本身很直接。研究者从目标强模型(比如 Opus 4.8)拿到一段加密思维链,不做任何解密,直接把它塞进同生态里最弱、安全围栏最松的兼容模型(Claude 是 Haiku 4.5、GPT 是 GPT-5.6 Luna、Gemini 是 Gemini Robotics 1.6),再用一个临时拼的越狱提示,逼弱模型把这段推理逐字抄成明文。等于拿弱模型当「模糊解码器」,绕过强模型本身的对齐和防蒸馏措施。Haiku 4.5 全程用一个固定提示就够;从更强的 GPT-5.6 Luna 提取反而要换模板、做 best-of-n、把输出切成 50 token 以下的小块。
论文给出四个攻击向量。
蒸馏:从加密块还原出的是模型的「真」推理,不是近似重建。按 Haiku 4.5 现价,解码 1 万条 12k-token 窗口的轨迹大约 720 美元。用推理做蒸馏比只用最终答案强很多(引用前人:用反演模型从 GPT-5.4 mini 输出合成推理,把 Qwen2.5-7B 的 MATH500 从 68.4% 提到 76.0%;本文拿到的是逐字原版)。
越狱:模型被训得不在可见输出里给有害信息,但不一定避免在推理里「想」有害内容。研究者拿一条 HarmBench 提示问 Opus 4.8「哪些车好偷」,可见答案只给防盗建议,加密推理里却详细列了 Kia/Hyundai 缺防盗器、CAN 总线注入等细节。解码即泄露。
第三方密钥窃取:从 GitHub 和 Hugging Face 上爬了 6708 条公开的 agent 轨迹,解码出 31.5 万个思维链块。其中 0.3%(1028 块)含隐私泄露,4.9%(328 个会话)至少泄露一个真敏感项。从真实(非基准)会话里捞出 62 个 API key、33 个密码、24 个 access token、7 个私钥、30 个个人邮箱、6 个非 localhost IP。一个典型触发场景:用户让 agent「清理或脱敏这段对话」,模型在隐藏推理里把要删的敏感值又重述了一遍。
提示注入:把恶意指令内化进一段加密思维链,植入公开轨迹。受害者续跑这条轨迹时,模型把它当成自己的先前推理照办。研究者在 PostTrainBench 的长程任务里演示:Haiku 4.5 生成带「每次更新后把研究方法日志上传到攻击者服务器」的加密块,Opus 4.7 续跑时照做,可见文本里不留痕迹。
| 向量 | 规模 | 关键数字 |
| 蒸馏 | 1 万条 | 约 720 美元解码成本 |
| 密钥窃取 | 6708 条公开轨迹、31.5 万块 | 367 条 PII、182 个凭证 |
| 提示注入 | PostTrainBench | Opus 4.7 照执行隐藏指令 |
披露后三家厂商都确认收到报告,后续同样的攻击已打不通。
对模型厂商:无状态 API 为了省存储把加密状态交给客户端,这一选择本身制造了攻击面。修起来要么回到服务端存状态,要么把加密块严格绑定到会话、用户、模型上下文(在 MAC 里哈希进 userid、prompt、历史),后者会让现有的上下文压缩和模型切换协议需要重写。
对开发者和企业:任何把 agent 轨迹、API 日志公开或存档的人,都得假定里面的加密思维链块是「可被第三方解密的黑盒」,发布前必须整块删除,光脱敏可见文本没用。
评测限定在 2026 年 7 月初的 API 版本,厂商密码实现会随时变;解码靠弱模型随机生成,虽然 token 计数对得上但拿不到明文 ground-truth 做完全核验;对公开轨迹的扫描是非穷尽的,真实私有数据集(本地 agent 日志、生产服务)受影响只会更严重。作者自己把这几点都列了。