长上下文推理现在是靠"稀疏注意力"撑起来的:既然只有一小部分 token 对注意力输出有实质贡献,那就别全算。H2O 这类基于激活显著性的方法、Quest/MInference 这类块级打分方法、以及 SeerAttention 这类学习型预测器,都遵循同一个思路——先挑出重要 token,再只对它们做注意力。
问题恰恰出在"挑"这个动作上。挑谁,取决于当前 query;而 query 来自用户的输入和模型刚生成的 token。也就是说,稀疏注意力把一个秘密相关(secret-dependent)的决策,实现在了 KV cache 的访存行为里。这块 KV cache 存在 GPU 的 HBM 上,由页粒度的虚拟内存系统管理;同一张卡上只要还有别的进程在跑,缓存和 TLB 的竞争状态就可能被观测。
Shandong University 的 Fahao Chen、Linkang Du、Jinhao Zhou、Peng Li、Zhou Su 在 2026 年 9 月 30 日提交的论文把这个现象命名为 SIMA(Sparsity-Induced Memory Access),并给出了完整攻击框架 SparLeak。核心结论:在真实的 LLM 服务配置下,属性推断平均成功率 90.9%,逐 token 回答重建 87.3%。
先理解为什么这件事在原理上说得通。
单个 token 每层的 KV 张量只有几 KB,论文引用的量级是 10–30 KB。而当代 NVIDIA GPU 的虚拟内存页固定在 64 KB 到 2 MB 这一档。结论很直接:一个页里会并排躺好几个 token 的 KV。稀疏注意力在 token 粒度上做选择,但真正落到内存子系统时,选择只能以页为单位体现——选中页里的某个 token,整页被拉进 L2,页里其他 token 的 KV 顺带被碰。
这带来两个后果,一个对攻击者不利,一个对攻击者有利:
论文的消融实验量化了这一点:把真实 token 级稀疏模式聚合到 20 token/页时,如果不能做重建,Healthcare 数据集上的 PASR(prefill 阶段的查询属性成功率)会掉到 57.45%;开启重建后仍显著高于这个数。
SparLeak 要区分 prefill 和 decoding,因为两个阶段的泄漏内容完全不同。判别依据是纯执行动力学,不依赖任何特权:
论文提到可以用 Nsight Systems 的 kernel timeline 做独立参照(他们的环境里无需 root 即可访问),用一个 kernel-time 利用率代理 util(w) = τ/|w|(τ 是窗口 w 内累计 kernel 执行时间)来定位相位切换点。同样的切换也能直接从 L2/TLB 轨迹的强度与周期性里推出来。
针对两个阶段,SparLeak 设计了两个不同的原语:
Prefill:基于 L2 的 INVALIDATE+COMPARE,拿"累计"足迹。 思路是把 prompt 侧每个被监控的 KV 页 p_i,在离线标定阶段配一组 cache-line 对齐的探针地址 s_i,让 s_i 的 L2 驱逐行为与 p_i 的访问相关。运行时 spy 先 WRITE_CACHE(s_i) 把探针行填进 L2,然后在 victim 跑 prefill 时用 READ_CACHE(s_i) 配合 INVALIDATE+COMPARE 反复测。访问 p_i 会引入竞争行,访问越频繁,对 s_i 的驱逐足迹越大。把整个 prefill 期间的足迹累加起来,就得到每个页的相对访问频率 c_i——不恢复页内容,也不恢复精确运行地址。
Decoding:基于 TLB 的 EVICT+RELOAD,拿"逐步"足迹。 decoding 阶段每个 step 只生成一个 token,注意力只落在 prompt token 的一个子集上。SparLeak 用 TLB 的 EVICT+RELOAD 来抽逐 step 的 SIMA 轨迹,刻画第 t 步的稀疏结构。
得到页级轨迹后,用稀疏注意力的空间局部性和分布规律做轨迹重建,逼出近似 token 级稀疏画像。然后把这些画像当隐结构信号,通过离线 profile 学一个映射:轨迹 → 私有信息。运行时攻击者只做前向推理,不需要 victim 的模型、prompt 或输出。
在这套映射之上,论文实现两个端到端攻击:
评估覆盖 3 个模型架构(LongChat-7B、LLaMA3-8B、Qwen3-8B)、3 类稀疏注意力(激活显著性、块级打分、学习型预测器)、3 个隐私敏感数据集(Healthcare、Financial QA、Legal QA)。
维度 | 结果 |
|---|---|
QAI 平均成功率 | 90.9% |
ATR 平均成功率 | 87.3% |
有噪声 / 模型演进后 | 保留 >90% 原有效果 |
各模型 prefill PASR | LongChat-7B ≈90.6%,LLaMA3-8B ≈89.4%,Qwen3-8B ≈92.7% |
无模型权重时的交互式 profile | PASR 90.97%,DASR 86.65% |
注意最后一行:即使攻击者拿不到权重、tokenizer 和稀疏注意力实现,也可以改用"目标交互式 profile"——自己发查询,同卡 spy 记录真实页级轨迹,用自己已知的属性和返回的 token 当标签。相比跑一份插桩复刻版,PASR/DASR 最多只降 1.28 和 1.54 个百分点。
离线成本也被量化了:QAI 每个模型用 5,000 条查询,成本约 0.82–1.10 小时;ATR 平均响应长度 300–500 token、样本 2,000–3,000 条。这个一次性开销可以在同一套配置下被反复摊薄,predictor 训练本身开销可忽略。
论文的解读是:Qwen3-8B 的稀疏模式在层和头之间更稳定、更有辨识度,所以 SIMA 信号更干净,decoding 阶段的 DASR 也最高。
同一篇论文的 Related Work 里给了一张部署假设对比表,值得单独看,因为它说明了 SparLeak 的"门槛"在哪:
攻击 | 泄漏源 | 依赖条件 |
|---|---|---|
Spill the Beans / IKWYS | token embedding 表 | 需要非默认 CUDA 统一内存配置,或 embedding 查表走 CPU;模型全驻 GPU 时该通道消失 |
MoEcho | MoE 路由的专家激活模式 | 需要 GPU 性能计数器或共享专家数据页;本质是 MoE 机制泄漏,不适用于 dense 模型 |
KV-cache 计时类 | 前缀缓存命中导致的 TTFT 下降 | 应用层计时即可,但需要共享缓存;属"共享服务状态"通道 |
SpliceLeak | RAG 场景下非前缀 chunk 融合的时序指纹 | 依赖 KV cache 去重策略,配套 SpliceDefense(量化 chunk padding) |
SparLeak | 稀疏注意力的 KV 访存足迹(L2/TLB) | 只要 GPU 是共享的、且用了稀疏注意力;对模型架构无假设,对模型权重无假设 |
差异点在于:前面几条要么依赖特定模型结构(MoE)、要么依赖特殊内存配置(统一内存)、要么依赖应用层可观测的缓存命中(前缀共享)。SparLeak 抓住的是部署默认就存在的共享微架构资源——L2 缓存和 TLB——配上一条越来越多的服务商默认打开的优化(稀疏注意力)。这就是为什么它的适用面更宽。
不过代价也真实存在:L2/TLB 争用信号比"直接计时"弱得多,需要离线标定、需要页粒度聚合后的重建、需要 profile 训练。Aalto 的一篇实证研究(基于 Invalidate+Compare 的完整攻击管线)给出的结论偏保守——L2 活动能稳定识别模型架构、参数规模、推理相位、输入输出长度,但仅靠 L2 观测难以可靠恢复单个 token。SparLeak 的贡献正是在这个"难以"上往前推了一步:它不是恢复 token,而是恢复稀疏结构再映射语义。
论文评估的缓解手段是往稀疏模式里注入与输入无关的随机性。结果是双向的:
这个取舍并不是意外——稀疏注意力的收益本来就来自"选得准",一旦给选择过程加噪声,等于同时削弱了它加速的前提。论文同时引用的相关方向还包括缓存分区(如 page coloring)、随机化缓存索引/驱逐的硬件机制等,这些属于系统与硬件层思路,收益与兼容性代价需要单独评估。
对工程团队来说,可落地的判断顺序大致是:
一个示意性的噪声注入形状(伪代码,用于说明"在哪里加"而非可直接运行):
def select_pages(query, kv_pages, top_k, eps):
scores = estimate_page_criticality(query, kv_pages) # 与原实现一致
# eps=0 时退化为正常稀疏注意力
noise = torch.rand_like(scores) * eps
idx = torch.topk(scores + noise, top_k).indices
return idx # 页粒度选择,落回 L2/TLB 时即是可观测足迹这段代码想表达的是:泄漏发生在 topk 的结果上,所以任何防御都必须作用在选择结果的空间局部性上,而不是作用在 KV 内容上(攻击者本来就读不到 KV 内容)。这也解释了为什么"加密 KV"这类方案对 SIMA 无用——它防的是内容泄漏,不是访问模式泄漏。
论文提供了匿名化的 SIMA 轨迹、训练好的攻击模型、评估脚本和文档作为复现工件。需要留意的边界是:SparLeak 的完整评估仍建立在攻击者能同卡共存并做离线标定的前提下,跨卡、跨 MIG 分区、或是禁用相关 GPU 指令后的效果,论文没有给出同等详细的数字。这个空白,恰恰是防御方可以做文章的地方。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。