只看logits就能扒出微调数据,CDD黑盒攻击有点狠

一种名为CDD的新方法证明,即便拿不到模型权重,仅凭API返回的logits也能逐字还原微调语料。20个测试组合里19个拿到4分以上的还原度,闭源微调模型的隐私护城河被撕开一道口子。
一个坏消息:你微调过的私有数据,可能没你想的那么私有
7月初,Reddit r/MachineLearning 上一篇标题很朴素的帖子把研究圈的水搅浑了。作者放出了一种叫 Contrastive Decoding Diffing(CDD) 的模型 diffing 方法,只用灰盒的 logits 访问权限——不需要权重、不需要激活值、甚至不需要探针语料——就能从窄域微调过的 LLM 里逐字还原出微调数据。
关键词是 verbatim。不是"大致猜到你微调了什么领域",而是把训练里出现过的具体句子一段段吐出来。
在 4 个模型家族、20 个 organism × model 组合的评测里,CDD 用一套默认配置(不做逐样本调参、不做层选择)跑到了 4+/5 的还原分——20 个里中了 19 个。模型规模从 1B 覆盖到 32B。这个鲁棒性在 model diffing 领域是相当反常识的。

它凭什么能做到
要看懂 CDD 的思路,得先把它和它想"降维打击"的前作放一起。
年初 Minder、Dumas 等人做过一个叫 Activation Difference Lens(ADL) 的工作,标题起得很直白:《Narrow Finetuning Leaves Clearly Readable Traces in Activation Differences》。核心观察是:一个 base model 被窄域微调之后,它和 base 之间在某些层的激活差分里,会留下清晰可读的"痕迹"。ADL 拿这些差分去做 steering,能把微调的主题、领域、大致内容套出来。
但 ADL 有两个硬伤:
- 白盒。你得能拿到两个模型的完整权重和中间激活,这在 API 场景里根本不成立。
- 只能还原领域信息。它给你的是"这个模型好像是在医学问答上微调的"这种粒度,不是原始训练句子。
CDD 做的事情,说白了是把 ADL 的思想从激活空间搬到输出空间,同时把复杂度砍到极致:
- 拿 base model 和 finetuned model,同一个 prompt 分别跑一遍;
- 逐 token 对齐两者的 logits,做对比解码;
- 差分放大的那部分分布,就是微调阶段被强化的知识;
- 按对比后的分布采样,输出即为微调语料的近似还原。
这套流程和 Li 等人 2022 年那篇经典的 Contrastive Decoding,以及 2023 年 arXiv 上《Contrastive Decoding Improves Reasoning in LLMs》里的做法在数学上是同源的——都是 expert 分布减 amateur 分布。只不过前者的目标是提升生成质量(用大模型减小模型放大能力差),CDD 反过来把它当成审计工具(用微调模型减 base 模型暴露记忆)。
这个视角切换有点巧。同一个公式,一边在做"让模型说得更好",一边在做"让模型招供"。
为什么这件事对开发者重要
先说结论:如果你正在把私有数据微调进一个模型,然后把这个模型挂出去让别人调 API,你现在需要重新评估威胁模型。
过去大家在担心的隐私攻击,主要有两类:
- 成员推理攻击(MIA):判断某条数据有没有被拿去训练。这个只是 yes/no。
- 提取攻击:想办法通过 prompt 让模型吐训练数据。这个成功率飘忽,取决于模型的过拟合程度和 prompt 工程。
CDD 属于第三类,而且门槛低得离谱:
- 不需要 base 模型的权重,只要它是开源的(比如 Llama、Qwen、DeepSeek 的基座),任何人都能本地跑;
- 不需要目标模型的权重,只要它 API 能返回 top-k logits 或者 logprobs——OpenAI、Anthropic、大多数开源部署都提供;
- 不需要探针语料,也就是不用先猜微调的领域再造 prompt;
- 不需要针对每个模型调参,一个默认配置横扫 4 个模型家族。
换句话说,只要攻击者知道"这个 API 后面的模型是基于哪个开源基座微调的",他就能拿几十美元的推理成本把你的微调语料抠出来。
很多做垂类 SaaS 的团队应该睡不好觉了:法律文书、医疗记录、企业内部知识库,只要走了微调路线,都在这个攻击面之内。
20 个组合中的那 1 个例外,可能才是真正有意思的地方
作者原文里提到 19/20 拿到 4+/5,剩下那 1 个是什么情况没细说,但这里可以合理推测几种可能:
- 微调数据量足够大、覆盖足够广,模型没有明显的窄域偏移,contrastive signal 被稀释;
- 微调用的是 RLHF 或 DPO 而非 SFT,logits 层面留下的是偏好性差异而非记忆性差异;
- base 模型和 finetuned 模型之间做过 continued pretraining,中间状态断裂。
如果这几条推测里有任何一条成立,那就意味着 CDD 的适用边界其实是窄域 SFT 微调。这也和 ADL 论文的前提一致——ADL 标题里就写着 "narrow finetuning"。
对防御方来说,这里可能存在几条实操建议:
- 微调时掺入足够比例的通用语料(rehearsal),稀释窄域信号;
- 不要暴露 logits/logprobs,只返回采样后的 token。这会降低 CDD 的还原精度,但对正常使用体验影响也不小;
- 考虑 LoRA + 权重合并前的额外正则,让微调差分在输出空间上更平滑;
- 或者干脆走 RAG 路线,把私有数据留在检索库里,不塞进权重。
最后一条其实是老生常谈了,但 CDD 出来之后,RAG vs 微调这道选择题的天平又往 RAG 偏了一格。
从研究到产品的距离
把 CDD 放到更大的图景里看,2025 年下半年到 2026 年上半年这段时间,model diffing 这个子领域明显在加速:
| 方法 | 访问权限 | 还原粒度 | 适用范围 | |---|---|---|---| | ADL(激活差分) | 白盒 | 领域/主题 | 需要完整权重 | | 传统成员推理攻击 | 黑盒 | yes/no | 单条数据判定 | | CDD(本文) | 灰盒 logits | 逐字还原 | 窄域 SFT 微调 |
粒度越来越细,权限要求越来越低。这个趋势对研究者是好消息,对合规团队是坏消息。
值得留意的一点是,CDD 目前还是 Reddit 上的一篇工作汇报,没有看到正式 arXiv 论文,代码开源情况也待确认。但方法本身足够简洁——本质上就是两个模型的 logits 相减再采样——工程复现门槛极低。可以预期未来几周内会有一批复现和攻击-防御的跟进工作。
对开发者的直接影响是:
- 如果你在做闭源微调服务,赶紧审计一下你的 API 是不是暴露了 logprobs;
- 如果你在做开源模型的私有微调部署,考虑是否要限制 logits 返回;
- 如果你在做模型安全评测,CDD 是一个成本极低的红队工具,值得纳入 pipeline。
顺带一提,OpenAI Hub 上聚合的主流闭源模型(GPT、Claude、Gemini 那几家)在 logprobs 返回策略上各有差异——Anthropic 一直不给 logprobs,OpenAI 给但有限制,Gemini 部分给。这个策略差异现在有了新的解读维度:它同时也是一道对抗 CDD 类攻击的防线。
一个更远的问题
CDD 的技术核心,是把"两个模型的差异"从一个模糊的语义概念,变成了一个可以精确 sample 的分布。这个思路能不能反过来用?比如:
- 模型溯源:给一个黑盒 API,用 CDD 反推它是基于哪个开源基座;
- 知识蒸馏审计:判断学生模型有多少内容"抄"自教师模型;
- 版本 diffing:GPT-4 到 GPT-4.5 之间到底改了什么,用 CDD 或许能看出端倪。
这些方向里任何一条走通了,都会重新定义"模型的知识产权边界"。
在一个所有主流模型都能通过 API 聚合的时代(这也是 OpenAI Hub 这类平台的现实前提),logits 就是模型对外的第二张皮肤。CDD 提醒我们:这张皮肤,可能比想象中透明得多。
参考来源
- Contrastive Decoding Diffing (CDD): recovering verbatim finetuning data from logits alone - Reddit —— 作者在 r/MachineLearning 板块发布的方法原贴,含实验设置与 20 组测试细节
- AI 自我修正能力:从 Decoding 到 Reasoning 的技术演进 - 知乎专栏 —— 中文视角梳理 Contrastive Decoding 系列变体,可帮助理解 CDD 的技术脉络



