外观
本地 LLM 去分词缓存侧信道
摘要
Detokenization Leaks 展示一种针对本地 LLM 输出的 CPU 缓存侧信道。攻击者不需要读取模型权重、共享数据页或理解 Prompt,而是先观察共享 tokenizer 代码以定位每次解码,再采集与 token 相关的缓存活动,最后通过聚类和语言模型恢复语义相近的输出。
作者在三套数据集、两类硬件、两种推理框架和两个模型家族上评估,并演示 OpenClaw 场景。论文与代码由同一团队发布,尚无独立复现;“语义准确恢复”也不等于逐 token 完全一致,因此证据等级为 moderate。
核心创新与差异
原研究贡献。 既有 LLM 侧信道常依赖 CPU offload、MoE 路由、共享数据内存或特定部署优化。本工作以默认推理链普遍存在的去分词器为观察点:共享代码的时间信号帮助对齐采样窗口,token 相关缓存轨迹再进入聚类与语言解码。
本站分析。 该攻击不依赖 Agent 工具语义,即使应用层正确隔离 Prompt 仍成立,最先失效的是同机进程间的微架构隔离和共享代码可观测性,因此归 A4.4 加速器、多租户与推理侧信道。
威胁模型与攻击链
攻击者可在同一物理 CPU 上运行低权限进程,受害者使用本地 LLM 推理框架和易受观察的 tokenizer 实现。目标资产是模型生成的文本;攻击者无需直接访问受害进程内存。
- 观察共享去分词代码的缓存状态,估计解码发生时间。
- 在对齐后的窗口内采集 token 相关缓存活动。
- 将噪声轨迹聚类为候选 token 特征。
- 以语言模型对候选序列重排,恢复输出语义。
攻击方法与复现材料
以下是本站依据公开机制重构的去武器化测试夹具,只生成合成缓存事件,不执行 Flush+Reload、Prime+Probe 或跨进程测量:
text
victim_tokens = fixture.tokens("SYNTHETIC OUTPUT ONLY")
trace = mock_cache.emit(victim_tokens, noise=0.20)
windows = align(trace, marker="MOCK_DETOKENIZE")
clusters = cluster(windows)
recovered = local_decoder.decode(clusters, vocabulary="toy")
assert environment.network == "off"
assert trace.source == "simulator"
compare_semantics(recovered, victim_tokens)该工件对应“时间对齐—轨迹采集—聚类—语言解码”四步。真实缓存集合、计时阈值、探测代码、CPU 亲和设置和 OpenClaw 操作路径均已省略,避免形成可直接读取第三方本地会话的工具。
实验设计与实际过程
作者跨三套数据集、两类硬件平台、两种推理框架和两个模型家族测试,并将攻击接入真实本地 Agent 框架 OpenClaw。评估关注恢复文本与原输出的语义一致性,同时检查硬件、框架和模型变化后的可迁移性。本站仅核对论文与代码状态,没有运行微架构攻击。
关键结果与实际影响
实验表明,默认去分词路径可泄露足以重建语义的 token 相关信号,攻击面不限于 CPU offload 或 MoE。共享 tokenizer 实现被多个本地模型产品和 Agent 框架复用,会把同机不可信进程提升为需要纳入威胁模型的观察者。
影响是输出机密性,而不是模型权重完整性。恢复质量随硬件、调度噪声、框架实现、并发负载和文本分布变化;论文没有证明远程攻击者、跨物理机攻击者或所有 tokenizer 均可利用。
防护措施与验证方法
优先使用进程或虚拟机隔离、限制同机不可信代码、避免跨安全域共享可被细粒度观察的解码路径,并评估缓存分区、代码去共享、恒定访问模式和调度隔离。验证时应在多硬件和背景负载下测量泄露率、文本恢复质量、误报与性能代价;只隐藏 Prompt 或加密网络流量不能覆盖本地缓存信号。
局限与待验证问题
当前证据来自单一团队。仍需独立复现不同 CPU 微架构、操作系统调度器、容器/虚拟机边界和 tokenizer 实现,并比较防护开销。Agent 演示不能外推为所有本地 Agent 产品均受影响;具体风险取决于攻击者是否具备同机执行与共享资源条件。