You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Flush+Reload在c906 CPU上失效,Evict+Reload却可成功执行?

问题解答:RISC-V哈佛架构下Evict+Reload与Flush+Reload的差异

核心前提先明确:RISC-V的哈佛架构里,I-Cache(指令缓存)和D-Cache(数据缓存)是物理独立、无共享缓存行的,这是两种攻击表现天差地别的根本原因。

为什么Flush+Reload的Reload步骤行不通?

Flush+Reload的常规流程是:

  1. 攻击者用flush类指令把目标指令所在的缓存行从I-Cache清掉
  2. 等待目标执行(或不执行)该指令
  3. 攻击者从数据侧读取该指令的内存地址,试图通过读取时间判断缓存是否命中——理论上如果目标执行过,I-Cache会缓存它,读取应该更快?

但在哈佛架构下这步完全失效:

  • 攻击者从数据侧读取时,只会操作D-Cache,和I-Cache的状态半毛钱关系都没有。不管目标有没有执行过该指令,攻击者数据侧的Reload都只会加载到D-Cache,根本感知不到I-Cache的命中情况,自然拿不到有效侧信道信号。

为什么Evict+Reload的Reload步骤能成功?

Evict+Reload的核心是绕开了数据侧和指令侧的缓存隔离,流程逻辑是:

  1. 利用缓存的组相联映射特性:很多RISC-V核的I-Cache和D-Cache用的是相同的索引计算规则,攻击者可以在数据侧访问一组和目标指令缓存行同组的内存地址,把目标指令的I-Cache行给挤出去(也就是Evict操作)
  2. 等待目标执行(或不执行)该指令
  3. 攻击者直接触发对目标指令地址的取指操作(比如跳转到该地址执行,或者用特殊指令触发取指),通过测量取指的时间差判断:
    • 如果目标执行过该指令,I-Cache已经重新缓存了它,攻击者取指速度快
    • 如果目标没执行过,攻击者取指需要从内存加载,速度慢

这里的Reload是直接操作指令侧的I-Cache,完全对应目标指令的缓存状态,所以能有效拿到侧信道信息。


内容的提问来源于stack exchange,提问作者pinpox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 16:11:04